This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new f74a7dcbcd3 Fix mods name of target files in settle compaction (#17043)
f74a7dcbcd3 is described below
commit f74a7dcbcd34e3714b06c9de96603436d178a6da
Author: shuwenwei <[email protected]>
AuthorDate: Tue Jan 20 12:08:21 2026 +0800
Fix mods name of target files in settle compaction (#17043)
---
.../dataregion/modification/ModificationFile.java | 12 ++++++--
.../settle/SettleCompactionTaskTest.java | 32 ++++++++++++++++++++++
2 files changed, 42 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..bc69f095642 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,17 @@ 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) {
+ String parent = tsfile.getParent();
+ tsFilePath =
+ (parent != null ? (parent + 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 {