You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by so...@apache.org on 2022/09/16 18:38:02 UTC
[ozone] branch master updated: HDDS-7225. Add Ratis tests for HealthCheck handlers of Replication Manager (#3757)
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 1dd5315704 HDDS-7225. Add Ratis tests for HealthCheck handlers of Replication Manager (#3757)
1dd5315704 is described below
commit 1dd53157048b497b04fdf408b0848c0c09a63be2
Author: Siddhant Sangwan <si...@gmail.com>
AuthorDate: Sat Sep 17 00:07:56 2022 +0530
HDDS-7225. Add Ratis tests for HealthCheck handlers of Replication Manager (#3757)
---
.../hadoop/hdds/client/RatisReplicationConfig.java | 2 +-
.../TestClosedWithMismatchedReplicasHandler.java | 90 ++++++++++++++++++++--
.../health/TestOpenContainerHandler.java | 72 +++++++++++++++--
3 files changed, 151 insertions(+), 13 deletions(-)
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/client/RatisReplicationConfig.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/client/RatisReplicationConfig.java
index 3cf2d190dc..377f8cd998 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/client/RatisReplicationConfig.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/client/RatisReplicationConfig.java
@@ -29,7 +29,7 @@ import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.ReplicationFactor.THREE;
/**
- * Replication configuration for EC replication.
+ * Replication configuration for Ratis replication.
*/
public final class RatisReplicationConfig
implements ReplicatedReplicationConfig {
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithMismatchedReplicasHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithMismatchedReplicasHandler.java
index 5a1e399cf5..222f34c6ef 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithMismatchedReplicasHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestClosedWithMismatchedReplicasHandler.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.hdds.scm.container.replication.health;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReplicaProto;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
@@ -32,6 +33,7 @@ import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Set;
import static org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState.CLOSED;
@@ -47,11 +49,14 @@ public class TestClosedWithMismatchedReplicasHandler {
private ReplicationManager replicationManager;
private ClosedWithMismatchedReplicasHandler handler;
- private ECReplicationConfig replicationConfig;
+ private ECReplicationConfig ecReplicationConfig;
+ private RatisReplicationConfig ratisReplicationConfig;
@BeforeEach
public void setup() {
- replicationConfig = new ECReplicationConfig(3, 2);
+ ecReplicationConfig = new ECReplicationConfig(3, 2);
+ ratisReplicationConfig = RatisReplicationConfig.getInstance(
+ HddsProtos.ReplicationFactor.THREE);
replicationManager = Mockito.mock(ReplicationManager.class);
handler = new ClosedWithMismatchedReplicasHandler(replicationManager);
}
@@ -59,7 +64,7 @@ public class TestClosedWithMismatchedReplicasHandler {
@Test
public void testOpenContainerReturnsFalse() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, OPEN);
+ ecReplicationConfig, 1, OPEN);
ContainerCheckRequest request = new ContainerCheckRequest.Builder()
.setPendingOps(Collections.EMPTY_LIST)
.setReport(new ReplicationManagerReport())
@@ -76,7 +81,7 @@ public class TestClosedWithMismatchedReplicasHandler {
@Test
public void testClosedHealthyContainerReturnsFalse() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, CLOSED);
+ ecReplicationConfig, 1, CLOSED);
Set<ContainerReplica> containerReplicas =
ReplicationTestUtil.createReplicas(containerInfo.containerID(),
ContainerReplicaProto.State.CLOSED, 1, 2, 3, 4, 5);
@@ -96,7 +101,7 @@ public class TestClosedWithMismatchedReplicasHandler {
@Test
public void testClosedMissMatchContainerReturnsTrue() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, CLOSED);
+ ecReplicationConfig, 1, CLOSED);
Set<ContainerReplica> containerReplicas = ReplicationTestUtil
.createReplicas(containerInfo.containerID(),
ContainerReplicaProto.State.CLOSED, 1, 2);
@@ -134,4 +139,79 @@ public class TestClosedWithMismatchedReplicasHandler {
containerInfo, mismatch3.getDatanodeDetails(), true);
}
+ @Test
+ public void testOpenRatisContainerReturnsFalse() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, OPEN);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(Collections.emptySet())
+ .build();
+
+ Assertions.assertFalse(handler.handle(request));
+ Mockito.verify(replicationManager, times(0))
+ .sendCloseContainerReplicaCommand(
+ any(), any(), anyBoolean());
+ }
+
+ @Test
+ public void testClosedHealthyRatisContainerReturnsFalse() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, CLOSED);
+ Set<ContainerReplica> containerReplicas =
+ ReplicationTestUtil.createReplicas(containerInfo.containerID(),
+ ContainerReplicaProto.State.CLOSED, 1, 2, 3);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ Assertions.assertFalse(handler.handle(request));
+
+ Mockito.verify(replicationManager, times(0))
+ .sendCloseContainerReplicaCommand(
+ any(), any(), anyBoolean());
+ }
+
+ @Test
+ public void testClosedMissMatchRatisContainerReturnsTrue() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, CLOSED);
+ ContainerReplica mismatch1 = ReplicationTestUtil.createContainerReplica(
+ containerInfo.containerID(), 1,
+ HddsProtos.NodeOperationalState.IN_SERVICE,
+ ContainerReplicaProto.State.OPEN);
+ ContainerReplica mismatch2 = ReplicationTestUtil.createContainerReplica(
+ containerInfo.containerID(), 2,
+ HddsProtos.NodeOperationalState.IN_SERVICE,
+ ContainerReplicaProto.State.CLOSING);
+ ContainerReplica mismatch3 = ReplicationTestUtil.createContainerReplica(
+ containerInfo.containerID(), 3,
+ HddsProtos.NodeOperationalState.IN_SERVICE,
+ ContainerReplicaProto.State.UNHEALTHY);
+ Set<ContainerReplica> containerReplicas = new HashSet<>();
+ containerReplicas.add(mismatch1);
+ containerReplicas.add(mismatch2);
+ containerReplicas.add(mismatch3);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ Assertions.assertTrue(handler.handle(request));
+
+ Mockito.verify(replicationManager, times(1))
+ .sendCloseContainerReplicaCommand(
+ containerInfo, mismatch1.getDatanodeDetails(), true);
+ Mockito.verify(replicationManager, times(1))
+ .sendCloseContainerReplicaCommand(
+ containerInfo, mismatch2.getDatanodeDetails(), true);
+ Mockito.verify(replicationManager, times(0))
+ .sendCloseContainerReplicaCommand(
+ containerInfo, mismatch3.getDatanodeDetails(), true);
+ }
}
diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestOpenContainerHandler.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestOpenContainerHandler.java
index 1acb4ec412..1f2ca96d91 100644
--- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestOpenContainerHandler.java
+++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/replication/health/TestOpenContainerHandler.java
@@ -18,6 +18,8 @@
package org.apache.hadoop.hdds.scm.container.replication.health;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.hdds.client.RatisReplicationConfig;
+import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.ContainerReplicaProto;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import org.apache.hadoop.hdds.scm.container.ContainerReplica;
@@ -44,19 +46,22 @@ public class TestOpenContainerHandler {
private ReplicationManager replicationManager;
private OpenContainerHandler openContainerHandler;
- private ECReplicationConfig replicationConfig;
+ private ECReplicationConfig ecReplicationConfig;
+ private RatisReplicationConfig ratisReplicationConfig;
@BeforeEach
public void setup() {
- replicationConfig = new ECReplicationConfig(3, 2);
+ ecReplicationConfig = new ECReplicationConfig(3, 2);
+ ratisReplicationConfig = RatisReplicationConfig.getInstance(
+ HddsProtos.ReplicationFactor.THREE);
replicationManager = Mockito.mock(ReplicationManager.class);
openContainerHandler = new OpenContainerHandler(replicationManager);
}
@Test
- public void testClosedContainerReturnsTrue() {
+ public void testClosedContainerReturnsFalse() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, CLOSED);
+ ecReplicationConfig, 1, CLOSED);
Set<ContainerReplica> containerReplicas = ReplicationTestUtil
.createReplicas(containerInfo.containerID(),
ContainerReplicaProto.State.CLOSED, 1, 2, 3, 4, 5);
@@ -72,9 +77,9 @@ public class TestOpenContainerHandler {
}
@Test
- public void testOpenContainerReturnsFalse() {
+ public void testOpenContainerReturnsTrue() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, OPEN);
+ ecReplicationConfig, 1, OPEN);
Set<ContainerReplica> containerReplicas = ReplicationTestUtil
.createReplicas(containerInfo.containerID(),
ContainerReplicaProto.State.OPEN, 1, 2, 3, 4, 5);
@@ -92,7 +97,7 @@ public class TestOpenContainerHandler {
@Test
public void testOpenUnhealthyContainerIsClosed() {
ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
- replicationConfig, 1, OPEN);
+ ecReplicationConfig, 1, OPEN);
Set<ContainerReplica> containerReplicas = ReplicationTestUtil
.createReplicas(containerInfo.containerID(),
ContainerReplicaProto.State.CLOSED, 1, 2, 3, 4);
@@ -107,4 +112,57 @@ public class TestOpenContainerHandler {
.sendCloseContainerEvent(containerInfo.containerID());
}
+ @Test
+ public void testClosedRatisContainerReturnsFalse() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, CLOSED);
+ Set<ContainerReplica> containerReplicas = ReplicationTestUtil
+ .createReplicas(containerInfo.containerID(),
+ ContainerReplicaProto.State.CLOSED, 1, 2, 3);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ Assertions.assertFalse(openContainerHandler.handle(request));
+ Mockito.verify(replicationManager, times(0))
+ .sendCloseContainerEvent(Mockito.any());
+ }
+
+ @Test
+ public void testOpenRatisContainerReturnsTrue() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, OPEN);
+ Set<ContainerReplica> containerReplicas = ReplicationTestUtil
+ .createReplicas(containerInfo.containerID(),
+ ContainerReplicaProto.State.OPEN, 1, 2, 3);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ Assertions.assertTrue(openContainerHandler.handle(request));
+ Mockito.verify(replicationManager, times(0))
+ .sendCloseContainerEvent(Mockito.any());
+ }
+
+ @Test
+ public void testOpenUnhealthyRatisContainerIsClosed() {
+ ContainerInfo containerInfo = ReplicationTestUtil.createContainerInfo(
+ ratisReplicationConfig, 1, OPEN);
+ Set<ContainerReplica> containerReplicas = ReplicationTestUtil
+ .createReplicas(containerInfo.containerID(),
+ ContainerReplicaProto.State.CLOSED, 1, 2, 3);
+ ContainerCheckRequest request = new ContainerCheckRequest.Builder()
+ .setPendingOps(Collections.EMPTY_LIST)
+ .setReport(new ReplicationManagerReport())
+ .setContainerInfo(containerInfo)
+ .setContainerReplicas(containerReplicas)
+ .build();
+ Assertions.assertTrue(openContainerHandler.handle(request));
+ Mockito.verify(replicationManager, times(1))
+ .sendCloseContainerEvent(Mockito.any());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org