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]