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 9fbf5a0416 HDDS-3415. Enable 
TestContainerPlacement#testContainerPlacementCapacity. (#5832)
9fbf5a0416 is described below

commit 9fbf5a0416a0954e0301b8904863541238b6bb94
Author: Devesh Kumar Singh <[email protected]>
AuthorDate: Fri Jan 12 01:28:15 2024 +0530

    HDDS-3415. Enable TestContainerPlacement#testContainerPlacementCapacity. 
(#5832)
---
 .../hdds/scm/node/TestContainerPlacement.java      | 64 ++++++++++++++++++++--
 1 file changed, 59 insertions(+), 5 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
index bedc240e94..8dd6914e64 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestContainerPlacement.java
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.time.Clock;
 import java.time.ZoneId;
+import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.TimeoutException;
@@ -33,8 +34,8 @@ import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
-import org.apache.hadoop.hdds.protocol.proto
-    .StorageContainerDatanodeProtocolProtos.LayoutVersionProto;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos;
+import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.LayoutVersionProto;
 import org.apache.hadoop.hdds.scm.PlacementPolicy;
 import org.apache.hadoop.hdds.scm.ScmConfigKeys;
 import org.apache.hadoop.hdds.scm.HddsTestUtils;
@@ -42,6 +43,7 @@ import org.apache.hadoop.hdds.scm.XceiverClientManager;
 import org.apache.hadoop.hdds.scm.container.ContainerInfo;
 import org.apache.hadoop.hdds.scm.container.ContainerManager;
 import org.apache.hadoop.hdds.scm.container.ContainerManagerImpl;
+import org.apache.hadoop.hdds.scm.container.ContainerReplica;
 import org.apache.hadoop.hdds.scm.container.MockNodeManager;
 import 
org.apache.hadoop.hdds.scm.container.placement.algorithms.SCMContainerPlacementCapacity;
 import 
org.apache.hadoop.hdds.scm.container.replication.ContainerReplicaPendingOps;
@@ -51,6 +53,11 @@ import org.apache.hadoop.hdds.scm.ha.SCMContext;
 import org.apache.hadoop.hdds.scm.ha.SCMHAManager;
 import org.apache.hadoop.hdds.scm.ha.SequenceIdGenerator;
 import org.apache.hadoop.hdds.scm.metadata.SCMDBDefinition;
+import org.apache.hadoop.hdds.scm.net.NetworkTopology;
+import org.apache.hadoop.hdds.scm.net.NetworkTopologyImpl;
+import org.apache.hadoop.hdds.scm.net.NodeSchema;
+import org.apache.hadoop.hdds.scm.net.NodeSchemaManager;
+import org.apache.hadoop.hdds.scm.node.states.NodeNotFoundException;
 import org.apache.hadoop.hdds.scm.pipeline.MockPipelineManager;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineManager;
 import org.apache.hadoop.hdds.scm.server.SCMStorageConfig;
@@ -64,11 +71,14 @@ import org.apache.hadoop.ozone.upgrade.LayoutVersionManager;
 import org.apache.hadoop.test.PathUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.ozone.test.GenericTestUtils;
-import org.apache.ozone.test.tag.Unhealthy;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import static java.util.Collections.emptyList;
+import static org.apache.hadoop.hdds.scm.net.NetConstants.LEAF_SCHEMA;
+import static org.apache.hadoop.hdds.scm.net.NetConstants.RACK_SCHEMA;
+import static org.apache.hadoop.hdds.scm.net.NetConstants.ROOT_SCHEMA;
 import static 
org.apache.hadoop.ozone.container.upgrade.UpgradeUtils.toLayoutVersionProto;
 import static 
org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager.maxLayoutVersion;
 import static org.mockito.Mockito.mock;
@@ -145,8 +155,13 @@ public class TestContainerPlacement {
     HDDSLayoutVersionManager versionManager = 
mock(HDDSLayoutVersionManager.class);
     
when(versionManager.getMetadataLayoutVersion()).thenReturn(maxLayoutVersion());
     
when(versionManager.getSoftwareLayoutVersion()).thenReturn(maxLayoutVersion());
+    NodeSchema[] schemas = new NodeSchema[]
+        {ROOT_SCHEMA, RACK_SCHEMA, LEAF_SCHEMA};
+    NodeSchemaManager.getInstance().init(schemas, true);
+    NetworkTopology networkTopology =
+        new NetworkTopologyImpl(NodeSchemaManager.getInstance());
     SCMNodeManager scmNodeManager = new SCMNodeManager(config, storageConfig,
-        eventQueue, null, SCMContext.emptyContext(), versionManager);
+        eventQueue, networkTopology, SCMContext.emptyContext(), 
versionManager);
     return scmNodeManager;
   }
 
