qpid-proton mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PROTON-1171) [proton-j] transport SSL wrapper does not flush all decoded bytes to the underlying input
Date Wed, 13 Apr 2016 14:00:31 GMT

    [ https://issues.apache.org/jira/browse/PROTON-1171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15239286#comment-15239286

ASF GitHub Bot commented on PROTON-1171:

Github user gemmellr commented on the pull request:

    I have made a change that should resolve this. Its a little different than your proposal
to both resolve an issue with it (unlikely but possible infinite loop), and also change some
other existing behaviours I found while digging into it. If you could give it a try with your
bits and report back that would be great.

> [proton-j] transport SSL wrapper does not flush all decoded bytes to the underlying input
> -----------------------------------------------------------------------------------------
>                 Key: PROTON-1171
>                 URL: https://issues.apache.org/jira/browse/PROTON-1171
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-j
>    Affects Versions: 0.12.0, 0.12.1
>         Environment: Any
>            Reporter: Sreeram Garlapati
>            Assignee: Robbie Gemmell
>            Priority: Critical
>             Fix For: 0.13.0, 0.12.2
> Actual Issue/scenario hit by Microsoft Azure EventHubs:
>  We have a pattern where customers sends messages in a burst to our Queue and stop sending
and then wait for all of them to be received.
> Because of this issue in Proton-j Amqp implementation - we can see many bytes were stuck
in the SSL Decode Buffer and were only picked up when new transport frames arrive.
> Given that this is a 1 line fix - it would be great if you folks can publish an incremental
minor update to 0.12.X.
> Here are my findings after debugging through this issue:
> -          When incoming bytes arrive on the SocketChannel – proton-j client gets signaled
by nio & as a result it unwinds the transport stack – as a result all the TransportInput
implementations performs its task on the Read Bytes and hands off to the Next Layer in the
stack (transport to ssl, ssl to frameparser etc).
> -          While unwinding that stack, SimpleSSLTransportWrapper.unwrapInput reads(16k
bytes) from _inputBuffer and the result - decoded bytes are written to _decodedInputBuffer
– as an intermediate buffer.
> -          It then flushes bytes from intermediate buffer to the next layer & invokes
an _underlyingInput.Process() – to signal it that it has bytes in its input buffer.
> -          If the underlyingInput (lets say FrameParser) buffer size is small – lets
say 4k – then decodedInputBuffer will be left with 12k bytes & Over time this accrues.
> The fix here is to flush decodedInputBuffer to the Next transport in the Network Stack
& call _underlyingInput.Process() - until decodedInputBuffer is empty. Here’s the pull
> https://github.com/apache/qpid-proton/pull/73

This message was sent by Atlassian JIRA

View raw message