org.apache.activemq.artemis.core.persistence.OperationContext

Here are the examples of the java api class org.apache.activemq.artemis.core.persistence.OperationContext taken from open source projects.

1. ReplicationManager#getActiveTokens()

Project: activemq-artemis
File: ReplicationManager.java
/**
    * A list of tokens that are still waiting for replications to be completed
    */
public Set<OperationContext> getActiveTokens() {
    LinkedHashSet<OperationContext> activeContexts = new LinkedHashSet<>();
    for (OperationContext ctx : pendingTokens) {
        activeContexts.add(ctx);
    }
    return activeContexts;
}

2. OperationContextImpl#getContext()

Project: activemq-artemis
File: OperationContextImpl.java
public static OperationContext getContext(final ExecutorFactory executorFactory) {
    OperationContext token = OperationContextImpl.threadLocalContext.get();
    if (token == null) {
        if (executorFactory == null) {
            return null;
        } else {
            token = new OperationContextImpl(executorFactory.getExecutor());
            OperationContextImpl.threadLocalContext.set(token);
        }
    }
    return token;
}

3. ReplicationTest#testExceptionSettingActionBefore()

Project: activemq-artemis
File: ReplicationTest.java
@Test
public void testExceptionSettingActionBefore() throws Exception {
    OperationContext ctx = OperationContextImpl.getContext(factory);
    ctx.storeLineUp();
    String msg = "I'm an exception";
    ctx.onError(ActiveMQExceptionType.UNBLOCKED.getCode(), msg);
    final AtomicInteger lastError = new AtomicInteger(0);
    final List<String> msgsResult = new ArrayList<>();
    final CountDownLatch latch = new CountDownLatch(1);
    ctx.executeOnCompletion(new IOCallback() {

        @Override
        public void onError(final int errorCode, final String errorMessage) {
            lastError.set(errorCode);
            msgsResult.add(errorMessage);
            latch.countDown();
        }

        @Override
        public void done() {
        }
    });
    Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
    Assert.assertEquals(5, lastError.get());
    Assert.assertEquals(1, msgsResult.size());
    Assert.assertEquals(msg, msgsResult.get(0));
    final CountDownLatch latch2 = new CountDownLatch(1);
    // Adding the Task after the exception should still throw an exception
    ctx.executeOnCompletion(new IOCallback() {

        @Override
        public void onError(final int errorCode, final String errorMessage) {
            lastError.set(errorCode);
            msgsResult.add(errorMessage);
            latch2.countDown();
        }

        @Override
        public void done() {
        }
    });
    Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS));
    Assert.assertEquals(2, msgsResult.size());
    Assert.assertEquals(msg, msgsResult.get(0));
    Assert.assertEquals(msg, msgsResult.get(1));
    final CountDownLatch latch3 = new CountDownLatch(1);
    ctx.executeOnCompletion(new IOCallback() {

        @Override
        public void onError(final int errorCode, final String errorMessage) {
        }

        @Override
        public void done() {
            latch3.countDown();
        }
    });
    Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS));
}

4. ReplicationManager#replicated()

Project: activemq-artemis
File: ReplicationManager.java
/**
    * @throws IllegalStateException By default, all replicated packets generate a replicated
    *                               response. If your packets are triggering this exception, it may be because the
    *                               packets were not sent with {@link #sendReplicatePacket(Packet)}.
    */
private void replicated() {
    OperationContext ctx = pendingTokens.poll();
    if (ctx == null) {
        throw new IllegalStateException("Missing replication token on the queue.");
    }
    ctx.replicationDone();
}

5. ReplicationTest#testOrderOnNonPersistency()

Project: activemq-artemis
File: ReplicationTest.java
@Test
public void testOrderOnNonPersistency() throws Exception {
    setupServer(true);
    final ArrayList<Integer> executions = new ArrayList<>();
    StorageManager storage = getStorage();
    manager = liveServer.getReplicationManager();
    Journal replicatedJournal = new ReplicatedJournal((byte) 1, new FakeJournal(), manager);
    int numberOfAdds = 200;
    final CountDownLatch latch = new CountDownLatch(numberOfAdds);
    OperationContext ctx = storage.getContext();
    for (int i = 0; i < numberOfAdds; i++) {
        final int nAdd = i;
        if (i % 2 == 0) {
            replicatedJournal.appendPrepareRecord(i, new FakeData(), false);
        }
        ctx.executeOnCompletion(new IOCallback() {

            @Override
            public void onError(final int errorCode, final String errorMessage) {
            }

            @Override
            public void done() {
                executions.add(nAdd);
                latch.countDown();
            }
        });
    }
    Assert.assertTrue(latch.await(10, TimeUnit.SECONDS));
    for (int i = 0; i < numberOfAdds; i++) {
        Assert.assertEquals(i, executions.get(i).intValue());
    }
    Assert.assertEquals(0, manager.getActiveTokens().size());
}

6. PagingTest#testSyncPageTX()

Project: activemq-artemis
File: PagingTest.java
@Test
public void testSyncPageTX() throws Exception {
    Configuration config = createDefaultInVMConfig();
    server = createServer(true, config, PagingTest.PAGE_SIZE, PagingTest.PAGE_MAX, new HashMap<String, AddressSettings>());
    server.start();
    server.createQueue(PagingTest.ADDRESS, PagingTest.ADDRESS, null, true, false);
    final CountDownLatch pageUp = new CountDownLatch(0);
    final CountDownLatch pageDone = new CountDownLatch(1);
    OperationContext ctx = new DummyOperationContext(pageUp, pageDone);
    OperationContextImpl.setContext(ctx);
    PagingManager paging = server.getPagingManager();
    PagingStore store = paging.getPageStore(ADDRESS);
    store.sync();
    assertTrue(pageUp.await(10, TimeUnit.SECONDS));
    assertTrue(pageDone.await(10, TimeUnit.SECONDS));
}