@@ -166,7 +181,6 @@ public class TestContainerPlacement {
    * @throws InterruptedException
    */
   @Test
-  @Unhealthy
   public void testContainerPlacementCapacity() throws IOException,
       InterruptedException, TimeoutException {
     final int nodeCount = 4;
@@ -180,6 +194,7 @@ public class TestContainerPlacement {
         testDir.getAbsolutePath());
     conf.setClass(ScmConfigKeys.OZONE_SCM_CONTAINER_PLACEMENT_IMPL_KEY,
         SCMContainerPlacementCapacity.class, PlacementPolicy.class);
+    conf.setBoolean(ScmConfigKeys.DFS_CONTAINER_RATIS_ENABLED_KEY, true);
 
     SCMNodeManager scmNodeManager = createNodeManager(conf);
     containerManager = createContainerManager();
@@ -193,6 +208,19 @@ public class TestContainerPlacement {
             versionManager.getSoftwareLayoutVersion());
     try {
       for (DatanodeDetails datanodeDetails : datanodes) {
+        UUID dnId = datanodeDetails.getUuid();
+        DatanodeInfo datanodeInfo = scmNodeManager.getNodeStateManager()
+            .getNode(dnId);
+        StorageContainerDatanodeProtocolProtos.StorageReportProto report =
+            HddsTestUtils
+                .createStorageReport(dnId,
+                    testDir.getAbsolutePath() + "/" + dnId, capacity, used,
+                    remaining, null);
+        StorageContainerDatanodeProtocolProtos.NodeReportProto nodeReportProto 
=
+            HddsTestUtils.createNodeReport(
+                Arrays.asList(report), emptyList());
+        datanodeInfo.updateStorageReports(
+            nodeReportProto.getStorageReportList());
         scmNodeManager.processHeartbeat(datanodeDetails, layoutInfo);
       }
 
@@ -214,9 +242,23 @@ public class TestContainerPlacement {
                   SCMTestUtils.getReplicationType(conf),
                   SCMTestUtils.getReplicationFactor(conf)),
               OzoneConsts.OZONE);
+      int replicaCount = 0;
+      for (DatanodeDetails datanodeDetails : datanodes) {
+        if (replicaCount ==
+            SCMTestUtils.getReplicationFactor(conf).getNumber()) {
+          break;
+        }
+        UUID dnId = datanodeDetails.getUuid();
+        DatanodeInfo datanodeInfo = scmNodeManager.getNodeStateManager()
+            .getNode(dnId);
+        addReplica(container, datanodeInfo);
+        replicaCount++;
+      }
       assertEquals(SCMTestUtils.getReplicationFactor(conf).getNumber(),
           containerManager.getContainerReplicas(
               container.containerID()).size());
+    } catch (NodeNotFoundException e) {
+      throw new RuntimeException(e);
     } finally {
       IOUtils.closeQuietly(containerManager);
       IOUtils.closeQuietly(scmNodeManager);
@@ -226,4 +268,16 @@ public class TestContainerPlacement {
       FileUtil.fullyDelete(testDir);
     }
   }
+
+  private void addReplica(ContainerInfo cont, DatanodeDetails node) {
+    ContainerReplica replica = ContainerReplica.newBuilder()
+        .setContainerID(cont.containerID())
+        .setContainerState(
+            StorageContainerDatanodeProtocolProtos.ContainerReplicaProto
+                .State.CLOSED)
+        .setDatanodeDetails(node)
+        .build();
+    containerManager.getContainerStateManager()
+        .updateContainerReplica(cont.containerID(), replica);
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to