Search in sources :

Example 1 with Action

use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.

the class AbstractAMQPConnection method registerTransactionTickers.

@Override
public void registerTransactionTickers(final ServerTransaction serverTransaction, final Action<String> closeAction, final long notificationRepeatPeriod) {
    NamedAddressSpace addressSpace = getAddressSpace();
    if (addressSpace instanceof QueueManagingVirtualHost) {
        final QueueManagingVirtualHost<?> virtualhost = (QueueManagingVirtualHost<?>) addressSpace;
        EventLogger eventLogger = virtualhost.getEventLogger();
        final Set<Ticker> tickers = new LinkedHashSet<>(4);
        if (virtualhost.getStoreTransactionOpenTimeoutWarn() > 0) {
            tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionOpenTimeoutWarn(), notificationRepeatPeriod, serverTransaction::getTransactionStartTime, age -> eventLogger.message(getLogSubject(), ConnectionMessages.OPEN_TXN(age))));
        }
        if (virtualhost.getStoreTransactionOpenTimeoutClose() > 0) {
            tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionOpenTimeoutClose(), notificationRepeatPeriod, serverTransaction::getTransactionStartTime, age -> closeAction.performAction(OPEN_TRANSACTION_TIMEOUT_ERROR)));
        }
        if (virtualhost.getStoreTransactionIdleTimeoutWarn() > 0) {
            tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionIdleTimeoutWarn(), notificationRepeatPeriod, serverTransaction::getTransactionUpdateTime, age -> eventLogger.message(getLogSubject(), ConnectionMessages.IDLE_TXN(age))));
        }
        if (virtualhost.getStoreTransactionIdleTimeoutClose() > 0) {
            tickers.add(new TransactionTimeoutTicker(virtualhost.getStoreTransactionIdleTimeoutClose(), notificationRepeatPeriod, serverTransaction::getTransactionUpdateTime, age -> closeAction.performAction(IDLE_TRANSACTION_TIMEOUT_ERROR)));
        }
        if (!tickers.isEmpty()) {
            for (Ticker ticker : tickers) {
                getAggregateTicker().addTicker(ticker);
            }
            notifyWork();
        }
        _transactionTickers.put(serverTransaction, tickers);
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) AccessControlContext(java.security.AccessControlContext) SocketAddress(java.net.SocketAddress) Date(java.util.Date) LoggerFactory(org.slf4j.LoggerFactory) SaslSettings(org.apache.qpid.server.security.auth.sasl.SaslSettings) SettableFuture(com.google.common.util.concurrent.SettableFuture) ConnectionMessages(org.apache.qpid.server.logging.messages.ConnectionMessages) ContextProvider(org.apache.qpid.server.model.ContextProvider) TransactionObserver(org.apache.qpid.server.txn.TransactionObserver) AmqpPort(org.apache.qpid.server.model.port.AmqpPort) Map(java.util.Map) Port(org.apache.qpid.server.model.Port) LocalTransaction(org.apache.qpid.server.txn.LocalTransaction) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) PrivilegedAction(java.security.PrivilegedAction) InetSocketAddress(java.net.InetSocketAddress) List(java.util.List) Principal(java.security.Principal) Transport(org.apache.qpid.server.model.Transport) NamedAddressSpace(org.apache.qpid.server.model.NamedAddressSpace) AccessControlException(java.security.AccessControlException) ConnectionLogSubject(org.apache.qpid.server.logging.subjects.ConnectionLogSubject) AccessController(java.security.AccessController) TaskExecutor(org.apache.qpid.server.configuration.updater.TaskExecutor) StatisticsGatherer(org.apache.qpid.server.stats.StatisticsGatherer) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) FlowToDiskTransactionObserver(org.apache.qpid.server.txn.FlowToDiskTransactionObserver) ConfiguredObject(org.apache.qpid.server.model.ConfiguredObject) HashMap(java.util.HashMap) EventLogger(org.apache.qpid.server.logging.EventLogger) LogSubject(org.apache.qpid.server.logging.LogSubject) ConnectionPrincipal(org.apache.qpid.server.connection.ConnectionPrincipal) AuthenticatedPrincipal(org.apache.qpid.server.security.auth.AuthenticatedPrincipal) FixedKeyMapCreator(org.apache.qpid.server.util.FixedKeyMapCreator) AbstractConfiguredObject(org.apache.qpid.server.model.AbstractConfiguredObject) TaskExecutorProvider(org.apache.qpid.server.model.TaskExecutorProvider) EventLoggerProvider(org.apache.qpid.server.logging.EventLoggerProvider) NetworkConnection(org.apache.qpid.server.transport.network.NetworkConnection) LinkedHashSet(java.util.LinkedHashSet) Session(org.apache.qpid.server.model.Session) Ticker(org.apache.qpid.server.transport.network.Ticker) ServerTransaction(org.apache.qpid.server.txn.ServerTransaction) Logger(org.slf4j.Logger) Action(org.apache.qpid.server.util.Action) Iterator(java.util.Iterator) Broker(org.apache.qpid.server.model.Broker) State(org.apache.qpid.server.model.State) SubjectDomainCombiner(javax.security.auth.SubjectDomainCombiner) Protocol(org.apache.qpid.server.model.Protocol) Connection(org.apache.qpid.server.model.Connection) Subject(javax.security.auth.Subject) AtomicLong(java.util.concurrent.atomic.AtomicLong) Futures(com.google.common.util.concurrent.Futures) QueueManagingVirtualHost(org.apache.qpid.server.virtualhost.QueueManagingVirtualHost) QueueManagingVirtualHost(org.apache.qpid.server.virtualhost.QueueManagingVirtualHost) EventLogger(org.apache.qpid.server.logging.EventLogger) Ticker(org.apache.qpid.server.transport.network.Ticker) NamedAddressSpace(org.apache.qpid.server.model.NamedAddressSpace)

