Github user shoukunhuai commented on a diff in the pull request:
    --- Diff: 
    @@ -1488,7 +1494,13 @@ public synchronized void start() throws Exception {
    -      singleThreadExecutor = executorFactory.getExecutor();
    +      ThreadFactory tFactory = AccessController.doPrivileged(new 
PrivilegedAction<ThreadFactory>() {
    +         @Override
    +         public ThreadFactory run() {
    +            return new ActiveMQThreadFactory("ActiveMQ-journal-server-" + 
this.toString(), true, ClientSessionFactoryImpl.class.getClassLoader());
    +         }
    +      });
    +      singleThreadExecutor = Executors.newSingleThreadExecutor(tFactory);
    --- End diff --
    What if the pool is full?
    In our case, the pool is a 60 thread fixed pool.
    One of the thread is doing page cleanup, and try to exit paging state, it 
holds the lock in paging store. All other 59 threads is blocked on the lock, 
trying to page.
    While cleanup, we need to store bookmark in journal for each page 
subscription, then wait until completed.
    In log, stored equals to storeLineUp, but there are pending tasks(there are 
going to count down latch cleanup thread is waiting on), the deadlock happened.
    16:44:28,930 AMQ222024: Could not complete operations on IO context 
OperationContextImpl [1251391301] [minimalStore=1, storeLineUp=2, stored=2, 
minimalReplicated=0, replicationLineUp=0, replicated=0, paged=0, minimalPage=0, 
pageLineUp=0, errorCode=-1, errorMessage=null, executorsPending=3, 


Reply via email to