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