Example 2 with Action

use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.

the class VirtualHostTest method createMockProtocolConnection.

private AbstractAMQPConnection createMockProtocolConnection(final VirtualHost<?> virtualHost) {
    final AbstractAMQPConnection connection = mock(AbstractAMQPConnection.class);
    final List<Action<?>> tasks = new ArrayList<>();
    final ArgumentCaptor<Action> deleteTaskCaptor = ArgumentCaptor.forClass(Action.class);
    Answer answer = new Answer() {

        @Override
        public Object answer(final InvocationOnMock invocation) {
            return tasks.add(deleteTaskCaptor.getValue());
        }
    };
    doAnswer(answer).when(connection).addDeleteTask(deleteTaskCaptor.capture());
    when(connection.getAddressSpace()).thenReturn(virtualHost);
    doAnswer(new Answer() {

        @Override
        public Object answer(final InvocationOnMock invocation) {
            for (Action action : tasks) {
                action.performAction(connection);
            }
            return null;
        }
    }).when(connection).sendConnectionCloseAsync(any(AMQPConnection.CloseReason.class), anyString());
    when(connection.getRemoteAddressString()).thenReturn("peer:1234");
    return connection;
}
Also used : Mockito.doAnswer(org.mockito.Mockito.doAnswer) Answer(org.mockito.stubbing.Answer) Action(org.apache.qpid.server.util.Action) AbstractAMQPConnection(org.apache.qpid.server.transport.AbstractAMQPConnection) InvocationOnMock(org.mockito.invocation.InvocationOnMock) ArrayList(java.util.ArrayList)

Example 3 with Action

use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.

the class AbstractConfiguredObject method doResolution.

