If a destination is removed.. I'm thinking #2 is the best option.

On Tue, Jan 6, 2009 at 2:05 PM, David Jencks <[email protected]> wrote:
> I've encountered a couple of situations that result in threads hanging
> inside the amq broker.  I'm not 100% certain what the clients are calling
> but what is happening inside the broker is roughly this:
>
> 1. org.apache.activemq.broker.region.Queue or Topic created.  This is
> supplied a MessageStore in the constructor, which is supplied by the
> DestinationFactoryImpl which gets it from the persistence adapter.  The
> persistence adapter tracks and caches the message stores.
>  (DestinationFactoryImpl.createDestination, lines 80 and 94)
>
> 2. After a while the Queue or Topic is removed.  All traces are removed from
> the AbstractRegion and the associated MessageStore is stopped.  However the
> message store is not removed from the persistence adapter.
>
> 3. Another Queue or Topic with the same name is created.  This is supplied
> with the stopped message store from the persistence adapter.  As part of
> startup/setup flush() is called which hangs on the countdown latch that
> waits for disk writes to finish.... since the message store is stopped,
> attempts to wake up the async write task return immediately.
>
> I don't know the best way to fix this problem.  Some possibilities:
>
> 1. When a Queue/Topic is stopped, don't stop the message store.  This
> appears to avoid the hanging problem but the persistence adapter may
> eventually get full of unused message stores (well, it does now too, but
> they might all be stopped).
>
> 2. When a Queue/Topic is stopped, remove the message store from the
> persistence adapter.
>
> 3. ???
>
> Any ideas?
>
> thanks
> david jencks
>
>
>
>



-- 
Regards,
Hiram

Blog: http://hiramchirino.com

Open Source SOA
http://open.iona.com

Reply via email to