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(