This is an automated email from the ASF dual-hosted git repository. sunzesong pushed a commit to branch Vector_addValue in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d9cac75dd6165c08b3ce8161f1d7c2cbc87fb6ef Author: samperson1997 <[email protected]> AuthorDate: Sun Apr 11 23:19:31 2021 +0800 [To Vector] Fix Tablet.addValue() --- .../org/apache/iotdb/VectorSessionExample.java | 40 +++++++++++++++++----- .../metadata/AlignedTimeseriesException.java | 4 +++ .../iotdb/db/metadata/template/Template.java | 6 ++++ .../java/org/apache/iotdb/session/Session.java | 2 +- .../apache/iotdb/tsfile/write/record/Tablet.java | 10 +++--- 5 files changed, 47 insertions(+), 15 deletions(-) diff --git a/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java b/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java index 75b4bbb..ac1c8cd 100644 --- a/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java +++ b/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java @@ -215,6 +215,30 @@ public class VectorSessionExample { Tablet tablet = new Tablet(ROOT_SG1_D1, schemaList); + // Method 1 to add tablet data + long timestamp = System.currentTimeMillis(); + + for (long row = 0; row < 100; row++) { + int rowIndex = tablet.rowSize++; + tablet.addTimestamp(rowIndex, timestamp); + tablet.addValue( + schemaList.get(0).getValueMeasurementIdList().get(0), rowIndex, new Random().nextLong()); + tablet.addValue( + schemaList.get(0).getValueMeasurementIdList().get(1), rowIndex, new Random().nextInt()); + + if (tablet.rowSize == tablet.getMaxRowNumber()) { + session.insertTablet(tablet, true); + tablet.reset(); + } + timestamp++; + } + + if (tablet.rowSize != 0) { + session.insertTablet(tablet); + tablet.reset(); + } + + // Method 2 to add tablet data long[] timestamps = tablet.timestamps; Object[] values = tablet.values; @@ -222,11 +246,11 @@ public class VectorSessionExample { int row = tablet.rowSize++; timestamps[row] = time; - long[] sensor = (long[]) values[0]; - sensor[row] = new Random().nextLong(); + long[] sensor1 = (long[]) values[0]; + sensor1[row] = new Random().nextLong(); - int[] sensors = (int[]) values[1]; - sensors[row] = new Random().nextInt(); + int[] sensor2 = (int[]) values[1]; + sensor2[row] = new Random().nextInt(); if (tablet.rowSize == tablet.getMaxRowNumber()) { session.insertTablet(tablet, true); @@ -263,11 +287,11 @@ public class VectorSessionExample { int row = tablet.rowSize++; timestamps[row] = time; - long[] sensor = (long[]) values[0]; - sensor[row] = new Random().nextLong(); + long[] sensor1 = (long[]) values[0]; + sensor1[row] = new Random().nextLong(); - int[] sensors = (int[]) values[1]; - sensors[row] = new Random().nextInt(); + int[] sensor2 = (int[]) values[1]; + sensor2[row] = new Random().nextInt(); if (time % 5 == 0) { bitMaps[1].mark(row); diff --git a/server/src/main/java/org/apache/iotdb/db/exception/metadata/AlignedTimeseriesException.java b/server/src/main/java/org/apache/iotdb/db/exception/metadata/AlignedTimeseriesException.java index 952b723..f8373d7 100644 --- a/server/src/main/java/org/apache/iotdb/db/exception/metadata/AlignedTimeseriesException.java +++ b/server/src/main/java/org/apache/iotdb/db/exception/metadata/AlignedTimeseriesException.java @@ -23,6 +23,10 @@ import org.apache.iotdb.rpc.TSStatusCode; public class AlignedTimeseriesException extends MetadataException { + /** + * @param message excepetion message + * @param path related timeseries path + */ public AlignedTimeseriesException(String message, String path) { super(String.format("%s (Path: %s)", message, path)); errorCode = TSStatusCode.ALIGNED_TIMESERIES_ERROR.getStatusCode(); diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java index cc41935..9c59b11 100644 --- a/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java +++ b/server/src/main/java/org/apache/iotdb/db/metadata/template/Template.java @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.atomic.AtomicLong; @@ -160,4 +161,9 @@ public class Template { Template that = (Template) t; return this.name.equals(that.name) && this.schemaMap.equals(that.schemaMap); } + + @Override + public int hashCode() { + return Objects.hash(name, schemaMap); + } } diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java index 20622a7..7ea7878 100644 --- a/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/session/src/main/java/org/apache/iotdb/session/Session.java @@ -1541,7 +1541,7 @@ public class Session { int measurementSize = schema.getValueMeasurementIdList().size(); for (int j = 0; j < measurementSize; j++) { tablet.values[columnIndex] = - sortList(tablet.values[columnIndex], schema.getValueTSDataTypeList().get(i), index); + sortList(tablet.values[columnIndex], schema.getValueTSDataTypeList().get(j), index); if (tablet.bitMaps != null && tablet.bitMaps[columnIndex] != null) { tablet.bitMaps[columnIndex] = sortBitMap(tablet.bitMaps[columnIndex], index); } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java index bfd0c6f..4cc93f1 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/Tablet.java @@ -121,13 +121,11 @@ public class Tablet { IMeasurementSchema measurementSchema = schemas.get(indexOfValue); if (measurementSchema.getType().equals(TSDataType.VECTOR)) { - for (int i = 0; i < measurementSchema.getValueMeasurementIdList().size(); i++) { - TSDataType dataType = measurementSchema.getValueTSDataTypeList().get(i); - addValueOfDataType(dataType, rowIndex, measurementIndex.get(measurementId), value); - } + int indexInVector = measurementSchema.getMeasurementIdColumnIndex(measurementId); + TSDataType dataType = measurementSchema.getValueTSDataTypeList().get(indexInVector); + addValueOfDataType(dataType, rowIndex, indexOfValue + indexInVector, value); } else { - addValueOfDataType( - measurementSchema.getType(), rowIndex, measurementIndex.get(measurementId), value); + addValueOfDataType(measurementSchema.getType(), rowIndex, indexOfValue, value); } }
