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(); }
