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);
   }

Reply via email to