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

jiangtian pushed a commit to branch rc/1.3.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rc/1.3.3 by this push:
     new df68b2a3710 [to rc/1.3.3] Fix fill aligned chunk metadata by schema 
list (#13558)
df68b2a3710 is described below

commit df68b2a3710714579901e280799fe145f6edc8d2
Author: shuwenwei <[email protected]>
AuthorDate: Fri Sep 20 18:52:19 2024 +0800

    [to rc/1.3.3] Fix fill aligned chunk metadata by schema list (#13558)
    
    * fix bug
    
    * fix bug
---
 .../utils/AlignedSeriesBatchCompactionUtils.java   |  10 +-
 .../compaction/utils/BatchCompactionUtilsTest.java | 124 +++++++++++++++++++++
 2 files changed, 131 insertions(+), 3 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
index 79e7b72a8ac..d65b9935e9b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/batch/utils/AlignedSeriesBatchCompactionUtils.java
@@ -80,13 +80,17 @@ public class AlignedSeriesBatchCompactionUtils {
       AlignedChunkMetadata originAlignedChunkMetadata, 
List<IMeasurementSchema> schemaList) {
     List<IChunkMetadata> originValueChunkMetadataList =
         originAlignedChunkMetadata.getValueChunkMetadataList();
-    if (originValueChunkMetadataList.size() == schemaList.size()) {
-      return originAlignedChunkMetadata;
-    }
     IChunkMetadata[] newValueChunkMetadataArr = new 
IChunkMetadata[schemaList.size()];
     int currentValueChunkMetadataIndex = 0;
     for (int i = 0; i < schemaList.size(); i++) {
       IMeasurementSchema currentSchema = schemaList.get(i);
+
+      // skip null value
+      while (currentValueChunkMetadataIndex < 
originValueChunkMetadataList.size()
+          && originValueChunkMetadataList.get(currentValueChunkMetadataIndex) 
== null) {
+        currentValueChunkMetadataIndex++;
+      }
+
       if (currentValueChunkMetadataIndex >= 
originValueChunkMetadataList.size()) {
         break;
       }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
index 673f83f2a3d..1bb2947304e 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/utils/BatchCompactionUtilsTest.java
@@ -62,6 +62,7 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 public class BatchCompactionUtilsTest extends AbstractCompactionTest {
 
@@ -286,4 +287,127 @@ public class BatchCompactionUtilsTest extends 
AbstractCompactionTest {
     }
     Assert.fail();
   }
+
+  @Test
+  public void testMapAlignedChunkMetadata1() {
+    List<IChunkMetadata> valueChunkMetadatas =
+        Arrays.asList(
+            new ChunkMetadata("s0", TSDataType.INT32, 0, null),
+            new ChunkMetadata("s1", TSDataType.INT32, 0, null),
+            new ChunkMetadata("s2", TSDataType.INT32, 0, null),
+            null,
+            new ChunkMetadata("s4", TSDataType.INT32, 0, null));
+    AlignedChunkMetadata alignedChunkMetadata =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+    List<IMeasurementSchema> measurementSchemas =
+        Arrays.asList(
+            new MeasurementSchema("s0", TSDataType.INT32),
+            new MeasurementSchema("s1", TSDataType.INT32),
+            new MeasurementSchema("s2", TSDataType.INT32),
+            new MeasurementSchema("s4", TSDataType.INT32));
+    AlignedChunkMetadata newAlignedChunkMetadata =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata.getValueChunkMetadataList().stream()
+            .map(IChunkMetadata::getMeasurementUid)
+            .collect(Collectors.toList()),
+        Arrays.asList("s0", "s1", "s2", "s4"));
+  }
+
+  @Test
+  public void testMapAlignedChunkMetadata2() {
+    List<IChunkMetadata> valueChunkMetadatas =
+        Arrays.asList(new ChunkMetadata("s4", TSDataType.INT32, 0, null), 
null);
+    AlignedChunkMetadata alignedChunkMetadata =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+    List<IMeasurementSchema> measurementSchemas =
+        Arrays.asList(
+            new MeasurementSchema("s0", TSDataType.INT32),
+            new MeasurementSchema("s4", TSDataType.INT32));
+    AlignedChunkMetadata newAlignedChunkMetadata =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata.getValueChunkMetadataList().stream()
+            .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
+            .collect(Collectors.toList()),
+        Arrays.asList(null, "s4"));
+  }
+
+  @Test
+  public void testMapAlignedChunkMetadata3() {
+    List<IChunkMetadata> valueChunkMetadatas =
+        Arrays.asList(
+            new ChunkMetadata("s0", TSDataType.INT32, 0, null),
+            new ChunkMetadata("s1", TSDataType.INT32, 0, null),
+            new ChunkMetadata("s2", TSDataType.INT32, 0, null));
+    AlignedChunkMetadata alignedChunkMetadata1 =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+
+    valueChunkMetadatas =
+        Arrays.asList(
+            new ChunkMetadata("s3", TSDataType.INT32, 0, null),
+            new ChunkMetadata("s4", TSDataType.INT32, 0, null));
+    AlignedChunkMetadata alignedChunkMetadata2 =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+    List<IMeasurementSchema> measurementSchemas =
+        Arrays.asList(
+            new MeasurementSchema("s0", TSDataType.INT32),
+            new MeasurementSchema("s1", TSDataType.INT32),
+            new MeasurementSchema("s2", TSDataType.INT32),
+            new MeasurementSchema("s3", TSDataType.INT32),
+            new MeasurementSchema("s4", TSDataType.INT32));
+    AlignedChunkMetadata newAlignedChunkMetadata1 =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata1, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata1.getValueChunkMetadataList().stream()
+            .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
+            .collect(Collectors.toList()),
+        Arrays.asList("s0", "s1", "s2", null, null));
+
+    AlignedChunkMetadata newAlignedChunkMetadata2 =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata2, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata2.getValueChunkMetadataList().stream()
+            .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
+            .collect(Collectors.toList()),
+        Arrays.asList(null, null, null, "s3", "s4"));
+  }
+
+  @Test
+  public void testMapAlignedChunkMetadata4() {
+    List<IChunkMetadata> valueChunkMetadatas =
+        Arrays.asList(null, new ChunkMetadata("s2", TSDataType.INT32, 0, 
null));
+    AlignedChunkMetadata alignedChunkMetadata1 =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+
+    valueChunkMetadatas =
+        Arrays.asList(null, null, null, null, new ChunkMetadata("s4", 
TSDataType.INT32, 0, null));
+    AlignedChunkMetadata alignedChunkMetadata2 =
+        new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas);
+    List<IMeasurementSchema> measurementSchemas =
+        Arrays.asList(
+            new MeasurementSchema("s2", TSDataType.INT32),
+            new MeasurementSchema("s4", TSDataType.INT32));
+    AlignedChunkMetadata newAlignedChunkMetadata1 =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata1, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata1.getValueChunkMetadataList().stream()
+            .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
+            .collect(Collectors.toList()),
+        Arrays.asList("s2", null));
+
+    AlignedChunkMetadata newAlignedChunkMetadata2 =
+        AlignedSeriesBatchCompactionUtils.fillAlignedChunkMetadataBySchemaList(
+            alignedChunkMetadata2, measurementSchemas);
+    Assert.assertEquals(
+        newAlignedChunkMetadata2.getValueChunkMetadataList().stream()
+            .map(chunkMetadata -> chunkMetadata == null ? null : 
chunkMetadata.getMeasurementUid())
+            .collect(Collectors.toList()),
+        Arrays.asList(null, "s4"));
+  }
 }

Reply via email to