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

jackietien 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 6059b68267 [IOTDB-3685] Create parameter schema_region_per_data_node 
and data_region_per_processor in ConfigNode (#6488)
6059b68267 is described below

commit 6059b6826760bb232ef9d09d17c47699efa69ca1
Author: YongzaoDan <[email protected]>
AuthorDate: Wed Jun 29 08:34:56 2022 +0800

    [IOTDB-3685] Create parameter schema_region_per_data_node and 
data_region_per_processor in ConfigNode (#6488)
---
 .../resources/conf/iotdb-confignode.properties     | 32 +++++++++++++-------
 .../iotdb/confignode/conf/ConfigNodeConfig.java    | 34 ++++++++++++++++++----
 .../confignode/conf/ConfigNodeDescriptor.java      | 19 +++++++++---
 .../confignode/conf/ConfigNodeStartupCheck.java    |  4 ++-
 .../confignode/manager/ClusterSchemaManager.java   | 21 ++++++++++---
 .../iotdb/confignode/manager/ConfigManager.java    | 14 +++++++++
 .../src/main/thrift/confignode.thrift              |  4 ++-
 7 files changed, 102 insertions(+), 26 deletions(-)

diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties 
b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
index 651caad821..58913c796d 100644
--- a/confignode/src/assembly/resources/conf/iotdb-confignode.properties
+++ b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
@@ -48,26 +48,38 @@ target_config_nodes=0.0.0.0:22277
 
 
 ####################
-### Consensus protocol configuration
+### Region configuration
 ####################
 
-# All parameters in Consensus protocol configuration is unmodifiable after 
ConfigNode starts for the first time.
-# And these parameters should be consistent within the ConfigNodeGroup.
 
-# DataRegion consensus protocol type
+# SchemaRegion consensus protocol type.
+# This parameter is unmodifiable after ConfigNode starts for the first time.
 # These consensus protocols are currently supported:
 # 1. org.apache.iotdb.consensus.standalone.StandAloneConsensus(Consensus 
patterns optimized specifically for single replica)
-# 2. org.apache.iotdb.consensus.multileader.MultiLeaderConsensus(weak 
consistency, high performance)
-# 3. org.apache.iotdb.consensus.ratis.RatisConsensus(Raft protocol)
+# 2. org.apache.iotdb.consensus.ratis.RatisConsensus(Raft protocol)
 # Datatype: String
-# 
data_region_consensus_protocol_class=org.apache.iotdb.consensus.standalone.StandAloneConsensus
+# 
schema_region_consensus_protocol_class=org.apache.iotdb.consensus.standalone.StandAloneConsensus
+
+# The maximum number of SchemaRegion expected to be managed by each DataNode.
+# Notice: Since each StorageGroup requires at least one SchemaRegion to manage 
it's schema,
+# this parameter doesn't limit the number of SchemaRegions when there are too 
many StorageGroups.
+# Datatype: Double
+# schema_region_per_data_node=1.0
 
-# SchemaRegion consensus protocol type
+# DataRegion consensus protocol type.
+# This parameter is unmodifiable after ConfigNode starts for the first time.
 # These consensus protocols are currently supported:
 # 1. org.apache.iotdb.consensus.standalone.StandAloneConsensus(Consensus 
patterns optimized specifically for single replica)
-# 2. org.apache.iotdb.consensus.ratis.RatisConsensus(Raft protocol)
+# 2. org.apache.iotdb.consensus.multileader.MultiLeaderConsensus(weak 
consistency, high performance)
+# 3. org.apache.iotdb.consensus.ratis.RatisConsensus(Raft protocol)
 # Datatype: String
