[ https://issues.apache.org/activemq/browse/AMQ-2571?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=57154#action_57154 ]
Rob Davies commented on AMQ-2571: --------------------------------- luckily I have a slow laptop so have been able to validate it there > Sender sometimes, involuntary, autocreates new, consumerless, TempQueue when > trying to send to removed TempQueue. > ----------------------------------------------------------------------------------------------------------------- > > Key: AMQ-2571 > URL: https://issues.apache.org/activemq/browse/AMQ-2571 > Project: ActiveMQ > Issue Type: Bug > Components: Broker > Affects Versions: 4.1.1 > Environment: Ubuntu 9.10, P4 2.6 GHz HT, 3 GB RAM. > Reporter: Simon > Assignee: Rob Davies > Fix For: 5.4.0 > > Attachments: TempQueueClosing.java > > > Please see this post for discussion: > http://old.nabble.com/Problems-with-prefetch-and-TemporaryQueues-td27130529.html > I've tested this on 4.1.1, and briefly on 5.3.0 with the same result. > Scenario: > We have a server and a client. The client posts a message on the servers > queue in order to subscribe to updates. > The server takes the reply address from the client and starts sending > messages to a TempQueue created by the client. > When the client disconnects without notifying the server the following might > happen: > 1. The temporary queue is removed correctly when the client exits and closes > its connection. > From here we have three scenarios: > 2.a The server gets an exception the next time it tries to send a message to > the TempQueue. This is wanted behaviour. It can then simply drop the > "subscription". > 2.b The server isn't notified in time and sends some messages before it gets > the exception. Due to AutoCreateDestination being enabled one of these > messages creates a new TempQueue with the same name as the one removed. It is > of course missing a consumer. > But since the server gets the exception it will stop posting to the > TempQueue. However, when the server closes its connection the TempQueue is > not removed and is left lying around with no consumer. > 2.c The server recreates the TempQueue in the same way as in 2.b, but here it > never gets the exception for some reason. The server then has no idea that > the client left and keeps pilling up messages on the TempQueue until the > broker object hits its memory limit and everything connected to the broker > halts. > I think there are three problems here: > 1. The exception is not thrown every time. > 2. When the TempQueue is recreated it is not removed when the server closes > its connection. Also, the server gets an InvalidDestinationException if I, at > server side, try to connect a consumer to the TempQueue. I guess this means > that although the server is the initiator for the auto(re)creation it does > not become the owner of the TempQueue. But who is then the owner? The broker > itself? > 3. Due to AutoCreateDestination being enabled by default for TempQueues, > every post to a TempQueue could result in unknowingly creating a new > TempQueue. > Suggestions > Setting AutoCreateDestination to false for TempQueues solves all three > problems. > So exposing that option in an easily accessible way is important. > But even then, 1 and 2 should perhaps be examined separately. > I'll attach a JUnit test case for this. Unfortunately it is not 100% reliable > in detecting the problem. One has to run it multiple times. > On my test setup it failed correctly 8 times out of 10 runs. You might be > able to improve it. > Best Regards > Nimos -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.