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);