activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Bowman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-6155) Spurious InvalidDestinationException publishing to a temp queue from a new connection
Date Thu, 04 Feb 2016 19:48:39 GMT

    [ https://issues.apache.org/jira/browse/AMQ-6155?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15132882#comment-15132882
] 

Kevin Bowman commented on AMQ-6155:
-----------------------------------

Agreed.  I'm not happy about it, but the workarounds are acceptable.

> Spurious InvalidDestinationException publishing to a temp queue from a new connection
> -------------------------------------------------------------------------------------
>
>                 Key: AMQ-6155
>                 URL: https://issues.apache.org/jira/browse/AMQ-6155
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.10.2, 5.13.0
>         Environment: Windows, OS X
>            Reporter: Kevin Bowman
>         Attachments: AmqTempRaceConditionMinimalTest.java
>
>
> When a new connection is opened for the purpose of sending a message to a temporary queue
it sometimes fails with the following exception (stack trace is from v5.13.0):
>  javax.jms.InvalidDestinationException: Cannot publish to a deleted Destination: temp-queue://ID:Potomac.local-59943-1454448412194-1:1:96
>  	at org.apache.activemq.ActiveMQSession.send(ActiveMQSession.java:1904)
>  	at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:288)
>  	at org.apache.activemq.ActiveMQMessageProducer.send(ActiveMQMessageProducer.java:223)
>  	at org.apache.activemq.ActiveMQMessageProducerSupport.send(ActiveMQMessageProducerSupport.java:241)
> The actual problem appears to be in ActiveMQConnection.isDeleted().  Because the connection
being used to send to the temp queue is not the connection under which the temp queue was
created, it's dependent on AdvisoryConsumer to populate the activeTempDestinations map before
the send() call is made.  The AdvisoryConsumer gets called in a separate thread, asynchronous
with the main thread, so this constitutes a race condition.  If the send() call is made before
AdvisoryConsumer can notify the new connection of all existing temp queues then it will throw
an InvalidDestinationException even though the temp queue does actually exist.
> Calling setWatchTopicAdvisories(false) on the sending connection's factory alleviates
the problem and the program can run indefinitely with no errors.  Also, adding a delay before
the MessageProducer.send() call can alleviate the error somewhat, but with a small enough
delay it will still happen eventually.
> I noticed this first in an environment I don't have full control over.  It happened the
first time, every time, for reasons I still don't quite understand.  I have written a small
test program that reproduces the error outside of the original environment, but it runs in
a loop and it takes a few hundred iterations for it to occur.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message