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