This is an automated email from the ASF dual-hosted git repository. jiangtian pushed a commit to branch rc/1.1 in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/rc/1.1 by this push: new b5dc8075 Fix error when write aligned tablet with null date (#251) b5dc8075 is described below commit b5dc8075dd7322813678de45611ffd0c43f5d9dd Author: Haonan <hhao...@outlook.com> AuthorDate: Tue Sep 24 14:35:43 2024 +0800 Fix error when write aligned tablet with null date (#251) --- .../write/chunk/AlignedChunkGroupWriterImpl.java | 5 +++- .../apache/tsfile/write/TsFileWriteApiTest.java | 31 ++++++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java index ecd974f8..7d2b6090 100644 --- a/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java +++ b/java/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java @@ -191,7 +191,10 @@ public class AlignedChunkGroupWriterImpl implements IChunkGroupWriter { case DATE: valueChunkWriter.write( time, - DateUtils.parseDateExpressionToInt(((LocalDate[]) tablet.values[columnIndex])[row]), + isNull + ? 0 + : DateUtils.parseDateExpressionToInt( + ((LocalDate[]) tablet.values[columnIndex])[row]), isNull); break; case INT64: diff --git a/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java b/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java index 4e5607a6..76f482c5 100644 --- a/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java +++ b/java/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java @@ -52,6 +52,7 @@ import org.junit.Test; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -354,8 +355,9 @@ public class TsFileWriteApiTest { setEnv(100, 30); try (TsFileWriter tsFileWriter = new TsFileWriter(f)) { measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, TSEncoding.PLAIN)); - measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, TSEncoding.PLAIN)); - measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s2", TSDataType.STRING, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s3", TSDataType.BLOB, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s4", TSDataType.DATE, TSEncoding.PLAIN)); // register nonAligned timeseries tsFileWriter.registerTimeseries(new Path(deviceId), measurementSchemas); @@ -364,12 +366,12 @@ public class TsFileWriteApiTest { long[] timestamps = tablet.timestamps; Object[] values = tablet.values; tablet.initBitMaps(); - long sensorNum = measurementSchemas.size(); + int sensorNum = measurementSchemas.size(); long startTime = 0; for (long r = 0; r < 10000; r++) { int row = tablet.rowSize++; timestamps[row] = startTime++; - for (int i = 0; i < sensorNum; i++) { + for (int i = 0; i < sensorNum - 1; i++) { if (i == 1 && r > 1000) { tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber()); continue; @@ -377,6 +379,12 @@ public class TsFileWriteApiTest { Binary[] textSensor = (Binary[]) values[i]; textSensor[row] = new Binary("testString.........", TSFileConfig.STRING_CHARSET); } + if (r > 1000) { + tablet.bitMaps[sensorNum - 1].mark((int) r % tablet.getMaxRowNumber()); + } else { + LocalDate[] dateSensor = (LocalDate[]) values[sensorNum - 1]; + dateSensor[row] = LocalDate.of(2024, 4, 1); + } // write if (tablet.rowSize == tablet.getMaxRowNumber()) { tsFileWriter.write(tablet); @@ -400,8 +408,9 @@ public class TsFileWriteApiTest { setEnv(100, 30); try (TsFileWriter tsFileWriter = new TsFileWriter(f)) { measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, TSEncoding.PLAIN)); - measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, TSEncoding.PLAIN)); - measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s2", TSDataType.STRING, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s3", TSDataType.BLOB, TSEncoding.PLAIN)); + measurementSchemas.add(new MeasurementSchema("s4", TSDataType.DATE, TSEncoding.PLAIN)); // register aligned timeseries tsFileWriter.registerAlignedTimeseries(new Path(deviceId), measurementSchemas); @@ -410,12 +419,12 @@ public class TsFileWriteApiTest { long[] timestamps = tablet.timestamps; Object[] values = tablet.values; tablet.initBitMaps(); - long sensorNum = measurementSchemas.size(); + int sensorNum = measurementSchemas.size(); long startTime = 0; for (long r = 0; r < 10000; r++) { int row = tablet.rowSize++; timestamps[row] = startTime++; - for (int i = 0; i < sensorNum; i++) { + for (int i = 0; i < sensorNum - 1; i++) { if (i == 1 && r > 1000) { tablet.bitMaps[i].mark((int) r % tablet.getMaxRowNumber()); continue; @@ -423,6 +432,12 @@ public class TsFileWriteApiTest { Binary[] textSensor = (Binary[]) values[i]; textSensor[row] = new Binary("testString.........", TSFileConfig.STRING_CHARSET); } + if (r > 1000) { + tablet.bitMaps[sensorNum - 1].mark((int) r % tablet.getMaxRowNumber()); + } else { + LocalDate[] dateSensor = (LocalDate[]) values[sensorNum - 1]; + dateSensor[row] = LocalDate.of(2024, 4, 1); + } // write if (tablet.rowSize == tablet.getMaxRowNumber()) { tsFileWriter.writeAligned(tablet);