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

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


The following commit(s) were added to refs/heads/master by this push:
     new c364449170 [IOTDB-5726]Select the last sealed seq file for nonOverlap 
unseq files to compact in cross compaction (#9501)
c364449170 is described below

commit c364449170f77b0705897bf3ebe26b727e26485f
Author: 周沛辰 <[email protected]>
AuthorDate: Thu Apr 13 15:03:31 2023 +0800

    [IOTDB-5726]Select the last sealed seq file for nonOverlap unseq files to 
compact in cross compaction (#9501)
---
 .../impl/RewriteCrossSpaceCompactionSelector.java  |  30 +
 .../utils/CrossSpaceCompactionCandidate.java       |  15 +-
 ...eCompactionWithFastPerformerValidationTest.java | 705 ++++++++++++++++++++
 ...actionWithReadPointPerformerValidationTest.java | 713 ++++++++++++++++++++-
 4 files changed, 1458 insertions(+), 5 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java
index a6ed828827..f96f52ac64 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/impl/RewriteCrossSpaceCompactionSelector.java
@@ -154,6 +154,17 @@ public class RewriteCrossSpaceCompactionSelector 
implements ICrossSpaceSelector
       TsFileResource unseqFile = split.unseqFile.resource;
       List<TsFileResource> targetSeqFiles =
           split.seqFiles.stream().map(c -> 
c.resource).collect(Collectors.toList());
+
+      if (!split.hasOverlap) {
+        LOGGER.info("Unseq file {} does not overlap with any seq files.", 
unseqFile);
+        TsFileResource latestSealedSeqFile =
+            getLatestSealedSeqFile(candidate.getSeqFileCandidates());
+        if (latestSealedSeqFile == null) {
+          break;
+        }
+        targetSeqFiles.add(latestSealedSeqFile);
+      }
+
       long memoryCost =
           compactionEstimator.estimateCrossCompactionMemory(targetSeqFiles, 
unseqFile);
       if (!canAddToTaskResource(taskResource, unseqFile, targetSeqFiles, 
memoryCost)) {
@@ -171,6 +182,25 @@ public class RewriteCrossSpaceCompactionSelector 
implements ICrossSpaceSelector
     return taskResource;
   }
 
+  private TsFileResource getLatestSealedSeqFile(
+      List<TsFileResourceCandidate> seqResourceCandidateList) {
+    for (int i = seqResourceCandidateList.size() - 1; i >= 0; i--) {
+      TsFileResourceCandidate seqResourceCandidate = 
seqResourceCandidateList.get(i);
+      if (seqResourceCandidate.resource.isClosed()) {
+        // We must select the latest sealed and valid seq file to compact 
with, in order to avoid
+        // overlapping of the new compacted files with the subsequent seq 
files.
+        if (seqResourceCandidate.isValidCandidate) {
+          LOGGER.info(
+              "Select one valid seq file {} for unseq file to compact with.",
+              seqResourceCandidate.resource);
+          return seqResourceCandidate.resource;
+        }
+        break;
+      }
+    }
+    return null;
+  }
+
   // TODO: (xingtanzjr) need to confirm whether we should strictly guarantee 
the conditions
   // If we guarantee the condition strictly, the smallest collection of cross 
task resource may not
   // satisfied
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/utils/CrossSpaceCompactionCandidate.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/utils/CrossSpaceCompactionCandidate.java
index 2b21345957..bedf2e2fbc 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/utils/CrossSpaceCompactionCandidate.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/selector/utils/CrossSpaceCompactionCandidate.java
@@ -73,6 +73,7 @@ public class CrossSpaceCompactionCandidate {
   }
 
   private boolean prepareNextSplit() throws IOException {
+    boolean nextUnseqFileHasOverlap = false;
     TsFileResourceCandidate unseqFile = unseqFiles.get(nextUnseqFileIndex);
     List<TsFileResourceCandidate> ret = new ArrayList<>();
 
@@ -104,6 +105,7 @@ public class CrossSpaceCompactionCandidate {
             ret.add(seqFile);
             seqFile.markAsSelected();
           }
+          nextUnseqFileHasOverlap = true;
           // if this condition is satisfied, all subsequent seq files is 
unnecessary to check
           break;
         } else if (unseqDeviceInfo.startTime <= seqDeviceInfo.endTime) {
@@ -111,13 +113,14 @@ public class CrossSpaceCompactionCandidate {
             ret.add(seqFile);
             seqFile.markAsSelected();
           }
+          nextUnseqFileHasOverlap = true;
         }
       }
     }
     // mark candidates in next split as selected even though it may not be 
