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]