You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Todd Lipcon (JIRA)" <ji...@apache.org> on 2018/03/13 15:12:00 UTC

[jira] [Resolved] (KUDU-2334) OutboundTransfer::TransferStarted() isn't stateful enough with TLS socket

     [ https://issues.apache.org/jira/browse/KUDU-2334?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Todd Lipcon resolved KUDU-2334.
-------------------------------
       Resolution: Fixed
    Fix Version/s: 1.7.0

> OutboundTransfer::TransferStarted() isn't stateful enough with TLS socket
> -------------------------------------------------------------------------
>
>                 Key: KUDU-2334
>                 URL: https://issues.apache.org/jira/browse/KUDU-2334
>             Project: Kudu
>          Issue Type: Bug
>          Components: rpc
>            Reporter: Michael Ho
>            Assignee: Michael Ho
>            Priority: Major
>             Fix For: 1.7.0
>
>
> Currently, {{OutboundTransfer::TransferStarted()}} returns true if we made non-zero progress in {{OutboundTransfer::SendBuffer()}}. However, this may not work well when using TLS socket as {{SSL_Write()}} is stateful. So, if we called {{SSL_Write()}} with the buffer of the first slice in an {{OutboundTransfer}} and failed with 0 bytes written and errno {{EAGAIN}} due to send buffer being full, we need to try again with the exact buffer in the first slice. However, it's possible that particular {{OutboundTransfer}} may be cancelled or timed-out before the next call to {{OutboundTransfer::SendBuffer()}} in {{Connection::WriteHandler()}}. In which case, we will skip to the next {{OutboundTransfer}} in the queue and call {{SSL_Write()}} with the buffers in the next {{OutboundTransfer}}, leading to the error message:
> {noformat}
> failed to write to TLS socket: error:1409F07F:SSL routines:SSL3_WRITE_PENDING:bad write retry:s3_pkt.c
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)