public void close(final boolean failed) { if (closed) return; context.executeOnCompletion( new IOAsyncTask() { public void onError(int errorCode, String errorMessage) {} public void done() { try { doClose(failed); } catch (Exception e) { HornetQServerLogger.LOGGER.errorClosingSession(e); } } }); }
@Test public void testOrderOnNonPersistency() throws Exception { setupServer(true); final ArrayList<Integer> executions = new ArrayList<Integer>(); 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 IOAsyncTask() { public void onError(final int errorCode, final String errorMessage) {} 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()); }
@Test public void testExceptionSettingActionBefore() throws Exception { OperationContext ctx = OperationContextImpl.getContext(factory); ctx.storeLineUp(); String msg = "I'm an exception"; ctx.onError(HornetQExceptionType.UNBLOCKED.getCode(), msg); final AtomicInteger lastError = new AtomicInteger(0); final List<String> msgsResult = new ArrayList<String>(); final CountDownLatch latch = new CountDownLatch(1); ctx.executeOnCompletion( new IOAsyncTask() { public void onError(final int errorCode, final String errorMessage) { lastError.set(errorCode); msgsResult.add(errorMessage); latch.countDown(); } 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 IOAsyncTask() { public void onError(final int errorCode, final String errorMessage) { lastError.set(errorCode); msgsResult.add(errorMessage); latch2.countDown(); } 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 IOAsyncTask() { public void onError(final int errorCode, final String errorMessage) {} public void done() { latch3.countDown(); } }); Assert.assertTrue(latch2.await(5, TimeUnit.SECONDS)); }