You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by we...@apache.org on 2023/07/18 13:17:23 UTC

[dolphinscheduler] branch dev updated: Add log for NetUtils (#14578)

This is an automated email from the ASF dual-hosted git repository.

wenjun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new 399d0d0ce9 Add log for NetUtils (#14578)
399d0d0ce9 is described below

commit 399d0d0ce9be29724988dcbd9a7dc5fbfab44de0
Author: Wenjun Ruan <we...@apache.org>
AuthorDate: Tue Jul 18 21:17:17 2023 +0800

    Add log for NetUtils (#14578)
---
 .../dolphinscheduler/alert/config/AlertConfig.java |   7 +-
 .../dolphinscheduler/common/utils/NetUtils.java    | 101 ++++++++++++---------
 .../server/master/config/MasterConfig.java         |   6 +-
 .../server/worker/config/WorkerConfig.java         |   6 +-
 4 files changed, 74 insertions(+), 46 deletions(-)

diff --git a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/config/AlertConfig.java b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/config/AlertConfig.java
index 0b1f5ee6e8..b39b7ea31a 100644
--- a/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/config/AlertConfig.java
+++ b/dolphinscheduler-alert/dolphinscheduler-alert-server/src/main/java/org/apache/dolphinscheduler/alert/config/AlertConfig.java
@@ -19,6 +19,8 @@ package org.apache.dolphinscheduler.alert.config;
 
 import org.apache.dolphinscheduler.common.utils.NetUtils;
 
+import org.apache.commons.lang3.StringUtils;
+
 import java.time.Duration;
 
 import lombok.Data;
@@ -56,7 +58,10 @@ public final class AlertConfig implements Validator {
             errors.rejectValue("heartbeat-interval", null, "should be a valid duration");
         }
 
-        alertConfig.setAlertServerAddress(NetUtils.getAddr(port));
+        if (StringUtils.isEmpty(alertServerAddress)) {
+            alertConfig.setAlertServerAddress(NetUtils.getAddr(alertConfig.getPort()));
+        }
+
         printConfig();
     }
 
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 9445e71d89..da265219d8 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
@@ -121,9 +121,9 @@ public class NetUtils {
 
         InetAddress localAddress = null;
         try {
-            NetworkInterface networkInterface = findNetworkInterface();
-            if (networkInterface != null) {
-                Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
+            Optional<NetworkInterface> networkInterface = findNetworkInterface();
+            if (networkInterface.isPresent()) {
+                Enumeration<InetAddress> addresses = networkInterface.get().getInetAddresses();
                 while (addresses.hasMoreElements()) {
                     Optional<InetAddress> addressOp = toValidAddress(addresses.nextElement());
                     if (addressOp.isPresent()) {
@@ -137,8 +137,8 @@ public class NetUtils {
                         }
                     }
                 }
-            }
 
+            }
             localAddress = InetAddress.getLocalHost();
         } catch (UnknownHostException e) {
             log.warn("InetAddress get LocalHost exception", e);
@@ -154,12 +154,15 @@ public class NetUtils {
         if (address instanceof Inet6Address) {
             Inet6Address v6Address = (Inet6Address) address;
             if (isPreferIPV6Address()) {
-                return Optional.ofNullable(normalizeV6Address(v6Address));
+                InetAddress inetAddress = normalizeV6Address(v6Address);
+                log.debug("The host prefer ipv6 address, will use ipv6 address: {} directly", inetAddress);
+                return Optional.ofNullable(inetAddress);
             }
         }
         if (isValidV4Address(address)) {
             return Optional.of(address);
         }
+        log.warn("The address of the host is invalid, address: {}", address);
         return Optional.empty();
     }
 
@@ -202,7 +205,7 @@ public class NetUtils {
      *
      * @return If no {@link NetworkInterface} is available , return <code>null</code>
      */
-    private static NetworkInterface findNetworkInterface() {
+    private static Optional<NetworkInterface> findNetworkInterface() {
 
         List<NetworkInterface> validNetworkInterfaces = emptyList();
 
@@ -211,19 +214,19 @@ public class NetUtils {
         } catch (SocketException e) {
             log.warn("ValidNetworkInterfaces exception", e);
         }
+        if (CollectionUtils.isEmpty(validNetworkInterfaces)) {
+            log.warn("ValidNetworkInterfaces is empty");
+            return Optional.empty();
+        }
 
-        NetworkInterface result = null;
         // Try to specify config NetWork Interface
-        for (NetworkInterface networkInterface : validNetworkInterfaces) {
-            if (isSpecifyNetworkInterface(networkInterface)) {
-                result = networkInterface;
-                break;
-            }
+        Optional<NetworkInterface> specifyNetworkInterface =
+                validNetworkInterfaces.stream().filter(NetUtils::isSpecifyNetworkInterface).findFirst();
+        if (specifyNetworkInterface.isPresent()) {
+            log.info("Use specified NetworkInterface: {}", specifyNetworkInterface.get());
+            return specifyNetworkInterface;
         }
 
-        if (null != result) {
-            return result;
-        }
         return findAddress(validNetworkInterfaces);
     }
 
@@ -239,8 +242,10 @@ public class NetUtils {
             NetworkInterface networkInterface = interfaces.nextElement();
             // ignore
             if (ignoreNetworkInterface(networkInterface)) {
+                log.debug("Info NetworkInterface: {}", networkInterface);
                 continue;
             }
+            log.info("Found valid NetworkInterface: {}", networkInterface);
             validNetworkInterfaces.add(networkInterface);
         }
         return validNetworkInterfaces;
@@ -265,34 +270,40 @@ public class NetUtils {
         return Objects.equals(networkInterface.getDisplayName(), preferredNetworkInterface);
     }
 
-    private static NetworkInterface findAddress(List<NetworkInterface> validNetworkInterfaces) {
+    private static Optional<NetworkInterface> findAddress(List<NetworkInterface> validNetworkInterfaces) {
         if (CollectionUtils.isEmpty(validNetworkInterfaces)) {
-            return null;
+            return Optional.empty();
         }
         String networkPriority = PropertyUtils.getString(Constants.DOLPHIN_SCHEDULER_NETWORK_PRIORITY_STRATEGY,
                 NETWORK_PRIORITY_DEFAULT);
-        if (NETWORK_PRIORITY_DEFAULT.equalsIgnoreCase(networkPriority)) {
-            return findAddressByDefaultPolicy(validNetworkInterfaces);
-        } else if (NETWORK_PRIORITY_INNER.equalsIgnoreCase(networkPriority)) {
-            return findInnerAddress(validNetworkInterfaces);
-        } else if (NETWORK_PRIORITY_OUTER.equalsIgnoreCase(networkPriority)) {
-            return findOuterAddress(validNetworkInterfaces);
-        } else {
-            log.error("There is no matching network card acquisition policy!");
-            return null;
+        switch (networkPriority) {
+            case NETWORK_PRIORITY_DEFAULT:
+                log.debug("Use default NetworkInterface acquisition policy");
+                return findAddressByDefaultPolicy(validNetworkInterfaces);
+            case NETWORK_PRIORITY_INNER:
+                log.debug("Use inner NetworkInterface acquisition policy");
+                return findInnerAddress(validNetworkInterfaces);
+            case NETWORK_PRIORITY_OUTER:
+                log.debug("Use outer NetworkInterface acquisition policy");
+                return findOuterAddress(validNetworkInterfaces);
+            default:
+                log.error("There is no matching network card acquisition policy!");
+                return Optional.empty();
         }
     }
 
-    private static NetworkInterface findAddressByDefaultPolicy(List<NetworkInterface> validNetworkInterfaces) {
-        NetworkInterface networkInterface;
-        networkInterface = findInnerAddress(validNetworkInterfaces);
-        if (networkInterface == null) {
-            networkInterface = findOuterAddress(validNetworkInterfaces);
-            if (networkInterface == null) {
-                networkInterface = validNetworkInterfaces.get(0);
-            }
+    private static Optional<NetworkInterface> findAddressByDefaultPolicy(List<NetworkInterface> validNetworkInterfaces) {
+        Optional<NetworkInterface> innerAddress = findInnerAddress(validNetworkInterfaces);
+        if (innerAddress.isPresent()) {
+            log.debug("Found inner NetworkInterface: {}", innerAddress.get());
+            return innerAddress;
+        }
+        Optional<NetworkInterface> outerAddress = findOuterAddress(validNetworkInterfaces);
+        if (outerAddress.isPresent()) {
+            log.debug("Found outer NetworkInterface: {}", outerAddress.get());
+            return outerAddress;
         }
-        return networkInterface;
+        return Optional.empty();
     }
 
     /**
@@ -300,35 +311,39 @@ public class NetUtils {
      *
      * @return If no {@link NetworkInterface} is available , return <code>null</code>
      */
-    private static NetworkInterface findInnerAddress(List<NetworkInterface> validNetworkInterfaces) {
+    private static Optional<NetworkInterface> findInnerAddress(List<NetworkInterface> validNetworkInterfaces) {
+        if (CollectionUtils.isEmpty(validNetworkInterfaces)) {
+            return Optional.empty();
+        }
 
-        NetworkInterface networkInterface = null;
         for (NetworkInterface ni : validNetworkInterfaces) {
             Enumeration<InetAddress> address = ni.getInetAddresses();
             while (address.hasMoreElements()) {
                 InetAddress ip = address.nextElement();
                 if (ip.isSiteLocalAddress()
                         && !ip.isLoopbackAddress()) {
-                    networkInterface = ni;
+                    return Optional.of(ni);
                 }
             }
         }
-        return networkInterface;
+        return Optional.empty();
     }
 
-    private static NetworkInterface findOuterAddress(List<NetworkInterface> validNetworkInterfaces) {
-        NetworkInterface networkInterface = null;
+    private static Optional<NetworkInterface> findOuterAddress(List<NetworkInterface> validNetworkInterfaces) {
+        if (CollectionUtils.isEmpty(validNetworkInterfaces)) {
+            return Optional.empty();
+        }
         for (NetworkInterface ni : validNetworkInterfaces) {
             Enumeration<InetAddress> address = ni.getInetAddresses();
             while (address.hasMoreElements()) {
                 InetAddress ip = address.nextElement();
                 if (!ip.isSiteLocalAddress()
                         && !ip.isLoopbackAddress()) {
-                    networkInterface = ni;
+                    return Optional.of(ni);
                 }
             }
         }
-        return networkInterface;
+        return Optional.empty();
     }
 
 }
diff --git a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
index 05a79d1170..366de70323 100644
--- a/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
+++ b/dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/config/MasterConfig.java
@@ -26,6 +26,8 @@ import org.apache.dolphinscheduler.server.master.dispatch.host.assign.HostSelect
 import org.apache.dolphinscheduler.server.master.processor.queue.TaskExecuteRunnable;
 import org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable;
 
+import org.apache.commons.lang3.StringUtils;
+
 import java.time.Duration;
 
 import lombok.Data;
@@ -157,8 +159,10 @@ public class MasterConfig implements Validator {
         if (masterConfig.getWorkerGroupRefreshInterval().getSeconds() < 10) {
             errors.rejectValue("worker-group-refresh-interval", null, "should >= 10s");
         }
+        if (StringUtils.isEmpty(masterConfig.getMasterAddress())) {
+            masterConfig.setMasterAddress(NetUtils.getAddr(masterConfig.getListenPort()));
+        }
 
-        masterConfig.setMasterAddress(NetUtils.getAddr(masterConfig.getListenPort()));
         masterConfig.setMasterRegistryPath(
                 RegistryNodeType.MASTER.getRegistryPath() + "/" + masterConfig.getMasterAddress());
         printConfig();
diff --git a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
index ae1ce70163..981a15ecb5 100644
--- a/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
+++ b/dolphinscheduler-worker/src/main/java/org/apache/dolphinscheduler/server/worker/config/WorkerConfig.java
@@ -24,6 +24,8 @@ import org.apache.dolphinscheduler.registry.api.ConnectStrategyProperties;
 import org.apache.dolphinscheduler.remote.config.NettyClientConfig;
 import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
 
+import org.apache.commons.lang3.StringUtils;
+
 import java.time.Duration;
 
 import lombok.Data;
@@ -80,7 +82,9 @@ public class WorkerConfig implements Validator {
         if (workerConfig.getMaxCpuLoadAvg() <= 0) {
             workerConfig.setMaxCpuLoadAvg(Runtime.getRuntime().availableProcessors() * 2);
         }
-        workerConfig.setWorkerAddress(NetUtils.getAddr(workerConfig.getListenPort()));
+        if (StringUtils.isEmpty(workerConfig.getWorkerAddress())) {
+            workerConfig.setWorkerAddress(NetUtils.getAddr(workerConfig.getListenPort()));
+        }
 
         workerConfig.setWorkerRegistryPath(REGISTRY_DOLPHINSCHEDULER_WORKERS + "/" + workerConfig.getWorkerAddress());
         printConfig();