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

Wei-Chiu Chuang reassigned HDDS-17360:
--------------------------------------

    Assignee: Andrey Yarovoy

> 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
>            Assignee: Andrey Yarovoy
>            Priority: Major
>
> 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