Wei-Chiu Chuang created HDDS-17360:
--------------------------------------

             Summary: EC pipelines remain eligible for allocation after writes 
fail with CONTAINER_MISSING
                 Key: HDDS-17360
                 URL: https://issues.apache.org/jira/browse/HDDS-17360
             Project: Apache Ozone
          Issue Type: Bug
          Components: EC
            Reporter: Wei-Chiu Chuang


h2. Description
An EC write can fail because a datanode has marked the target container as 
missing:
{code}
EC stripe write failed: S S F S S
StorageContainerException: ContainerID ... has been lost and cannot be 
recreated on this DataNode
{code}
The EC client excludes the failed pipeline and applicable failed datanodes, 
then retries with another block group. However, this failure path does not 
initiate closure of the affected container or pipeline in SCM. If SCM still 
considers them OPEN, other writers can receive allocations targeting the same 
affected container and encounter the same failure.

This was observed while writing keys with RS(3,2). The original cause of the 
missing container replicas has not been established.

h2. Expected behavior
A confirmed CONTAINER_MISSING response for an OPEN EC container should lead to 
reconciliation in SCM so that the affected container/pipeline stops receiving 
new allocations. SCM should initiate the existing closure workflow when 
appropriate.

h2. Actual behavior
The client avoids the failed pipeline through its exclusion list, but the 
pipeline can remain available to other writers until a separate SCM lifecycle 
or health-handling path retires it.

h2. Comparison with Ratis
In the investigated source, Ratis treats CONTAINER_MISSING during state-machine 
writes as a fatal error, marking the state machine unhealthy and closing the 
local Raft division. Ratis also has server-side paths that report 
pipeline-close actions to SCM.

EC writes use the gRPC container service and bypass this Ratis failure 
handling. The error is returned to the client without an equivalent 
pipeline-close action. This distinction does not apply to every Ratis write 
exception: expected container-closure responses are exempted from the fatal 
state-machine path.

h2. Relevant code
* ECKeyOutputStream.excludePipelineAndFailedDN()
* WritableECContainerProvider.getContainer()
* HddsDispatcher.dispatch()
* GrpcXceiverService
* ContainerStateMachine.handleCommandResult() and write()

h2. Impact
A container-loss event affecting many OPEN EC containers may cause repeated 
write failures across clients, additional block allocations and retries, and 
increased write latency or eventual write failure.

h2. Suggested scope
Handle confirmed missing-container failures specifically, rather than closing 
EC pipelines for every write exception. Validate the affected 
container/pipeline state in SCM and reuse the existing closure workflow.

Validation should cover concurrent writers, repeated failure reports, 
allocation/closure races, SCM failover, and readability and reconstruction of 
previously acknowledged data.

h2. Environment and reproduction
* Replication: EC RS(3,2)
* Deployed Ozone version: not yet established
* Observed in deployment; controlled reproduction pending




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