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)