Uploaded image for project: 'Qpid'
  1. Qpid
  2. QPID-6477

Make 0-10 implementation ignore all received frames except ConnectionCloseOk once ConnectionClose is sent

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • qpid-java-6.0
    • Broker-J
    • None

    Description

      Since the IO refactoring BrokerClosesClientConnection tests is sporadically failing with the exception below.

      In the test testClientCloseOnNormalBrokerShutdown , the Broker fails to shutdown because the Port has failed to close. This happens because AmpqPort's SettableFuture#_noConnectionRemain never gets set, and this is because the number of connections on the Port never reaches zero. This happens because the IO thread, which is processing remaining bytes from the client fails processing a SessionAttach. The exception means we never reregister interest in the socket channel, so we never learn that the socket is closed and never close the receiver, thus the number of connections on the Port never hits zero.

      The solution is to change the Java Broker's 0-10 implementation to discard all frames except ConnectionCloseOk once ConnectionClose is sent.

      Thread terminated due to uncaught exceptionjava.lang.IllegalStateException: Task executor is not in ACTIVE state
      	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.checkState(TaskExecutorImpl.java:308)
      	at org.apache.qpid.server.configuration.updater.TaskExecutorImpl.submit(TaskExecutorImpl.java:136)
      	at org.apache.qpid.server.model.AbstractConfiguredObject.doOnConfigThread(AbstractConfiguredObject.java:497)
      	at org.apache.qpid.server.model.AbstractConfiguredObject.createAsync(AbstractConfiguredObject.java:698)
      	at org.apache.qpid.server.model.AbstractConfiguredObject.create(AbstractConfiguredObject.java:693)
      	at org.apache.qpid.server.model.adapter.ConnectionAdapter.sessionAdded(ConnectionAdapter.java:273)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection.sessionAdded(ServerConnection.java:624)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection.registerSession(ServerConnection.java:445)
      	at org.apache.qpid.transport.ServerDelegate.sessionAttach(ServerDelegate.java:203)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnectionDelegate.sessionAttach(ServerConnectionDelegate.java:353)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnectionDelegate.sessionAttach(ServerConnectionDelegate.java:56)
      	at org.apache.qpid.transport.SessionAttach.dispatch(SessionAttach.java:88)
      	at org.apache.qpid.transport.ConnectionDelegate.control(ConnectionDelegate.java:49)
      	at org.apache.qpid.transport.ConnectionDelegate.control(ConnectionDelegate.java:40)
      	at org.apache.qpid.transport.Method.delegate(Method.java:163)
      	at org.apache.qpid.transport.Connection.received(Connection.java:416)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection.access$001(ServerConnection.java:68)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection$2.run(ServerConnection.java:338)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection$2.run(ServerConnection.java:334)
      	at java.security.AccessController.doPrivileged(Native Method)
      	at javax.security.auth.Subject.doAs(Subject.java:360)
      	at org.apache.qpid.server.protocol.v0_10.ServerConnection.received(ServerConnection.java:333)
      	at org.apache.qpid.transport.network.Assembler.emit(Assembler.java:98)
      	at org.apache.qpid.transport.network.Assembler.assemble(Assembler.java:184)
      	at org.apache.qpid.transport.network.Assembler.frame(Assembler.java:132)
      	at org.apache.qpid.transport.network.Frame.delegate(Frame.java:128)
      	at org.apache.qpid.transport.network.Assembler.received(Assembler.java:103)
      	at org.apache.qpid.server.protocol.v0_10.ServerAssembler.received(ServerAssembler.java:48)
      	at org.apache.qpid.transport.network.InputHandler.next(InputHandler.java:200)
      	at org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:115)
      	at org.apache.qpid.server.protocol.v0_10.ProtocolEngine_0_10.received(ProtocolEngine_0_10.java:218)
      	at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:159)
      	at org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:375)
      	at org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:276)
      	at org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:94)
      	at org.apache.qpid.server.transport.NetworkConnectionScheduler.access$000(NetworkConnectionScheduler.java:34)
      	at org.apache.qpid.server.transport.NetworkConnectionScheduler$2.run(NetworkConnectionScheduler.java:75)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at java.lang.Thread.run(Thread.java:745)
      

      Attachments

        Activity

          People

            rgodfrey Robert Godfrey
            kwall Keith Wall
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: