This is an automated email from the ASF dual-hosted git repository.
adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 0c0434732cc HDDS-14772. Delete EC replica when container state is
already DELETED (#9872)
0c0434732cc is described below
commit 0c0434732cc38543fa2083db86cfa5bf60b011de
Author: Ashish Kumar <[email protected]>
AuthorDate: Mon Mar 9 00:25:20 2026 +0530
HDDS-14772. Delete EC replica when container state is already DELETED
(#9872)
---
.../hdds/scm/container/AbstractContainerReportHandler.java | 5 +++++
.../hdds/scm/container/TestContainerReportHandler.java | 4 ++++
.../hdds/scm/container/TestContainerStateManager.java | 14 +++++++-------
3 files changed, 16 insertions(+), 7 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/AbstractContainerReportHandler.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/AbstractContainerReportHandler.java
index f79507e1e66..6028bbfd90e 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/AbstractContainerReportHandler.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/AbstractContainerReportHandler.java
@@ -313,6 +313,11 @@ private boolean updateContainerState(final DatanodeDetails
datanode,
deleteReplica(containerId, datanode, publisher, "DELETED", false,
detailsForLogging);
return false;
}
+ if
(container.getReplicationType().equals(HddsProtos.ReplicationType.EC)) {
+ // In case of EC container, delete its replica to avoid orphan replica
+ deleteReplica(containerId, datanode, publisher, "DELETED", true,
detailsForLogging);
+ return false;
+ }
// HDDS-12421: fall-through to case DELETING
case DELETING:
// HDDS-11136: If a DELETING container has a non-empty CLOSED replica,
transition the container to CLOSED
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
index 0e8eee799bc..264a429960f 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerReportHandler.java
@@ -209,6 +209,10 @@ static Stream<Arguments> containerAndReplicaStates() {
containerState.equals(HddsProtos.LifeCycleState.DELETING))) {
continue;
}
+ if (replicationType == HddsProtos.ReplicationType.EC &&
+ containerState.equals(HddsProtos.LifeCycleState.DELETED)) {
+ continue;
+ }
for (ContainerReplicaProto.State invalidState :
invalidReplicaStates) {
combinations.add(Arguments.of(replicationType, containerState,
replicaState, invalidState));
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
index 869b7dd5bb9..dfb4f38deef 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/TestContainerStateManager.java
@@ -301,9 +301,8 @@ public void
testDeletedContainerWithLowerBcsidStaleReplicaRatis()
}
/**
- * DELETED EC container + CLOSED replica with BCSID <= container seqId.
- * Expected: Should NOT send force delete
- * Should transition to CLOSED instead
+ * DELETED EC container in SCM.
+ * Expected: Should send force delete to DN
*/
@Test
public void
testDeletedECContainerWithStaleClosedReplicaShouldNotForceDelete()
@@ -318,11 +317,12 @@ public void
testDeletedECContainerWithStaleClosedReplicaShouldNotForceDelete()
repConfig);
containerStateManager.addContainer(ecContainer.getProtobuf());
assertEquals(HddsProtos.ReplicationType.EC,
ecContainer.getReplicationType());
- // Report CLOSED replica with BCSID = container's seqId
+
+ // Verify delete command sent
sendReportAndCaptureDeleteCommand(ecContainer, datanode,
- ecContainer.getSequenceId(), false, 1, false);
- // Container should transition to CLOSED
- verifyContainerState(ecContainer.containerID(),
HddsProtos.LifeCycleState.CLOSED);
+ ecContainer.getSequenceId(), false, 1, true);
+ // Container should remain as DELETED
+ verifyContainerState(ecContainer.containerID(),
HddsProtos.LifeCycleState.DELETED);
}
private DeleteContainerCommand sendReportAndCaptureDeleteCommand(
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]