activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christopher L. Shannon (JIRA)" <>
Subject [jira] [Commented] (AMQ-5340) QueueBrowser with expired messages hangs until woken by expired messages background job
Date Thu, 25 Jun 2015 13:04:04 GMT


Christopher L. Shannon commented on AMQ-5340:


I agree, not checking expiry for browsers makes sense.  This almost works but it appears there
is something else that would need to be changed too...The problem is when running the test
case against this change, the last run breaks.  The {{enumeration.hasMoreElements()}} returns
true but the only thing pending is the NULL control message so then {{enumeration.nextElement()}}
returns null.  It's detecting that no new messages were added in the iterate() method in Queue
and calling brwoser.decrementQueueRef() which sends the NULL control message.  I haven't looked
at it yet to figure out why it's doing that.

> QueueBrowser with expired messages hangs until woken by expired messages background job
> ---------------------------------------------------------------------------------------
>                 Key: AMQ-5340
>                 URL:
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.9.0, 5.10.0
>            Reporter: Vermeulen
>            Priority: Critical
>              Labels: QueueBrowser
>         Attachments:,,
> I would expect browsing a queue with only a few messages to not take a long time. Indeed
it normally takes only a few ms. in my application. But sometimes the ActiveMQQueueBrowser
hangs for up to 30 seconds at method before returning!
> When the issue occurs, the loop in hasMoreElements() calls waitForMessage() multiple
times which times out after 2s at semaphore.wait(2000) without receiving any message from
the broker. I found that when the broker's background job that checks for expired messages
runs, the browser happens to be woken even if there are no expired messages. So setting the
expireMessagesPeriod to a low value (e.g. 200ms) is a good workaround for this issue, but
this is quite brittle because it uses internal broker implementation that may not even be
related to the issue!
> To reproduce:
> - (this is what I do in my application) create a queue, send a few message with an expiration
time of 10 seconds and repeatedly browse it until it is empty. If I browse the queue after
these 10 seconds have passed, the issue occurs!
> - I can always reproduce the issue by running AMQ580BrowsingBug from the related bug
report AMQ-4595: this browsing test seems to always hang. I slightly adjusted the test so
you can easily change the expired messages period and see the runtime differ when changing

This message was sent by Atlassian JIRA

View raw message