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

xingtanzjr 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 a48d9823b8e Only SequenceStrategy and MaxDiskUsableSpaceFirstStrategy 
are allowed in cluster mode (#10164)
a48d9823b8e is described below

commit a48d9823b8e242cae56692c476cdda21282449df
Author: Zhang.Jinrui <[email protected]>
AuthorDate: Fri Jun 16 10:52:37 2023 +0800

    Only SequenceStrategy and MaxDiskUsableSpaceFirstStrategy are allowed in 
cluster mode (#10164)
---
 docs/UserGuide/Reference/DataNode-Config-Manual.md     |  2 +-
 docs/zh/UserGuide/Reference/DataNode-Config-Manual.md  | 12 ++++++------
 .../assembly/resources/conf/iotdb-datanode.properties  |  4 +---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java     | 18 ++++++++++++------
 4 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/docs/UserGuide/Reference/DataNode-Config-Manual.md 
b/docs/UserGuide/Reference/DataNode-Config-Manual.md
index f54504884c9..d56a4bf4be2 100644
--- a/docs/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/DataNode-Config-Manual.md
@@ -297,7 +297,7 @@ The permission definitions are in 
${IOTDB\_CONF}/conf/jmx.access.
 
 |    Name     | dn\_multi\_dir\_strategy                                       
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 
|:-----------:|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
-| Description | IoTDB's strategy for selecting directories for TsFile in 
tsfile_dir. You can use a simple class name or a full name of the class. The 
system provides the following three strategies: <br>1. SequenceStrategy: IoTDB 
selects the directory from tsfile\_dir in order, traverses all the directories 
in tsfile\_dir in turn, and keeps counting;<br>2. 
MaxDiskUsableSpaceFirstStrategy: IoTDB first selects the directory with the 
largest free disk space in tsfile\_dir;<br>3. MinFolderOcc [...]
+| Description | IoTDB's strategy for selecting directories for TsFile in 
tsfile_dir. You can use a simple class name or a full name of the class. The 
system provides the following three strategies: <br>1. SequenceStrategy: IoTDB 
selects the directory from tsfile\_dir in order, traverses all the directories 
in tsfile\_dir in turn, and keeps counting;<br>2. 
MaxDiskUsableSpaceFirstStrategy: IoTDB first selects the directory with the 
largest free disk space in tsfile\_dir;<br>You can complet [...]
 |    Type     | String                                                         
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 |   Default   | SequenceStrategy                                               
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 |  Effective  | hot-load                                                       
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
diff --git a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md 
b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
index 75cda09764c..893ea3ca9a5 100644
--- a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
@@ -287,12 +287,12 @@ IoTDB DataNode 与 Standalone 模式共用一套配置文件,均位于 IoTDB 
 
 * dn\_multi\_dir\_strategy
 
-|   名字   | dn\_multi\_dir\_strategy                                            
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-|:------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
-|   描述   | IoTDB 在 data\_dirs 中为 TsFile 
选择目录时采用的策略。可使用简单类名或类名全称。系统提供以下三种策略:<br>1. SequenceStrategy:IoTDB 按顺序选择目录,依次遍历 
data\_dirs 中的所有目录,并不断轮循;<br>2. MaxDiskUsableSpaceFirstStrategy:IoTDB 优先选择 
data\_dirs 中对应磁盘空余空间最大的目录;<br>3. MinFolderOccupiedSpaceFirstStrategy:IoTDB 优先选择 
data\_dirs 中已使用空间最小的目录;<br>4. 
UserDefineStrategyPackage(用户自定义策略)<br>您可以通过以下方法完成用户自定义策略:<br>1. 继承 
org.apache.iotdb.db.conf.directories.strategy 类并实现自身的 Strategy 方法;<br>2. 
将实现的类的完整类名(包名加类名,UserDefineStrategyPackage)填写到该配置项 [...]
-|   类型   | String                                                              
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-|  默认值   | SequenceStrategy                                                    
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
-| 改后生效方式 | 热加载                                                                 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
+|   名字   | dn\_multi\_dir\_strategy                                            
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
+|:------:|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 [...]
+|   描述   | IoTDB 在 data\_dirs 中为 TsFile 
选择目录时采用的策略。可使用简单类名或类名全称。系统提供以下三种策略:<br>1. SequenceStrategy:IoTDB 按顺序选择目录,依次遍历 
data\_dirs 中的所有目录,并不断轮循;<br>2. MaxDiskUsableSpaceFirstStrategy:IoTDB 优先选择 
data\_dirs 中对应磁盘空余空间最大的目录;<br>您可以通过以下方法完成用户自定义策略:<br>1. 继承 
org.apache.iotdb.db.conf.directories.strategy 类并实现自身的 Strategy 方法;<br>2. 
将实现的类的完整类名(包名加类名,UserDefineStrategyPackage)填写到该配置项;<br>3. 将该类 jar 包添加到工程中。      
                                                                                
         [...]
+|   类型   | String                                                              
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
+|  默认值   | SequenceStrategy                                                    
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
+| 改后生效方式 | 热加载                                                                 
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
              [...]
 
 * dn\_consensus\_dir
 
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties 
b/server/src/assembly/resources/conf/iotdb-datanode.properties
index 0cbe58a606d..12e806103d0 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -160,9 +160,7 @@ dn_target_config_node_list=127.0.0.1:10710
 # The info of the four strategies are as follows:
 # 1. SequenceStrategy: the system will choose the directory in sequence.
 # 2. MaxDiskUsableSpaceFirstStrategy: the system will choose the directory 
whose disk has the maximum space.
-# 3. MinFolderOccupiedSpaceFirstStrategy: the system will choose the directory 
whose folder has the minimum occupied space.
-# 4. RandomOnDiskUsableSpaceStrategy: the system will randomly choose the 
directory based on usable space of disks. The more usable space, the greater 
the chance of being chosen;
-# Set SequenceStrategy,MaxDiskUsableSpaceFirstStrategy and 
MinFolderOccupiedSpaceFirstStrategy to apply the corresponding strategy.
+# Set SequenceStrategy or MaxDiskUsableSpaceFirstStrategy to apply the 
corresponding strategy.
 # If this property is unset, system will use SequenceStrategy as default 
strategy.
 # For this property, fully-qualified class name (include package name) and 
simple class name are both acceptable.
 # dn_multi_dir_strategy=SequenceStrategy
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 2f537a674cb..96c45658fe6 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
@@ -75,6 +75,8 @@ public class IoTDBConfig {
   private static final Logger logger = 
LoggerFactory.getLogger(IoTDBConfig.class);
   private static final String MULTI_DIR_STRATEGY_PREFIX =
       "org.apache.iotdb.db.conf.directories.strategy.";
+  private static final String[] CLUSTER_ALLOWED_MULTI_DIR_STRATEGIES =
+      new String[] {"SequenceStrategy", "MaxDiskUsableSpaceFirstStrategy"};
   private static final String DEFAULT_MULTI_DIR_STRATEGY = "SequenceStrategy";
 
   private static final String STORAGE_GROUP_MATCHER = 
"([a-zA-Z0-9`_.\\-\\u2E80-\\u9FFF]+)";
@@ -1579,14 +1581,18 @@ public class IoTDBConfig {
   }
 
   public void checkMultiDirStrategyClassName() {
-    if (isClusterMode
-        && !(multiDirStrategyClassName.equals(DEFAULT_MULTI_DIR_STRATEGY)
-            || multiDirStrategyClassName.equals(
-                MULTI_DIR_STRATEGY_PREFIX + DEFAULT_MULTI_DIR_STRATEGY))) {
+    if (isClusterMode) {
+      for (String multiDirStrategy : CLUSTER_ALLOWED_MULTI_DIR_STRATEGIES) {
+        // If the multiDirStrategyClassName is one of cluster allowed 
strategy, the check is passed.
+        if (multiDirStrategyClassName.equals(multiDirStrategy)
+            || multiDirStrategyClassName.equals(MULTI_DIR_STRATEGY_PREFIX + 
multiDirStrategy)) {
+          return;
+        }
+      }
       String msg =
           String.format(
-              "Cannot set multi_dir_strategy to %s, because cluster mode only 
allows MaxDiskUsableSpaceFirstStrategy.",
-              multiDirStrategyClassName);
+              "Cannot set multi_dir_strategy to %s, because cluster mode only 
allows %s.",
+              multiDirStrategyClassName, 
Arrays.toString(CLUSTER_ALLOWED_MULTI_DIR_STRATEGIES));
       logger.error(msg);
       throw new RuntimeException(msg);
     }

Reply via email to