You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "clebert suconic (JIRA)" <ji...@apache.org> on 2019/03/14 18:28:05 UTC

[jira] [Closed] (ARTEMIS-2244) checkDepage method placed outside CRITICAL_DELIVER avoid critical analyzer timeout

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

clebert suconic closed ARTEMIS-2244.
------------------------------------
       Resolution: Fixed
    Fix Version/s: 2.7.0

> 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
>            Priority: Major
>             Fix For: 2.7.0
>
>         Attachments: threaddump.txt
>
>          Time Spent: 3h 10m
>  Remaining Estimate: 0h
>
> 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)