Fix compaction test (#6626)

diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java
index 53067b3..5fc075f 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/cross/CrossSpaceCompactionExceptionTest.java
@@ -32,6 +32,7 @@
 import org.apache.iotdb.db.engine.compaction.utils.CompactionFileGeneratorUtils;
 import org.apache.iotdb.db.engine.modification.ModificationFile;
 import org.apache.iotdb.db.engine.storagegroup.TsFileManager;
+import org.apache.iotdb.db.engine.storagegroup.TsFileName;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
@@ -45,6 +46,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -228,6 +230,7 @@
     createFiles(3, 3, 4, 200, 20, 10020, 30, 30, false, false);
     createFiles(2, 1, 5, 100, 450, 20450, 0, 0, false, false);
     TsFileManager tsFileManager = new TsFileManager(COMPACTION_TEST_SG, "0", SEQ_DIRS.getPath());
+
     tsFileManager.addAll(seqResources, true);
     tsFileManager.addAll(unseqResources, false);
 
@@ -247,15 +250,7 @@
     performer.setSummary(new CompactionTaskSummary());
     performer.perform();
     CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG);
-    for (TsFileResource resource : seqResources) {
-      tsFileManager.getSequenceListByTimePartition(0).remove(resource);
-    }
-    for (TsFileResource resource : unseqResources) {
-      tsFileManager.getUnsequenceListByTimePartition(0).remove(resource);
-    }
-    for (TsFileResource resource : targetResources) {
-      tsFileManager.getSequenceListByTimePartition(0).keepOrderInsert(resource);
-    }
+    tsFileManager.replace(seqResources, unseqResources, targetResources, 0, true);
     seqResources.get(0).getTsFile().delete();
     compactionLogger.close();
     CompactionExceptionHandler.handleException(
@@ -296,6 +291,102 @@
       Assert.assertTrue(
           new File(resource.getTsFilePath() + TsFileResource.RESOURCE_SUFFIX).exists());
     }
