[
https://issues.apache.org/jira/browse/QPID-8491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17252519#comment-17252519
]
Alex Rudyy commented on QPID-8491:
----------------------------------
Hi [~daniel.kirilyuk],
I tried to reproduce the problem as illustrated in the JIRA description, but it
did not occur for me.
After reviewing the code I strongly believe that Qpid connections cannot be
leaked in result of receiving frames in an illegal order or when connection is
in closed state.
I suspect that the reported issue could be caused by the spinning connection(s)
as described in QPID-8489. I think that after applying the work around for
JDK-8214418, the issue might not occur.
Could you please verify that you still can reproduce the issue in your
environment with broker build including fix from QPID-8489?
> Connection leak when using CPP qpid-proton client
> -------------------------------------------------
>
> Key: QPID-8491
> URL: https://issues.apache.org/jira/browse/QPID-8491
> Project: Qpid
> Issue Type: Bug
> Components: Broker-J
> Affects Versions: qpid-java-broker-8.0.2
> Reporter: Daniil Kirilyuk
> Priority: Minor
> Attachments: broker.log, simple_recv.cpp
>
>
> Issue is similar to QPID-8477: when broker is configured to accept limited
> number of connections from certain client and client is not well behaved,
> there is a possibility to exceed configured connection limit.
> *Steps to reproduce*
> 1. Configure broker to allow only 1 connection
>
> 3. Prepare certificates
>
> 4. Install Qpid::Proton 0.28.0
> wget
> [http://archive.apache.org/dist/qpid/proton/0.28.0/qpid-proton-0.28.0.tar.gz]
> gunzip qpid-proton-0.28.0.tar.gz
> mkdir -p qpid-proton-0.28.0/build && pushd qpid-proton-0.28.0/build && cmake
> .. && make all && popd
> 5. Replace and edit example *qpid-proton-0.28.0/cpp/examples/simple_recv.cpp*
> with the one attached
> 6. Build again
> cd qpid-proton-0.28.0/build
> make
> 7. Start clients
> ./cpp/examples/simple_recv & ./cpp/examples/simple_recv
> 8. Check connection count
> curl
> [http://admin_user:password@your_broker_host:http_administration_port/api/latest/querybroker/VirtualHost?select=connectionCount]
> *Analysis:*
> Client outputs following error message:
> {{Connection error}}
> {{[0x1c4fac0]:unable to find an open available channel within limit of 0}}
> {{[0x1c4fac0]:process error -2}}
> In broker log following stacktrace is seen:
> {noformat}
> 2020-12-09 11:03:32,252 WARN [IO-/10.112.45.3:45094]
> (o.a.q.s.p.v.f.FrameHandler) - Unexpected exception handling frame
> org.apache.qpid.server.util.ConnectionScopedRuntimeException: Unexpected
> state, client has sent frame in an illegal order. Required state: OPENED,
> actual state: CLOSED
> at
> org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.assertState(AMQPConnection_1_0Impl.java:1768)
> at
> org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receiveBegin(AMQPConnection_1_0Impl.java:701)
> at
> org.apache.qpid.server.protocol.v1_0.type.transport.Begin.invoke(Begin.java:230)
> at
> org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.received(AMQPConnection_1_0Impl.java:515)
> at
> org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.receive(AMQPConnection_1_0Impl.java:480)
> at
> org.apache.qpid.server.protocol.v1_0.framing.FrameHandler.parse(FrameHandler.java:224)
> at
> org.apache.qpid.server.protocol.v1_0.AMQPConnection_1_0Impl.onReceive(AMQPConnection_1_0Impl.java:1312)
> at
> org.apache.qpid.server.transport.AbstractAMQPConnection.lambda$received$2(AbstractAMQPConnection.java:576)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.apache.qpid.server.transport.AbstractAMQPConnection.received(AbstractAMQPConnection.java:571)
> at
> org.apache.qpid.server.transport.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:135)
> at
> org.apache.qpid.server.transport.NonBlockingConnection.processAmqpData(NonBlockingConnection.java:611)
> at
> org.apache.qpid.server.transport.NonBlockingConnectionTLSDelegate.processData(NonBlockingConnectionTLSDelegate.java:141)
> at
> org.apache.qpid.server.transport.NonBlockingConnection.doRead(NonBlockingConnection.java:496)
> at
> org.apache.qpid.server.transport.NonBlockingConnection.doWork(NonBlockingConnection.java:270)
> at
> org.apache.qpid.server.transport.NetworkConnectionScheduler.processConnection(NetworkConnectionScheduler.java:134)
> at
> org.apache.qpid.server.transport.SelectorThread$ConnectionProcessor.processConnection(SelectorThread.java:575)
> at
> org.apache.qpid.server.transport.SelectorThread$SelectionTask.performSelect(SelectorThread.java:366)
> at
> org.apache.qpid.server.transport.SelectorThread$SelectionTask.run(SelectorThread.java:97)
> at
> org.apache.qpid.server.transport.SelectorThread.run(SelectorThread.java:533)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> at
> org.apache.qpid.server.bytebuffer.QpidByteBufferFactory.lambda$null$0(QpidByteBufferFactory.java:464)
> at java.lang.Thread.run(Thread.java:748)
> {noformat}
> Error is triggered by following callback in qpid-proton cpp client:
> {noformat}
> void on_connection_open (proton::connection &c) {
> c.open_session();
> }
> {noformat}
> Broker receives session opening call AMQPConnection_1_0Impl.receiveBegin().
> During the check whether connection is opened or not (
> AMQPConnection_1_0Impl.assertState() ) an exception is thrown, which isn't
> handled and connection remains not closed.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]