Hey Allard,
Sorry for delay in reply. We use own saga repository implementation which stores saga instances in cassandra column family. We don’t have any locking mechanism there.
I do agree it is not a regular deadlock. However the problem is that we threads which are locked for execution of saga never get free or at least it happens with big delays. From my understanding after execution of saga jetty thread should be returned to Jetty pool, however it do not happen because it waits for lock to execute saga, as axon-1 thread shown in thread dump from my first post.
We have switched to AsyncAnnotatedSagaManager and we get mixed results. On better hardware we had no problems with dummy data, but on second server where we have only 8 processing flows and we put real data event handling was much slower. We will set up a test run on better machine with real data this afternoon. Also I’m not sure if we still need ClusteredEventBus and thread pool executor since disruptor are capable to queue events/handlers in ring buffer. On this slower machine we again have jetty threads leek. Over the night we got plenty of them locked in same way. From 3 PM to 9 AM number of threads went from 290 up to 510
“qtp1150409357-19282” Id=19282 TIMED_WAITING
at sun.misc.Unsafe.park(Native Method)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349)
at com.lmax.disruptor.AbstractMultithreadedClaimStrategy.waitForFreeSlotAt(AbstractMultithreadedClaimStrategy.java:99)
at com.lmax.disruptor.AbstractMultithreadedClaimStrategy.incrementAndGet(AbstractMultithreadedClaimStrategy.java:49)
at com.lmax.disruptor.Sequencer.next(Sequencer.java:127)
at com.lmax.disruptor.EventPublisher.publishEvent(EventPublisher.java:45)
at com.lmax.disruptor.dsl.Disruptor.publishEvent(Disruptor.java:186)
at org.axonframework.saga.annotation.AsyncAnnotatedSagaManager.handle(AsyncAnnotatedSagaManager.java:166)
…
As my side experiment I turned out AnnotatedSagaManager synchronization and finally I’ve got some deadlock instead of infinite lock: 
Handler [SagaX] threw an exception while handling event of type [Y]. Continuing processing with next handler
org.axonframework.common.lock.DeadlockException: An imminent deadlock was detected while attempting to acquire a lock
at org.axonframework.common.lock.IdentifierBasedLock$DisposableLock.checkForDeadlock(IdentifierBasedLock.java:181)
at org.axonframework.common.lock.IdentifierBasedLock$DisposableLock.lock(IdentifierBasedLock.java:164)
at org.axonframework.common.lock.IdentifierBasedLock$DisposableLock.access$100(IdentifierBasedLock.java:138)
at org.axonframework.common.lock.IdentifierBasedLock.obtainLock(IdentifierBasedLock.java:102)
at org.axonframework.saga.AbstractSagaManager.invokeExistingSagas(AbstractSagaManager.java:91)
at org.axonframework.saga.AbstractSagaManager.handle(AbstractSagaManager.java:75)
at org.axonframework.eventhandling.async.EventProcessor.doHandle(EventProcessor.java:239)
at org.axonframework.eventhandling.async.EventProcessor.processNextEntry(EventProcessor.java:204)
at org.axonframework.eventhandling.async.EventProcessor.run(EventProcessor.java:186)
at java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy.rejectedExecution(ThreadPoolExecutor.java:2025)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372)
at org.axonframework.eventhandling.async.EventProcessor.scheduleEvent(EventProcessor.java:99)
at org.axonframework.eventhandling.async.AsynchronousCluster.schedule(AsynchronousCluster.java:151)
at org.axonframework.eventhandling.async.AsynchronousCluster.publish(AsynchronousCluster.java:136)
at org.axonframework.eventhandling.ClusteringEventBus$SimpleEventBusTerminal.publish(ClusteringEventBus.java:129)
at org.axonframework.eventhandling.ClusteringEventBus.publish(ClusteringEventBus.java:91)
at com.example.saga.SagaX.handle(SagaX.java:96)
at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.axonframework.common.annotation.MethodMessageHandler.invoke(MethodMessageHandler.java:75)
at org.axonframework.common.annotation.MessageHandlerInvoker.invokeHandlerMethod(MessageHandlerInvoker.java:66)
at org.axonframework.saga.annotation.SagaEventHandlerInvoker.invokeSagaEventHandlerMethod(SagaEventHandlerInvoker.java:66)
at org.axonframework.saga.annotation.AbstractAnnotatedSaga.doHandle(AbstractAnnotatedSaga.java:84)
at org.axonframework.saga.annotation.AbstractAnnotatedSaga.handle(AbstractAnnotatedSaga.java:79)
at org.axonframework.saga.AbstractSagaManager.loadAndInvoke(AbstractSagaManager.java:171)
at org.axonframework.saga.AbstractSagaManager.invokeExistingSagas(AbstractSagaManager.java:94)
at org.axonframework.saga.AbstractSagaManager.handle(AbstractSagaManager.java:75)
at org.axonframework.eventhandling.async.EventProcessor.doHandle(EventProcessor.java:239)
at org.axonframework.eventhandling.async.EventProcessor.processNextEntry(EventProcessor.java:204)
at org.axonframework.eventhandling.async.EventProcessor.run(EventProcessor.java:186)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Cheers,Lukasz
W dniu wtorek, 15 października 2013 10:40:27 UTC+2 użytkownik Allard Buijze napisał: