[ 
https://issues.apache.org/jira/browse/HDDS-16680?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HDDS-16680:
----------------------------------
    Labels: pull-request-available  (was: )

> StreamBlockInputStream returns EOF instead of failing over when an error 
> response arrives during poll()
> -------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-16680
>                 URL: https://issues.apache.org/jira/browse/HDDS-16680
>             Project: Apache Ozone
>          Issue Type: Bug
>    Affects Versions: 2.2.1
>            Reporter: Sergey Soldatov
>            Assignee: Sergey Soldatov
>            Priority: Major
>              Labels: pull-request-available
>
> A streaming read that gets an error response from a datanode (e.g. 
> UNKNOWN_BCSID, CONTAINER_NOT_FOUND, or a token failure) can return EOF 
> instead of throwing. Retry and failover to another replica are skipped, and 
> KeyInputStream fails with:
> {code:java}
> java.io.IOException: Inconsistent read for blockID=conID: 1 locID: 
> 117883640217600001 bcsId: 2 replicaIndex: null length=32768 position=0 
> numBytesToRead=32768 numBytesRead=-1
> {code}
> Root cause: StreamingReader.poll() runs checkError() at the top of its loop, 
> then waits up to 100 ms on the response queue, then returns null (end of 
> stream) if future.isDone(). If onNext() (via failOnErrorResponse()) or 
> onError() fails the  future during that wait, poll() returns null for a 
> stream that failed. The error is lost, and read() turns the null into EOF.
> Regression: two changes combined to cause this:
> - HDDS-15479 moved the isDone() check to after the queue wait (to avoid 
> dropping the last queued item). That put the whole wait between checkError() 
> and isDone().
> - HDDS-16207 made error responses and gRPC errors other than CANCELLED fail 
> the future right away. Before that, they ended in the read timeout, and 
> TimeoutIOException triggered a retry/failover (HDDS-15521). After HDDS-16207, 
> the failure almost always lands during the wait.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to