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 {

Reply via email to