[
https://issues.apache.org/jira/browse/KUDU-2011?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16012921#comment-16012921
]
Todd Lipcon commented on KUDU-2011:
-----------------------------------
Henry and I chatted briefly offline, but reproducing notes here:
- making it blocking is error prone because, in an async use case, you'd be
calling this from the reactor thread (i.e in the context of an RPC callback)
and thus blocking is disallowed
- the release would only fail in the specific case where we got a timeout
mid-send. If the RPC is still on the queue but hasn't yet started sending, it
should still be safe to release (because we'll skip sending it in that case).
So, I think while it would cause reallocation, it ought to be a very rare case.
> 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)