added to the final
     // TaskResource
     unseqFile.markAsSelected();
-    nextSplit = new CrossCompactionTaskResourceSplit(unseqFile, ret);
+    nextSplit = new CrossCompactionTaskResourceSplit(unseqFile, ret, 
nextUnseqFileHasOverlap);
     nextUnseqFileIndex++;
     return true;
   }
@@ -154,6 +157,10 @@ public class CrossSpaceCompactionCandidate {
         .collect(Collectors.toList());
   }
 
+  public List<TsFileResourceCandidate> getSeqFileCandidates() {
+    return seqFiles;
+  }
+
   public List<TsFileResourceCandidate> getUnseqFileCandidates() {
     return unseqFiles;
   }
@@ -167,11 +174,15 @@ public class CrossSpaceCompactionCandidate {
   public static class CrossCompactionTaskResourceSplit {
     public TsFileResourceCandidate unseqFile;
     public List<TsFileResourceCandidate> seqFiles;
+    public boolean hasOverlap;
 
     public CrossCompactionTaskResourceSplit(
-        TsFileResourceCandidate unseqFile, List<TsFileResourceCandidate> 
seqFiles) {
+        TsFileResourceCandidate unseqFile,
+        List<TsFileResourceCandidate> seqFiles,
+        boolean hasOverlap) {
       this.unseqFile = unseqFile;
       this.seqFiles = seqFiles;
+      this.hasOverlap = hasOverlap;
     }
   }
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithFastPerformerValidationTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithFastPerformerValidationTest.java
index cc0a0d3f18..817fbf11f7 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithFastPerformerValidationTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithFastPerformerValidationTest.java
@@ -19,7 +19,11 @@
 
 package org.apache.iotdb.db.engine.compaction.cross;
 
+import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.path.AlignedPath;
+import org.apache.iotdb.commons.path.MeasurementPath;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest;
 import 
org.apache.iotdb.db.engine.compaction.execute.performer.ICrossCompactionPerformer;
@@ -31,6 +35,7 @@ import 
org.apache.iotdb.db.engine.compaction.execute.utils.CompactionUtils;
 import org.apache.iotdb.db.engine.compaction.selector.ICompactionSelector;
 import org.apache.iotdb.db.engine.compaction.selector.ICrossSpaceSelector;
 import 
org.apache.iotdb.db.engine.compaction.selector.impl.RewriteCrossSpaceCompactionSelector;
+import 
org.apache.iotdb.db.engine.compaction.selector.impl.SizeTieredCompactionSelector;
 import 
org.apache.iotdb.db.engine.compaction.selector.utils.CrossCompactionTaskResource;
 import 
org.apache.iotdb.db.engine.compaction.selector.utils.CrossSpaceCompactionCandidate;
 import 
org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils;
@@ -42,7 +47,12 @@ import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.query.control.FileReaderManager;
 import org.apache.iotdb.db.tools.validate.TsFileValidationTool;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.utils.Pair;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -52,10 +62,13 @@ import org.junit.Test;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_SEPARATOR;
+import static 
org.apache.iotdb.tsfile.utils.TsFileGeneratorUtils.alignDeviceOffset;
 
 public class CrossSpaceCompactionWithFastPerformerValidationTest extends 
AbstractCompactionTest {
   TsFileManager tsFileManager =
@@ -2289,4 +2302,696 @@ public class 
CrossSpaceCompactionWithFastPerformerValidationTest extends Abstrac
     List<List<TsFileResource>> innerPairs = 
innerSelector.selectInnerSpaceTask(targetResources);
     Assert.assertEquals(1, innerPairs.size());
   }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles1() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles2() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles3() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(4, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(1, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles4() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(1, 9, 10, 500, 100, 100, 0, 100, false, false);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(2, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(3, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles1() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles2() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles3() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(4, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(1, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles4() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(1, 9, 10, 500, 100, 100, 0, 100, true, false);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new FastCompactionPerformer(false),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(2, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(3, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new FastCompactionPerformer(true),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  public void generateModsFile(
+      List<PartialPath> seriesPaths, TsFileResource resource, long startValue, 
long endValue)
+      throws IllegalPathException, IOException {
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (PartialPath path : seriesPaths) {
+      String fullPath =
+          (path instanceof AlignedPath)
+              ? path.getFullPath()
+                  + TsFileConstant.PATH_SEPARATOR
+                  + ((AlignedPath) path).getMeasurementList().get(0)
+              : path.getFullPath();
+      deleteMap.put(fullPath, new Pair<>(startValue, endValue));
+    }
+    CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+  }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithReadPointPerformerValidationTest.java
 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithReadPointPerformerValidationTest.java
index 3d7a0744cf..c76dfd162d 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithReadPointPerformerValidationTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionWithReadPointPerformerValidationTest.java
@@ -19,7 +19,11 @@
 
 package org.apache.iotdb.db.engine.compaction.cross;
 
+import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
+import org.apache.iotdb.commons.path.AlignedPath;
+import org.apache.iotdb.commons.path.MeasurementPath;
+import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.compaction.AbstractCompactionTest;
 import 
org.apache.iotdb.db.engine.compaction.execute.performer.ICrossCompactionPerformer;
@@ -27,13 +31,14 @@ import 
org.apache.iotdb.db.engine.compaction.execute.performer.impl.ReadChunkCom
 import 
org.apache.iotdb.db.engine.compaction.execute.performer.impl.ReadPointCompactionPerformer;
 import 
org.apache.iotdb.db.engine.compaction.execute.task.CompactionTaskSummary;
 import 
org.apache.iotdb.db.engine.compaction.execute.task.CrossSpaceCompactionTask;
+import 
org.apache.iotdb.db.engine.compaction.execute.task.InnerSpaceCompactionTask;
 import org.apache.iotdb.db.engine.compaction.execute.utils.CompactionUtils;
 import org.apache.iotdb.db.engine.compaction.selector.ICrossSpaceSelector;
 import 
org.apache.iotdb.db.engine.compaction.selector.impl.RewriteCrossSpaceCompactionSelector;
+import 
org.apache.iotdb.db.engine.compaction.selector.impl.SizeTieredCompactionSelector;
 import 
org.apache.iotdb.db.engine.compaction.selector.utils.CrossCompactionTaskResource;
 import 
org.apache.iotdb.db.engine.compaction.selector.utils.CrossSpaceCompactionCandidate;
 import 
org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils;
-import org.apache.iotdb.db.engine.storagegroup.TsFileManager;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus;
 import org.apache.iotdb.db.exception.MergeException;
@@ -41,7 +46,12 @@ import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.query.control.FileReaderManager;
 import org.apache.iotdb.db.tools.validate.TsFileValidationTool;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
+import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.utils.Pair;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -51,13 +61,18 @@ import org.junit.Test;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import static org.apache.iotdb.commons.conf.IoTDBConstant.PATH_SEPARATOR;
+import static 
org.apache.iotdb.tsfile.utils.TsFileGeneratorUtils.alignDeviceOffset;
+
 public class CrossSpaceCompactionWithReadPointPerformerValidationTest
     extends AbstractCompactionTest {
-  TsFileManager tsFileManager =
-      new TsFileManager(COMPACTION_TEST_SG, "0", STORAGE_GROUP_DIR.getPath());
+  //  TsFileManager tsFileManager =
+  //      new TsFileManager(COMPACTION_TEST_SG, "0", 
STORAGE_GROUP_DIR.getPath());
 
   private final String oldThreadName = Thread.currentThread().getName();
 
@@ -2147,4 +2162,696 @@ public class 
CrossSpaceCompactionWithReadPointPerformerValidationTest
 
     Assert.assertEquals(0, selected.size());
   }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles1() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles2() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles3() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(4, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(1, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testNonAlignedUnseqFilesNotOverlapWithSeqFiles4() throws 
Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, false, true);
+    createFiles(1, 9, 10, 500, 100, 100, 0, 100, false, false);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, false, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, false, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + d + PATH_SEPARATOR + 
"s" + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new MeasurementPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR 
+ "s" + j,
+                TSDataType.INT64));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(2, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(3, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles1() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles2() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles3() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(4, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(1, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadPointCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(1, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(2, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  @Test
+  public void testAlignedUnseqFilesNotOverlapWithSeqFiles4() throws Exception {
+    
IoTDBDescriptor.getInstance().getConfig().setMaxInnerCompactionCandidateFileNum(2);
+    createFiles(5, 10, 5, 1000, 0, 0, 100, 100, true, true);
+    createFiles(1, 9, 10, 500, 100, 100, 0, 100, true, false);
+    createFiles(2, 5, 10, 500, 6000, 6000, 0, 100, true, false);
+    createFiles(3, 10, 5, 1000, 7500, 7500, 100, 100, true, true);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    // delete d0 ~ d5 in seq files
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (int d = 0; d < 5; d++) {
+      for (int m = 0; m < 5; m++) {
+        deleteMap.put(
+            COMPACTION_TEST_SG
+                + PATH_SEPARATOR
+                + "d"
+                + (alignDeviceOffset + d)
+                + PATH_SEPARATOR
+                + "s"
+                + m,
+            new Pair<>(Long.MIN_VALUE, Long.MAX_VALUE));
+      }
+    }
+    for (TsFileResource resource : seqResources) {
+      CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+    }
+
+    List<PartialPath> timeseriesPaths = new ArrayList<>();
+    for (int i = 0; i < 10; i++) {
+      for (int j = 0; j < 10; j++) {
+        timeseriesPaths.add(
+            new AlignedPath(
+                COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i,
+                Collections.singletonList("s" + j),
+                Collections.singletonList(new MeasurementSchema("s" + j, 
TSDataType.INT64))));
+      }
+    }
+    Map<PartialPath, List<TimeValuePair>> sourceData =
+        readSourceFiles(timeseriesPaths, Collections.emptyList());
+
+    // inner seq space compact
+    List<List<TsFileResource>> taskResources =
+        new SizeTieredCompactionSelector(COMPACTION_TEST_SG, "0", 0, true, 
tsFileManager)
+            
.selectInnerSpaceTask(tsFileManager.getOrCreateSequenceListByTimePartition(0));
+    for (List<TsFileResource> taskResource : taskResources) {
+      new InnerSpaceCompactionTask(
+              0,
+              tsFileManager,
+              taskResource,
+              true,
+              new ReadChunkCompactionPerformer(),
+              new AtomicInteger(0),
+              0L)
+          .start();
+    }
+
+    // select cross compaction
+    ICrossSpaceSelector crossSpaceCompactionSelector =
+        IoTDBDescriptor.getInstance()
+            .getConfig()
+            .getCrossCompactionSelector()
+            .createInstance(COMPACTION_TEST_SG, "0", 0, tsFileManager);
+    CrossCompactionTaskResource sourceFiles =
+        crossSpaceCompactionSelector
+            .selectCrossSpaceTask(
+                tsFileManager.getOrCreateSequenceListByTimePartition(0),
+                tsFileManager.getOrCreateUnsequenceListByTimePartition(0))
+            .get(0);
+    Assert.assertEquals(2, sourceFiles.getSeqFiles().size());
+    Assert.assertEquals(3, sourceFiles.getUnseqFiles().size());
+
+    new CrossSpaceCompactionTask(
+            0,
+            tsFileManager,
+            sourceFiles.getSeqFiles(),
+            sourceFiles.getUnseqFiles(),
+            new ReadPointCompactionPerformer(),
+            new AtomicInteger(0),
+            sourceFiles.getTotalMemoryCost(),
+            0)
+        .start();
+
+    validateSeqFiles(true);
+    validateTargetDatas(sourceData, Collections.emptyList());
+  }
+
+  public void generateModsFile(
+      List<PartialPath> seriesPaths, TsFileResource resource, long startValue, 
long endValue)
+      throws IllegalPathException, IOException {
+    Map<String, Pair<Long, Long>> deleteMap = new HashMap<>();
+    for (PartialPath path : seriesPaths) {
+      String fullPath =
+          (path instanceof AlignedPath)
+              ? path.getFullPath()
+                  + TsFileConstant.PATH_SEPARATOR
+                  + ((AlignedPath) path).getMeasurementList().get(0)
+              : path.getFullPath();
+      deleteMap.put(fullPath, new Pair<>(startValue, endValue));
+    }
+    CompactionFileGeneratorUtils.generateMods(deleteMap, resource, false);
+  }
 }

Reply via email to