This is an automated email from the ASF dual-hosted git repository.

siddhant 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 9b48d8b1c0 HDDS-7696. MisReplicationHandler does not consider 
QUASI_CLOSED replicas as sources (#4144)
9b48d8b1c0 is described below

commit 9b48d8b1c0b01bc8136dca473a67d428b30b1416
Author: Stephen O'Donnell <[email protected]>
AuthorDate: Thu Jan 5 07:58:47 2023 +0000

    HDDS-7696. MisReplicationHandler does not consider QUASI_CLOSED replicas as 
sources (#4144)
---
 .../container/replication/MisReplicationHandler.java | 20 +++++++++++---------
 .../replication/TestRatisMisReplicationHandler.java  | 12 ++++++++++++
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/MisReplicationHandler.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/MisReplicationHandler.java
index 0104925ab8..b418b9236e 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/MisReplicationHandler.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/MisReplicationHandler.java
@@ -95,15 +95,17 @@ public abstract class MisReplicationHandler implements
   }
 
   private Set<ContainerReplica> filterSources(Set<ContainerReplica> replicas) {
-    return replicas.stream().filter(r -> r
-                    .getState() == StorageContainerDatanodeProtocolProtos
-                    .ContainerReplicaProto.State.CLOSED)
-            .filter(r -> ReplicationManager
-                    .getNodeStatus(r.getDatanodeDetails(), nodeManager)
-                    .isHealthy())
-            .filter(r -> r.getDatanodeDetails().getPersistedOpState()
-                    == HddsProtos.NodeOperationalState.IN_SERVICE)
-            .collect(Collectors.toSet());
+    return replicas.stream()
+        .filter(r -> r.getState() == StorageContainerDatanodeProtocolProtos
+            .ContainerReplicaProto.State.CLOSED || r.getState() ==
+                StorageContainerDatanodeProtocolProtos
+                    .ContainerReplicaProto.State.QUASI_CLOSED
+        )
+        .filter(r -> ReplicationManager.getNodeStatus(
+            r.getDatanodeDetails(), nodeManager).isHealthy())
+        .filter(r -> r.getDatanodeDetails().getPersistedOpState()
+            == HddsProtos.NodeOperationalState.IN_SERVICE)
+        .collect(Collectors.toSet());
   }
 
   protected abstract ReplicateContainerCommand getReplicateCommand(
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisMisReplicationHandler.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisMisReplicationHandler.java
index de9574e03d..f960974256 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisMisReplicationHandler.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestRatisMisReplicationHandler.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.hdds.client.RatisReplicationConfig;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.MockDatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReplicaProto.State;
 import org.apache.hadoop.hdds.scm.ContainerPlacementStatus;
 import org.apache.hadoop.hdds.scm.PlacementPolicy;
 import org.apache.hadoop.hdds.scm.container.ContainerReplica;
@@ -67,6 +68,17 @@ public class TestRatisMisReplicationHandler extends 
TestMisReplicationHandler {
             0, misreplicationCount, Math.min(misreplicationCount, 3));
   }
 
+  @ParameterizedTest
+  @ValueSource(ints = {1, 2, 3, 4, 5, 6, 7})
+  public void testMisReplicationWithAllNodesAvailableQuasiClosed(
+      int misreplicationCount) throws IOException {
+    Set<ContainerReplica> availableReplicas = ReplicationTestUtil
+        .createReplicas(State.QUASI_CLOSED, Pair.of(IN_SERVICE, 0),
+            Pair.of(IN_SERVICE, 0), Pair.of(IN_SERVICE, 0));
+    testMisReplication(availableReplicas, Collections.emptyList(),
+        0, misreplicationCount, Math.min(misreplicationCount, 3));
+  }
+
   @Test
   public void testMisReplicationWithNoNodesReturned() throws IOException {
     Set<ContainerReplica> availableReplicas = ReplicationTestUtil


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to