diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java index 2ab7295cd8091..179c9f4ae3edc 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/SCMNodeManager.java @@ -23,6 +23,7 @@ import org.apache.hadoop.hdds.protocol.proto .StorageContainerDatanodeProtocolProtos.PipelineReportsProto; import org.apache.hadoop.hdds.scm.container.ContainerID; +import org.apache.hadoop.hdds.scm.net.NetworkTopology; import org.apache.hadoop.hdds.scm.pipeline.Pipeline; import org.apache.hadoop.hdds.scm.pipeline.PipelineID; import org.apache.hadoop.hdds.scm.node.states.NodeAlreadyExistsException; @@ -93,13 +94,14 @@ public class SCMNodeManager implements NodeManager { // Node manager MXBean private ObjectName nmInfoBean; private final StorageContainerManager scmManager; + private final NetworkTopology clusterMap; /** * Constructs SCM machine Manager. */ public SCMNodeManager(OzoneConfiguration conf, String clusterID, - StorageContainerManager scmManager, EventPublisher eventPublisher) - throws IOException { + StorageContainerManager scmManager, EventPublisher eventPublisher, + NetworkTopology clusterMap) throws IOException { this.nodeStateManager = new NodeStateManager(conf, eventPublisher); this.clusterID = clusterID; this.version = VersionInfo.getLatestVersion(); @@ -108,6 +110,7 @@ public SCMNodeManager(OzoneConfiguration conf, String clusterID, LOG.info("Entering startup safe mode."); registerMXBean(); this.metrics = SCMNodeMetrics.create(this); + this.clusterMap = clusterMap; } private void registerMXBean() { @@ -229,6 +232,7 @@ public RegisteredCommand register( } try { nodeStateManager.addNode(datanodeDetails); + clusterMap.add(datanodeDetails); // Updating Node Report, as registration is successful processNodeReport(datanodeDetails, nodeReport); LOG.info("Registered Data node : {}", datanodeDetails); diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java index f13dc4e5b6164..68deb6a7916ea 100644 --- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java +++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java @@ -372,14 +372,15 @@ public StorageContainerManager(OzoneConfiguration conf, private void initializeSystemManagers(OzoneConfiguration conf, SCMConfigurator configurator) throws IOException { + clusterMap = new NetworkTopologyImpl(conf); + if(configurator.getScmNodeManager() != null) { scmNodeManager = configurator.getScmNodeManager(); } else { scmNodeManager = new SCMNodeManager( - conf, scmStorageConfig.getClusterID(), this, eventQueue); + conf, scmStorageConfig.getClusterID(), this, eventQueue, clusterMap); } - clusterMap = new NetworkTopologyImpl(conf); ContainerPlacementPolicy containerPlacementPolicy = ContainerPlacementPolicyFactory.getPolicy(conf, scmNodeManager, clusterMap, true);