You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/10/17 10:41:58 UTC
[iotdb] branch compaction_recover_logger_1017 updated: fix file replace error in memory
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
The following commit(s) were added to refs/heads/compaction_recover_logger_1017 by this push:
new eb356052fe9 fix file replace error in memory
eb356052fe9 is described below
commit eb356052fe99c2d69c256375c9cea1da4dd81d35
Author: Jinrui.Zhang <xi...@gmail.com>
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