This is an automated email from the ASF dual-hosted git repository.
qiaojialin 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 630c68a01e [IOTDB-4518] Fix cannot delete .cmt -> .meta file in disk
(#7423)
630c68a01e is described below
commit 630c68a01e6f4f05f4326b9d6aef3eab298cc172
Author: Liu Xuxin <[email protected]>
AuthorDate: Fri Sep 23 18:23:35 2022 +0800
[IOTDB-4518] Fix cannot delete .cmt -> .meta file in disk (#7423)
---
.../compaction/task/CompactionRecoverTask.java | 7 ++++
.../iotdb/tsfile/write/writer/TsFileIOWriter.java | 9 ++++-
.../writer/TsFileIOWriterMemoryControlTest.java | 42 ++++++++++++++++++++++
3 files changed, 57 insertions(+), 1 deletion(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java
index ba632aa35b..2b19623a12 100644
---
a/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/engine/compaction/task/CompactionRecoverTask.java
@@ -36,6 +36,7 @@ import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
import org.apache.iotdb.tsfile.fileSystem.FSFactoryProducer;
import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.utils.TsFileUtils;
+import org.apache.iotdb.tsfile.write.writer.TsFileIOWriter;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
@@ -349,6 +350,12 @@ public class CompactionRecoverTask {
File tmpTargetFile = targetFileIdentifier.getFileFromDataDirs();
if (tmpTargetFile != null) {
tmpTargetFile.delete();
+ File chunkMetadataTempFile =
+ new File(
+ tmpTargetFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX);
+ if (chunkMetadataTempFile.exists()) {
+ chunkMetadataTempFile.delete();
+ }
}
}
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index 851f03c192..6cf00f8b84 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -45,6 +45,7 @@ import org.apache.iotdb.tsfile.utils.PublicBAOS;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import org.apache.iotdb.tsfile.write.writer.tsmiterator.TSMIterator;
+import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -116,7 +117,7 @@ public class TsFileIOWriter implements AutoCloseable {
protected boolean enableMemoryControl = false;
private Path lastSerializePath = null;
protected LinkedList<Long> endPosInCMTForDevice = new LinkedList<>();
- public static final String CHUNK_METADATA_TEMP_FILE_SUFFIX = ".cmt";
+ public static final String CHUNK_METADATA_TEMP_FILE_SUFFIX = ".meta";
/** empty construct function. */
protected TsFileIOWriter() {}
@@ -313,6 +314,12 @@ public class TsFileIOWriter implements AutoCloseable {
if (resourceLogger.isDebugEnabled() && file != null) {
resourceLogger.debug("{} writer is closed.", file.getName());
}
+ if (file != null) {
+ File chunkMetadataFile = new File(file.getAbsolutePath() +
CHUNK_METADATA_TEMP_FILE_SUFFIX);
+ if (chunkMetadataFile.exists()) {
+ FileUtils.delete(chunkMetadataFile);
+ }
+ }
canWrite = false;
}
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
index 44e4af3678..b7c6ff84db 100644
---
a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriterMemoryControlTest.java
@@ -293,6 +293,9 @@ public class TsFileIOWriterMemoryControlTest {
Assert.assertTrue(writer.hasChunkMetadataInDisk);
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -377,6 +380,9 @@ public class TsFileIOWriterMemoryControlTest {
Assert.assertTrue(writer.hasChunkMetadataInDisk);
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -464,6 +470,9 @@ public class TsFileIOWriterMemoryControlTest {
Assert.assertFalse(writer.chunkGroupMetadataList.isEmpty());
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -552,6 +561,9 @@ public class TsFileIOWriterMemoryControlTest {
} finally {
TEST_CHUNK_SIZE = originTestChunkSize;
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -640,6 +652,9 @@ public class TsFileIOWriterMemoryControlTest {
} finally {
TEST_CHUNK_SIZE = originTestChunkSize;
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originTimes);
}
@@ -728,6 +743,9 @@ public class TsFileIOWriterMemoryControlTest {
} finally {
TEST_CHUNK_SIZE = originTestChunkSize;
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originTimes);
}
@@ -762,6 +780,9 @@ public class TsFileIOWriterMemoryControlTest {
writer.endFile();
Assert.assertTrue(writer.hasChunkMetadataInDisk);
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -798,6 +819,9 @@ public class TsFileIOWriterMemoryControlTest {
writer.endFile();
Assert.assertTrue(writer.hasChunkMetadataInDisk);
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -840,6 +864,9 @@ public class TsFileIOWriterMemoryControlTest {
} finally {
TEST_CHUNK_SIZE = originTestPointNum;
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -878,6 +905,9 @@ public class TsFileIOWriterMemoryControlTest {
} finally {
TEST_CHUNK_SIZE = originTestPointNum;
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -934,6 +964,9 @@ public class TsFileIOWriterMemoryControlTest {
}
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originValue);
}
@@ -1030,6 +1063,9 @@ public class TsFileIOWriterMemoryControlTest {
writer.endFile();
Assert.assertTrue(writer.hasChunkMetadataInDisk);
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originData);
}
@@ -1081,6 +1117,9 @@ public class TsFileIOWriterMemoryControlTest {
}
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originValue);
}
@@ -1136,6 +1175,9 @@ public class TsFileIOWriterMemoryControlTest {
}
writer.endFile();
}
+ Assert.assertFalse(
+ new File(testFile.getAbsolutePath() +
TsFileIOWriter.CHUNK_METADATA_TEMP_FILE_SUFFIX)
+ .exists());
TsFileIntegrityCheckingTool.checkIntegrityBySequenceRead(testFile.getPath());
TsFileIntegrityCheckingTool.checkIntegrityByQuery(testFile.getPath(),
originValue);
}