protected final void doResolution(boolean skipCheck, final AbstractConfiguredObjectExceptionHandler exceptionHandler) {
    if (skipCheck || _dynamicState.get().getDynamicState() != DynamicState.OPENED) {
        onResolve();
        postResolve();
        applyToChildren(new Action() {

            @Override
            public void performAction(Object child) {
                try {
                    if (child instanceof AbstractConfiguredObject) {
                        AbstractConfiguredObject configuredObject = (AbstractConfiguredObject) child;
                        configuredObject.doResolution(false, exceptionHandler);
                    } else if (child instanceof AbstractConfiguredObjectProxy) {
                        AbstractConfiguredObjectProxy configuredObject = (AbstractConfiguredObjectProxy) child;
                        configuredObject.doResolution(false, exceptionHandler);
                    }
                } catch (RuntimeException e) {
                    exceptionHandler.handleException(e, (ConfiguredObject) child);
                }
            }
        });
        postResolveChildren();
    }
}
Also used : PrivilegedAction(java.security.PrivilegedAction) Action(org.apache.qpid.server.util.Action) ServerScopedRuntimeException(org.apache.qpid.server.util.ServerScopedRuntimeException)

Example 4 with Action

use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.

the class ManagementAddressSpace method createProxyNode.

private ProxyMessageSource createProxyNode(final Map<String, Object> attributes) {
    Subject currentSubject = Subject.getSubject(AccessController.getContext());
    Set<SessionPrincipal> sessionPrincipals = currentSubject.getPrincipals(SessionPrincipal.class);
    if (!sessionPrincipals.isEmpty()) {
        final ProxyMessageSource proxyMessageSource = new ProxyMessageSource(this, attributes);
        final AMQPSession<?, ?> session = sessionPrincipals.iterator().next().getSession();
        final Object connectionReference = session.getConnectionReference();
        ConcurrentMap<String, ProxyMessageSource> connectionSpecificDestinations = _connectionSpecificDestinations.get(connectionReference);
        if (connectionSpecificDestinations == null) {
            connectionSpecificDestinations = new ConcurrentHashMap<>();
            if (_connectionSpecificDestinations.putIfAbsent(connectionReference, connectionSpecificDestinations) == null) {
                session.getAMQPConnection().addDeleteTask(new Action() {

                    @Override
                    public void performAction(final Object object) {
                        _connectionSpecificDestinations.remove(connectionReference);
                    }
                });
            }
        }
        connectionSpecificDestinations.put(proxyMessageSource.getName(), proxyMessageSource);
        return proxyMessageSource;
    } else {
        return null;
    }
}
Also used : Action(org.apache.qpid.server.util.Action) SessionPrincipal(org.apache.qpid.server.connection.SessionPrincipal) Subject(javax.security.auth.Subject)

Example 5 with Action

use of org.apache.qpid.server.util.Action in project qpid-broker-j by apache.

the class AMQPConnection_1_0Impl method sendConnectionCloseAsync.

