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

ejttianyu pushed a commit to branch proceeding_vldb
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/proceeding_vldb by this push:
     new fe7f596  fix level compaction version 1
fe7f596 is described below

commit fe7f59679f75476bf90212a2bb049ec49d8aa29b
Author: EJTTianyu <[email protected]>
AuthorDate: Sun Feb 21 14:52:54 2021 +0800

    fix level compaction version 1
---
 .../apache/iotdb/db/engine/compaction/TsFileManagement.java  |  2 +-
 .../compaction/level/LevelCompactionTsFileManagement.java    | 12 +++++++-----
 2 files changed, 8 insertions(+), 6 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 c7ee4d3..3f037d2 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
@@ -159,7 +159,7 @@ public abstract class TsFileManagement {
       forkTsFileList(
           forkedSequenceTsFileResources,
           sequenceTsFileResources.computeIfAbsent(timePartition, 
this::newSequenceTsFileResources),
-          seqLevelNum);
+          seqLevelNum + 1);
     }
     synchronized (unSequenceTsFileResources) {
       forkTsFileList(
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 4999d13..6a3b0e9 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
@@ -475,11 +475,10 @@ public class LevelCompactionTsFileManagement extends 
TsFileManagement {
               FSFactoryProducer.getFSFactory().getFile(oldFile + 
RESOURCE_SUFFIX),
               FSFactoryProducer.getFSFactory().getFile(newLevelFile + 
RESOURCE_SUFFIX));
 
-          oldRes.setFile(newLevelFile);
           sequenceTsFileResources.get(timePartition).get(level - 
1).remove(oldRes);
-          sequenceTsFileResources.get(timePartition).get(level).add(oldRes);
-
           forkedSequenceTsFileResources.get(level - 1).remove(0);
+          oldRes.setFile(newLevelFile);
+          sequenceTsFileResources.get(timePartition).get(level).add(oldRes);
           forkedSequenceTsFileResources.get(level).add(oldRes);
         } finally {
           writeUnlock();
@@ -577,7 +576,7 @@ public class LevelCompactionTsFileManagement extends 
TsFileManagement {
       for (TsFileResource tsFileResource : unseqFiles) {
         historicalVersions.addAll(tsFileResource.getHistoricalVersions());
       }
-      Set<TsFileResource> newTsResources = new HashSet<>();
+      List<TsFileResource> newTsResources = new ArrayList<>();
       Set<PartialPath> devices = MManager.getInstance()
           .getDevices(new PartialPath(storageGroupName));
       Map<PartialPath, ChunkWriterImpl> chunkWriterCacheMap = new HashMap<>();
@@ -656,16 +655,18 @@ public class LevelCompactionTsFileManagement extends 
TsFileManagement {
   }
 
   private void cleanUp(Map<Long, Map<Long, List<TsFileResource>>> resources,
-      Set<TsFileResource> newTsResources, long level, long timePartition) {
+      List<TsFileResource> newTsResources, long level, long timePartition) {
     writeLock();
     try {
       Map<Long, List<TsFileResource>> cleanRes = resources.get(timePartition);
       for (Entry<Long, List<TsFileResource>> res : cleanRes.entrySet()) {
         if (res.getKey() == 0L) {
           
unSequenceTsFileResources.get(timePartition).get(0).removeAll(res.getValue());
+          forkedUnSequenceTsFileResources.get(0).removeAll(res.getValue());
         } else {
           sequenceTsFileResources.get(timePartition).get((int) (res.getKey() - 
1))
               .removeAll(res.getValue());
+          forkedSequenceTsFileResources.get((int) (res.getKey() - 
1)).removeAll(res.getValue());
         }
         for (TsFileResource deleteRes : res.getValue()) {
           ChunkCache.getInstance().clear();
@@ -684,6 +685,7 @@ public class LevelCompactionTsFileManagement extends 
TsFileManagement {
             FSFactoryProducer.getFSFactory().getFile(newLevelFile + 
RESOURCE_SUFFIX));
         oldResource.setFile(newLevelFile);
         sequenceTsFileResources.get(timePartition).get((int) (level - 
1)).add(oldResource);
+        forkedSequenceTsFileResources.get((int) (level - 1)).add(oldResource);
       }
     } catch (Exception e) {
       //TODO do nothing

Reply via email to