Sergey Soldatov created HDDS-17635:
--------------------------------------
Summary: 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: Bug
Components: Ozone Datanode
Affects Versions: 2.2.2
Reporter: Sergey Soldatov
Assignee: Sergey Soldatov
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]