activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shoukunhuai <...@git.apache.org>
Subject [GitHub] activemq-artemis pull request #1894: ARTEMIS-1700 Fixed deadlock in paging s...
Date Sat, 24 Feb 2018 01:32:38 GMT
Github user shoukunhuai commented on a diff in the pull request:

    https://github.com/apache/activemq-artemis/pull/1894#discussion_r170405082
  
    --- Diff: artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/AbstractJournalStorageManager.java
---
    @@ -1488,7 +1494,13 @@ public synchronized void start() throws Exception {
     
           beforeStart();
     
    -      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,
executor=OrderedExecutor(tasks=[org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl$1@4d09259,
org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl$1@54b73dc4,
org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl$1@640495d4])]
    ```


---

Mime
View raw message