From 975177af74e383836bbae78805898e7272b9824f Mon Sep 17 00:00:00 2001 From: f64116045 Date: Fri, 31 Jul 2026 07:14:29 +0800 Subject: [PATCH] HDDS-16018. Use configured DNS-to-switch mapping directly in SCM --- .../scm/server/StorageContainerManager.java | 19 +++---- .../server/TestStorageContainerManager.java | 56 +++++++++++++++++++ 2 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestStorageContainerManager.java 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 100c9feb9b67..1c2066bcc1e2 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 @@ -181,7 +181,6 @@ import org.apache.hadoop.ipc_.RPC; import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.util.MBeans; -import org.apache.hadoop.net.CachedDNSToSwitchMapping; import org.apache.hadoop.net.DNSToSwitchMapping; import org.apache.hadoop.net.NetUtils; import org.apache.hadoop.net.ScriptBasedMapping; @@ -755,15 +754,7 @@ private void initializeSystemManagers(OzoneConfiguration conf, .build(); } - Class dnsToSwitchMappingClass = - conf.getClass( - ScmConfigKeys.NET_TOPOLOGY_NODE_SWITCH_MAPPING_IMPL_KEY, - ScriptBasedMapping.class, DNSToSwitchMapping.class); - DNSToSwitchMapping newInstance = ReflectionUtils.newInstance( - dnsToSwitchMappingClass, conf); - dnsToSwitchMapping = - ((newInstance instanceof CachedDNSToSwitchMapping) ? newInstance - : new CachedDNSToSwitchMapping(newInstance)); + dnsToSwitchMapping = createDNSToSwitchMapping(conf); if (configurator.getScmNodeManager() != null) { scmNodeManager = configurator.getScmNodeManager(); @@ -2375,4 +2366,12 @@ public String resolveNodeLocation(String hostname) { } } + static DNSToSwitchMapping createDNSToSwitchMapping(OzoneConfiguration conf) { + Class mappingClass = + conf.getClass( + ScmConfigKeys.NET_TOPOLOGY_NODE_SWITCH_MAPPING_IMPL_KEY, + ScriptBasedMapping.class, DNSToSwitchMapping.class); + return ReflectionUtils.newInstance(mappingClass, conf); + } + } diff --git a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestStorageContainerManager.java b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestStorageContainerManager.java new file mode 100644 index 000000000000..5953d59c657c --- /dev/null +++ b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/server/TestStorageContainerManager.java @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.hadoop.hdds.scm.server; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; + +import org.apache.hadoop.hdds.conf.OzoneConfiguration; +import org.apache.hadoop.hdds.scm.ScmConfigKeys; +import org.apache.hadoop.net.CachedDNSToSwitchMapping; +import org.apache.hadoop.net.DNSToSwitchMapping; +import org.apache.hadoop.net.ScriptBasedMapping; +import org.apache.hadoop.net.StaticMapping; +import org.junit.jupiter.api.Test; + +class TestStorageContainerManager { + + @Test + void defaultMappingKeepsCachedBehavior() { + DNSToSwitchMapping mapping = + StorageContainerManager.createDNSToSwitchMapping( + new OzoneConfiguration()); + + assertInstanceOf(ScriptBasedMapping.class, mapping); + assertInstanceOf(CachedDNSToSwitchMapping.class, mapping); + } + + @Test + void configuredMappingIsUsedDirectly() { + OzoneConfiguration conf = new OzoneConfiguration(); + conf.setClass(ScmConfigKeys.NET_TOPOLOGY_NODE_SWITCH_MAPPING_IMPL_KEY, + StaticMapping.class, DNSToSwitchMapping.class); + + DNSToSwitchMapping mapping = + StorageContainerManager.createDNSToSwitchMapping(conf); + + assertInstanceOf(StaticMapping.class, mapping); + assertFalse(mapping instanceof CachedDNSToSwitchMapping, + "Configured mapping should not be wrapped in CachedDNSToSwitchMapping"); + } +}