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

haonan 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 85e71a43543 Fix update time index after compact aligned series (#11943)
85e71a43543 is described below

commit 85e71a43543805cade34498cd784782f53dee630
Author: shuwenwei <[email protected]>
AuthorDate: Mon Jan 22 12:22:34 2024 +0800

    Fix update time index after compact aligned series (#11943)
---
 .../impl/ReadChunkCompactionPerformer.java         |  1 +
 .../ReadChunkAlignedSeriesCompactionExecutor.java  |  1 -
 ...nkCompactionPerformerWithAlignedSeriesTest.java | 73 ++++++++++++++++++++++
 3 files changed, 74 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
index 230df876866..870c35deca1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/performer/impl/ReadChunkCompactionPerformer.java
@@ -139,6 +139,7 @@ public class ReadChunkCompactionPerformer implements 
ISeqCompactionPerformer {
         targetResource.updateEndTime(device, chunkMetadata.getEndTime());
       }
     }
+    writer.checkMetadataSizeAndMayFlush();
     writer.endChunkGroup();
   }
 
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 d77479d9be2..a70a9832419 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
@@ -177,7 +177,6 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
     if (!chunkWriter.isEmpty()) {
       flushCurrentChunkWriter();
     }
-    writer.checkMetadataSizeAndMayFlush();
   }
 
   private void compactWithAlignedChunk(
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 3cd710ba953..02b54233502 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
@@ -45,6 +45,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -569,6 +570,78 @@ public class 
NewReadChunkCompactionPerformerWithAlignedSeriesTest extends Abstra
         
CompactionCheckerUtils.readFiles(Collections.singletonList(targetResource)));
   }
 
+  @Test
+  public void testFlushChunkMetadataToTempFile()
+      throws IOException, StorageEngineException, InterruptedException, 
MetadataException {
+    List<String> devices = new ArrayList<>();
+    for (int i = 0; i < 1000; i++) {
+      devices.add("d" + i);
+    }
+    TsFileResource seqResource1 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqResource1)) {
+      for (String device : devices) {
+        writer.startChunkGroup(device);
+        writer.generateSimpleAlignedSeriesToCurrentDevice(
+            Arrays.asList("s0", "s1", "s2"),
+            new TimeRange[] {new TimeRange(1000, 2000), new TimeRange(3000, 
5000)},
+            TSEncoding.PLAIN,
+            CompressionType.LZ4);
+        writer.endChunkGroup();
+      }
+      writer.endFile();
+    }
+    seqResources.add(seqResource1);
+
+    TsFileResource seqResource2 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqResource2)) {
+      for (String device : devices) {
+        writer.startChunkGroup(device);
+        writer.generateSimpleAlignedSeriesToCurrentDevice(
+            Arrays.asList("s0", "s1", "s2"),
+            new TimeRange[] {new TimeRange(6000, 7000), new TimeRange(8000, 
9000)},
+            TSEncoding.PLAIN,
+            CompressionType.LZ4);
+        writer.endChunkGroup();
+      }
+      writer.endFile();
+    }
+
+    seqResources.add(seqResource2);
+
+    TsFileResource seqResource3 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqResource3)) {
+      for (String device : devices) {
+        writer.startChunkGroup(device);
+        writer.generateSimpleAlignedSeriesToCurrentDevice(
+            Arrays.asList("s0", "s1", "s2"),
+            new TimeRange[] {new TimeRange(16000, 17000), new TimeRange(18000, 
19000)},
+            TSEncoding.PLAIN,
+            CompressionType.LZ4);
+        writer.endChunkGroup();
+      }
+      writer.endFile();
+    }
+    seqResources.add(seqResource3);
+
+    tsFileManager.addAll(seqResources, true);
+    TsFileResource targetResource =
+        TsFileNameGenerator.getInnerCompactionTargetFileResource(seqResources, 
true);
+
+    ReadChunkCompactionPerformer performer = new 
ReadChunkCompactionPerformer();
+    CompactionTaskSummary summary = new CompactionTaskSummary();
+    performer.setSummary(summary);
+    performer.setSourceFiles(seqResources);
+    performer.setTargetFiles(Collections.singletonList(targetResource));
+    performer.perform();
+    CompactionUtils.moveTargetFile(
+        Collections.singletonList(targetResource), true, COMPACTION_TEST_SG);
+    TsFileResourceUtils.validateTsFileDataCorrectness(targetResource);
+    Assert.assertEquals(
+        CompactionCheckerUtils.readFiles(seqResources),
+        
CompactionCheckerUtils.readFiles(Collections.singletonList(targetResource)));
+    Assert.assertEquals(devices.size(), 
targetResource.buildDeviceTimeIndex().getDevices().size());
+  }
+
   private TsFileResource generateSingleAlignedSeriesFile(
       String device,
       List<String> measurement,

Reply via email to