7. ActiveMQServerImpl#createSession()

Project: activemq-artemis
File: ActiveMQServerImpl.java
@Override
public ServerSession createSession(final String name, final String username, final String password, final int minLargeMessageSize, final RemotingConnection connection, final boolean autoCommitSends, final boolean autoCommitAcks, final boolean preAcknowledge, final boolean xa, final String defaultAddress, final SessionCallback callback, final boolean autoCreateQueues) throws Exception {
    if (securityStore != null) {
        X509Certificate[] certificates = null;
        if (connection.getTransportConnection() instanceof NettyConnection) {
            certificates = CertificateUtil.getCertsFromChannel(((NettyConnection) connection.getTransportConnection()).getChannel());
        }
        securityStore.authenticate(username, password, certificates);
    }
    checkSessionLimit(username);
    final OperationContext context = storageManager.newContext(getExecutorFactory().getExecutor());
    final ServerSessionImpl session = internalCreateSession(name, username, password, minLargeMessageSize, connection, autoCommitSends, autoCommitAcks, preAcknowledge, xa, defaultAddress, callback, context, autoCreateQueues);
    sessions.put(name, session);
    return session;
}

8. LocalGroupingHandler#propose()

Project: activemq-artemis
File: LocalGroupingHandler.java
@Override
public Response propose(final Proposal proposal) throws Exception {
    OperationContext originalCtx = storageManager.getContext();
    try {
        // the waitCompletion cannot be done inside an ordered executor or we would starve when the thread pool is full
        storageManager.setContext(storageManager.newSingleThreadContext());
        if (proposal.getClusterName() == null) {
            GroupBinding original = map.get(proposal.getGroupId());
            if (original != null) {
                original.use();
                return new Response(proposal.getGroupId(), original.getClusterName());
            } else {
                return null;
            }
        }
        boolean addRecord = false;
        GroupBinding groupBinding = null;
        lock.lock();
        try {
            groupBinding = map.get(proposal.getGroupId());
            if (groupBinding != null) {
                groupBinding.use();
                // Returning with an alternate cluster name, as it's been already grouped
                return new Response(groupBinding.getGroupId(), proposal.getClusterName(), groupBinding.getClusterName());
            } else {
                addRecord = true;
                groupBinding = new GroupBinding(proposal.getGroupId(), proposal.getClusterName());
                groupBinding.setId(storageManager.generateID());
                List<GroupBinding> newList = new ArrayList<>();
                List<GroupBinding> oldList = groupMap.putIfAbsent(groupBinding.getClusterName(), newList);
                if (oldList != null) {
                    newList = oldList;
                }
                newList.add(groupBinding);
                map.put(groupBinding.getGroupId(), groupBinding);
            }
        } finally {
            lock.unlock();
        }
        // Storing the record outside of any locks
        if (addRecord) {
            storageManager.addGrouping(groupBinding);
        }
        return new Response(groupBinding.getGroupId(), groupBinding.getClusterName());
    } finally {
        storageManager.setContext(originalCtx);
    }
}

9. ReplicationManager#sendReplicatePacket()

Project: activemq-artemis
File: ReplicationManager.java
private OperationContext sendReplicatePacket(final Packet packet, boolean lineUp) {
    if (!enabled)
        return null;
    boolean runItNow = false;
    OperationContext repliToken = OperationContextImpl.getContext(executorFactory);
    if (lineUp) {
        repliToken.replicationLineUp();
    }
    synchronized (replicationLock) {
        if (enabled) {
            pendingTokens.add(repliToken);
            if (!flowControl()) {
                return repliToken;
            }
            replicatingChannel.send(packet);
        } else {
            // Already replicating channel failed, so just play the action now
            runItNow = true;
        }
    }
    if (runItNow) {
        repliToken.replicationDone();
    }
    return repliToken;
}

10. PageSyncTimer#tick()

Project: activemq-artemis
File: PageSyncTimer.java
private void tick() {
    OperationContext[] pendingSyncsArray;
    synchronized (this) {
        pendingSync = false;
        pendingSyncsArray = new OperationContext[syncOperations.size()];
        pendingSyncsArray = syncOperations.toArray(pendingSyncsArray);
        syncOperations.clear();
    }
    try {
        if (pendingSyncsArray.length != 0) {
            store.ioSync();
        }
    } catch (Exception e) {
        for (OperationContext ctx : pendingSyncsArray) {
            ctx.onError(ActiveMQExceptionType.IO_ERROR.getCode(), e.getMessage());
        }
    } finally {
        // to avoid possible locks and the client not getting the exception back
        for (OperationContext ctx : pendingSyncsArray) {
            ctx.pageSyncDone();
        }
    }
}

11. OpenWireConnection#setOperationContext()

Project: activemq-artemis
File: OpenWireConnection.java
private void setOperationContext(AMQSession session) {
    OperationContext ctx;
    if (session == null) {
        ctx = this.internalSession.getSessionContext();
    } else {
        ctx = session.getCoreSession().getSessionContext();
    }
    server.getStorageManager().setContext(ctx);
}