Henry Robinson created KUDU-2011:
------------------------------------

             Summary: Request-side sidecars cannot be safely destroyed on 
timeout
                 Key: KUDU-2011
                 URL: https://issues.apache.org/jira/browse/KUDU-2011
             Project: Kudu
          Issue Type: Bug
            Reporter: Henry Robinson
            Assignee: Henry Robinson


If a timeout occurs while sending a request-side sidecar (see KUDU-1866), the 
RPC callback may be invoked before the outbound transfer has been completely 
written. 

This is the last notification from the RPC layer that the caller will get, so 
you might expect them to delete the sidecar payload at that point, but it's not 
safe to do so. In fact, with a slow sender there is no way for the caller to 
know when it's safe to delete the payload. There's no problem for the protobuf 
message data, as it's serialized during the blocking part of an async call, and 
that memory is tied to the lifetime of the outbound call, which is managed by 
the RPC layer.

Ownership of the sidecar payloads should be shared between caller and the RPC 
layer, so really it's the new {{RpcSidecar::FromSlice}} API that causes the 
problems because ownership is not shared with the {{RpcSidecar}} which does 
have the correct lifetime. I propose removing {{FromSlice}} and having a 
{{FromFaststring(shared_ptr<faststring>)}} variant.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to