@Override
public void sendConnectionCloseAsync(final CloseReason reason, final String description) {
    stopConnection();
    final ErrorCondition cause;
    switch(reason) {
        case MANAGEMENT:
            cause = ConnectionError.CONNECTION_FORCED;
            break;
        case TRANSACTION_TIMEOUT:
            cause = AmqpError.RESOURCE_LIMIT_EXCEEDED;
            break;
        default:
            cause = AmqpError.INTERNAL_ERROR;
    }
    Action<ConnectionHandler> action = object -> closeConnection(cause, description);
    addAsyncTask(action);
}
Also used : AccessControlContext(java.security.AccessControlContext) Arrays(java.util.Arrays) SoleConnectionDetectionPolicy(org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionDetectionPolicy) PeekingIterator(com.google.common.collect.PeekingIterator) AuthenticationResult(org.apache.qpid.server.security.auth.AuthenticationResult) ExternalAuthenticationManagerImpl(org.apache.qpid.server.security.auth.manager.ExternalAuthenticationManagerImpl) Map(java.util.Map) Disposition(org.apache.qpid.server.protocol.v1_0.type.transport.Disposition) ProtocolHandler(org.apache.qpid.server.protocol.v1_0.codec.ProtocolHandler) ConnectionError(org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError) End(org.apache.qpid.server.protocol.v1_0.type.transport.End) Futures.allAsList(com.google.common.util.concurrent.Futures.allAsList) Set(java.util.Set) DescribedTypeConstructorRegistry(org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry) AMQPConnection(org.apache.qpid.server.transport.AMQPConnection) SaslCode(org.apache.qpid.server.protocol.v1_0.type.security.SaslCode) VirtualHostUnavailableException(org.apache.qpid.server.virtualhost.VirtualHostUnavailableException) Binary(org.apache.qpid.server.protocol.v1_0.type.Binary) Transport(org.apache.qpid.server.model.Transport) SASLFrame(org.apache.qpid.server.protocol.v1_0.framing.SASLFrame) OversizeFrameException(org.apache.qpid.server.protocol.v1_0.framing.OversizeFrameException) AggregateTicker(org.apache.qpid.server.transport.AggregateTicker) ByteBufferSender(org.apache.qpid.server.transport.ByteBufferSender) ConnectionScopedRuntimeException(org.apache.qpid.server.util.ConnectionScopedRuntimeException) AccessController(java.security.AccessController) ValueWriter(org.apache.qpid.server.protocol.v1_0.codec.ValueWriter) ProtocolEngine(org.apache.qpid.server.transport.ProtocolEngine) FrameBody(org.apache.qpid.server.protocol.v1_0.type.FrameBody) FrameWriter(org.apache.qpid.server.protocol.v1_0.codec.FrameWriter) SOLE_CONNECTION_ENFORCEMENT_POLICY(org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties.SOLE_CONNECTION_ENFORCEMENT_POLICY) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Close(org.apache.qpid.server.protocol.v1_0.type.transport.Close) ChannelFrameBody(org.apache.qpid.server.protocol.v1_0.type.transport.ChannelFrameBody) SoleConnectionEnforcementPolicy(org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionEnforcementPolicy) AmqpError(org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError) StreamSupport(java.util.stream.StreamSupport) Flow(org.apache.qpid.server.protocol.v1_0.type.transport.Flow) ConnectionPropertyEnricher(org.apache.qpid.server.plugin.ConnectionPropertyEnricher) SaslFrameBody(org.apache.qpid.server.protocol.v1_0.type.SaslFrameBody) SoleConnectionConnectionProperties(org.apache.qpid.server.protocol.v1_0.type.extensions.soleconn.SoleConnectionConnectionProperties) Connection(org.apache.qpid.server.model.Connection) ServerNetworkConnection(org.apache.qpid.server.transport.ServerNetworkConnection) UnsignedShort(org.apache.qpid.server.protocol.v1_0.type.UnsignedShort) AMQFrame(org.apache.qpid.server.protocol.v1_0.framing.AMQFrame) SaslChallenge(org.apache.qpid.server.protocol.v1_0.type.security.SaslChallenge) QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) TransportFrame(org.apache.qpid.server.protocol.v1_0.framing.TransportFrame) AMQPDescribedTypeRegistry(org.apache.qpid.server.protocol.v1_0.type.codec.AMQPDescribedTypeRegistry) SocketAddress(java.net.SocketAddress) Open(org.apache.qpid.server.protocol.v1_0.type.transport.Open) LoggerFactory(org.slf4j.LoggerFactory) ByteBuffer(java.nio.ByteBuffer) ConnectionMessages(org.apache.qpid.server.logging.messages.ConnectionMessages) ErrorCondition(org.apache.qpid.server.protocol.v1_0.type.ErrorCondition) Transfer(org.apache.qpid.server.protocol.v1_0.type.transport.Transfer) AmqpPort(org.apache.qpid.server.model.port.AmqpPort) ValueHandler(org.apache.qpid.server.protocol.v1_0.codec.ValueHandler) SectionDecoderRegistry(org.apache.qpid.server.protocol.v1_0.codec.SectionDecoderRegistry) Symbol(org.apache.qpid.server.protocol.v1_0.type.Symbol) StoreException(org.apache.qpid.server.store.StoreException) LocalTransaction(org.apache.qpid.server.txn.LocalTransaction) Detach(org.apache.qpid.server.protocol.v1_0.type.transport.Detach) Collection(java.util.Collection) AnonymousAuthenticationManager(org.apache.qpid.server.security.auth.manager.AnonymousAuthenticationManager) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) SaslOutcome(org.apache.qpid.server.protocol.v1_0.type.security.SaslOutcome) UUID(java.util.UUID) PrivilegedAction(java.security.PrivilegedAction) Collectors(java.util.stream.Collectors) Functions(org.apache.qpid.server.transport.util.Functions) Sets(com.google.common.collect.Sets) Attach(org.apache.qpid.server.protocol.v1_0.type.transport.Attach) List(java.util.List) Principal(java.security.Principal) NamedAddressSpace(org.apache.qpid.server.model.NamedAddressSpace) AccessControlException(java.security.AccessControlException) FrameHandler(org.apache.qpid.server.protocol.v1_0.framing.FrameHandler) Queue(java.util.Queue) ConcurrentLinkedQueue(java.util.concurrent.ConcurrentLinkedQueue) AuthenticationProvider(org.apache.qpid.server.model.AuthenticationProvider) Begin(org.apache.qpid.server.protocol.v1_0.type.transport.Begin) UnsignedInteger(org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger) ListenableFuture(com.google.common.util.concurrent.ListenableFuture) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) AtomicReference(java.util.concurrent.atomic.AtomicReference) SaslMechanisms(org.apache.qpid.server.protocol.v1_0.type.security.SaslMechanisms) Iterators(com.google.common.collect.Iterators) Error(org.apache.qpid.server.protocol.v1_0.type.transport.Error) SaslNegotiator(org.apache.qpid.server.security.auth.sasl.SaslNegotiator) SaslInit(org.apache.qpid.server.protocol.v1_0.type.security.SaslInit) AuthenticatedPrincipal(org.apache.qpid.server.security.auth.AuthenticatedPrincipal) AbstractAMQPConnection(org.apache.qpid.server.transport.AbstractAMQPConnection) ServerScopedRuntimeException(org.apache.qpid.server.util.ServerScopedRuntimeException) SaslResponse(org.apache.qpid.server.protocol.v1_0.type.security.SaslResponse) NoSuchElementException(java.util.NoSuchElementException) SubjectAuthenticationResult(org.apache.qpid.server.security.auth.SubjectAuthenticationResult) ServerTransaction(org.apache.qpid.server.txn.ServerTransaction) Logger(org.slf4j.Logger) Action(org.apache.qpid.server.util.Action) Iterator(java.util.Iterator) Broker(org.apache.qpid.server.model.Broker) Protocol(org.apache.qpid.server.model.Protocol) SubjectCreator(org.apache.qpid.server.security.SubjectCreator) ConnectionClosingTicker(org.apache.qpid.server.protocol.ConnectionClosingTicker) AMQPSession(org.apache.qpid.server.session.AMQPSession) Collections(java.util.Collections) ErrorCondition(org.apache.qpid.server.protocol.v1_0.type.ErrorCondition)

Aggregations

Action (org.apache.qpid.server.util.Action)9 PrivilegedAction (java.security.PrivilegedAction)6 ListenableFuture (com.google.common.util.concurrent.ListenableFuture)4 AccessControlException (java.security.AccessControlException)4 ArrayList (java.util.ArrayList)4 Collection (java.util.Collection)4 Iterator (java.util.Iterator)4 List (java.util.List)4 Map (java.util.Map)4 Set (java.util.Set)4 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)4 Subject (javax.security.auth.Subject)4 MessageDestination (org.apache.qpid.server.message.MessageDestination)4 ServerMessage (org.apache.qpid.server.message.ServerMessage)4 Futures (com.google.common.util.concurrent.Futures)3 AccessController (java.security.AccessController)3 Principal (java.security.Principal)3 Collections (java.util.Collections)3 HashMap (java.util.HashMap)3 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)3