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 <[email protected]> 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 {