+    List<TsFileResource> resources = new ArrayList<>();
+    for (TsFileResource resource : tsFileManager.getSequenceListByTimePartition(0)) {
+      resources.add(resource);
+    }
+
+    Assert.assertEquals(4, tsFileManager.getSequenceListByTimePartition(0).size());
+    Assert.assertEquals(0, tsFileManager.getUnsequenceListByTimePartition(0).size());
+    Assert.assertTrue(tsFileManager.isAllowCompaction());
+  }
+
+  @Test
+  public void testHandleWithSomeSameTimeStampSourceFilesExisted() throws Exception {
+    registerTimeseriesInMManger(4, 5, false);
+    createFiles(2, 2, 3, 300, 0, 0, 50, 50, false, true);
+    createFiles(2, 4, 5, 300, 700, 700, 50, 50, false, true);
+    createFiles(3, 3, 4, 200, 20, 10020, 30, 30, false, false);
+    createFiles(2, 1, 5, 100, 450, 20450, 0, 0, false, false);
+    TsFileManager tsFileManager = new TsFileManager(COMPACTION_TEST_SG, "0", SEQ_DIRS.getPath());
+    TsFileName tsFileName1 = TsFileName.parse(seqResources.get(1).getTsFile().getName());
+    TsFileName tsFileName2 = TsFileName.parse(seqResources.get(2).getTsFile().getName());
+    tsFileName2.setTime(tsFileName1.getTime());
+    File newTsFile =
+        new File(seqResources.get(2).getTsFile().getParent(), tsFileName2.toFileName());
+    seqResources.get(2).getTsFile().renameTo(newTsFile);
+    File resourceFile =
+        new File(seqResources.get(2).getTsFilePath() + TsFileResource.RESOURCE_SUFFIX);
+    resourceFile.renameTo(
+        new File(
+            resourceFile.getParent(), tsFileName2.toFileName() + TsFileResource.RESOURCE_SUFFIX));
+    seqResources.get(2).setFile(newTsFile);
+
+    tsFileManager.addAll(seqResources, true);
+    tsFileManager.addAll(unseqResources, false);
+
+    List<TsFileResource> targetResources =
+        CompactionFileGeneratorUtils.getCrossCompactionTargetTsFileResources(seqResources);
+    File compactionLogFile =
+        new File(
+            SEQ_DIRS,
+            targetResources.get(0).getTsFile().getName()
+                + CompactionLogger.CROSS_COMPACTION_LOG_NAME_SUFFIX);
+    CompactionLogger compactionLogger = new CompactionLogger(compactionLogFile);
+    compactionLogger.logFiles(targetResources, STR_TARGET_FILES);
+    compactionLogger.logFiles(seqResources, STR_SOURCE_FILES);
+    compactionLogger.logFiles(unseqResources, STR_SOURCE_FILES);
+    ICompactionPerformer performer =
+        new ReadPointCompactionPerformer(seqResources, unseqResources, targetResources);
+    performer.setSummary(new CompactionTaskSummary());
+    performer.perform();
+    CompactionUtils.moveTargetFile(targetResources, false, COMPACTION_TEST_SG);
+    tsFileManager.replace(seqResources, unseqResources, targetResources, 0, true);
+    seqResources.get(0).getTsFile().delete();
+    compactionLogger.close();
+    CompactionExceptionHandler.handleException(
+        COMPACTION_TEST_SG,
+        compactionLogFile,
+        targetResources,
+        seqResources,
+        unseqResources,
+        tsFileManager,
+        0,
+        false,
+        true);
+    // all source file should not exist
+    for (TsFileResource resource : seqResources) {
+      Assert.assertFalse(resource.getTsFile().exists());
+    }
+    // tmp target file and tmp target resource file should not exist, target file and target
+    // resource file should exist
+    for (TsFileResource resource : targetResources) {
+      Assert.assertFalse(
+          new File(
+                  resource
+                      .getTsFilePath()
+                      .replace(
+                          TsFileConstant.TSFILE_SUFFIX,
+                          IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX))
+              .exists());
+      Assert.assertFalse(
+          new File(
+                  resource
+                          .getTsFilePath()
+                          .replace(
+                              TsFileConstant.TSFILE_SUFFIX,
+                              IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX)
+                      + TsFileResource.RESOURCE_SUFFIX)
+              .exists());
+      Assert.assertTrue(resource.getTsFile().exists());
+      Assert.assertTrue(
+          new File(resource.getTsFilePath() + TsFileResource.RESOURCE_SUFFIX).exists());
+    }
+    List<TsFileResource> resources = new ArrayList<>();
+    for (TsFileResource resource : tsFileManager.getSequenceListByTimePartition(0)) {
+      resources.add(resource);
+    }
+
     Assert.assertEquals(4, tsFileManager.getSequenceListByTimePartition(0).size());
     Assert.assertEquals(0, tsFileManager.getUnsequenceListByTimePartition(0).size());
     Assert.assertTrue(tsFileManager.isAllowCompaction());
@@ -350,15 +441,7 @@
       CompactionFileGeneratorUtils.generateMods(deleteMap, unseqResources.get(i), false);
     }
     CompactionUtils.combineModsInCrossCompaction(seqResources, unseqResources, targetResources);
-    for (TsFileResource resource : seqResources) {
-      tsFileManager.getSequenceListByTimePartition(0).remove(resource);
-    }
-    for (TsFileResource resource : unseqResources) {
-      tsFileManager.getUnsequenceListByTimePartition(0).remove(resource);
-    }
-    for (TsFileResource resource : targetResources) {
-      tsFileManager.getSequenceListByTimePartition(0).keepOrderInsert(resource);
-    }
+    tsFileManager.replace(seqResources, unseqResources, targetResources, 0, true);
     seqResources.get(0).remove();
 
     CompactionExceptionHandler.handleException(
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSeqCompactionTest.java b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSeqCompactionTest.java
index 09e17a7..54ef8a1 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSeqCompactionTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerSeqCompactionTest.java
@@ -37,7 +37,6 @@
 import org.apache.iotdb.db.engine.compaction.utils.CompactionTimeseriesType;
 import org.apache.iotdb.db.engine.flush.TsFileFlushPolicy;
 import org.apache.iotdb.db.engine.storagegroup.DataRegion;
-import org.apache.iotdb.db.engine.storagegroup.TsFileNameGenerator;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.DataRegionException;
 import org.apache.iotdb.db.exception.StorageEngineException;
@@ -1050,8 +1049,7 @@
       Assert.assertFalse(resource.getCompactionModFile().exists());
     }
 
-    TsFileResource resource =
-        TsFileNameGenerator.increaseInnerCompactionCnt(sourceResources.get(0));
+    TsFileResource resource = task.targetTsFileResource;
     resource.resetModFile();
     Assert.assertTrue(resource.getModFile().exists());
     Assert.assertEquals(2, resource.getModFile().getModifications().size());