You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2021/05/17 08:12:07 UTC
[iotdb] branch rel/0.11 updated: [To rel/0.11] Fix continuous
compaction run into dead loop when unseq compaction cannot select
candidates (#3201)
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch rel/0.11
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.11 by this push:
new e5467fb [To rel/0.11] Fix continuous compaction run into dead loop when unseq compaction cannot select candidates (#3201)
e5467fb is described below
commit e5467fbcbd19286596642d9414f90bcded3adde9
Author: zhanglingzhe0820 <44...@qq.com>
AuthorDate: Mon May 17 16:11:51 2021 +0800
[To rel/0.11] Fix continuous compaction run into dead loop when unseq compaction cannot select candidates (#3201)
Co-authored-by: zhanglingzhe <su...@foxmail.com>
---
.../iotdb/db/engine/compaction/TsFileManagement.java | 15 ++++++++-------
.../level/LevelCompactionTsFileManagement.java | 18 +++++++++++-------
2 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/TsFileManagement.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/TsFileManagement.java
index 0cf1e74..2e237ea 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/TsFileManagement.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/TsFileManagement.java
@@ -185,7 +185,7 @@ public abstract class TsFileManagement {
}
}
- public void merge(
+ public boolean merge(
boolean fullMerge,
List<TsFileResource> seqMergeList,
List<TsFileResource> unSeqMergeList,
@@ -197,7 +197,7 @@ public abstract class TsFileManagement {
storageGroupName,
(System.currentTimeMillis() - mergeStartTime));
}
- return;
+ return false;
}
// wait until seq merge has finished
while (isSeqMerging) {
@@ -206,7 +206,7 @@ public abstract class TsFileManagement {
} catch (InterruptedException e) {
logger.error("{} [Compaction] shutdown", storageGroupName, e);
Thread.currentThread().interrupt();
- return;
+ return false;
}
}
isUnseqMerging = true;
@@ -214,13 +214,13 @@ public abstract class TsFileManagement {
if (seqMergeList.isEmpty()) {
logger.info("{} no seq files to be merged", storageGroupName);
isUnseqMerging = false;
- return;
+ return false;
}
if (unSeqMergeList.isEmpty()) {
logger.info("{} no unseq files to be merged", storageGroupName);
isUnseqMerging = false;
- return;
+ return false;
}
long budget = IoTDBDescriptor.getInstance().getConfig().getMergeMemoryBudget();
@@ -234,7 +234,7 @@ public abstract class TsFileManagement {
logger.info(
"{} cannot select merge candidates under the budget {}", storageGroupName, budget);
isUnseqMerging = false;
- return;
+ return false;
}
// avoid pending tasks holds the metadata and streams
mergeResource.clear();
@@ -271,9 +271,10 @@ public abstract class TsFileManagement {
mergeFiles[0].size(),
mergeFiles[1].size());
}
-
+ return true;
} catch (MergeException | IOException e) {
logger.error("{} cannot select file for merge", storageGroupName, e);
+ return false;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/LevelCompactionTsFileManagement.java b/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/LevelCompactionTsFileManagement.java
index 7a41518..88c9c85 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/LevelCompactionTsFileManagement.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/compaction/level/LevelCompactionTsFileManagement.java
@@ -570,12 +570,12 @@ public class LevelCompactionTsFileManagement extends TsFileManagement {
if (enableUnseqCompaction
&& unseqLevelNum <= 1
&& forkedUnSequenceTsFileResources.get(0).size() > 0) {
- isMergeExecutedInCurrentTask = true;
- merge(
- isForceFullMerge,
- getTsFileListByTimePartition(true, timePartition),
- forkedUnSequenceTsFileResources.get(0),
- Long.MAX_VALUE);
+ isMergeExecutedInCurrentTask =
+ merge(
+ isForceFullMerge,
+ getTsFileListByTimePartition(true, timePartition),
+ forkedUnSequenceTsFileResources.get(0),
+ Long.MAX_VALUE);
} else {
isMergeExecutedInCurrentTask =
merge(
@@ -620,7 +620,11 @@ public class LevelCompactionTsFileManagement extends TsFileManagement {
// do not merge current unseq file level to upper level and just merge all of them to
// seq file
isSeqMerging = false;
- merge(isForceFullMerge, getTsFileListByTimePartition(true, timePartition), mergeResources.get(i), Long.MAX_VALUE);
+ isMergeExecutedInCurrentTask = merge(
+ isForceFullMerge,
+ getTsFileListByTimePartition(true, timePartition),
+ mergeResources.get(i),
+ Long.MAX_VALUE);
} else {
CompactionLogger compactionLogger =
new CompactionLogger(storageGroupDir, storageGroupName);