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

Aswin Shakil updated HDDS-15791:
--------------------------------
    Description: 
This issue has been identified by [~deveshsingh] and [~umamahesh] 

During EC offline reconstruction, the coordinator creates a *RECOVERING* 
replica on a spare DataNode and writes blocks over time. If reconstruction 
stalls (e.g. slow block-group processing) longer than 
`ozone.recovering.container.timeout` (~20m, measured from creation, not last 
write), the DN scrubber marks the replica *UNHEALTHY* and SCM force-deletes it.

The coordinator may still be running. The next `WriteChunk` finds no container; 
`HddsDispatcher` auto-creates a new OPEN container instead of failing. The 
coordinator continues and closes that replica shortly after, leaving a partial 
container (fewer blocks/chunks than the reference) that SCM can accept as 
*CLOSED* — silent data loss.

*Logic flow*
{code:java}
Coordinator Phase 1
  createRecoveringContainer  →  RECOVERING on spare DN
  (slow / sleep — no writes for extended period)

StaleRecoveringContainerScrubbingService
  creationTime + timeout exceeded  →  mark UNHEALTHY

SCM / Replication Manager
  force-delete UNHEALTHY replica  →  DELETED on spare DN

Coordinator resumes writes
  container == null
  HddsDispatcher auto-create      →  OPEN (not RECOVERING)

Coordinator completes
  closeContainer                  →  CLOSING / CLOSED

Result: CLOSED replica with partial blocks/chunks at EC index → data loss
{code}
 

  was:
This issue has been identified by [~deveshsingh] and [~umamahesh] 

During EC offline reconstruction, the coordinator creates a *RECOVERING* 
replica on a spare DataNode and writes blocks over time. If reconstruction 
stalls (e.g. slow block-group processing) longer than 
`ozone.recovering.container.timeout` (~20m, measured from creation, not last 
write), the DN scrubber marks the replica *UNHEALTHY* and SCM force-deletes it.

The coordinator may still be running. The next `WriteChunk` or `PutBlock` finds 
no container; `HddsDispatcher` auto-creates a new OPEN container instead of 
failing. The coordinator continues and closes that replica shortly after, 
leaving a partial container (fewer blocks/chunks than the reference) that SCM 
can accept as *CLOSED* — silent data loss.

*Logic flow*

{code:java}
Coordinator Phase 1
  createRecoveringContainer  →  RECOVERING on spare DN
  (slow / sleep — no writes for extended period)

StaleRecoveringContainerScrubbingService
  creationTime + timeout exceeded  →  mark UNHEALTHY

SCM / Replication Manager
  force-delete UNHEALTHY replica  →  DELETED on spare DN

Coordinator resumes writes
  container == null
  HddsDispatcher auto-create      →  OPEN (not RECOVERING)

Coordinator completes
  closeContainer                  →  CLOSING / CLOSED

Result: CLOSED replica with partial blocks/chunks at EC index → data loss
{code}


 


> EC reconstructed RECOVERING container while still idle can be deleted by SCM 
> and recreated as new partial OPEN container
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-15791
>                 URL: https://issues.apache.org/jira/browse/HDDS-15791
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Aswin Shakil
>            Assignee: Aswin Shakil
>            Priority: Major
>              Labels: pull-request-available
>
> This issue has been identified by [~deveshsingh] and [~umamahesh] 
> During EC offline reconstruction, the coordinator creates a *RECOVERING* 
> replica on a spare DataNode and writes blocks over time. If reconstruction 
> stalls (e.g. slow block-group processing) longer than 
> `ozone.recovering.container.timeout` (~20m, measured from creation, not last 
> write), the DN scrubber marks the replica *UNHEALTHY* and SCM force-deletes 
> it.
> The coordinator may still be running. The next `WriteChunk` finds no 
> container; `HddsDispatcher` auto-creates a new OPEN container instead of 
> failing. The coordinator continues and closes that replica shortly after, 
> leaving a partial container (fewer blocks/chunks than the reference) that SCM 
> can accept as *CLOSED* — silent data loss.
> *Logic flow*
> {code:java}
> Coordinator Phase 1
>   createRecoveringContainer  →  RECOVERING on spare DN
>   (slow / sleep — no writes for extended period)
> StaleRecoveringContainerScrubbingService
>   creationTime + timeout exceeded  →  mark UNHEALTHY
> SCM / Replication Manager
>   force-delete UNHEALTHY replica  →  DELETED on spare DN
> Coordinator resumes writes
>   container == null
>   HddsDispatcher auto-create      →  OPEN (not RECOVERING)
> Coordinator completes
>   closeContainer                  →  CLOSING / CLOSED
> Result: CLOSED replica with partial blocks/chunks at EC index → data loss
> {code}
>  



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