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:54 UTC

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

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)