You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by st...@apache.org on 2024/01/23 08:59:19 UTC

(phoenix-omid) branch master updated: OMID-249 Improve default network address logic

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

stoty pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix-omid.git


The following commit(s) were added to refs/heads/master by this push:
     new a9c14a37 OMID-249 Improve default network address logic
a9c14a37 is described below

commit a9c14a37427a03dbb04c3292082f8d2c9b25e350
Author: Istvan Toth <st...@apache.org>
AuthorDate: Fri Jan 19 14:33:59 2024 +0100

    OMID-249 Improve default network address logic
---
 .../org/apache/omid/tso/NetworkInterfaceUtils.java | 40 +++++++++++++++++++++-
 .../java/org/apache/omid/tso/TSOServerConfig.java  |  2 +-
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/tso-server/src/main/java/org/apache/omid/tso/NetworkInterfaceUtils.java b/tso-server/src/main/java/org/apache/omid/tso/NetworkInterfaceUtils.java
index ad39bf31..ab932389 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/NetworkInterfaceUtils.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/NetworkInterfaceUtils.java
@@ -17,12 +17,16 @@
  */
 package org.apache.omid.tso;
 
+import org.apache.omid.NetworkUtils;
 import org.apache.phoenix.thirdparty.com.google.common.net.HostAndPort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.inject.Module;
+
 import java.net.InetAddress;
 import java.net.NetworkInterface;
+import java.net.Socket;
 import java.net.SocketException;
 import java.net.UnknownHostException;
 import java.util.Enumeration;
@@ -106,9 +110,24 @@ final public class NetworkInterfaceUtils {
     }
 
     public static String getTSOHostAndPort(TSOServerConfig config) throws SocketException, UnknownHostException {
+        if (config.getNetworkIfaceName() == null) {
+            try {
+                return getTSOHostAndPortRelativeToZK(config);
+            } catch (Exception e) {
+                LOG.info("Could not determine local address relative to ZK server", e);
+                // Fall back to interface guessing
+            }
+        };
+        return getTSOHostAndPortFromInterface(config);
+    }
+
+    public static String getTSOHostAndPortFromInterface(TSOServerConfig config) throws SocketException, UnknownHostException {
 
         // Build TSO host:port string and validate it
-        final String tsoNetIfaceName = config.getNetworkIfaceName();
+        String tsoNetIfaceName = config.getNetworkIfaceName();
+        if (tsoNetIfaceName == null) {
+            tsoNetIfaceName = NetworkUtils.getDefaultNetworkInterface();
+        }
         InetAddress addr = getIPAddressFromNetworkInterface(tsoNetIfaceName);
         final int tsoPort = config.getPort();
 
@@ -120,7 +139,26 @@ final public class NetworkInterfaceUtils {
             throw e;
         }
         return tsoHostAndPortAsString;
+    }
 
+    public static String getTSOHostAndPortRelativeToZK(TSOServerConfig config) throws Exception {
+        Module leaseModule = config.getLeaseModule();
+        String zkQuorum;
+        if (leaseModule instanceof HALeaseManagementModule) {
+            LOG.info("HA is configured. Trying to determine local address facing ZK server");
+            zkQuorum = ((HALeaseManagementModule) leaseModule).getZkCluster();
+            // Zookeeper doesn't expose its socket, so we have to try and parse the quorum.
+            String firstHost = zkQuorum.split(",")[0];
+            LOG.info("ZK quorum is {}, first server is {}", zkQuorum, firstHost);
+            HostAndPort hostAndPort = HostAndPort.fromString(firstHost);
+            Socket socket = new Socket(hostAndPort.getHost(), hostAndPort.getPort());
+            InetAddress addr = socket.getLocalAddress();
+            socket.close();
+            LOG.info("Local address facing ZK server is {}", addr);
+            return HostAndPort.fromParts(addr.getHostAddress(), config.getPort()).toString();
+        } else {
+            throw new Exception("HA is not configured");
+        }
     }
 
 }
diff --git a/tso-server/src/main/java/org/apache/omid/tso/TSOServerConfig.java b/tso-server/src/main/java/org/apache/omid/tso/TSOServerConfig.java
index 53d8c011..b1e7a066 100644
--- a/tso-server/src/main/java/org/apache/omid/tso/TSOServerConfig.java
+++ b/tso-server/src/main/java/org/apache/omid/tso/TSOServerConfig.java
@@ -87,7 +87,7 @@ public class TSOServerConfig extends SecureHBaseConfig {
 
     private String waitStrategy;
 
-    private String networkIfaceName = NetworkUtils.getDefaultNetworkInterface();
+    private String networkIfaceName;
 
     private String timestampType;