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