Skip to content

Commit f74a7dc

Browse files
authored
Fix mods name of target files in settle compaction (#17043)
1 parent 50c6183 commit f74a7dc

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/modification/ModificationFile.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -348,9 +348,17 @@ public void remove() throws IOException {
348348

349349
public static ModificationFile getExclusiveMods(TsFileResource tsFileResource) {
350350
String tsFilePath = tsFileResource.getTsFilePath();
351+
File tsfile = tsFileResource.getTsFile();
352+
String tsFileName = tsfile.getName();
353+
int index = tsFileName.indexOf(IoTDBConstant.PATH_SEPARATOR);
351354
// replace the temp suffix with the final name
352-
tsFilePath = tsFilePath.replace(IoTDBConstant.INNER_COMPACTION_TMP_FILE_SUFFIX, TSFILE_SUFFIX);
353-
tsFilePath = tsFilePath.replace(IoTDBConstant.CROSS_COMPACTION_TMP_FILE_SUFFIX, TSFILE_SUFFIX);
355+
if (index != -1) {
356+
String parent = tsfile.getParent();
357+
tsFilePath =
358+
(parent != null ? (parent + File.separator) : "")
359+
+ tsFileName.substring(0, index)
360+
+ TSFILE_SUFFIX;
361+
}
354362
return new ModificationFile(tsFilePath + FILE_SUFFIX, true);
355363
}
356364

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/settle/SettleCompactionTaskTest.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@
4040
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.SettleCompactionTask;
4141
import org.apache.iotdb.db.storageengine.dataregion.compaction.schedule.CompactionScheduleContext;
4242
import org.apache.iotdb.db.storageengine.dataregion.compaction.selector.impl.SettleSelectorImpl;
43+
import org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFile;
4344
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
4445
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
4546

4647
import org.apache.tsfile.common.conf.TSFileDescriptor;
48+
import org.apache.tsfile.common.constant.TsFileConstant;
4749
import org.apache.tsfile.enums.TSDataType;
4850
import org.apache.tsfile.exception.write.WriteProcessException;
4951
import org.apache.tsfile.file.metadata.IDeviceID;
@@ -407,6 +409,36 @@ public void settleWithOnlyPartialDirtyFilesByTTL()
407409
validateTargetDatas(sourceDatas, Collections.emptyList());
408410
}
409411

412+
@Test
413+
public void getModsFileAfterSettleCompaction()
414+
throws IOException, MetadataException, WriteProcessException {
415+
createFiles(6, 5, 10, 100, 0, 0, 0, 0, isAligned, true);
416+
tsFileManager.addAll(seqResources, true);
417+
tsFileManager.addAll(unseqResources, false);
418+
419+
List<TsFileResource> partialDeletedFiles = new ArrayList<>();
420+
partialDeletedFiles.addAll(seqResources);
421+
SettleCompactionTask task =
422+
new SettleCompactionTask(
423+
0,
424+
tsFileManager,
425+
Collections.emptyList(),
426+
partialDeletedFiles,
427+
true,
428+
getPerformer(),
429+
0);
430+
Assert.assertTrue(task.start());
431+
List<TsFileResource> tsFileList = tsFileManager.getTsFileList(true);
432+
for (TsFileResource resource : tsFileList) {
433+
Assert.assertTrue(
434+
resource
435+
.getExclusiveModFile()
436+
.getFile()
437+
.getName()
438+
.endsWith(TsFileConstant.TSFILE_SUFFIX + ModificationFile.FILE_SUFFIX));
439+
}
440+
}
441+
410442
@Test
411443
public void settleWithMixedDirtyFilesByTTL()
412444
throws IOException, MetadataException, WriteProcessException {

0 commit comments

Comments
 (0)