You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/11/29 08:37:53 UTC

[iotdb] branch beyyes/doc created (now ba90b55192)

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

caogaofei pushed a change to branch beyyes/doc
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at ba90b55192 add CUSTOM policy for schema region

This branch includes the following new commits:

     new ba90b55192 add CUSTOM policy for schema region

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: add CUSTOM policy for schema region

Posted by ca...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ba90b55192db863827bead6bb61685865cfcd82c
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Tue Nov 29 16:37:39 2022 +0800

    add CUSTOM policy for schema region
---
 .../iotdb/confignode/conf/ConfigNodeConfig.java    | 42 +++++++++++++++++-----
 .../confignode/conf/ConfigNodeDescriptor.java      | 16 +++++++--
 .../manager/partition/PartitionManager.java        | 25 +++++++++----
 ...Policy.java => RegionGroupExtensionPolicy.java} |  8 ++---
 .../java/org/apache/iotdb/it/env/MppConfig.java    | 14 ++++++++
 .../org/apache/iotdb/itbase/env/BaseConfig.java    | 16 +++++++++
 .../IoTDBCustomRegionGroupExtensionIT.java         | 13 +++++++
 .../resources/conf/iotdb-common.properties         | 12 +++++++
 8 files changed, 125 insertions(+), 21 deletions(-)

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 7db48762c7..7f80c4725b 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
@@ -23,7 +23,7 @@ import org.apache.iotdb.commons.conf.IoTDBConstant;
 import org.apache.iotdb.confignode.manager.load.balancer.RegionBalancer;
 import org.apache.iotdb.confignode.manager.load.balancer.router.leader.ILeaderBalancer;
 import org.apache.iotdb.confignode.manager.load.balancer.router.priority.IPriorityBalancer;
-import org.apache.iotdb.confignode.manager.partition.DataRegionGroupExtensionPolicy;
+import org.apache.iotdb.confignode.manager.partition.RegionGroupExtensionPolicy;
 import org.apache.iotdb.consensus.ConsensusFactory;
 import org.apache.iotdb.rpc.RpcUtils;
 
