Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-5515

Oneway requests can stuck in TNonblockingServer with TSSLSocket

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.15.0
    • 0.17.0
    • C++ - Library
    • None
    • thrift: 0.15.0
      openssl: 1.0.2k
      libevent: 2.0.21-stable method epoll

       

    Description

      C++ TNonblockingServer processes the requests one by one. The processing of one request starts when an event for the given socket is triggered by libevent.

      If TSSLSocket used, the openssl library may read all the available data from the socket which potentially contain more requests.
      The first request is processed by TNonblockingServer::workSocket.
      But after that since only oneway requests are used no send happens and the socket receive buffer is already empty, so no any event is triggered by libevent.
      This means the processing of the further request already buffered by openssl will happen only when a new request arrives to the socket.

      There is a little test client/server attached to show the problem. The output from server_rpcgw is the following:

      17:23:35 message1
      17:23:37 message2
      17:23:37 message3

      The message2 was sent by the client at the same time like message1, but got processed by the server just when the message3 arrived.

      In the attached wireshark capture the frame #10 contains the message1 and message2 the #12 contains the message3.

      In the code there is already a comment about this case after the thrift frame size is read:
      https://github.com/apache/thrift/blob/0b29261a4f3c6882ef3b09aae47914f0012b0472/lib/cpp/src/thrift/server/TNonblockingServer.cpp#L480

      It is not clear why no similar check happens after the thrift frame content is read.

      Attachments

        1. test.zip
          2 kB
          Tamas Kovacs

        Issue Links

          Activity

            People

              tkovacs-2 Tamas Kovacs
              tkovacs-2 Tamas Kovacs
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 1h
                  1h