Ren Koike created HDDS-16271:
--------------------------------

             Summary: Add timeouts to EC blocking future calls
                 Key: HDDS-16271
                 URL: https://issues.apache.org/jira/browse/HDDS-16271
             Project: Apache Ozone
          Issue Type: Improvement
          Components: Ozone Client
            Reporter: Ren Koike
            Assignee: Ren Koike


The EC write path has blocking .get() calls without timeouts:
1. {*}ECBlockOutputStreamEntry{*}.getFailedStreams() calls .get() on each 
datanode's future without timeout. One slow node blocks the entire stripe write 
indefinitely.

2. {*}ECKeyOutputStream{*}.close() calls flushFuture.get() without timeout, so 
close() can hang if the background flush thread stalls.

Fix: replace unbounded .get() with .get(timeout, TimeUnit) using a configurable 
timeout. On timeout, treat the node as failed and trigger the existing retry 
logic (for getFailedStreams), or throw IOException (for close).

Also fix visibility of *ECBlockOutputStream* future fields that are assigned in 
synchronized write() but read without the lock.

Verification: all EC unit tests pass, plus new tests for timeout scenarios.



--
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