activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Burton (JIRA)" <>
Subject [jira] [Commented] (AMQ-5609) ActiveMQ locks out new consumers/producers during queue GC
Date Mon, 23 Feb 2015 20:37:12 GMT


Kevin Burton commented on AMQ-5609:

My branch fails testing but so does activemq-5.11.x.  My isolated tests show that I've fixed
the bug but now I want to get it to test before I can submit a patch. 

> ActiveMQ locks out new consumers/producers during queue GC
> ----------------------------------------------------------
>                 Key: AMQ-5609
>                 URL:
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.10.1, 5.11.0
>            Reporter: Kevin Burton
> ActiveMQ supports a feature where it can GC a queue that is inactive. IE now messages
and no consumers.
> However, there’s a bug where 
> purgeInactiveDestinations 
> in 
> creates a read/write lock (inactiveDestinationsPurgeLock) which is held during the entire
queue GC.
> each individual queue GC takes about 100ms with a disk backed queue and 10ms with a memory
backed (non-persistent) queue. If you have thousands of them to GC at once the inactiveDestinationsPurgeLock
lock is held the entire time which can last from 60 seconds to 5 minutes (and essentially
> A read lock is also held for this in addConsumer addProducer so that when a new consumer
or produce tries to connect, they’re blocked until queue GC completes.
> Existing producers/consumers work JUST fine.  
> The lock MUST be held on each queue because if it isn’t there’s a race where a queue
is flagged to be GCd , then a producer comes in and writes a new message, then the background
thread deletes the queue which it marked as GCable but it had the newly produced message.
 This would result in data loss.

This message was sent by Atlassian JIRA

View raw message