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

rong 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 6dbe63bd485 Pipe: Fix TsFileInsertionDataContainer may generate 
ClassCastException (#13415) (#13419)
6dbe63bd485 is described below

commit 6dbe63bd485fe314ddc8183af94a2854b9d05e0e
Author: Caideyipi <[email protected]>
AuthorDate: Fri Sep 6 10:54:51 2024 +0800

    Pipe: Fix TsFileInsertionDataContainer may generate ClassCastException 
(#13415) (#13419)
---
 .../query/TsFileInsertionQueryDataTabletIterator.java   |  2 +-
 .../scan/TsFileInsertionScanDataContainer.java          | 17 ++++++++---------
 .../db/pipe/event/TsFileInsertionDataContainerTest.java | 16 +++++++++++-----
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/query/TsFileInsertionQueryDataTabletIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/query/TsFileInsertionQueryDataTabletIterator.java
index a72bcb0719c..f9fa5a9d283 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/query/TsFileInsertionQueryDataTabletIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/query/TsFileInsertionQueryDataTabletIterator.java
@@ -160,7 +160,7 @@ public class TsFileInsertionQueryDataTabletIterator 
implements Iterator<Tablet>
         tablet.addValue(
             measurements.get(i),
             rowIndex,
-            field == null ? null : field.getObjectValue(field.getDataType()));
+            field == null ? null : 
field.getObjectValue(schemas.get(i).getType()));
       }
 
       tablet.rowSize++;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/scan/TsFileInsertionScanDataContainer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/scan/TsFileInsertionScanDataContainer.java
index 37a3b1a8850..558a00225c9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/scan/TsFileInsertionScanDataContainer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/event/common/tsfile/container/scan/TsFileInsertionScanDataContainer.java
@@ -43,7 +43,6 @@ import org.apache.tsfile.read.reader.IChunkReader;
 import org.apache.tsfile.read.reader.chunk.AlignedChunkReader;
 import org.apache.tsfile.read.reader.chunk.ChunkReader;
 import org.apache.tsfile.utils.Binary;
-import org.apache.tsfile.utils.BitMap;
 import org.apache.tsfile.utils.DateUtils;
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.TsPrimitiveType;
@@ -204,7 +203,7 @@ public class TsFileInsertionScanDataContainer extends 
TsFileInsertionDataContain
           final int rowIndex = tablet.rowSize;
 
           tablet.addTimestamp(rowIndex, data.currentTime());
-          putValueToColumns(data, tablet.values, tablet.bitMaps, rowIndex);
+          putValueToColumns(data, tablet, rowIndex);
 
           tablet.rowSize++;
         }
@@ -254,17 +253,17 @@ public class TsFileInsertionScanDataContainer extends 
TsFileInsertionDataContain
     } while (!data.hasCurrent());
   }
 
-  private void putValueToColumns(
-      final BatchData data, final Object[] columns, final BitMap[] bitMaps, 
final int rowIndex) {
-    final TSDataType type = data.getDataType();
-    if (type == TSDataType.VECTOR) {
+  private void putValueToColumns(final BatchData data, final Tablet tablet, 
final int rowIndex) {
+    final Object[] columns = tablet.values;
+
+    if (data.getDataType() == TSDataType.VECTOR) {
       for (int i = 0; i < columns.length; ++i) {
         final TsPrimitiveType primitiveType = data.getVector()[i];
         if (Objects.isNull(primitiveType)) {
-          bitMaps[i].mark(rowIndex);
+          tablet.bitMaps[i].mark(rowIndex);
           continue;
         }
-        switch (primitiveType.getDataType()) {
+        switch (tablet.getSchemas().get(i).getType()) {
           case BOOLEAN:
             ((boolean[]) columns[i])[rowIndex] = primitiveType.getBoolean();
             break;
@@ -295,7 +294,7 @@ public class TsFileInsertionScanDataContainer extends 
TsFileInsertionDataContain
         }
       }
     } else {
-      switch (type) {
+      switch (tablet.getSchemas().get(0).getType()) {
         case BOOLEAN:
           ((boolean[]) columns[0])[rowIndex] = data.getBoolean();
           break;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/TsFileInsertionDataContainerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/TsFileInsertionDataContainerTest.java
index e345e253b4b..e2a4a6ccbf9 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/TsFileInsertionDataContainerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/pipe/event/TsFileInsertionDataContainerTest.java
@@ -32,6 +32,7 @@ import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource;
 import 
org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResourceStatus;
 import org.apache.iotdb.pipe.api.access.Row;
 
+import org.apache.tsfile.common.conf.TSFileConfig;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.file.metadata.PlainDeviceID;
@@ -40,6 +41,7 @@ import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.read.TsFileSequenceReader;
 import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.read.common.TimeRange;
+import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.TsFileGeneratorUtils;
 import org.apache.tsfile.write.TsFileWriter;
@@ -53,6 +55,7 @@ import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -524,24 +527,27 @@ public class TsFileInsertionDataContainerTest {
     alignedTsFile = new File("0-0-2-0.tsfile");
 
     final List<MeasurementSchema> schemaList = new ArrayList<>();
-    schemaList.add(new MeasurementSchema("s1", TSDataType.INT32));
-    schemaList.add(new MeasurementSchema("s2", TSDataType.INT64));
+    schemaList.add(new MeasurementSchema("s1", TSDataType.TIMESTAMP));
+    schemaList.add(new MeasurementSchema("s2", TSDataType.STRING));
+    schemaList.add(new MeasurementSchema("s3", TSDataType.DATE));
 
     final Tablet t = new Tablet("root.sg.d", schemaList, 1024);
     t.rowSize = 2;
     t.addTimestamp(0, 1000);
     t.addTimestamp(1, 2000);
-    t.addValue("s1", 0, 2);
+    t.addValue("s1", 0, 2L);
     t.addValue("s2", 0, null);
+    t.addValue("s3", 0, LocalDate.of(2020, 8, 1));
     t.addValue("s1", 1, null);
-    t.addValue("s2", 1, 2L);
+    t.addValue("s2", 1, new Binary("test", TSFileConfig.STRING_CHARSET));
+    t.addValue("s3", 1, LocalDate.of(2024, 8, 1));
 
     try (final TsFileWriter writer = new TsFileWriter(alignedTsFile)) {
       writer.registerAlignedTimeseries(new Path("root.sg.d"), schemaList);
       writer.writeAligned(t);
     }
     testTsFilePointNum(
-        alignedTsFile, new PrefixPipePattern("root"), Long.MIN_VALUE, 
Long.MAX_VALUE, isQuery, 2);
+        alignedTsFile, new PrefixPipePattern("root"), Long.MIN_VALUE, 
Long.MAX_VALUE, isQuery, 4);
   }
 
   private void testTsFilePointNum(

Reply via email to