You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Keith Wall (JIRA)" <ji...@apache.org> on 2015/04/05 20:39:33 UTC

[jira] [Created] (QPID-6477) Make 0-10 implementation ignore all received frames except ConnectionCloseOk once ConnectionClose is sent

Keith Wall created QPID-6477:
--------------------------------

             Summary: Make 0-10 implementation ignore all received frames except ConnectionCloseOk once ConnectionClose is sent
                 Key: QPID-6477
                 URL: https://issues.apache.org/jira/browse/QPID-6477
             Project: Qpid
          Issue Type: Improvement
          Components: Java Broker
            Reporter: Keith Wall
             Fix For: 6.0 [Java]


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.

{noformat}
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)
{noformat}



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

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org