[ 
https://issues.apache.org/jira/browse/ARTEMIS-2209?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

yangwei updated ARTEMIS-2209:
-----------------------------
    Priority: Critical  (was: Major)

> Fix deadlock while getting queue message count during cleanup
> -------------------------------------------------------------
>
>                 Key: ARTEMIS-2209
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-2209
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: Broker
>            Reporter: yangwei
>            Priority: Critical
>
> ARTEMIS-2123 introduced a deadlock bug.
> jstack shows:
> Thread 1:
> at 
> java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
>  at 
> org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl.startPaging(PagingStoreImpl.java:481)
>  at 
> org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl.addSize(PagingStoreImpl.java:739)
>  at 
> org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl.nonDurableUp(PagingStoreImpl.java:952)
>  at 
> org.apache.activemq.artemis.api.core.RefCountMessage.incrementRefCount(RefCountMessage.java:50)
>  at 
> org.apache.activemq.artemis.core.persistence.impl.journal.LargeServerMessageImpl.incrementDelayDeletionCount(LargeServerMessageImpl.java:149)
>  - locked 
> org.apache.activemq.artemis.core.persistence.impl.journal.LargeServerMessageImpl@67359741
>  at 
> org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl$LargeMessageDeliverer.<init>(ServerConsumerImpl.java:1171)
>  at 
> org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl$LargeMessageDeliverer.<init>(ServerConsumerImpl.java:1151)
>  at 
> org.apache.activemq.artemis.core.server.impl.ServerConsumerImpl.handle(ServerConsumerImpl.java:431)
>  - locked java.lang.Object@3f31a7b3
>  at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl.handle(QueueImpl.java:2809)
>  at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl.deliver(QueueImpl.java:2196)
>  - locked org.apache.activemq.artemis.core.server.impl.QueueImpl@6c2bd0dc
>  at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl.access$1900(QueueImpl.java:105)
>  at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl$DeliverRunner.run(QueueImpl.java:3001)
>  - locked 
> org.apache.activemq.artemis.core.server.impl.QueueImpl$DeliverRunner@79dea1f9
> Thread 2:
> at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl.getScheduledCount(QueueImpl.java:1085)
>  - blocked on org.apache.activemq.artemis.core.server.impl.QueueImpl@742b7e17
>  at 
> org.apache.activemq.artemis.core.server.impl.QueueImpl.getMessageCount(QueueImpl.java:1077)
>  at 
> org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl.deliverIfNecessary(PageCursorProviderImpl.java:610)
>  at 
> org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl.cleanup(PageCursorProviderImpl.java:365)
>  - locked 
> org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl@5aa5010
>  at 
> org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl$1.run(PageCursorProviderImpl.java:288)
>  
> The cleanup thread held pagingStore lock and requested queue lock. The 
> largeMessageDeliver held queue lock and requested pagingStore lock. Deadlock 
> occured.
> Put queue::getMessageCount outside of pagingstore lock to fix the bug.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to