This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch iotdb
in repository https://gitbox.apache.org/repos/asf/tsfile.git
The following commit(s) were added to refs/heads/iotdb by this push:
new c10ccbef Fix error when write aligned tablet with null date (#250)
c10ccbef is described below
commit c10ccbef638420edff831885bce078e46ad812dd
Author: Haonan <[email protected]>
AuthorDate: Tue Sep 24 14:17:25 2024 +0800
Fix error when write aligned tablet with null date (#250)
(cherry picked from commit efb39a61bc8f2561075e3fc47f3630cda314a5de)
---
.../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 41fa5577..5ffba51b 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
@@ -231,7 +231,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 a1ec2aa1..672ca2c1 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);