diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java index 2432b7ee93..57491c96b7 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java @@ -978,5 +978,10 @@ public final class Constants { public static final int NORAML_NODE_STATUS = 0; public static final int ABNORMAL_NODE_STATUS = 1; + /** + * net system properties + */ + public static final String DOLPHIN_SCHEDULER_PREFERRED_NETWORK_INTERFACE = "dolphin.scheduler.network.interface.preferred"; + } diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/NetUtils.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/NetUtils.java index 3bc80c7bfc..13a25dc636 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/NetUtils.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/utils/NetUtils.java @@ -21,13 +21,11 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.*; -import java.util.Enumeration; -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.regex.Pattern; import static java.util.Collections.emptyList; +import static org.apache.dolphinscheduler.common.Constants.DOLPHIN_SCHEDULER_PREFERRED_NETWORK_INTERFACE; /** * NetUtils @@ -171,9 +169,19 @@ public class NetUtils { logger.warn("ValidNetworkInterfaces exception", e); } + NetworkInterface result = null; + // Try to specify config NetWork Interface + for (NetworkInterface networkInterface : validNetworkInterfaces) { + if (isSpecifyNetworkInterface(networkInterface)) { + result = networkInterface; + break; + } + } + if (null != result) { + return result; + } return validNetworkInterfaces.get(0); - } /** @@ -206,4 +214,8 @@ public class NetUtils { || !networkInterface.isUp(); } + private static boolean isSpecifyNetworkInterface(NetworkInterface networkInterface) { + String preferredNetworkInterface = System.getProperty(DOLPHIN_SCHEDULER_PREFERRED_NETWORK_INTERFACE); + return Objects.equals(networkInterface.getDisplayName(), preferredNetworkInterface); + } }