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"));
+ }
}