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 c90c4cb1c5 HDDS-8359. ReplicationManager: Fix
getContainerReplicationHealth() so that it builds ContainerCheckRequest
correctly (#4528)
c90c4cb1c5 is described below
commit c90c4cb1c585641698009e0572fb0455a47bc017
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Tue Apr 4 15:37:51 2023 +0530
HDDS-8359. ReplicationManager: Fix getContainerReplicationHealth() so that
it builds ContainerCheckRequest correctly (#4528)
---
.../container/replication/ReplicationManager.java | 10 ++++---
.../replication/TestReplicationManager.java | 31 ++++++++++++++++++++++
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
index 62851a325b..b33f0ef352 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
@@ -994,14 +994,16 @@ public class ReplicationManager implements SCMService {
*/
public ContainerHealthResult getContainerReplicationHealth(
ContainerInfo containerInfo, Set<ContainerReplica> replicas) {
- ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ ContainerCheckRequest.Builder request = new ContainerCheckRequest.Builder()
.setContainerInfo(containerInfo)
.setContainerReplicas(replicas)
- .build();
+ .setPendingOps(getPendingReplicationOps(containerInfo.containerID()));
if (containerInfo.getReplicationConfig().getReplicationType() == EC) {
- return ecReplicationCheckHandler.checkHealth(request);
+ request.setMaintenanceRedundancy(maintenanceRedundancy);
+ return ecReplicationCheckHandler.checkHealth(request.build());
} else {
- return ratisReplicationCheckHandler.checkHealth(request);
+ request.setMaintenanceRedundancy(ratisMaintenanceMinReplicas);
+ return ratisReplicationCheckHandler.checkHealth(request.build());
}
}
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManager.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManager.java
index 0e6ab3c17a..c0221681ab 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManager.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/TestReplicationManager.java
@@ -404,6 +404,37 @@ public class TestReplicationManager {
ReplicationManagerReport.HealthState.UNDER_REPLICATED));
}
+ /**
+ * {@link
+ * ReplicationManager#getContainerReplicationHealth(ContainerInfo, Set)}
+ * should return under replicated result for an under replicated container.
+ */
+ @Test
+ public void testGetContainerReplicationHealthForUnderReplicatedContainer() {
+ ContainerInfo container = createContainerInfo(repConfig, 1,
+ HddsProtos.LifeCycleState.CLOSED);
+ Set<ContainerReplica> replicas =
+ addReplicas(container, ContainerReplicaProto.State.CLOSED, 1, 2, 3, 4);
+
+ ContainerHealthResult result =
+ replicationManager.getContainerReplicationHealth(container, replicas);
+ Assert.assertEquals(ContainerHealthResult.HealthState.UNDER_REPLICATED,
+ result.getHealthState());
+
+ // Test the same for a RATIS container
+ RatisReplicationConfig ratisRepConfig =
+ RatisReplicationConfig.getInstance(THREE);
+ container = createContainerInfo(ratisRepConfig, 1L,
+ HddsProtos.LifeCycleState.CLOSED);
+ replicas = addReplicas(container, ContainerReplicaProto.State.CLOSED, 0,
+ 0);
+
+ result =
+ replicationManager.getContainerReplicationHealth(container, replicas);
+ Assert.assertEquals(ContainerHealthResult.HealthState.UNDER_REPLICATED,
+ result.getHealthState());
+ }
+
@Test
public void testUnderReplicatedContainerFixedByPending()
throws ContainerNotFoundException {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]