@@ -76,12 +76,19 @@ public class ConfigNodeConfig {
   /** The maximum number of SchemaRegions expected to be managed by each DataNode. */
   private double schemaRegionPerDataNode = schemaReplicationFactor;
 
+  /** The policy of extension SchemaRegionGroup for each Database. */
+  private RegionGroupExtensionPolicy schemaRegionGroupExtensionPolicy =
+      RegionGroupExtensionPolicy.AUTO;
+
+  /** The number of SchemaRegionGroups for each Database when using CUSTOM extension policy */
+  private int schemaRegionGroupPerDatabase = 1;
+
   /** The policy of extension DataRegionGroup for each Database. */
-  private DataRegionGroupExtensionPolicy dataRegionGroupExtensionPolicy =
-      DataRegionGroupExtensionPolicy.AUTO;
+  private RegionGroupExtensionPolicy dateRegionGroupExtensionPolicy =
+      RegionGroupExtensionPolicy.AUTO;
 
-  /** The number of DataRegionGroups for each Database */
-  private int dataRegionGroupPerDatabase = 10;
+  /** The number of DataRegionGroups for each Database when using CUSTOM extension policy */
+  private int dataRegionGroupPerDatabase = 1;
 
   /** The maximum number of DataRegions expected to be managed by each DataNode. */
   private double dataRegionPerProcessor = 1.0;
@@ -413,13 +420,30 @@ public class ConfigNodeConfig {
     this.schemaRegionConsensusProtocolClass = schemaRegionConsensusProtocolClass;
   }
 
-  public DataRegionGroupExtensionPolicy getDataRegionGroupExtensionPolicy() {
-    return dataRegionGroupExtensionPolicy;
+  public RegionGroupExtensionPolicy getSchemaRegionGroupExtensionPolicy() {
+    return dateRegionGroupExtensionPolicy;
+  }
+
+  public void setSchemaRegionGroupExtensionPolicy(
+      RegionGroupExtensionPolicy schemaRegionGroupExtensionPolicy) {
+    this.schemaRegionGroupExtensionPolicy = schemaRegionGroupExtensionPolicy;
+  }
+
+  public int getSchemaRegionGroupPerDatabase() {
+    return schemaRegionGroupPerDatabase;
+  }
+
+  public void setSchemaRegionGroupPerDatabase(int schemaRegionGroupPerDatabase) {
+    this.dataRegionGroupPerDatabase = schemaRegionGroupPerDatabase;
+  }
+
+  public RegionGroupExtensionPolicy getDataRegionGroupExtensionPolicy() {
+    return dateRegionGroupExtensionPolicy;
   }
 
   public void setDataRegionGroupExtensionPolicy(
-      DataRegionGroupExtensionPolicy dataRegionGroupExtensionPolicy) {
-    this.dataRegionGroupExtensionPolicy = dataRegionGroupExtensionPolicy;
+      RegionGroupExtensionPolicy dataRegionGroupExtensionPolicy) {
+    this.dateRegionGroupExtensionPolicy = dataRegionGroupExtensionPolicy;
   }
 
   public int getDataRegionGroupPerDatabase() {
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 6c43fd87b1..a7dea60660 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
@@ -26,7 +26,7 @@ import org.apache.iotdb.commons.utils.NodeUrlUtils;
 import org.apache.iotdb.confignode.manager.load.balancer.RegionBalancer;
 import org.apache.iotdb.confignode.manager.load.balancer.router.leader.ILeaderBalancer;
 import org.apache.iotdb.confignode.manager.load.balancer.router.priority.IPriorityBalancer;
-import org.apache.iotdb.confignode.manager.partition.DataRegionGroupExtensionPolicy;
+import org.apache.iotdb.confignode.manager.partition.RegionGroupExtensionPolicy;
 import org.apache.iotdb.metrics.config.MetricConfigDescriptor;
 
 import org.slf4j.Logger;
@@ -220,8 +220,20 @@ public class ConfigNodeDescriptor {
                     String.valueOf(conf.getSchemaReplicationFactor()))
                 .trim()));
 
+    conf.setSchemaRegionGroupExtensionPolicy(
+        RegionGroupExtensionPolicy.parse(
+            properties.getProperty(
+                "schema_region_group_extension_policy",
+                conf.getSchemaRegionGroupExtensionPolicy().getPolicy().trim())));
+
+    conf.setSchemaRegionGroupPerDatabase(
+        Integer.parseInt(
+            properties.getProperty(
+                "schema_region_group_per_database",
+                String.valueOf(conf.getSchemaRegionGroupPerDatabase()).trim())));
+
     conf.setDataRegionGroupExtensionPolicy(
-        DataRegionGroupExtensionPolicy.parse(
+        RegionGroupExtensionPolicy.parse(
             properties.getProperty(
                 "data_region_group_extension_policy",
                 conf.getDataRegionGroupExtensionPolicy().getPolicy().trim())));
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index d364d6b23c..fdfd892b76 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -104,7 +104,11 @@ public class PartitionManager {
   private static final Logger LOGGER = LoggerFactory.getLogger(PartitionManager.class);
 
   private static final ConfigNodeConfig CONF = ConfigNodeDescriptor.getInstance().getConf();
-  private static final DataRegionGroupExtensionPolicy DATA_REGION_GROUP_EXTENSION_POLICY =
+  private static final RegionGroupExtensionPolicy SCHEMA_REGION_GROUP_EXTENSION_POLICY =
+      CONF.getSchemaRegionGroupExtensionPolicy();
+  private static final int SCHEMA_REGION_GROUP_PER_DATABASE =
+      CONF.getSchemaRegionGroupPerDatabase();
+  private static final RegionGroupExtensionPolicy DATA_REGION_GROUP_EXTENSION_POLICY =
       CONF.getDataRegionGroupExtensionPolicy();
   private static final int DATA_REGION_GROUP_PER_DATABASE = CONF.getDataRegionGroupPerDatabase();
 
@@ -336,9 +340,15 @@ public class PartitionManager {
 
     try {
       if (TConsensusGroupType.SchemaRegion.equals(consensusGroupType)) {
-        // The SchemaRegionGroup always use AUTO policy currently.
-        return autoExtendRegionGroupIfNecessary(
-            unassignedPartitionSlotsCountMap, consensusGroupType);
+        switch (SCHEMA_REGION_GROUP_EXTENSION_POLICY) {
+          case CUSTOM:
+            return customExtendRegionGroupIfNecessary(
+                unassignedPartitionSlotsCountMap, consensusGroupType);
+          case AUTO:
+          default:
+            return autoExtendRegionGroupIfNecessary(
+                unassignedPartitionSlotsCountMap, consensusGroupType);
+        }
       } else {
         switch (DATA_REGION_GROUP_EXTENSION_POLICY) {
           case CUSTOM:
@@ -378,8 +388,11 @@ public class PartitionManager {
           partitionInfo.getRegionGroupCount(storageGroup, consensusGroupType);
 
       if (allocatedRegionGroupCount == 0) {
-        // Only for DataRegionGroup currently
-        allotmentMap.put(storageGroup, DATA_REGION_GROUP_PER_DATABASE);
+        allotmentMap.put(
+            storageGroup,
+            TConsensusGroupType.SchemaRegion.equals(consensusGroupType)
+                ? SCHEMA_REGION_GROUP_PER_DATABASE
+                : DATA_REGION_GROUP_PER_DATABASE);
       }
     }
 
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/DataRegionGroupExtensionPolicy.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupExtensionPolicy.java
similarity index 81%
rename from confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/DataRegionGroupExtensionPolicy.java
rename to confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupExtensionPolicy.java
index f6db6fbcf2..ac461d76e9 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/DataRegionGroupExtensionPolicy.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/RegionGroupExtensionPolicy.java
@@ -20,14 +20,14 @@ package org.apache.iotdb.confignode.manager.partition;
 
 import java.io.IOException;
 
-public enum DataRegionGroupExtensionPolicy {
+public enum RegionGroupExtensionPolicy {
   CUSTOM("CUSTOM"),
 
   AUTO("AUTO");
 
   private final String policy;
 
-  DataRegionGroupExtensionPolicy(String policy) {
+  RegionGroupExtensionPolicy(String policy) {
     this.policy = policy;
   }
 
@@ -35,8 +35,8 @@ public enum DataRegionGroupExtensionPolicy {
     return policy;
   }
 
-  public static DataRegionGroupExtensionPolicy parse(String policy) throws IOException {
-    for (DataRegionGroupExtensionPolicy extensionPolicy : DataRegionGroupExtensionPolicy.values()) {
+  public static RegionGroupExtensionPolicy parse(String policy) throws IOException {
+    for (RegionGroupExtensionPolicy extensionPolicy : RegionGroupExtensionPolicy.values()) {
       if (extensionPolicy.policy.equals(policy)) {
         return extensionPolicy;
       }
diff --git a/integration-test/src/main/java/org/apache/iotdb/it/env/MppConfig.java b/integration-test/src/main/java/org/apache/iotdb/it/env/MppConfig.java
index 809d8e99b5..a50d828dfb 100644
--- a/integration-test/src/main/java/org/apache/iotdb/it/env/MppConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/it/env/MppConfig.java
@@ -221,6 +221,20 @@ public class MppConfig implements BaseConfig {
     return this;
   }
 
+  @Override
+  public BaseConfig setSchemaRegionGroupExtensionPolicy(String schemaRegionGroupExtensionPolicy) {
+    confignodeProperties.setProperty(
+        "schema_region_group_extension_policy", schemaRegionGroupExtensionPolicy);
+    return this;
+  }
+
+  @Override
+  public BaseConfig setSchemaRegionGroupPerDatabase(int schemaRegionGroupPerDatabase) {
+    confignodeProperties.setProperty(
+        "schema_region_group_per_database", String.valueOf(schemaRegionGroupPerDatabase));
+    return this;
+  }
+
   @Override
   public BaseConfig setDataRegionGroupExtensionPolicy(String dataRegionGroupExtensionPolicy) {
     confignodeProperties.setProperty(
diff --git a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
index 877ee4924a..741e2f2d5c 100644
--- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
@@ -231,6 +231,22 @@ public interface BaseConfig {
     return false;
   }
 
+  default BaseConfig setSchemaRegionGroupExtensionPolicy(String schemaRegionGroupExtensionPolicy) {
+    return this;
+  }
+
+  default String getSchemaRegionGroupExtensionPolicy() {
+    return "AUTO";
+  }
+
+  default BaseConfig setSchemaRegionGroupPerDatabase(int schemaRegionGroupPerDatabase) {
+    return this;
+  }
+
+  default int getSchemaRegionGroupPerDatabase() {
+    return 1;
+  }
+
   default BaseConfig setDataRegionGroupExtensionPolicy(String dataRegionGroupExtensionPolicy) {
     return this;
   }
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBCustomRegionGroupExtensionIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBCustomRegionGroupExtensionIT.java
index 4762deffe8..6f316a8a5b 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBCustomRegionGroupExtensionIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBCustomRegionGroupExtensionIT.java
@@ -55,6 +55,8 @@ public class IoTDBCustomRegionGroupExtensionIT {
 
   private static final BaseConfig CONF = ConfigFactory.getConfig();
 
+  private static String originalSchemaRegionGroupExtensionPolicy;
+  private static final String testSchemaRegionGroupExtensionPolicy = "CUSTOM";
   private static String originalDataRegionGroupExtensionPolicy;
   private static final String testDataRegionGroupExtensionPolicy = "CUSTOM";
 
@@ -62,6 +64,8 @@ public class IoTDBCustomRegionGroupExtensionIT {
   private static String originalDataRegionConsensusProtocolClass;
   private static final String testConsensusProtocolClass = ConsensusFactory.RATIS_CONSENSUS;
 
+  private static int originalSchemaRegionGroupPerDatabase;
+  private static final int testSchemaRegionGroupPerDatabase = 2;
   private static int originalDataRegionGroupPerDatabase;
   private static final int testDataRegionGroupPerDatabase = 2;
 
@@ -88,6 +92,12 @@ public class IoTDBCustomRegionGroupExtensionIT {
 
     originalTimePartitionInterval = CONF.getTimePartitionInterval();
 
+    originalSchemaRegionGroupExtensionPolicy = CONF.getSchemaRegionGroupExtensionPolicy();
+    CONF.setSchemaRegionGroupExtensionPolicy(testSchemaRegionGroupExtensionPolicy);
+
+    originalSchemaRegionGroupPerDatabase = CONF.getSchemaRegionGroupPerDatabase();
+    CONF.setSchemaRegionGroupPerDatabase(testSchemaRegionGroupPerDatabase);
+
     originalDataRegionGroupExtensionPolicy = CONF.getDataRegionGroupExtensionPolicy();
     CONF.setDataRegionGroupExtensionPolicy(testDataRegionGroupExtensionPolicy);
 
@@ -106,6 +116,9 @@ public class IoTDBCustomRegionGroupExtensionIT {
     CONF.setDataRegionConsensusProtocolClass(originalDataRegionConsensusProtocolClass);
     CONF.setSchemaReplicationFactor(originalSchemaReplicationFactor);
     CONF.setDataReplicationFactor(originalDataReplicationFactor);
+
+    CONF.setSchemaRegionGroupExtensionPolicy(originalSchemaRegionGroupExtensionPolicy);
+    CONF.setSchemaRegionGroupPerDatabase(originalSchemaRegionGroupPerDatabase);
     CONF.setDataRegionGroupExtensionPolicy(originalDataRegionGroupExtensionPolicy);
     CONF.setDataRegionGroupPerDatabase(originalDataRegionGroupPerDatabase);
   }
diff --git a/node-commons/src/assembly/resources/conf/iotdb-common.properties b/node-commons/src/assembly/resources/conf/iotdb-common.properties
index 1aca003f6c..7a98179ecd 100644
--- a/node-commons/src/assembly/resources/conf/iotdb-common.properties
+++ b/node-commons/src/assembly/resources/conf/iotdb-common.properties
@@ -84,6 +84,18 @@
 # Datatype: Double
 # schema_region_per_data_node=1.0
 
+# The policy of extension SchemaRegionGroup for each Database.
+# These policies are currently supported:
+# 1. CUSTOM(Each Database will allocate schema_region_group_per_database RegionGroups as soon as created)
+# 2. AUTO(Each Database will automatically extend SchemaRegionGroups based on the data it has)
+# Datatype: String
+# schema_region_group_extension_policy=AUTO
+
+# The number of SchemaRegionGroups for each Database when using CUSTOM schema_region_group_extension_policy.
+# Notice: Each Database will allocate schema_region_group_per_database SchemaRegionGroups as soon as created.
+# Datatype: Integer
+# schema_region_group_per_database=1
+
 # The policy of extension DataRegionGroup for each Database.
 # These policies are currently supported:
 # 1. CUSTOM(Each Database will allocate data_region_group_per_database DataRegionGroups as soon as created)