[ 
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]

Reply via email to