yuebao created ARTEMIS-2244:
-------------------------------
Summary: checkDepage method placed outside CRITICAL_DELIVER avoid
critical analyzer timeout
Key: ARTEMIS-2244
URL: https://issues.apache.org/jira/browse/ARTEMIS-2244
Project: ActiveMQ Artemis
Issue Type: Bug
Reporter: yuebao
Attachments: threaddump.txt
We found server crash becauseof critical analyzer timeout, thread dump can be
seen in attachment.
Suppose that there is a topic t with two subscriber ta and tb. Some messages
were routed to subscriber ta, not to tb. When a consumer that subscribe tb is
created and send ConsumerCredits to server, ServerConsumerImpl will call
promptDelivery method, then forceDelivery() -> messageQueue.deliverAsync() ->
deliverRunner will executed in the pageSubscription's executor(step1), then
checkDepage(step2) -> pageIterator.hasNext(synchronized method) -> next ->
moveNext, moveNext method will iterate through queue until find a matching
message. At this time(step1), DeliverRunner call deliver method -> checkDepage
-> pageIterator.hasNext, this step blocked on CursorIterator which was locked
by step2, then critical analyzer timeout.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)