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

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

commit 82e4a55d18169296285a9d3d3ca5cca040177fe9
Author: Jinrui.Zhang <[email protected]>
AuthorDate: Tue Oct 17 18:41:47 2023 +0800

    fix file replace error in memory
---
 .../execute/task/AbstractCompactionTask.java       | 26 +++++++++++++---------
 .../execute/task/CrossSpaceCompactionTask.java     |  9 +++++---
 .../execute/task/InnerSpaceCompactionTask.java     |  4 ++--
 3 files changed, 24 insertions(+), 15 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
index 18661335876..eb17f10f8c0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/AbstractCompactionTask.java
@@ -213,6 +213,17 @@ public abstract class AbstractCompactionTask {
     }
   }
 
+  protected void replaceTsFileInMemory(
+      List<TsFileResource> removedTsFiles, List<TsFileResource> addedTsFiles) 
throws IOException {
+    tsFileManager.writeLock("compactionRollBack");
+    try {
+      removeTsFileInMemory(removedTsFiles);
+      insertFilesToTsFileManager(addedTsFiles);
+    } finally {
+      tsFileManager.writeUnlock();
+    }
+  }
+
   protected boolean checkAllSourceFileExists(List<TsFileResource> 
tsFileResources) {
     for (TsFileResource tsFileResource : tsFileResources) {
       if (!tsFileResource.getTsFile().exists() || 
!tsFileResource.resourceFileExists()) {
@@ -241,17 +252,12 @@ public abstract class AbstractCompactionTask {
   }
 
   protected void removeTsFileInMemory(List<TsFileResource> resourceList) {
-    tsFileManager.writeLock("CompactionExceptionHandler");
-    try {
-      for (TsFileResource targetTsFile : resourceList) {
-        if (targetTsFile == null) {
-          // target file has been deleted due to empty after compaction
-          continue;
-        }
-        tsFileManager.remove(targetTsFile, targetTsFile.isSeq());
+    for (TsFileResource targetTsFile : resourceList) {
+      if (targetTsFile == null) {
+        // target file has been deleted due to empty after compaction
+        continue;
       }
-    } finally {
-      tsFileManager.writeUnlock();
+      tsFileManager.remove(targetTsFile, targetTsFile.isSeq());
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/CrossSpaceCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/CrossSpaceCompactionTask.java
index 83af4af0c5a..eaaf78df9c1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/CrossSpaceCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/CrossSpaceCompactionTask.java
@@ -47,6 +47,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 public class CrossSpaceCompactionTask extends AbstractCompactionTask {
   private static final Logger LOGGER =
@@ -341,9 +343,10 @@ public class CrossSpaceCompactionTask extends 
AbstractCompactionTask {
   private void rollback() throws Exception {
     // if the task has started,
     if (recoverMemoryStatus) {
-      removeTsFileInMemory(targetTsfileResourceList);
-      insertFilesToTsFileManager(selectedSequenceFiles);
-      insertFilesToTsFileManager(selectedUnsequenceFiles);
+      replaceTsFileInMemory(
+          targetTsfileResourceList,
+          Stream.concat(selectedSequenceFiles.stream(), 
selectedUnsequenceFiles.stream())
+              .collect(Collectors.toList()));
     }
     deleteCompactionModsFile(selectedSequenceFiles);
     deleteCompactionModsFile(selectedUnsequenceFiles);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InnerSpaceCompactionTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InnerSpaceCompactionTask.java
index 8f48cbbdf88..8644b5a054c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InnerSpaceCompactionTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InnerSpaceCompactionTask.java
@@ -348,8 +348,8 @@ public class InnerSpaceCompactionTask extends 
AbstractCompactionTask {
   private void rollback() throws Exception {
     // if the task has started,
     if (recoverMemoryStatus) {
-      removeTsFileInMemory(Collections.singletonList(targetTsFileResource));
-      insertFilesToTsFileManager(selectedTsFileResourceList);
+      replaceTsFileInMemory(
+          Collections.singletonList(targetTsFileResource), 
selectedTsFileResourceList);
     }
     deleteCompactionModsFile(selectedTsFileResourceList);
     // delete target file

Reply via email to