-# 
schema_region_consensus_protocol_class=org.apache.iotdb.consensus.standalone.StandAloneConsensus
+# 
data_region_consensus_protocol_class=org.apache.iotdb.consensus.standalone.StandAloneConsensus
+
+# The maximum number of SchemaRegion expected to be managed by each processor.
+# Notice: Since each StorageGroup requires at least two DataRegions to manage 
it's data,
+# this parameter doesn't limit the number of DataRegions when there are too 
many StorageGroups.
+# Datatype: Double
+# data_region_per_processor=0.5
 
 ####################
 ### PartitionSlot configuration
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 a9ad34ead0..3c13a3965d 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
@@ -58,11 +58,17 @@ public class ConfigNodeConfig {
   /** ConfigNodeGroup consensus protocol */
   private String configNodeConsensusProtocolClass = 
ConsensusFactory.RatisConsensus;
 
+  /** DataNode schema region consensus protocol */
+  private String schemaRegionConsensusProtocolClass = 
ConsensusFactory.StandAloneConsensus;
+
+  /** The maximum number of SchemaRegion expected to be managed by each 
DataNode. */
+  private double schemaRegionPerDataNode = 1.0;
+
   /** DataNode data region consensus protocol */
   private String dataRegionConsensusProtocolClass = 
ConsensusFactory.StandAloneConsensus;
 
-  /** DataNode schema region consensus protocol */
-  private String schemaRegionConsensusProtocolClass = 
ConsensusFactory.StandAloneConsensus;
+  /** The maximum number of SchemaRegion expected to be managed by each 
DataNode. */
+  private double dataRegionPerProcessor = 0.5;
 
   /**
    * ClientManager will have so many selector threads (TAsyncClientManager) to 
distribute to its
@@ -320,6 +326,22 @@ public class ConfigNodeConfig {
     this.configNodeConsensusProtocolClass = configNodeConsensusProtocolClass;
   }
 
+  public String getSchemaRegionConsensusProtocolClass() {
+    return schemaRegionConsensusProtocolClass;
+  }
+
+  public void setSchemaRegionConsensusProtocolClass(String 
schemaRegionConsensusProtocolClass) {
+    this.schemaRegionConsensusProtocolClass = 
schemaRegionConsensusProtocolClass;
+  }
+
+  public double getSchemaRegionPerDataNode() {
+    return schemaRegionPerDataNode;
+  }
+
+  public void setSchemaRegionPerDataNode(double schemaRegionPerDataNode) {
+    this.schemaRegionPerDataNode = schemaRegionPerDataNode;
+  }
+
   public String getDataRegionConsensusProtocolClass() {
     return dataRegionConsensusProtocolClass;
   }
@@ -328,12 +350,12 @@ public class ConfigNodeConfig {
     this.dataRegionConsensusProtocolClass = dataRegionConsensusProtocolClass;
   }
 
-  public String getSchemaRegionConsensusProtocolClass() {
-    return schemaRegionConsensusProtocolClass;
+  public double getDataRegionPerProcessor() {
+    return dataRegionPerProcessor;
   }
 
-  public void setSchemaRegionConsensusProtocolClass(String 
schemaRegionConsensusProtocolClass) {
-    this.schemaRegionConsensusProtocolClass = 
schemaRegionConsensusProtocolClass;
+  public void setDataRegionPerProcessor(double dataRegionPerProcessor) {
+    this.dataRegionPerProcessor = dataRegionPerProcessor;
   }
 
   public int getThriftServerAwaitTimeForStopService() {
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 7b9596ca4c..53256d91fd 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
@@ -134,15 +134,26 @@ public class ConfigNodeDescriptor {
           properties.getProperty(
               "config_node_consensus_protocol_class", 
conf.getConfigNodeConsensusProtocolClass()));
 
-      conf.setDataRegionConsensusProtocolClass(
-          properties.getProperty(
-              "data_region_consensus_protocol_class", 
conf.getDataRegionConsensusProtocolClass()));
-
       conf.setSchemaRegionConsensusProtocolClass(
           properties.getProperty(
               "schema_region_consensus_protocol_class",
               conf.getSchemaRegionConsensusProtocolClass()));
 
+      conf.setSchemaRegionPerDataNode(
+          Double.parseDouble(
+              properties.getProperty(
+                  "schema_region_per_data_node",
+                  String.valueOf(conf.getSchemaRegionPerDataNode()))));
+
+      conf.setDataRegionConsensusProtocolClass(
+          properties.getProperty(
+              "data_region_consensus_protocol_class", 
conf.getDataRegionConsensusProtocolClass()));
+
+      conf.setDataRegionPerProcessor(
+          Double.parseDouble(
+              properties.getProperty(
+                  "data_region_per_processor", 
String.valueOf(conf.getDataRegionPerProcessor()))));
+
       conf.setRpcAdvancedCompressionEnable(
           Boolean.parseBoolean(
               properties.getProperty(
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 68bd3754ea..7775cb2c8a 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
@@ -193,7 +193,9 @@ public class ConfigNodeStartupCheck {
             CommonDescriptor.getInstance().getConfig().getDefaultTTL(),
             conf.getTimePartitionInterval(),
             conf.getSchemaReplicationFactor(),
-            conf.getDataReplicationFactor());
+            conf.getSchemaRegionPerDataNode(),
+            conf.getDataReplicationFactor(),
+            conf.getDataRegionPerProcessor());
 
     TEndPoint targetConfigNode = conf.getTargetConfigNode();
     while (true) {
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
index a92e3c2b49..967fd9f4b5 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
 import org.apache.iotdb.confignode.consensus.request.read.CountStorageGroupReq;
 import org.apache.iotdb.confignode.consensus.request.read.GetStorageGroupReq;
 import 
org.apache.iotdb.confignode.consensus.request.write.AdjustMaxRegionGroupCountReq;
@@ -49,6 +50,11 @@ public class ClusterSchemaManager {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(ClusterSchemaManager.class);
 
+  private static final double schemaRegionPerDataNode =
+      
ConfigNodeDescriptor.getInstance().getConf().getSchemaRegionPerDataNode();
+  private static final double dataRegionPerProcessor =
+      ConfigNodeDescriptor.getInstance().getConf().getDataRegionPerProcessor();
+
   private final IManager configManager;
   private final ClusterSchemaInfo clusterSchemaInfo;
 
@@ -164,8 +170,12 @@ public class ClusterSchemaManager {
             Math.max(
                 1,
                 Math.max(
-                    dataNodeNum
-                        / (storageGroupNum * 
storageGroupSchema.getSchemaReplicationFactor()),
+                    (int)
+                        (schemaRegionPerDataNode
+                            * dataNodeNum
+                            / (double)
+                                (storageGroupNum
+                                    * 
storageGroupSchema.getSchemaReplicationFactor())),
                     allocatedSchemaRegionGroupCount));
 
         // Adjust maxDataRegionGroupCount.
@@ -178,8 +188,11 @@ public class ClusterSchemaManager {
             Math.max(
                 2,
                 Math.max(
-                    totalCpuCoreNum
-                        / (3 * storageGroupNum * 
storageGroupSchema.getDataReplicationFactor()),
+                    (int)
+                        (dataRegionPerProcessor
+                            * totalCpuCoreNum
+                            / (double)
+                                (storageGroupNum * 
storageGroupSchema.getDataReplicationFactor())),
                     allocatedDataRegionGroupCount));
 
         adjustMaxRegionGroupCountReq.putEntry(
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index dd972bbbac..8e6cee3011 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -665,6 +665,13 @@ public class ConfigManager implements IManager {
               "Reject register, please ensure that the 
schema_replication_factor are consistent.");
       return errorResp;
     }
+    if (req.getSchemaRegionPerDataNode() != conf.getSchemaRegionPerDataNode()) 
{
+      errorResp
+          .getStatus()
+          .setMessage(
+              "Reject register, please ensure that the 
schema_region_per_data_node are consistent.");
+      return errorResp;
+    }
     if (req.getDataReplicationFactor() != conf.getDataReplicationFactor()) {
       errorResp
           .getStatus()
@@ -672,6 +679,13 @@ public class ConfigManager implements IManager {
               "Reject register, please ensure that the data_replication_factor 
are consistent.");
       return errorResp;
     }
+    if (req.getDataRegionPerProcessor() != conf.getDataRegionPerProcessor()) {
+      errorResp
+          .getStatus()
+          .setMessage(
+              "Reject register, please ensure that the 
data_region_per_processor are consistent.");
+      return errorResp;
+    }
     return null;
   }
 
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift 
b/thrift-confignode/src/main/thrift/confignode.thrift
index 9ffca7390a..e07cd3e3bb 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -202,7 +202,9 @@ struct TConfigNodeRegisterReq {
   6: required i64 defaultTTL
   7: required i64 timePartitionInterval
   8: required i32 schemaReplicationFactor
-  9: required i32 dataReplicationFactor
+  9: required double schemaRegionPerDataNode
+  10: required i32 dataReplicationFactor
+  11: required double dataRegionPerProcessor
 }
 
 struct TConfigNodeRegisterResp {

Reply via email to