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]

Reply via email to