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]

Reply via email to