[
https://issues.apache.org/jira/browse/HDDS-17635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Soldatov updated HDDS-17635:
-----------------------------------
Parent: HDDS-10338
Issue Type: Sub-task (was: Bug)
> Datanode ReadBlock: a cancelled streaming call is not a container failure
> -------------------------------------------------------------------------
>
> Key: HDDS-17635
> URL: https://issues.apache.org/jira/browse/HDDS-17635
> Project: Apache Ozone
> Issue Type: Sub-task
> Components: Ozone Datanode
> Affects Versions: 2.2.2
> Reporter: Sergey Soldatov
> Assignee: Sergey Soldatov
> Priority: Minor
>
> When a client of a streaming ReadBlock cancels the call, or its connection
> drops while the datanode is still sending responses, gRPC raises
> Status.CANCELLED from StreamObserver.onNext. KeyValueHandler.readBlock
> catches it in its generic catch (Exception) and turns it into a
> CONTAINER_INTERNAL_ERROR response. As a result, the datanode:
> * logs an ERROR with a full stack trace,
> * writes a READ_BLOCK FAILURE audit entry,
> * Â triggers an on-demand scan of a healthy container
> (HddsDispatcher.streamDataReadOnly scans on every non-null error response),
> * tries to write the error response back on a call that is already gone
> This is raised whenever the call is cancelled while the datanode is still
> streaming: the client cancels the stream after a checksum failure, the client
> closes its XceiverClientGrpc (shutdownNow(), for example on client cache
> eviction), the client process exits, or the connection drops. A clean close
> or seek on StreamBlockInputStream half-closes the call and does not trigger
> it. A cancelled call is a peer or transport event, not a container fault.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]