Uploaded image for project: 'Qpid Proton'
  1. Qpid Proton
  2. PROTON-1171

[proton-j] transport SSL wrapper does not flush all decoded bytes to the underlying input

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • proton-0.12.0, proton-0.12.1
    • proton-0.12.2, proton-0.13.0
    • proton-j
    • None
    • Any

    Description

      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 request:
      https://github.com/apache/qpid-proton/pull/73

      Attachments

        Issue Links

          Activity

            People

              robbie Robbie Gemmell
              gsreeram86 Sreeram Garlapati
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: