This is an automated email from the ASF dual-hosted git repository.

jiangtian 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 6b43820c134 fix last time check (#13479)
6b43820c134 is described below

commit 6b43820c13429ada277d91c64bfd5ad6c4be71fe
Author: shuwenwei <[email protected]>
AuthorDate: Wed Sep 11 18:22:40 2024 +0800

    fix last time check (#13479)
---
 .../ReadChunkAlignedSeriesCompactionExecutor.java  |  8 ++++--
 ...nkCompactionPerformerWithAlignedSeriesTest.java | 32 ++++++++++++++++++++++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
index 239071b54dc..65fc6c5c217 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
@@ -254,7 +254,9 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
       throws IOException {
     writer.markStartingWritingAligned();
     
checkAndUpdatePreviousTimestamp(timeChunk.getChunkMetadata().getStartTime());
-    checkAndUpdatePreviousTimestamp(timeChunk.getChunkMetadata().getEndTime());
+    if (timeChunk.getChunkMetadata().getStartTime() != 
timeChunk.getChunkMetadata().getEndTime()) {
+      
checkAndUpdatePreviousTimestamp(timeChunk.getChunkMetadata().getEndTime());
+    }
     writer.writeChunk(timeChunk.getChunk(), timeChunk.getChunkMetadata());
     timeChunk.clear();
     int nonEmptyChunkNum = 1;
@@ -334,7 +336,9 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
       throws PageException, IOException {
     int nonEmptyPage = 1;
     checkAndUpdatePreviousTimestamp(timePage.getHeader().getStartTime());
-    checkAndUpdatePreviousTimestamp(timePage.getHeader().getEndTime());
+    if (timePage.getHeader().getStartTime() != 
timePage.getHeader().getEndTime()) {
+      checkAndUpdatePreviousTimestamp(timePage.getHeader().getEndTime());
+    }
     timePage.flushToTimeChunkWriter(chunkWriter);
     for (int i = 0; i < valuePageLoaders.size(); i++) {
       PageLoader valuePage = valuePageLoaders.get(i);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/inner/NewReadChunkCompactionPerformerWithAlignedSeriesTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/inner/NewReadChunkCompactionPerformerWithAlignedSeriesTest.java
index de3c1af434f..34021c3b7fe 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/inner/NewReadChunkCompactionPerformerWithAlignedSeriesTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/inner/NewReadChunkCompactionPerformerWithAlignedSeriesTest.java
@@ -572,6 +572,38 @@ public class 
NewReadChunkCompactionPerformerWithAlignedSeriesTest extends Abstra
                 Collections.singletonList(targetResource), 
Collections.emptyList())));
   }
 
+  @Test
+  public void testCompactOnePoint() throws Exception {
+    long targetChunkSize = 
IoTDBDescriptor.getInstance().getConfig().getTargetChunkSize();
+    IoTDBDescriptor.getInstance().getConfig().setTargetChunkSize(1);
+    try {
+      TsFileResource seqResource1 =
+          generateSingleAlignedSeriesFile(
+              "d0",
+              Arrays.asList("s0", "s1", "s2"),
+              new TimeRange[] {new TimeRange(1, 1)},
+              TSEncoding.PLAIN,
+              CompressionType.LZ4,
+              Arrays.asList(false, false, false),
+              true);
+      seqResources.add(seqResource1);
+
+      CompactionTaskSummary summary = new CompactionTaskSummary();
+      TsFileResource targetResource = performCompaction(summary);
+      Assert.assertEquals(4, summary.getDirectlyFlushChunkNum());
+      Assert.assertEquals(0, summary.getDirectlyFlushPageCount());
+      Assert.assertEquals(0, summary.getRewritePointNum());
+      TsFileResourceUtils.validateTsFileDataCorrectness(targetResource);
+      Assert.assertTrue(
+          CompactionCheckerUtils.compareSourceDataAndTargetData(
+              CompactionCheckerUtils.getAllDataByQuery(seqResources, 
unseqResources),
+              CompactionCheckerUtils.getAllDataByQuery(
+                  Collections.singletonList(targetResource), 
Collections.emptyList())));
+    } finally {
+      
IoTDBDescriptor.getInstance().getConfig().setTargetChunkSize(targetChunkSize);
+    }
+  }
+
   @Test
   public void testCompactionWithDifferentCompressionTypeOrEncoding() throws 
Exception {
     TsFileResource seqResource1 =

Reply via email to