This is an automated email from the ASF dual-hosted git repository.
sodonnell 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 47a79a4fc0 HDDS-9352. LegacyReplicationManager: Ignore any Datanodes
that are not in-service and healthy when finding unique origins (#5365)
47a79a4fc0 is described below
commit 47a79a4fc0c1f23b8f2c0b8b526e57260ac7a15b
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Wed Sep 27 20:10:38 2023 +0530
HDDS-9352. LegacyReplicationManager: Ignore any Datanodes that are not
in-service and healthy when finding unique origins (#5365)
---
.../replication/LegacyReplicationManager.java | 13 ++++++++++
.../replication/TestLegacyReplicationManager.java | 28 ++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/LegacyReplicationManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/LegacyReplicationManager.java
index a142dfff8d..568a013dbc 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/LegacyReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/LegacyReplicationManager.java
@@ -2229,6 +2229,19 @@ public class LegacyReplicationManager {
// deletion.
Set<UUID> existingOriginNodeIDs = allReplicas.stream()
.filter(r -> !deleteCandidates.contains(r))
+ .filter(
+ r -> {
+ try {
+ return nodeManager.getNodeStatus(r.getDatanodeDetails())
+ .isHealthy();
+ } catch (NodeNotFoundException e) {
+ LOG.warn("Exception when checking replica {} for container {}"
+
+ " while deleting excess UNHEALTHY.", r, container, e);
+ return false;
+ }
+ })
+ .filter(r -> r.getDatanodeDetails().getPersistedOpState()
+ .equals(IN_SERVICE))
.map(ContainerReplica::getOriginDatanodeId)
.collect(Collectors.toSet());
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestLegacyReplicationManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestLegacyReplicationManager.java
index f10fae55ff..bceb430668 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestLegacyReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestLegacyReplicationManager.java
@@ -830,6 +830,34 @@ public class TestLegacyReplicationManager {
replicationManager.processAll();
eventQueue.processAll(1000);
+ Assertions.assertEquals(0,
+ datanodeCommandHandler.getInvocationCount(
+ SCMCommandProto.Type.replicateContainerCommand));
+
+ Assertions.assertEquals(0,
+ datanodeCommandHandler.getInvocationCount(
+ SCMCommandProto.Type.deleteContainerCommand));
+
+ // now, add a copy of the UNHEALTHY replica on a decommissioning node,
+ // and another on a dead node. The expectation is still that no replica
+ // should be deleted as both these nodes are likely going away soon.
+ final ContainerReplica replica5 = getReplicas(
+ id, UNHEALTHY, 1000L, replica4.getOriginDatanodeId(),
+ randomDatanodeDetails());
+ replica5.getDatanodeDetails().setPersistedOpState(DECOMMISSIONING);
+ DatanodeDetails deadNode = randomDatanodeDetails();
+ nodeManager.register(deadNode, NodeStatus.inServiceDead());
+ final ContainerReplica replica6 = getReplicas(
+ id, UNHEALTHY, 1000L, replica4.getOriginDatanodeId(),
+ deadNode);
+ containerStateManager.updateContainerReplica(container.containerID(),
+ replica5);
+ containerStateManager.updateContainerReplica(container.containerID(),
+ replica6);
+
+ replicationManager.processAll();
+ eventQueue.processAll(1000);
+
Assertions.assertEquals(0,
datanodeCommandHandler.getInvocationCount(
SCMCommandProto.Type.replicateContainerCommand));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]