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 89b2b96a6f Change default multi_dir_strategy to SequenceStrategy and 
fix original bug (#9718)
89b2b96a6f is described below

commit 89b2b96a6f2c4723f46e9f010763f82e99bd75e2
Author: Zhang.Jinrui <[email protected]>
AuthorDate: Thu Apr 27 16:09:23 2023 +0800

    Change default multi_dir_strategy to SequenceStrategy and fix original bug 
(#9718)
---
 .../java/org/apache/iotdb/commons/utils/JVMCommonUtils.java  | 12 +++++++++++-
 server/src/assembly/resources/conf/iotdb-datanode.properties |  2 +-
 .../src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java  |  2 +-
 .../iotdb/db/conf/directories/strategy/SequenceStrategy.java |  2 +-
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git 
a/node-commons/src/main/java/org/apache/iotdb/commons/utils/JVMCommonUtils.java 
b/node-commons/src/main/java/org/apache/iotdb/commons/utils/JVMCommonUtils.java
index f730eeb34a..4add837b9f 100644
--- 
a/node-commons/src/main/java/org/apache/iotdb/commons/utils/JVMCommonUtils.java
+++ 
b/node-commons/src/main/java/org/apache/iotdb/commons/utils/JVMCommonUtils.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.commons.utils;
 
+import org.apache.iotdb.commons.conf.CommonDescriptor;
 import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
 
 import java.io.File;
@@ -34,6 +35,9 @@ public class JVMCommonUtils {
 
   private static final int CPUS = Runtime.getRuntime().availableProcessors();
 
+  private static final double diskSpaceWarningThreshold =
+      
CommonDescriptor.getInstance().getConfig().getDiskSpaceWarningThreshold();
+
   /**
    * get JDK version.
    *
@@ -60,8 +64,14 @@ public class JVMCommonUtils {
     return dirFile.getFreeSpace();
   }
 
+  public static double getDiskFreeRatio(String dir) {
+    File dirFile = FSFactoryProducer.getFSFactory().getFile(dir);
+    dirFile.mkdirs();
+    return 1.0 * dirFile.getFreeSpace() / dirFile.getTotalSpace();
+  }
+
   public static boolean hasSpace(String dir) {
-    return getUsableSpace(dir) > 0;
+    return getDiskFreeRatio(dir) > diskSpaceWarningThreshold;
   }
 
   public static long getOccupiedSpace(String folderPath) throws IOException {
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties 
b/server/src/assembly/resources/conf/iotdb-datanode.properties
index e23b7dfcb1..e0e1c4b2c5 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -165,7 +165,7 @@ dn_target_config_node_list=127.0.0.1:10710
 # Set SequenceStrategy,MaxDiskUsableSpaceFirstStrategy and 
MinFolderOccupiedSpaceFirstStrategy to apply the corresponding strategy.
 # If this property is unset, system will use MaxDiskUsableSpaceFirstStrategy 
as default strategy.
 # For this property, fully-qualified class name (include package name) and 
simple class name are both acceptable.
-# dn_multi_dir_strategy=MaxDiskUsableSpaceFirstStrategy
+# dn_multi_dir_strategy=SequenceStrategy
 
 # consensus dir
 # If this property is unset, system will save the data in the default relative 
path directory under the IoTDB folder(i.e., %IOTDB_HOME%/data/datanode).
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 1ceb377605..f90c84650c 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
@@ -71,7 +71,7 @@ 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 DEFAULT_MULTI_DIR_STRATEGY = 
"MaxDiskUsableSpaceFirstStrategy";
+  private static final String DEFAULT_MULTI_DIR_STRATEGY = "SequenceStrategy";
 
   private static final String STORAGE_GROUP_MATCHER = 
"([a-zA-Z0-9`_.\\-\\u2E80-\\u9FFF]+)";
   public static final Pattern STORAGE_GROUP_PATTERN = 
Pattern.compile(STORAGE_GROUP_MATCHER);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/conf/directories/strategy/SequenceStrategy.java
 
b/server/src/main/java/org/apache/iotdb/db/conf/directories/strategy/SequenceStrategy.java
index 2160e8fcb5..4d305fd7b1 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/conf/directories/strategy/SequenceStrategy.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/conf/directories/strategy/SequenceStrategy.java
@@ -53,10 +53,10 @@ public class SequenceStrategy extends DirectoryStrategy {
   private int tryGetNextIndex(int start) throws DiskSpaceInsufficientException 
{
     int index = (start + 1) % folders.size();
     while (!JVMCommonUtils.hasSpace(folders.get(index))) {
-      index = (index + 1) % folders.size();
       if (index == start) {
         throw new DiskSpaceInsufficientException(folders);
       }
+      index = (index + 1) % folders.size();
     }
     return index;
   }

Reply via email to