Skip to content

Commit eccbcc2

Browse files
authored
fix mods file metrics (apache#15284)
1 parent 7a4c127 commit eccbcc2

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/FileMetrics.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ public void decreaseModFileSize(long size) {
9292
MODS_FILE_METRICS.decreaseModFileSize(size);
9393
}
9494

95+
@TestOnly
96+
public int getModFileNum() {
97+
return MODS_FILE_METRICS.getModFileNum();
98+
}
99+
100+
@TestOnly
101+
public long getModFileSize() {
102+
return MODS_FILE_METRICS.getModFileSize();
103+
}
104+
95105
// endregion
96106

97107
public Map<Integer, Long> getRegionSizeMap() {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/metrics/file/ModsFileMetrics.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ public void unbindFrom(AbstractMetricService metricService) {
6060
MetricType.AUTO_GAUGE, Metric.FILE_COUNT.toString(), Tag.NAME.toString(), MODS);
6161
}
6262

63-
private int getModFileNum() {
63+
public int getModFileNum() {
6464
return modFileNum.get();
6565
}
6666

67-
private long getModFileSize() {
67+
public long getModFileSize() {
6868
return modFileSize.get();
6969
}
7070

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,6 @@ public void close() throws IOException {
734734
public void closeWithoutSettingStatus() throws IOException {
735735
if (exclusiveModFile != null) {
736736
exclusiveModFile.close();
737-
exclusiveModFile = null;
738737
}
739738
if (compactionModFile != null) {
740739
compactionModFile.close();

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525
import org.apache.iotdb.commons.path.PartialPath;
2626
import org.apache.iotdb.db.conf.IoTDBDescriptor;
2727
import org.apache.iotdb.db.exception.StorageEngineException;
28+
import org.apache.iotdb.db.service.metrics.FileMetrics;
2829
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.FastCompactionPerformer;
2930
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.performer.impl.ReadChunkCompactionPerformer;
3031
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.InnerSpaceCompactionTask;
3132
import org.apache.iotdb.db.storageengine.dataregion.compaction.execute.utils.log.CompactionLogger;
3233
import org.apache.iotdb.db.storageengine.dataregion.compaction.utils.CompactionTestFileWriter;
34+
import org.apache.iotdb.db.storageengine.dataregion.modification.ModificationFile;
3335
import org.apache.iotdb.db.storageengine.dataregion.modification.TreeDeletionEntry;
3436
import org.apache.iotdb.db.storageengine.dataregion.read.control.FileReaderManager;
3537
import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
@@ -38,6 +40,7 @@
3840
import org.apache.tsfile.common.conf.TSFileDescriptor;
3941
import org.apache.tsfile.common.constant.TsFileConstant;
4042
import org.apache.tsfile.enums.TSDataType;
43+
import org.apache.tsfile.exception.write.PageException;
4144
import org.apache.tsfile.exception.write.WriteProcessException;
4245
import org.apache.tsfile.file.metadata.IDeviceID;
4346
import org.apache.tsfile.file.metadata.enums.CompressionType;
@@ -65,6 +68,7 @@
6568
import java.util.List;
6669
import java.util.Map;
6770
import java.util.Objects;
71+
import java.util.concurrent.CountDownLatch;
6872

6973
import static org.apache.iotdb.db.storageengine.dataregion.compaction.utils.TsFileGeneratorUtils.createChunkWriter;
7074
import static org.apache.iotdb.db.storageengine.dataregion.compaction.utils.TsFileGeneratorUtils.createCompressionType;
@@ -843,6 +847,72 @@ public void testCompactionWithAllEmptyValueChunks() throws IOException, IllegalP
843847
validateTargetDatas(sourceDatas, tsDataTypes);
844848
}
845849

850+
@Test
851+
public void testCascadedDeletionDuringCompaction() throws IOException, InterruptedException {
852+
TsFileResource source = createEmptyFileAndResource(true);
853+
try (CompactionTestFileWriter writer = new CompactionTestFileWriter(source)) {
854+
writer.startChunkGroup("d1");
855+
writer.generateSimpleAlignedSeriesToCurrentDevice(
856+
Arrays.asList("s1"),
857+
new TimeRange[] {new TimeRange(10, 20)},
858+
TSEncoding.PLAIN,
859+
CompressionType.LZ4);
860+
writer.endChunkGroup();
861+
writer.endFile();
862+
}
863+
CountDownLatch latch1 = new CountDownLatch(1);
864+
CountDownLatch latch2 = new CountDownLatch(1);
865+
InnerSpaceCompactionTask task =
866+
new InnerSpaceCompactionTask(
867+
0,
868+
tsFileManager,
869+
Collections.singletonList(source),
870+
true,
871+
new TestReadChunkCompactionPerformer(latch1, latch2),
872+
0);
873+
new Thread(
874+
() -> {
875+
try {
876+
latch1.await();
877+
try (ModificationFile modificationFile = source.getModFileForWrite()) {
878+
modificationFile.write(
879+
new TreeDeletionEntry(new MeasurementPath("root.testsg.d1.s1"), 15));
880+
}
881+
latch2.countDown();
882+
} catch (Exception e) {
883+
throw new RuntimeException(e);
884+
}
885+
})
886+
.start();
887+
Assert.assertTrue(task.start());
888+
Assert.assertEquals(1, tsFileManager.getTsFileList(true).size());
889+
tsFileManager.getTsFileList(true).get(0).getExclusiveModFile();
890+
Assert.assertEquals(1, FileMetrics.getInstance().getModFileNum());
891+
}
892+
893+
private static class TestReadChunkCompactionPerformer extends ReadChunkCompactionPerformer {
894+
895+
private final CountDownLatch latch1;
896+
private final CountDownLatch latch2;
897+
898+
public TestReadChunkCompactionPerformer(CountDownLatch latch1, CountDownLatch latch2) {
899+
this.latch1 = latch1;
900+
this.latch2 = latch2;
901+
}
902+
903+
@Override
904+
public void perform()
905+
throws IOException,
906+
MetadataException,
907+
InterruptedException,
908+
StorageEngineException,
909+
PageException {
910+
super.perform();
911+
latch1.countDown();
912+
latch2.await();
913+
}
914+
}
915+
846916
private void writeEmptyAlignedChunk(
847917
AlignedChunkWriterImpl alignedChunkWriter,
848918
TsFileIOWriter tsFileIOWriter,

0 commit comments

Comments
 (0)