You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by sh...@apache.org on 2026/01/20 01:58:17 UTC
(iotdb) 01/01: fix mods name of target files in settle compaction
This is an automated email from the ASF dual-hosted git repository.
shuwenwei pushed a commit to branch fixModsNameInSettleCompaction
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 50905aeb1616a6a8f198ac996f440273cbeca836
Author: shuwenwei <s1...@gmail.com>
AuthorDate: Tue Jan 20 09:58:01 2026 +0800
fix mods name of target files in settle compaction
---
.../dataregion/modification/ModificationFile.java | 9 ++++--
.../settle/SettleCompactionTaskTest.java | 32 ++++++++++++++++++++++
2 files changed, 39 insertions(+), 2 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/modification/ModificationFile.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/modification/ModificationFile.java
index 22243b2b0d5..651ab10b8ea 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/modification/ModificationFile.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/modification/ModificationFile.java
@@ -348,9 +348,14 @@ public class ModificationFile implements AutoCloseable {
public static ModificationFile getExclusiveMods(TsFileResource tsFileResource) {
String tsFilePath = tsFileResource.getTsFilePath();
+ File tsfile = tsFileResource.getTsFile();
+ String tsFileName = tsfile.getName();
+ int index = tsFileName.indexOf(IoTDBConstant.PATH_SEPARATOR);
// replace the temp suffix with the final name
- tsFilePath = tsFilePath.replace(IoTDBConstant.INNER_COMPACTION_TMP_FILE_SUFFIX, TSFILE_SUFFIX);
- tsFilePath = tsFilePath.replace(IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX, TSFILE_SUFFIX);
+ if (index != -1) {
+ tsFilePath =
+ tsfile.getParent() + File.separator + tsFileName.substring(0, index) + TSFILE_SUFFIX;
+ }
return new ModificationFile(tsFilePath + FILE_SUFFIX, true);
}
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleCompactionTaskTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleCompactionTaskTest.java
index fe2b7954af1..e318d0e87d0 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleCompactionTaskTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleCompactionTaskTest.java
@@ -40,10 +40,12 @@ import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.Inne
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.SettleCompactionTask;
import org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.CompactionScheduleContext;
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.impl.SettleSelectorImpl;
+import org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFile;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
import org.apache.tsfile.common.conf.TSFileDescriptor;
+import org.apache.tsfile.common.constant.TsFileConstant;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.exception.write.WriteProcessException;
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -407,6 +409,36 @@ public class SettleCompactionTaskTest extends AbstractCompactionTest {
validateTargetDatas(sourceDatas, Collections.emptyList());
}
+ @Test
+ public void getModsFileAfterSettleCompaction()
+ throws IOException, MetadataException, WriteProcessException {
+ createFiles(6, 5, 10, 100, 0, 0, 0, 0, isAligned, true);
+ tsFileManager.addAll(seqResources, true);
+ tsFileManager.addAll(unseqResources, false);
+
+ List<TsFileResource> partialDeletedFiles = new ArrayList<>();
+ partialDeletedFiles.addAll(seqResources);
+ SettleCompactionTask task =
+ new SettleCompactionTask(
+ 0,
+ tsFileManager,
+ Collections.emptyList(),
+ partialDeletedFiles,
+ true,
+ getPerformer(),
+ 0);
+ Assert.assertTrue(task.start());
+ List<TsFileResource> tsFileList = tsFileManager.getTsFileList(true);
+ for (TsFileResource resource : tsFileList) {
+ Assert.assertTrue(
+ resource
+ .getExclusiveModFile()
+ .getFile()
+ .getName()
+ .endsWith(TsFileConstant.TSFILE_SUFFIX + ModificationFile.FILE_SUFFIX));
+ }
+ }
+
@Test
public void settleWithMixedDirtyFilesByTTL()
throws IOException, MetadataException, WriteProcessException {