Csaba Ringhofer has uploaded this change for review. ( 
http://gerrit.cloudera.org:8080/22368


Change subject: IMPALA-13680: Avoid flush() when closing TSSLSocket
......................................................................

IMPALA-13680: Avoid flush() when closing TSSLSocket

Closing the transports could hang in TAcceptQueueServer if there was
an error during SSL handshake. As the TSSLSocket is wrapped in
TBufferedTransport and TBufferedTransport::close() calls flush(),
TSSLSocket::flush() was also called that led to trying again the
handshake in an unclean state. This led to hanging indefinitely with
OpenSSL 3.2. Another potential error is that if flush throws an
exception then the underlying TTransport's close() wont' be called.

Ideally this would be solved in Thrift (THRIFT-5846). As quick
fix this change adds a subclass for BufferedTransport that doesn't
call flush(). This is safe to do as generated TProcessor
subclasses call flush() every time when the client/server sends
a message.

Testing:
- the issue was caught by thrift-server-test/KerberosOnAndOff
  and TestClientSsl::test_ssl hanging till killed

Change-Id: I4879a1567f7691711d73287269bf87f2946e75d2
---
M be/src/rpc/auth-provider.h
M be/src/rpc/authentication.cc
M be/src/rpc/thrift-client.h
M be/src/rpc/thrift-server.h
M be/src/transport/TSaslServerTransport.cpp
5 files changed, 29 insertions(+), 10 deletions(-)



  git pull ssh://gerrit.cloudera.org:29418/Impala-ASF refs/changes/68/22368/1
--
To view, visit http://gerrit.cloudera.org:8080/22368
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: Impala-ASF
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4879a1567f7691711d73287269bf87f2946e75d2
Gerrit-Change-Number: 22368
Gerrit-PatchSet: 1
Gerrit-Owner: Csaba Ringhofer <[email protected]>

Reply via email to