Todd Lipcon has submitted this change and it was merged. ( http://gerrit.cloudera.org:8080/8604 )
Change subject: KUDU-2218. tls_socket: properly handle temporary socket errors in Writev ...................................................................... KUDU-2218. tls_socket: properly handle temporary socket errors in Writev This fixes a bug which caused RaftConsensusITest.TestLargeBatches to fail when run under stress, as in the following command line: taskset -c 0-4 \ build/latest/bin/raft_consensus-itest \ --gtest_filter=\*LargeBat\* \ --stress-cpu-threads=8 This would produce an error like: Network error: failed to write to TLS socket: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry:s3_pkt.c:878 This means that we were retrying a write after getting EAGAIN, but with a different buffer than the first time. I tracked this down to mishandling of temporary socket errors in TlsSocket::Writev(). In the case that we successfully write part of the io vector but hit such an error trying to write a later element in the vector, we were still propagating the error back up to the caller. The caller didn't realize that part of the write was successful, and thus it would retry the write from the beginning. The fix is to fix the above, but also to enable partial writes in TlsContext. The new test fails if either of the above two changes are backed out. While merging from the main trunk, the SCOPED_CLEANUP macro was replaced with MakeScopedCleanup. Change-Id: If797f220f42bfb2e6f452b66f15e7a758e883472 Reviewed-on: http://gerrit.cloudera.org:8080/8570 Tested-by: Kudu Jenkins Reviewed-by: Alexey Serbin <[email protected]> (cherry picked from commit 64eb9f37b171419ed12a3795efe28faf2fd33b3d) Reviewed-on: http://gerrit.cloudera.org:8080/8604 Tested-by: Alexey Serbin <[email protected]> Reviewed-by: Todd Lipcon <[email protected]> --- M src/kudu/security/tls_context.cc M src/kudu/security/tls_socket-test.cc M src/kudu/security/tls_socket.cc 3 files changed, 219 insertions(+), 70 deletions(-) Approvals: Alexey Serbin: Verified Todd Lipcon: Looks good to me, approved -- To view, visit http://gerrit.cloudera.org:8080/8604 To unsubscribe, visit http://gerrit.cloudera.org:8080/settings Gerrit-Project: kudu Gerrit-Branch: branch-1.5.x Gerrit-MessageType: merged Gerrit-Change-Id: If797f220f42bfb2e6f452b66f15e7a758e883472 Gerrit-Change-Number: 8604 Gerrit-PatchSet: 3 Gerrit-Owner: Alexey Serbin <[email protected]> Gerrit-Reviewer: Alexey Serbin <[email protected]> Gerrit-Reviewer: Jean-Daniel Cryans <[email protected]> Gerrit-Reviewer: Todd Lipcon <[email protected]>
