|
@@ -36,16 +36,13 @@ import org.apache.hadoop.hdds.protocol.proto
|
|
import org.apache.hadoop.hdds.protocol.proto
|
|
import org.apache.hadoop.hdds.protocol.proto
|
|
.StorageContainerDatanodeProtocolProtos.StorageReportProto;
|
|
.StorageContainerDatanodeProtocolProtos.StorageReportProto;
|
|
import org.apache.hadoop.hdds.scm.HddsTestUtils;
|
|
import org.apache.hadoop.hdds.scm.HddsTestUtils;
|
|
-import org.apache.hadoop.hdds.scm.ScmConfigKeys;
|
|
|
|
import org.apache.hadoop.hdds.scm.TestUtils;
|
|
import org.apache.hadoop.hdds.scm.TestUtils;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerID;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerID;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerManager;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerManager;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerNotFoundException;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerNotFoundException;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerReplica;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerReplica;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
|
|
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
|
|
-import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeMetric;
|
|
|
|
import org.apache.hadoop.hdds.scm.events.SCMEvents;
|
|
import org.apache.hadoop.hdds.scm.events.SCMEvents;
|
|
-import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeStat;
|
|
|
|
import org.apache.hadoop.hdds.scm.node.states.NodeNotFoundException;
|
|
import org.apache.hadoop.hdds.scm.node.states.NodeNotFoundException;
|
|
import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher
|
|
import org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher
|
|
.NodeReportFromDatanode;
|
|
.NodeReportFromDatanode;
|
|
@@ -53,12 +50,12 @@ import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
|
|
import org.apache.hadoop.hdds.server.events.EventPublisher;
|
|
import org.apache.hadoop.hdds.server.events.EventPublisher;
|
|
|
|
|
|
import org.apache.hadoop.hdds.server.events.EventQueue;
|
|
import org.apache.hadoop.hdds.server.events.EventQueue;
|
|
-import org.apache.hadoop.security.authentication.client.AuthenticationException;
|
|
|
|
|
|
+import org.apache.hadoop.security.authentication.client
|
|
|
|
+ .AuthenticationException;
|
|
import org.apache.hadoop.test.GenericTestUtils;
|
|
import org.apache.hadoop.test.GenericTestUtils;
|
|
import org.junit.After;
|
|
import org.junit.After;
|
|
import org.junit.Assert;
|
|
import org.junit.Assert;
|
|
import org.junit.Before;
|
|
import org.junit.Before;
|
|
-import org.junit.Ignore;
|
|
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
import org.mockito.Mockito;
|
|
import org.mockito.Mockito;
|
|
import org.slf4j.event.Level;
|
|
import org.slf4j.event.Level;
|
|
@@ -83,10 +80,6 @@ public class TestDeadNodeHandler {
|
|
storageDir = GenericTestUtils.getTempPath(
|
|
storageDir = GenericTestUtils.getTempPath(
|
|
TestDeadNodeHandler.class.getSimpleName() + UUID.randomUUID());
|
|
TestDeadNodeHandler.class.getSimpleName() + UUID.randomUUID());
|
|
conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, storageDir);
|
|
conf.set(HddsConfigKeys.OZONE_METADATA_DIRS, storageDir);
|
|
- conf.set(HddsConfigKeys.HDDS_HEARTBEAT_INTERVAL, "100ms");
|
|
|
|
- conf.set(ScmConfigKeys.OZONE_SCM_HEARTBEAT_PROCESS_INTERVAL, "50ms");
|
|
|
|
- conf.set(ScmConfigKeys.OZONE_SCM_STALENODE_INTERVAL, "1s");
|
|
|
|
- conf.set(ScmConfigKeys.OZONE_SCM_DEADNODE_INTERVAL, "2s");
|
|
|
|
eventQueue = new EventQueue();
|
|
eventQueue = new EventQueue();
|
|
scm = HddsTestUtils.getScm(conf);
|
|
scm = HddsTestUtils.getScm(conf);
|
|
nodeManager = (SCMNodeManager) scm.getScmNodeManager();
|
|
nodeManager = (SCMNodeManager) scm.getScmNodeManager();
|
|
@@ -105,7 +98,6 @@ public class TestDeadNodeHandler {
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
- @Ignore("TODO:HDDS-1155")
|
|
|
|
public void testOnMessage() throws IOException, NodeNotFoundException {
|
|
public void testOnMessage() throws IOException, NodeNotFoundException {
|
|
//GIVEN
|
|
//GIVEN
|
|
DatanodeDetails datanode1 = TestUtils.randomDatanodeDetails();
|
|
DatanodeDetails datanode1 = TestUtils.randomDatanodeDetails();
|
|
@@ -209,60 +201,6 @@ public class TestDeadNodeHandler {
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
- public void testStatisticsUpdate() throws Exception {
|
|
|
|
- //GIVEN
|
|
|
|
- DatanodeDetails datanode1 = TestUtils.randomDatanodeDetails();
|
|
|
|
- DatanodeDetails datanode2 = TestUtils.randomDatanodeDetails();
|
|
|
|
-
|
|
|
|
- String storagePath1 = GenericTestUtils.getRandomizedTempPath()
|
|
|
|
- .concat("/" + datanode1.getUuidString());
|
|
|
|
- String storagePath2 = GenericTestUtils.getRandomizedTempPath()
|
|
|
|
- .concat("/" + datanode2.getUuidString());
|
|
|
|
-
|
|
|
|
- StorageReportProto storageOne = TestUtils.createStorageReport(
|
|
|
|
- datanode1.getUuid(), storagePath1, 100, 10, 90, null);
|
|
|
|
- StorageReportProto storageTwo = TestUtils.createStorageReport(
|
|
|
|
- datanode2.getUuid(), storagePath2, 200, 20, 180, null);
|
|
|
|
-
|
|
|
|
- nodeManager.register(datanode1,
|
|
|
|
- TestUtils.createNodeReport(storageOne), null);
|
|
|
|
- nodeManager.register(datanode2,
|
|
|
|
- TestUtils.createNodeReport(storageTwo), null);
|
|
|
|
-
|
|
|
|
- nodeReportHandler.onMessage(getNodeReport(datanode1, storageOne),
|
|
|
|
- Mockito.mock(EventPublisher.class));
|
|
|
|
- nodeReportHandler.onMessage(getNodeReport(datanode2, storageTwo),
|
|
|
|
- Mockito.mock(EventPublisher.class));
|
|
|
|
-
|
|
|
|
- SCMNodeStat stat = nodeManager.getStats();
|
|
|
|
- Assert.assertTrue(stat.getCapacity().get() == 300);
|
|
|
|
- Assert.assertTrue(stat.getRemaining().get() == 270);
|
|
|
|
- Assert.assertTrue(stat.getScmUsed().get() == 30);
|
|
|
|
-
|
|
|
|
- SCMNodeMetric nodeStat = nodeManager.getNodeStat(datanode1);
|
|
|
|
- Assert.assertTrue(nodeStat.get().getCapacity().get() == 100);
|
|
|
|
- Assert.assertTrue(nodeStat.get().getRemaining().get() == 90);
|
|
|
|
- Assert.assertTrue(nodeStat.get().getScmUsed().get() == 10);
|
|
|
|
-
|
|
|
|
- //TODO: Support logic to mark a node as dead in NodeManager.
|
|
|
|
-
|
|
|
|
- nodeManager.processHeartbeat(datanode2);
|
|
|
|
- Thread.sleep(1000);
|
|
|
|
- nodeManager.processHeartbeat(datanode2);
|
|
|
|
- Thread.sleep(1000);
|
|
|
|
- nodeManager.processHeartbeat(datanode2);
|
|
|
|
- Thread.sleep(1000);
|
|
|
|
- nodeManager.processHeartbeat(datanode2);
|
|
|
|
- //THEN statistics in SCM should changed.
|
|
|
|
- stat = nodeManager.getStats();
|
|
|
|
- Assert.assertEquals(200L, stat.getCapacity().get().longValue());
|
|
|
|
- Assert.assertEquals(180L,
|
|
|
|
- stat.getRemaining().get().longValue());
|
|
|
|
- Assert.assertEquals(20L, stat.getScmUsed().get().longValue());
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Test
|
|
|
|
- @Ignore("TODO:HDDS-1155")
|
|
|
|
public void testOnMessageReplicaFailure() throws Exception {
|
|
public void testOnMessageReplicaFailure() throws Exception {
|
|
|
|
|
|
DatanodeDetails datanode1 = TestUtils.randomDatanodeDetails();
|
|
DatanodeDetails datanode1 = TestUtils.randomDatanodeDetails();
|