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

jiangtian pushed a commit to branch cluster_new
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/cluster_new by this push:
     new b6cf07b  [IOTDB-678] LOCAL_IP and SEED_NODES should be consistent in 
the conf file
     new 9c13d35  Merge pull request #1208 from neuyilan/cluster_new_IOTDB-678
b6cf07b is described below

commit b6cf07be58187cbc9409f7f8ce488a8ad6cbbf1d
Author: HouliangQi <[email protected]>
AuthorDate: Thu May 14 19:23:14 2020 +0800

    [IOTDB-678] LOCAL_IP and SEED_NODES should be consistent in the conf file
---
 .../java/org/apache/iotdb/cluster/ClusterMain.java | 36 ++++++++++++++++++++++
 .../iotdb/cluster/config/ClusterDescriptor.java    | 36 +++++++++++++++++++++-
 .../cluster/server/member/MetaGroupMember.java     |  1 -
 3 files changed, 71 insertions(+), 2 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
index 7d11253..571be8d 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.cluster;
 
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.iotdb.cluster.client.MetaClient;
 import org.apache.iotdb.cluster.config.ClusterConfig;
@@ -68,6 +69,11 @@ public class ClusterMain {
       replaceDefaultPrams(params);
     }
 
+    // params check
+    if (!checkConfig()) {
+      return;
+    }
+
     IoTDBDescriptor.getInstance().getConfig().setSyncEnable(false);
     logger.info("Running mode {}", mode);
     try {
@@ -125,6 +131,36 @@ public class ClusterMain {
     }
   }
 
+  /**
+   * check the configuration is legal or not
+   */
+  private static boolean checkConfig() {
+    // 0. first replace all hostname with ip
+    try {
+      ClusterDescriptor.getInstance().replaceHostnameWithIp();
+    } catch (Exception e) {
+      logger.error("replace hostname with ip failed, {}", e.getMessage());
+      return false;
+    }
+
+    // 1. check the LOCAL_IP and SEED_NODES consistent or not
+    ClusterConfig config = ClusterDescriptor.getInstance().getConfig();
+    String localIP = "127.0.0.1";
+    String configLocalIP = config.getLocalIP();
+    List<String> seedNodes = config.getSeedNodeUrls();
+    boolean isLocalIP = localIP.equals(configLocalIP);
+    for (String seedNodeIP : seedNodes) {
+      if ((isLocalIP && !seedNodeIP.contains(localIP)) ||
+          (!isLocalIP && seedNodeIP.contains(localIP))) {
+        logger.error(
+            "LOCAL_IP={} and SEED_NODES={} should be consistent, both use 
local ip or real ip please",
+            configLocalIP, seedNodes);
+        return false;
+      }
+    }
+    return true;
+  }
+
   private static void doRemoveNode(String[] args) throws IOException {
     if (args.length != 3) {
       logger.error("Usage: -r <ip> <metaPort>");
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterDescriptor.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterDescriptor.java
index 58d6f22..2ddab3d 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterDescriptor.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterDescriptor.java
@@ -19,10 +19,13 @@
 
 package org.apache.iotdb.cluster.config;
 
+import com.google.common.net.InetAddresses;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
@@ -125,6 +128,33 @@ public class ClusterDescriptor {
     }
   }
 
+  public void replaceHostnameWithIp() throws Exception {
+    boolean isInvalidLocalIp = 
InetAddresses.isInetAddress(config.getLocalIP());
+    if (!isInvalidLocalIp) {
+      String localIP = hostnameToIP(config.getLocalIP());
+      config.setLocalIP(localIP);
+    }
+
+    List<String> newSeedUrls = new ArrayList<>();
+    for (String seedUrl : config.getSeedNodeUrls()) {
+      String[] splits = seedUrl.split(":");
+      if (splits.length != 3) {
+        throw new Exception("seed url format error!");
+      }
+      String seedIP = splits[0];
+      boolean isInvalidSeedIp = InetAddresses.isInetAddress(seedIP);
+      if (!isInvalidSeedIp) {
+        String newSeedIP = hostnameToIP(seedIP);
+        newSeedUrls.add(newSeedIP + ":" + splits[1] + ":" + splits[2]);
+      } else {
+        newSeedUrls.add(seedUrl);
+      }
+    }
+    config.setSeedNodeUrls(newSeedUrls);
+    logger.debug("after replace, the localIP={}, seedUrls={}", 
config.getLocalIP(),
+        config.getSeedNodeUrls());
+  }
+
   private boolean parseCommandLine(Options options, String[] params) {
     try {
       CommandLineParser parser = new DefaultParser();
@@ -186,7 +216,6 @@ public class ClusterDescriptor {
     config.setUseBatchInLogCatchUp(Boolean.parseBoolean(properties.getProperty(
         "USE_BATCH_IN_CATCH_UP", 
String.valueOf(config.isUseBatchInLogCatchUp()))));
 
-
     String seedUrls = properties.getProperty("SEED_NODES");
     if (seedUrls != null) {
       List<String> urlList = getSeedUrlList(seedUrls);
@@ -250,4 +279,9 @@ public class ClusterDescriptor {
     logger.info("Set cluster configuration {}", properties);
   }
 
+  public String hostnameToIP(String hostname) throws UnknownHostException {
+    InetAddress address = InetAddress.getByName(hostname);
+    return address.getHostAddress();
+  }
+
 }
\ No newline at end of file
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index 5c79419..b9fd355 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -1131,7 +1131,6 @@ public class MetaGroupMember extends RaftMember 
implements TSMetaService.AsyncIf
 
   /**
    * Load the partition table from a local file if it can be found.
-   *
    */
   private void loadPartitionTable() {
     File partitionFile = new File(PARTITION_FILE_NAME);

Reply via email to