activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Timothy Bish (JIRA)" <>
Subject [jira] [Resolved] (AMQ-3326) Synchronization point in RegionBroker adding and removing producers and consumers
Date Thu, 30 Jun 2011 22:23:28 GMT


Timothy Bish resolved AMQ-3326.

       Resolution: Fixed
    Fix Version/s: 5.6.0
         Assignee: Timothy Bish

Confirmed the serialization of calls into those methods is not needed when the inactivity
purge is not running so a reader / writer lock is the correct choice.

> Synchronization point in RegionBroker adding and removing producers and consumers
> ---------------------------------------------------------------------------------
>                 Key: AMQ-3326
>                 URL:
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: Broker
>    Affects Versions: 5.4.2, 5.5.0
>            Reporter: Izzy Alanis
>            Assignee: Timothy Bish
>             Fix For: 5.6.0
>         Attachments: RegionBroker-542.patch, RegionBroker-trunk.patch
> Synchronization blocks were added to the RegionBroker as a result of AMQ-2821 (automatic
removal of inactive destinations). I believe the author was trying to prevent adding and removing
producers while the inactive destination removal process was running.
> This is a major performance bottle neck in use case scenarios where many clients are
subscribing and unsubscribing simultaneously -- specifically, in order to retrieve one and
only one message from a queue using the STOMP protocol (without holding onto a prefetch message)
you must subscribe, retrieve a message and then unsubscribe from the destination. This activity
causes lots of adding and removing of producers and consumers.
> I'm still not entirely convinced that the destination removal process needs to be protected
in that manner, but the attached patch uses a ReentrantReadWriteLock to continue to protect
the destination removal process, while still allowing clients to add and remove producers
and consumers concurrently when the destination process is not running.
> This patch also relates to AMQ-3070 (where the user was complaining about this same synchronization
> I'm attaching patches both for the trunk and for 5.4.2 (which is what I'm still using).
> There are other synchronization blocks further down in the code (inside AbstractRegion
and Queue implementations), but in my particular use case, the 2-3x performance enhancement
I get of this patch alone are enough to satisfy my immediate concerns.

This message is automatically generated by JIRA.
For more information on JIRA, see:


View raw message