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

caogaofei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 0af48606c3 [IOTDB-4223] Maintain default node ip config (#7254)
0af48606c3 is described below

commit 0af48606c36acf9a937e234074866893c9ebfe5b
Author: YongzaoDan <[email protected]>
AuthorDate: Wed Sep 7 11:22:57 2022 +0800

    [IOTDB-4223] Maintain default node ip config (#7254)
---
 .../resources/conf/iotdb-confignode.properties     |  6 ++++--
 .../iotdb/confignode/conf/ConfigNodeConfig.java    |  2 +-
 .../confignode/conf/ConfigNodeDescriptor.java      |  4 +++-
 .../confignode/conf/ConfigNodeStartupCheck.java    |  7 +++++++
 .../commons/exception/ConfigurationException.java  | 23 ++++++++++++++++++++--
 .../apache/iotdb/commons/utils/NodeUrlUtils.java   |  7 +++++++
 .../resources/conf/iotdb-datanode.properties       |  6 ++++--
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  2 +-
 .../org/apache/iotdb/db/conf/IoTDBStartCheck.java  |  1 +
 .../java/org/apache/iotdb/db/service/DataNode.java |  8 +++++++-
 10 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties 
b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
index 68afea0736..14a35108cb 100644
--- a/confignode/src/assembly/resources/conf/iotdb-confignode.properties
+++ b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
@@ -22,7 +22,8 @@
 ####################
 
 
-# could set ip or hostname
+# Used for cluster internal RPC communication.
+# Could set 0.0.0.0, 127.0.0.1(for local test) or ipv4 address.
 # Datatype: String
 internal_address=0.0.0.0
 
@@ -43,8 +44,9 @@ consensus_port=22278
 # and the port should be consistent with the target ConfigNode's 
confignode_internal_port.
 # For the first ConfigNode to start, target_config_nodes points to its own 
internal_address:internal_port.
 # For other ConfigNodes that are started or restarted, target_config_nodes 
points to any running ConfigNode's internal_address:internal_port.
+# Notice: The ip for any target_config_node should never be 0.0.0.0
 # Datatype: String
-target_config_nodes=0.0.0.0:22277
+target_config_nodes=127.0.0.1:22277
 
 
 ####################
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
index faef338857..6ea9cfa73b 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java
@@ -39,7 +39,7 @@ public class ConfigNodeConfig {
   private int consensusPort = 22278;
 
   /** Used for connecting to the ConfigNodeGroup */
-  private TEndPoint targetConfigNode = new TEndPoint("0.0.0.0", 22277);
+  private TEndPoint targetConfigNode = new TEndPoint("127.0.0.1", 22277);
 
   // TODO: Read from iotdb-confignode.properties
   private int partitionRegionId = 0;
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
index 624e8c98c1..394485ba89 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
@@ -285,7 +285,9 @@ public class ConfigNodeDescriptor {
    * @return True if the target_config_nodes points to itself
    */
   public boolean isSeedConfigNode() {
-    return conf.getInternalAddress().equals(conf.getTargetConfigNode().getIp())
+    return 
(conf.getInternalAddress().equals(conf.getTargetConfigNode().getIp())
+            || (NodeUrlUtils.isLocalAddress(conf.getInternalAddress())
+                && 
NodeUrlUtils.isLocalAddress(conf.getTargetConfigNode().getIp())))
         && conf.getInternalPort() == conf.getTargetConfigNode().getPort();
   }
 
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeStartupCheck.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeStartupCheck.java
index 4afab64920..44a57cf690 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeStartupCheck.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeStartupCheck.java
@@ -92,11 +92,18 @@ public class ConfigNodeStartupCheck {
               "%s or %s", ConsensusFactory.StandAloneConsensus, 
ConsensusFactory.RatisConsensus));
     }
 
+    // The routing policy is limited
     if (!CONF.getRoutingPolicy().equals(RouteBalancer.LEADER_POLICY)
         && !CONF.getRoutingPolicy().equals(RouteBalancer.GREEDY_POLICY)) {
       throw new ConfigurationException(
           "routing_policy", CONF.getRoutingPolicy(), "leader or greedy");
     }
+
+    // The ip of target ConfigNode couldn't be 0.0.0.0
+    if (CONF.getTargetConfigNode().getIp().equals("0.0.0.0")) {
+      throw new ConfigurationException(
+          "The ip address of any target_config_nodes couldn't be 0.0.0.0");
+    }
   }
 
   private void createDirsIfNecessary() throws IOException {
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/exception/ConfigurationException.java
 
b/node-commons/src/main/java/org/apache/iotdb/commons/exception/ConfigurationException.java
index 1c7d36e79c..7f5a6546d4 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/exception/ConfigurationException.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/exception/ConfigurationException.java
@@ -22,9 +22,14 @@ package org.apache.iotdb.commons.exception;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 public class ConfigurationException extends IoTDBException {
-  final String parameter;
-  final String correctValue;
+  private String parameter;
+  private String correctValue;
 
+  /**
+   * @param parameter The error parameter
+   * @param badValue The bad value
+   * @param correctValue The correct value (if it could be listed)
+   */
   public ConfigurationException(String parameter, String badValue, String 
correctValue) {
     super(
         String.format(
@@ -34,6 +39,20 @@ public class ConfigurationException extends IoTDBException {
     this.correctValue = correctValue;
   }
 
+  /**
+   * @param parameter The error parameter
+   * @param badValue The bad value
+   */
+  public ConfigurationException(String parameter, String badValue) {
+    super(
+        String.format("Parameter %s can not be %s", parameter, badValue),
+        TSStatusCode.CONFIG_ERROR.getStatusCode());
+  }
+
+  public ConfigurationException(String errorStr) {
+    super(errorStr, TSStatusCode.CONFIG_ERROR.getStatusCode());
+  }
+
   public String getParameter() {
     return parameter;
   }
diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/utils/NodeUrlUtils.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/utils/NodeUrlUtils.java
index 39614cc469..aa727d8769 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/utils/NodeUrlUtils.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/utils/NodeUrlUtils.java
@@ -187,4 +187,11 @@ public class NodeUrlUtils {
       throws BadNodeUrlException {
     return parseTConfigNodeUrls(Arrays.asList(configNodeUrls.split(";")));
   }
+
+  public static boolean isLocalAddress(String ip) {
+    if (ip == null) {
+      return false;
+    }
+    return ip.equals("0.0.0.0") || ip.equals("127.0.0.1") || 
ip.equals("localhost");
+  }
 }
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties 
b/server/src/assembly/resources/conf/iotdb-datanode.properties
index a094e38433..c230f7771b 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -21,6 +21,7 @@
 ### RPC Configuration
 ####################
 
+# could set 0.0.0.0, 127.0.0.1(for local test) or ipv4 address
 # Datatype: String
 rpc_address=0.0.0.0
 
@@ -44,8 +45,8 @@ mpp_data_exchange_port=8777
 
 # Datatype: String
 # used for communication between cluster nodes.
-# if this parameter is commented, then the IP that binded by the hostname will 
be used.
-internal_address=127.0.0.1
+# could set 0.0.0.0, 127.0.0.1(for local test) or ipv4 address.
+internal_address=0.0.0.0
 
 # Datatype: int
 # port for coordinator's communication between cluster nodes.
@@ -66,6 +67,7 @@ schema_region_consensus_port=50010
 # When successfully connecting to the ConfigNodeGroup, DataNode will get all 
online
 # config nodes and store them in memory.
 # Datatype: String
+# Notice: The ip for any target_config_node should never be 0.0.0.0
 target_config_nodes=127.0.0.1:22277
 
 # Datatype: boolean
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 0b03d48010..970a3a4007 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -852,7 +852,7 @@ public class IoTDBConfig {
   private int pageCacheSizeInSchemaFile = 1024;
 
   /** Internal address for data node */
-  private String internalAddress = "127.0.0.1";
+  private String internalAddress = "0.0.0.0";
 
   /** Internal port for coordinator */
   private int internalPort = 9003;
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java 
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index ce6ec46351..f55caa5385 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -113,6 +113,7 @@ public class IoTDBStartCheck {
   private static final String SCHEMA_REGION_CONSENSUS_PROTOCOL = 
"schema_region_consensus_protocol";
 
   private static final String DATA_REGION_CONSENSUS_PROTOCOL = 
"data_region_consensus_protocol";
+
   private static final String IOTDB_VERSION_STRING = "iotdb_version";
 
   public static IoTDBStartCheck getInstance() {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java 
b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index 5efdbd64f4..9e8a004e00 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -111,11 +111,17 @@ public class DataNode implements DataNodeMBean {
     IoTDBStartCheck.getInstance().checkConfig();
     // TODO: check configuration for data node
 
+    for (TEndPoint endPoint : config.getTargetConfigNodeList()) {
+      if (endPoint.getIp().equals("0.0.0.0")) {
+        throw new ConfigurationException(
+            "The ip address of any target_config_nodes couldn't be 0.0.0.0");
+      }
+    }
+
     // if client ip is the default address, set it same with internal ip
     if (config.getRpcAddress().equals("0.0.0.0")) {
       config.setRpcAddress(config.getInternalAddress());
     }
-
     
thisNode.setIp(IoTDBDescriptor.getInstance().getConfig().getInternalAddress());
     
thisNode.setPort(IoTDBDescriptor.getInstance().getConfig().getInternalPort());
   }

Reply via email to