|
@@ -19,6 +19,7 @@ package org.apache.hadoop.hdfs.server.blockmanagement;
|
|
|
|
|
|
import static org.junit.Assert.assertFalse;
|
|
import static org.junit.Assert.assertFalse;
|
|
import static org.junit.Assert.assertTrue;
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
+import static org.junit.Assert.assertEquals;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.when;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
|
|
@@ -49,11 +50,13 @@ public class TestBlockPlacementStatusWithUpgradeDomain {
|
|
@Test
|
|
@Test
|
|
public void testIsPolicySatisfiedParentFalse() {
|
|
public void testIsPolicySatisfiedParentFalse() {
|
|
when(bpsd.isPlacementPolicySatisfied()).thenReturn(false);
|
|
when(bpsd.isPlacementPolicySatisfied()).thenReturn(false);
|
|
|
|
+ when(bpsd.getAdditionalReplicasRequired()).thenReturn(1);
|
|
BlockPlacementStatusWithUpgradeDomain bps =
|
|
BlockPlacementStatusWithUpgradeDomain bps =
|
|
new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 3, 3);
|
|
new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 3, 3);
|
|
|
|
|
|
// Parent policy is not satisfied but upgrade domain policy is
|
|
// Parent policy is not satisfied but upgrade domain policy is
|
|
assertFalse(bps.isPlacementPolicySatisfied());
|
|
assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(1, bps.getAdditionalReplicasRequired());
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -63,21 +66,73 @@ public class TestBlockPlacementStatusWithUpgradeDomain {
|
|
// Number of domains, replicas and upgradeDomainFactor is equal and parent
|
|
// Number of domains, replicas and upgradeDomainFactor is equal and parent
|
|
// policy is satisfied
|
|
// policy is satisfied
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(0, bps.getAdditionalReplicasRequired());
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
- public void testIsPolicySatisifedSmallDomains() {
|
|
|
|
|
|
+ public void testIsPolicySatisfiedSmallDomains() {
|
|
// Number of domains is less than replicas but equal to factor
|
|
// Number of domains is less than replicas but equal to factor
|
|
BlockPlacementStatusWithUpgradeDomain bps =
|
|
BlockPlacementStatusWithUpgradeDomain bps =
|
|
new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 3);
|
|
new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 3);
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(0, bps.getAdditionalReplicasRequired());
|
|
|
|
|
|
// Same as above but replicas is greater than factor
|
|
// Same as above but replicas is greater than factor
|
|
bps = new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 2);
|
|
bps = new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 2);
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
assertTrue(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(0, bps.getAdditionalReplicasRequired());
|
|
|
|
|
|
// Number of domains is less than replicas and factor
|
|
// Number of domains is less than replicas and factor
|
|
bps = new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 4);
|
|
bps = new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 4, 4);
|
|
assertFalse(bps.isPlacementPolicySatisfied());
|
|
assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(1, bps.getAdditionalReplicasRequired());
|
|
}
|
|
}
|
|
-}
|
|
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testIsPolicySatisfiedSmallReplicas() {
|
|
|
|
+ // Replication factor 1 file
|
|
|
|
+ upgradeDomains.clear();
|
|
|
|
+ upgradeDomains.add("1");
|
|
|
|
+ BlockPlacementStatusWithUpgradeDomain bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 1, 3);
|
|
|
|
+ assertTrue(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(0, bps.getAdditionalReplicasRequired());
|
|
|
|
+
|
|
|
|
+ // Replication factor 2 file, but one domain
|
|
|
|
+ bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 2, 3);
|
|
|
|
+ assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(1, bps.getAdditionalReplicasRequired());
|
|
|
|
+
|
|
|
|
+ // Replication factor 2 file, but two domains
|
|
|
|
+ upgradeDomains.add("2");
|
|
|
|
+ bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 2, 3);
|
|
|
|
+ assertTrue(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(0, bps.getAdditionalReplicasRequired());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testPolicyIsNotSatisfiedInsufficientDomains() {
|
|
|
|
+ // Insufficient Domains - 1 domain, replication factor 3
|
|
|
|
+ upgradeDomains.clear();
|
|
|
|
+ upgradeDomains.add("1");
|
|
|
|
+ BlockPlacementStatusWithUpgradeDomain bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 3, 3);
|
|
|
|
+ assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(2, bps.getAdditionalReplicasRequired());
|
|
|
|
+
|
|
|
|
+ // One domain, replication factor 2 file
|
|
|
|
+ bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 2, 3);
|
|
|
|
+ assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(1, bps.getAdditionalReplicasRequired());
|
|
|
|
+
|
|
|
|
+ // 2 domains, replication factor 3
|
|
|
|
+ upgradeDomains.add("2");
|
|
|
|
+ bps =
|
|
|
|
+ new BlockPlacementStatusWithUpgradeDomain(bpsd, upgradeDomains, 3, 3);
|
|
|
|
+ assertFalse(bps.isPlacementPolicySatisfied());
|
|
|
|
+ assertEquals(1, bps.getAdditionalReplicasRequired());
|
|
|
|
+ }
|
|
|
|
+}
|