Failure to delete queue on a broker shutdown
--------------------------------------------
Key: QPID-3601
URL: https://issues.apache.org/jira/browse/QPID-3601
Project: Qpid
Issue Type: Bug
Components: Java Broker
Affects Versions: 0.15
Reporter: Alex Rudyy
When slow consumer policy is configured and slow consumer is detected the
policy fails to delete queue on broker shutdown.
The registry can be destroyed in a shutdown thread and queue
SimpleAMQQueue#reconfigure fails to reconfigure queue.
As result of it the broker is not shut down and some threads remain running.
The following exception stack trace demonstrates the issue
{noformat}
main 2011-11-09 11:20:47,423 INFO [qpid.test.utils.InternalBrokerHolder]
Shutting down Broker instance
main 2011-11-09 11:20:47,423 INFO [qpid.server.registry.ApplicationRegistry]
Shutting down
ApplicationRegistry(org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry@6c28aeba)
IoReceiver - /127.0.0.1:56171 2011-11-09 11:20:47,423 DEBUG
[server.configuration.plugins.ConfigurationPlugin] For 'policy' found handlers
(1):[
SlowConsumerDetectionPolicyConfiguration=[ (Policy:TopicDelete)]
]
main 2011-11-09 11:20:47,423 INFO [qpid.server.registry.ApplicationRegistry]
Shutting down
ApplicationRegistry:org.apache.qpid.server.registry.ConfigurationFileApplicationRegistry@6c28aeba
main 2011-11-09 11:20:47,424 INFO [qpid.message.broker.shutting_down] [Broker]
BRK-1003 : Shuting down : TCP port 15672
main 2011-11-09 11:20:47,424 DEBUG [qpid.server.connection.ConnectionRegistry]
Closing connection registry :0 connections.
IoReceiver - /127.0.0.1:56171 2011-11-09 11:20:47,424 ERROR
[apache.qpid.thread.LoggingUncaughtExceptionHandler] Uncaught exception in
thread "IoReceiver - /127.0.0.1:56171"
java.lang.IllegalStateException: No ApplicationRegistry has been initialised
at
org.apache.qpid.server.registry.ApplicationRegistry.getInstance(ApplicationRegistry.java:425)
at
org.apache.qpid.server.configuration.plugins.SlowConsumerDetectionQueueConfiguration.validateConfiguration(SlowConsumerDetectionQueueConfiguration.java:100)
at
org.apache.qpid.server.configuration.plugins.ConfigurationPlugin.setConfiguration(ConfigurationPlugin.java:144)
at
org.apache.qpid.server.configuration.plugins.SlowConsumerDetectionQueueConfiguration$SlowConsumerDetectionQueueConfigurationFactory.newInstance(SlowConsumerDetectionQueueConfiguration.java:46)
at
org.apache.qpid.server.configuration.ConfigurationManager.getConfigurationPlugins(ConfigurationManager.java:47)
at
org.apache.qpid.server.configuration.plugins.ConfigurationPlugin.offerRemainingConfigurationToOtherPlugins(ConfigurationPlugin.java:172)
at
org.apache.qpid.server.configuration.plugins.ConfigurationPlugin.setConfiguration(ConfigurationPlugin.java:142)
at
org.apache.qpid.server.configuration.VirtualHostConfiguration.getQueueConfiguration(VirtualHostConfiguration.java:232)
at
org.apache.qpid.server.queue.SimpleAMQQueue.reconfigure(SimpleAMQQueue.java:522)
at
org.apache.qpid.server.queue.SimpleAMQQueue.removeBinding(SimpleAMQQueue.java:545)
at
org.apache.qpid.server.binding.BindingFactory.removeBinding(BindingFactory.java:252)
at
org.apache.qpid.server.binding.BindingFactory.removeBinding(BindingFactory.java:221)
at
org.apache.qpid.server.queue.SimpleAMQQueue.delete(SimpleAMQQueue.java:1364)
at
org.apache.qpid.server.transport.ServerSessionDelegate$2.doTask(ServerSessionDelegate.java:1020)
at
org.apache.qpid.server.transport.ServerSession.onClose(ServerSession.java:361)
at
org.apache.qpid.server.transport.ServerSessionDelegate.closed(ServerSessionDelegate.java:1267)
at org.apache.qpid.transport.Session.closed(Session.java:1054)
at org.apache.qpid.transport.Connection.closed(Connection.java:551)
at
org.apache.qpid.server.transport.ServerConnection.closed(ServerConnection.java:408)
at
org.apache.qpid.transport.network.Assembler.closed(Assembler.java:110)
at
org.apache.qpid.transport.network.InputHandler.closed(InputHandler.java:202)
at
org.apache.qpid.server.protocol.ProtocolEngine_0_10.closed(ProtocolEngine_0_10.java:196)
at
org.apache.qpid.server.protocol.MultiVersionProtocolEngine.closed(MultiVersionProtocolEngine.java:95)
at
org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:173)
at java.lang.Thread.run(Thread.java:662)
{noformat}
The simplest work around solution here would be an adding of check into
reconfigure method to check if queue is closed and skip reconfigure step.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]