This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch rc/1.3.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rc/1.3.3 by this push:
new a61fc126bdc fix compaction file metrics (#13692)
a61fc126bdc is described below
commit a61fc126bdccb40bf3c7f07994a7c0965c509009
Author: shuwenwei <[email protected]>
AuthorDate: Thu Oct 10 10:25:10 2024 +0800
fix compaction file metrics (#13692)
---
.../task/InsertionCrossSpaceCompactionTask.java | 35 ++++++++-------
.../compaction/execute/utils/CompactionUtils.java | 18 +++++---
.../cross/InsertionCrossSpaceCompactionTest.java | 52 ++++++++++++++++++++++
.../conf/iotdb-system.properties.template | 2 +-
4 files changed, 83 insertions(+), 24 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
index 1f7e2b9c018..634ff2a4f8b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/task/InsertionCrossSpaceCompactionTask.java
@@ -165,16 +165,7 @@ public class InsertionCrossSpaceCompactionTask extends
AbstractCompactionTask {
Collections.singletonList(unseqFileToInsert),
Collections.singletonList(targetFile));
lockWrite(Collections.singletonList(unseqFileToInsert));
- CompactionUtils.deleteSourceTsFileAndUpdateFileMetrics(
- Collections.singletonList(unseqFileToInsert), false);
-
- FileMetrics.getInstance()
- .addTsFile(
- targetFile.getDatabaseName(),
- targetFile.getDataRegionId(),
- targetFile.getTsFileSize(),
- true,
- targetFile.getTsFile().getName());
+ CompactionUtils.deleteTsFileResourceWithoutLock(unseqFileToInsert);
double costTime = (System.currentTimeMillis() - startTime) / 1000.0d;
LOGGER.info(
@@ -199,6 +190,9 @@ public class InsertionCrossSpaceCompactionTask extends
AbstractCompactionTask {
} catch (IOException e) {
handleException(LOGGER, e);
}
+ if (targetFile != null && targetFile.tsFileExists()) {
+ updateFileMetrics();
+ }
targetFile.setStatus(TsFileResourceStatus.NORMAL);
}
return isSuccess;
@@ -314,9 +308,6 @@ public class InsertionCrossSpaceCompactionTask extends
AbstractCompactionTask {
if (targetFile == null) {
return;
}
- if (targetFile.tsFileExists()) {
- FileMetrics.getInstance().deleteTsFile(true,
Collections.singletonList(targetFile));
- }
// delete target file
if (!deleteTsFileOnDisk(targetFile)) {
throw new CompactionRecoverException(
@@ -328,9 +319,6 @@ public class InsertionCrossSpaceCompactionTask extends
AbstractCompactionTask {
if (unseqFileToInsert == null) {
return;
}
- if (recoverMemoryStatus && unseqFileToInsert.tsFileExists()) {
- FileMetrics.getInstance().deleteTsFile(false,
Collections.singletonList(unseqFileToInsert));
- }
if (!deleteTsFileOnDisk(unseqFileToInsert)) {
throw new CompactionRecoverException("source files cannot be deleted
successfully");
}
@@ -381,4 +369,19 @@ public class InsertionCrossSpaceCompactionTask extends
AbstractCompactionTask {
holdWriteLockList.add(tsFileResource);
}
}
+
+ private void updateFileMetrics() {
+ // Here the target file is used for updating metrics because the source
file
+ // has been deleted here.
+ // The statistics of the mods file can be left unchanged, as it does not
+ // differentiate between sequence or unsequence.
+ FileMetrics.getInstance().deleteTsFile(false,
Collections.singletonList(targetFile));
+ FileMetrics.getInstance()
+ .addTsFile(
+ targetFile.getDatabaseName(),
+ targetFile.getDataRegionId(),
+ targetFile.getTsFileSize(),
+ true,
+ targetFile.getTsFile().getName());
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
index 67c4256843c..d47d7f17277 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/CompactionUtils.java
@@ -327,17 +327,21 @@ public class CompactionUtils {
FileMetrics.getInstance().decreaseModFileNum(1);
FileMetrics.getInstance().decreaseModFileSize(resource.getModFile().getSize());
}
- if (!resource.remove()) {
- logger.warn(
- "[Compaction] delete file failed, file path is {}",
- resource.getTsFile().getAbsolutePath());
- } else {
- logger.info("[Compaction] delete file: {}",
resource.getTsFile().getAbsolutePath());
- }
+ deleteTsFileResourceWithoutLock(resource);
}
FileMetrics.getInstance().deleteTsFile(seq, resources);
}
+ public static void deleteTsFileResourceWithoutLock(TsFileResource resource) {
+ if (!resource.remove()) {
+ logger.warn(
+ "[Compaction] delete file failed, file path is {}",
+ resource.getTsFile().getAbsolutePath());
+ } else {
+ logger.info("[Compaction] delete file: {}",
resource.getTsFile().getAbsolutePath());
+ }
+ }
+
public static boolean isDiskHasSpace() {
return isDiskHasSpace(0d);
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/cross/InsertionCrossSpaceCompactionTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/cross/InsertionCrossSpaceCompactionTest.java
index 431b9bb9329..efab3d89d74 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/cross/InsertionCrossSpaceCompactionTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/cross/InsertionCrossSpaceCompactionTest.java
@@ -22,6 +22,7 @@ package
org.apache.iotdb.db.storageengine.dataregion.compaction.cross;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.service.metrics.FileMetrics;
import org.apache.iotdb.db.storageengine.dataregion.DataRegion;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.AbstractCompactionTest;
import
org.apache.iotdb.db.storageengine.dataregion.compaction.execute.task.AbstractCompactionTask;
@@ -472,6 +473,57 @@ public class InsertionCrossSpaceCompactionTest extends
AbstractCompactionTest {
Assert.assertEquals(4, timestamp);
}
+ @Test
+ public void testInsertionCompactionUpdateFileMetrics() throws IOException {
+ TsFileResource unseqResource1 =
+ generateSingleNonAlignedSeriesFileWithDevices(
+ "2-2-0-0.tsfile", new String[] {"d1"}, new TimeRange[] {new
TimeRange(1, 4)}, false);
+ FileMetrics.getInstance()
+ .addTsFile(
+ unseqResource1.getDatabaseName(),
+ unseqResource1.getDataRegionId(),
+ unseqResource1.getTsFileSize(),
+ false,
+ unseqResource1.getTsFile().getName());
+
+ long seqFileNumBeforeCompaction =
FileMetrics.getInstance().getFileCount(true);
+ long unseqFileNumBeforeCompaction =
FileMetrics.getInstance().getFileCount(false);
+
+ InsertionCrossCompactionTaskResource taskResource = new
InsertionCrossCompactionTaskResource();
+ taskResource.setToInsertUnSeqFile(unseqResource1);
+ InsertionCrossSpaceCompactionTask task =
+ new InsertionCrossSpaceCompactionTask(null, 0, tsFileManager,
taskResource, 0);
+ Assert.assertTrue(task.start());
+ Assert.assertEquals(
+ seqFileNumBeforeCompaction + 1,
FileMetrics.getInstance().getFileCount(true));
+ Assert.assertEquals(
+ unseqFileNumBeforeCompaction - 1,
FileMetrics.getInstance().getFileCount(false));
+
+ // overlap
+ TsFileResource unseqResource2 =
+ generateSingleNonAlignedSeriesFileWithDevices(
+ "3-3-0-0.tsfile", new String[] {"d1"}, new TimeRange[] {new
TimeRange(1, 4)}, false);
+ FileMetrics.getInstance()
+ .addTsFile(
+ unseqResource2.getDatabaseName(),
+ unseqResource2.getDataRegionId(),
+ unseqResource2.getTsFileSize(),
+ false,
+ unseqResource2.getTsFile().getName());
+
+ seqFileNumBeforeCompaction = FileMetrics.getInstance().getFileCount(true);
+ unseqFileNumBeforeCompaction =
FileMetrics.getInstance().getFileCount(false);
+
+ taskResource = new InsertionCrossCompactionTaskResource();
+ taskResource.setToInsertUnSeqFile(unseqResource2);
+ task = new InsertionCrossSpaceCompactionTask(null, 0, tsFileManager,
taskResource, 0);
+ // rollback
+ Assert.assertFalse(task.start());
+ Assert.assertEquals(seqFileNumBeforeCompaction,
FileMetrics.getInstance().getFileCount(true));
+ Assert.assertEquals(
+ unseqFileNumBeforeCompaction,
FileMetrics.getInstance().getFileCount(false));
+ }
+
public TsFileResource generateSingleNonAlignedSeriesFileWithDevices(
String fileName, String[] devices, TimeRange[] timeRanges, boolean seq)
throws IOException {
TsFileResource seqResource1 = createEmptyFileAndResourceWithName(fileName,
seq, 0);
diff --git
a/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template
b/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template
index 2116ecbe127..94029f38870 100644
---
a/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template
+++
b/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template
@@ -1187,7 +1187,7 @@ cross_selector=rewrite
cross_performer=fast
# the selector of inner sequence space compaction task
-# effectiveMode: hod_reload
+# effectiveMode: hot_reload
# Options: size_tiered_single_target,size_tiered_multi_target
inner_seq_selector=size_tiered_multi_target