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 1c8cb48a5ff Fix aligned device modification not matched in 
MultiTsFileDeviceIterator (#11555)
1c8cb48a5ff is described below

commit 1c8cb48a5ff617f6bc17a3c18cfcf06b6d0ae198
Author: shuwenwei <[email protected]>
AuthorDate: Fri Nov 17 09:28:25 2023 +0800

    Fix aligned device modification not matched in MultiTsFileDeviceIterator 
(#11555)
---
 .../execute/utils/MultiTsFileDeviceIterator.java   |  10 +-
 .../compaction/ReadChunkInnerCompactionTest.java   | 109 ++++++++++++++++++++-
 2 files changed, 112 insertions(+), 7 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
index f93fde5ab55..7be323e1000 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/MultiTsFileDeviceIterator.java
@@ -397,12 +397,10 @@ public class MultiTsFileDeviceIterator implements 
AutoCloseable {
     }
 
     for (Modification modification : modifications) {
-      if (modification.getDevice().equals(currentDevice.left)) {
-        for (int i = 0; i < valueChunkMetadataList.size(); ++i) {
-          PartialPath path = valueSeriesPaths.get(i);
-          if (path != null && modification.getPath().matchFullPath(path)) {
-            modificationForCurDevice.get(i).add(modification);
-          }
+      for (int i = 0; i < valueChunkMetadataList.size(); ++i) {
+        PartialPath path = valueSeriesPaths.get(i);
+        if (path != null && modification.getPath().matchFullPath(path)) {
+          modificationForCurDevice.get(i).add(modification);
         }
       }
     }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadChunkInnerCompactionTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadChunkInnerCompactionTest.java
index 5e7920ed2b3..16799c39776 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadChunkInnerCompactionTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadChunkInnerCompactionTest.java
@@ -435,7 +435,7 @@ public class ReadChunkInnerCompactionTest extends 
AbstractCompactionTest {
     }
     seqFile1
         .getModFile()
-        .write(new Deletion(new PartialPath("root.testsg.d1.**"), 
Long.MAX_VALUE, Long.MAX_VALUE));
+        .write(new Deletion(new PartialPath("root.testsg.d1.s1"), 
Long.MAX_VALUE, Long.MAX_VALUE));
     seqFile1.getModFile().close();
     TsFileResource seqFile2 = createEmptyFileAndResource(true);
     try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile2)) {
@@ -526,6 +526,113 @@ public class ReadChunkInnerCompactionTest extends 
AbstractCompactionTest {
     Assert.assertEquals(0, tsFileManager.getTsFileList(true).size());
   }
 
+  @Test
+  public void testReadChunkPerformerWithEmptyTargetFile5()
+      throws IOException, IllegalPathException {
+    TsFileResource seqFile1 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile1)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleNonAlignedSeriesToCurrentDevice(
+          "s1", new TimeRange[] {new TimeRange(1, 2)}, TSEncoding.PLAIN, 
CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile1
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile1.getModFile().close();
+    TsFileResource seqFile2 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile2)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleNonAlignedSeriesToCurrentDevice(
+          "s1", new TimeRange[] {new TimeRange(5, 6)}, TSEncoding.PLAIN, 
CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile2
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile2.getModFile().close();
+    TsFileResource seqFile3 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile3)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleNonAlignedSeriesToCurrentDevice(
+          "s1", new TimeRange[] {new TimeRange(10, 20)}, TSEncoding.PLAIN, 
CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile3
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.testsg.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile3.getModFile().close();
+    seqResources.add(seqFile1);
+    seqResources.add(seqFile2);
+    seqResources.add(seqFile3);
+    InnerSpaceCompactionTask task =
+        new InnerSpaceCompactionTask(
+            0, tsFileManager, seqResources, true, new 
ReadChunkCompactionPerformer(), 0);
+    Assert.assertTrue(task.start());
+    Assert.assertEquals(0, tsFileManager.getTsFileList(true).size());
+  }
+
+  @Test
+  public void testReadChunkPerformerWithEmptyTargetFile6()
+      throws IOException, IllegalPathException {
+    TsFileResource seqFile1 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile1)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleAlignedSeriesToCurrentDevice(
+          Arrays.asList("s1"),
+          new TimeRange[] {new TimeRange(1, 2)},
+          TSEncoding.PLAIN,
+          CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile1
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile1.getModFile().close();
+    TsFileResource seqFile2 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile2)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleAlignedSeriesToCurrentDevice(
+          Arrays.asList("s1"),
+          new TimeRange[] {new TimeRange(5, 6)},
+          TSEncoding.PLAIN,
+          CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile2
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile2.getModFile().close();
+    TsFileResource seqFile3 = createEmptyFileAndResource(true);
+    try (CompactionTestFileWriter writer = new 
CompactionTestFileWriter(seqFile3)) {
+      writer.startChunkGroup("d1");
+      writer.generateSimpleAlignedSeriesToCurrentDevice(
+          Arrays.asList("s1"),
+          new TimeRange[] {new TimeRange(10, 20)},
+          TSEncoding.PLAIN,
+          CompressionType.LZ4);
+      writer.endChunkGroup();
+      writer.endFile();
+    }
+    seqFile3
+        .getModFile()
+        .write(new Deletion(new PartialPath("root.testsg.**"), Long.MAX_VALUE, 
Long.MAX_VALUE));
+    seqFile3.getModFile().close();
+    seqResources.add(seqFile1);
+    seqResources.add(seqFile2);
+    seqResources.add(seqFile3);
+    InnerSpaceCompactionTask task =
+        new InnerSpaceCompactionTask(
+            0, tsFileManager, seqResources, true, new 
ReadChunkCompactionPerformer(), 0);
+    Assert.assertTrue(task.start());
+    Assert.assertEquals(0, tsFileManager.getTsFileList(true).size());
+  }
+
   @Test
   public void testReadChunkPerformerWithNonEmptyTargetFile() throws 
IOException {
     TsFileResource seqFile1 = createEmptyFileAndResource(true);

Reply via email to