[ 
https://issues.apache.org/jira/browse/QPID-6975?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Keith Wall updated QPID-6975:
-----------------------------
    Description: 
If an AMQP peer using TLS closes the connection gracefully, a "SSL close 
notify" is sent as part if the SSL goodnight from peer to Broker. 

The {{SSLEngine}} within {{NonBlockingConnectionTLSDelegate}} on receipt of the 
"close notify" will put itself into a {{SSLEngineResult.Status.CLOSED}} state.

However, {{NonBlockingConnectionDelegate#readyForRead}} considers 
SSLEngineResult.Status.CLOSED as meaning the channel is not ready for reading.  
This prevents NonBlockingConnection from ever reading the channel again, so -1 
is never encountered, and the connection does not immediately get marked as 
closed.  The action of the {{ConnectionClosingTicker}} masks the problem, as it 
intervenes after ten seconds, and closes the connection anyway.

The effect of this defect is to cause a tight loop involving the selector 
thread.  The selector thread believes the channel is ready, the connection gets 
scheduled, the channel is *not* read, and the channel gets reregistered back on 
the selector, and so forth.  The tight loop continues for a 10 second burst 
until the CCT intervenes.  If you have may connections being opened and closed 
all the time, it may appear to be a tight infinite loop.



  was:
If an AMQP peer using TLS closes the connection gracefully, a "SSL close 
notify" is sent as part if the SSL goodnight from peer to Broker. 

The {{SSLEngine}} within {{NonBlockingConnectionTLSDelegate}} on receipt of the 
"close notify" will put itself into a {{SSLEngineResult.Status.CLOSED}} state.

However, {{NonBlockingConnectionDelegate#readyForRead}} considers 
SSLEngineResult.Status.CLOSED as meaning the channel is not read for reading.  
This prevents NonBlockingConnection from ever reading the channel again, so -1 
is never encountered, and the connection does not immediately get marked as 
closed.  The action of the {{ConnectionClosingTicker}} masks the problem, as it 
intervenes after ten seconds, and closes the connection anyway.

The effect of this defect is to cause a tight loop involving the selector 
thread.  The selector thread believes the channel is ready, the connection gets 
scheduled, the channel is *not* read, and the channel gets reregistered back on 
the selector, and the so forth.  The tight loop continues for a 10 second burst 
until the CCT intervenes.  If you have may connections being opened and closed 
all the time, it may appear to be a tight infinite loop.




> NonBlockingConnectionTLSDelegate won't read to stream end if SSLEngine is 
> closed
> --------------------------------------------------------------------------------
>
>                 Key: QPID-6975
>                 URL: https://issues.apache.org/jira/browse/QPID-6975
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: qpid-java-6.0
>            Reporter: Keith Wall
>             Fix For: qpid-java-6.0.1
>
>
> If an AMQP peer using TLS closes the connection gracefully, a "SSL close 
> notify" is sent as part if the SSL goodnight from peer to Broker. 
> The {{SSLEngine}} within {{NonBlockingConnectionTLSDelegate}} on receipt of 
> the "close notify" will put itself into a {{SSLEngineResult.Status.CLOSED}} 
> state.
> However, {{NonBlockingConnectionDelegate#readyForRead}} considers 
> SSLEngineResult.Status.CLOSED as meaning the channel is not ready for 
> reading.  This prevents NonBlockingConnection from ever reading the channel 
> again, so -1 is never encountered, and the connection does not immediately 
> get marked as closed.  The action of the {{ConnectionClosingTicker}} masks 
> the problem, as it intervenes after ten seconds, and closes the connection 
> anyway.
> The effect of this defect is to cause a tight loop involving the selector 
> thread.  The selector thread believes the channel is ready, the connection 
> gets scheduled, the channel is *not* read, and the channel gets reregistered 
> back on the selector, and so forth.  The tight loop continues for a 10 second 
> burst until the CCT intervenes.  If you have may connections being opened and 
> closed all the time, it may appear to be a tight infinite loop.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to