diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/states/TestECContainerReplicaCount.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/states/TestECContainerReplicaCount.java index f123d192f7e5..94c1dd5e4b60 100644 --- a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/states/TestECContainerReplicaCount.java +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/states/TestECContainerReplicaCount.java @@ -21,23 +21,20 @@ import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.hdds.client.ECReplicationConfig; -import org.apache.hadoop.hdds.conf.OzoneConfiguration; import org.apache.hadoop.hdds.protocol.MockDatanodeDetails; import org.apache.hadoop.hdds.protocol.proto.HddsProtos; import org.apache.hadoop.hdds.scm.container.ContainerInfo; import org.apache.hadoop.hdds.scm.container.ContainerReplica; import org.apache.hadoop.hdds.scm.container.ECContainerReplicaCount; import org.apache.hadoop.hdds.scm.container.replication.ContainerReplicaOp; -import org.apache.hadoop.hdds.scm.container.replication.ContainerReplicaPendingOps; import org.apache.hadoop.hdds.scm.container.replication.ReplicationTestUtil; -import org.apache.hadoop.ozone.common.MonotonicClock; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.time.ZoneOffset; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -55,9 +52,6 @@ public class TestECContainerReplicaCount { private ECReplicationConfig repConfig; private ContainerInfo container; - private ContainerReplicaPendingOps emptyPendingOps = - new ContainerReplicaPendingOps(new OzoneConfiguration(), - new MonotonicClock(ZoneOffset.UTC)); @BeforeEach public void setup() { @@ -74,7 +68,7 @@ public void testPerfectlyReplicatedContainer() { Pair.of(IN_SERVICE, 5)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertTrue(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.unRecoverable()); } @@ -86,7 +80,7 @@ public void testContainerMissingReplica() { Pair.of(IN_SERVICE, 3), Pair.of(IN_SERVICE, 4)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); Assertions.assertEquals(1, rcnt.unavailableIndexes(true).size()); Assertions.assertEquals(5, @@ -152,18 +146,14 @@ public void testContainerWithMaintenanceReplicasSufficientlyReplicated() { Pair.of(IN_MAINTENANCE, 5)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 0); + Collections.emptyList(), 0); Assertions.assertTrue(rcnt.isSufficientlyReplicated(false)); rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); - ContainerReplicaPendingOps pendingOps = - new ContainerReplicaPendingOps(new OzoneConfiguration(), - new MonotonicClock(ZoneOffset.UTC)); - pendingOps.scheduleDeleteReplica(container.containerID(), - MockDatanodeDetails.randomDatanodeDetails(), 1); - rcnt = new ECContainerReplicaCount(container, replica, - pendingOps.getPendingOps(container.containerID()), 0); + List pendingOps = + getContainerReplicaOps(ImmutableList.of(), ImmutableList.of(1)); + rcnt = new ECContainerReplicaCount(container, replica, pendingOps, 0); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); } @@ -239,7 +229,7 @@ public void testAdditionalMaintenanceCopiesAllMaintenance() { Pair.of(IN_MAINTENANCE, 1)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(4, rcnt.additionalMaintenanceCopiesNeeded()); @@ -256,7 +246,7 @@ public void testAdditionalMaintenanceCopiesAlreadyReplicated() { Pair.of(IN_MAINTENANCE, 5), Pair.of(IN_MAINTENANCE, 1)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertTrue(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(0, rcnt.additionalMaintenanceCopiesNeeded()); @@ -267,7 +257,7 @@ public void testAdditionalMaintenanceCopiesAlreadyReplicated() { // Repeat the test with redundancy of 2. Once the maintenance copies go // offline, we should be able to lost 2 more containers. rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 2); + Collections.emptyList(), 2); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(1, rcnt.additionalMaintenanceCopiesNeeded()); @@ -308,7 +298,7 @@ public void testAdditionalMaintenanceCopiesDuplicatesInMaintenance() { Pair.of(IN_MAINTENANCE, 1), Pair.of(IN_MAINTENANCE, 5)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertTrue(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(0, rcnt.additionalMaintenanceCopiesNeeded()); @@ -319,7 +309,7 @@ public void testAdditionalMaintenanceCopiesDuplicatesInMaintenance() { // Repeat the test with redundancy of 2. Once the maintenance copies go // offline, we should be able to lost 2 more containers. rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 2); + Collections.emptyList(), 2); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(1, rcnt.additionalMaintenanceCopiesNeeded()); @@ -337,7 +327,7 @@ public void testMaintenanceRedundancyGreaterThanParity() { Pair.of(IN_MAINTENANCE, 5)); ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 5); + Collections.emptyList(), 5); // EC Parity is 2, which is max redundancy, but we have a // maintenanceRedundancy of 5, which is not possible. Only 2 more copies // should be needed. @@ -349,7 +339,7 @@ public void testMaintenanceRedundancyGreaterThanParity() { Pair.of(IN_MAINTENANCE, 5), Pair.of(IN_SERVICE, 4), Pair.of(IN_SERVICE, 5)); rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 5); + Collections.emptyList(), 5); Assertions.assertEquals(0, rcnt.additionalMaintenanceCopiesNeeded()); } @@ -362,7 +352,7 @@ public void testUnderReplicatedNoMaintenance() { ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertFalse(rcnt.isSufficientlyReplicated(false)); Assertions.assertFalse(rcnt.isOverReplicated(true)); Assertions.assertEquals(0, rcnt.additionalMaintenanceCopiesNeeded()); @@ -476,14 +466,14 @@ private List getContainerReplicaOps( public void testMissing() { ECContainerReplicaCount rcnt = new ECContainerReplicaCount(container, new HashSet<>(), - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertTrue(rcnt.unRecoverable()); Assertions.assertEquals(5, rcnt.unavailableIndexes(true).size()); Set replica = ReplicationTestUtil .createReplicas(Pair.of(IN_SERVICE, 1), Pair.of(IN_MAINTENANCE, 2)); rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); Assertions.assertTrue(rcnt.unRecoverable()); Assertions.assertEquals(3, rcnt.unavailableIndexes(true).size()); Assertions.assertEquals(0, rcnt.additionalMaintenanceCopiesNeeded()); @@ -493,7 +483,7 @@ public void testMissing() { Pair.of(DECOMMISSIONED, 3), Pair.of(DECOMMISSIONED, 4), Pair.of(DECOMMISSIONED, 5)); rcnt = new ECContainerReplicaCount(container, replica, - emptyPendingOps.getPendingOps(container.containerID()), 1); + Collections.emptyList(), 1); // Not missing as the decommission replicas are still online Assertions.assertFalse(rcnt.unRecoverable()); Assertions.assertEquals(0, rcnt.unavailableIndexes(true).size());