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

haonan pushed a commit to branch rc/1.3.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 5f9291c9746dfaaf207cd9b09b1b7a2bd417b1dc
Author: shuwenwei <[email protected]>
AuthorDate: Thu Jul 4 13:10:34 2024 +0800

    modify compaction schedule (#12826)
---
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java   |  2 +-
 .../compaction/schedule/CompactionScheduler.java     | 20 +++++++++++++++-----
 .../compaction/schedule/CompactionTaskManager.java   |  8 ++++++++
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 1dd9c0c3942..6c870287b56 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -470,7 +470,7 @@ public class IoTDBConfig {
    * cross space compaction, eliminate the unsequence files first BALANCE: 
alternate two compaction
    * types
    */
-  private CompactionPriority compactionPriority = CompactionPriority.BALANCE;
+  private CompactionPriority compactionPriority = 
CompactionPriority.INNER_CROSS;
 
   private double chunkMetadataSizeProportion = 0.1;
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
index 8d57caee8fd..097caad018a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionScheduler.java
@@ -100,11 +100,18 @@ public class CompactionScheduler {
     // the name of this variable is trySubmitCount, because the task submitted 
to the queue could be
     // evicted due to the low priority of the task
     int trySubmitCount = 0;
-    trySubmitCount += tryToSubmitCrossSpaceCompactionTask(tsFileManager, 
timePartition, summary);
-    trySubmitCount +=
-        tryToSubmitInnerSpaceCompactionTask(tsFileManager, timePartition, 
true, summary);
-    trySubmitCount +=
-        tryToSubmitInnerSpaceCompactionTask(tsFileManager, timePartition, 
false, summary);
+    try {
+      trySubmitCount +=
+          tryToSubmitInnerSpaceCompactionTask(tsFileManager, timePartition, 
true, summary);
+      trySubmitCount +=
+          tryToSubmitInnerSpaceCompactionTask(tsFileManager, timePartition, 
false, summary);
+      trySubmitCount += tryToSubmitCrossSpaceCompactionTask(tsFileManager, 
timePartition, summary);
+    } catch (InterruptedException e) {
+      throw e;
+    } catch (Throwable e) {
+      LOGGER.error("Meet error in compaction schedule.", e);
+    }
+
     return trySubmitCount;
   }
 
@@ -248,6 +255,9 @@ public class CompactionScheduler {
     if (!config.isEnableCrossSpaceCompaction()) {
       return 0;
     }
+    if 
(!CompactionTaskManager.getInstance().shouldSelectCrossSpaceCompactionTask()) {
+      return 0;
+    }
     String logicalStorageGroupName = tsFileManager.getStorageGroupName();
     String dataRegionId = tsFileManager.getDataRegionId();
     long compactionConfigVersionWhenSelectTask =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionTaskManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionTaskManager.java
index 78117ae9d41..a1d98016fd2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionTaskManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/schedule/CompactionTaskManager.java
@@ -243,6 +243,14 @@ public class CompactionTaskManager implements IService {
     return ServiceType.COMPACTION_SERVICE;
   }
 
+  public boolean shouldSelectCrossSpaceCompactionTask() {
+    // If the queue size accounts for less than 0.8 of the total capacity, 
select cross space
+    // compaction task
+    int waitingQueueRestSize =
+        candidateCompactionTaskQueue.getMaxSize() - 
candidateCompactionTaskQueue.size();
+    return 5 * waitingQueueRestSize >= candidateCompactionTaskQueue.size();
+  }
+
   public boolean isWaitingQueueFull() {
     return candidateCompactionTaskQueue.size() == 
candidateCompactionTaskQueue.getMaxSize();
   }

Reply via email to