This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch VectorCodeSmell in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 559c545eda2f33df61252db95ee83ead13924c71 Author: HTHou <[email protected]> AuthorDate: Mon Apr 12 13:55:28 2021 +0800 [To Vector] Fix Vector Code Smell Step 2 --- .../org/apache/iotdb/VectorSessionExample.java | 12 +++-- .../db/engine/querycontext/ReadOnlyMemChunk.java | 4 +- .../db/engine/storagegroup/TsFileResource.java | 6 ++- .../apache/iotdb/db/qp/executor/PlanExecutor.java | 2 +- .../db/qp/physical/crud/CreateTemplatePlan.java | 1 + .../iotdb/tsfile/file/metadata/IChunkMetadata.java | 1 + .../java/org/apache/iotdb/tsfile/utils/BitMap.java | 6 ++- .../apache/iotdb/tsfile/utils/TsPrimitiveType.java | 53 ++++++++++++++++------ 8 files changed, 60 insertions(+), 25 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 2d09761..9dd2bbf 100644 --- a/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java +++ b/example/session/src/main/java/org/apache/iotdb/VectorSessionExample.java @@ -31,9 +31,9 @@ import org.apache.iotdb.tsfile.write.record.Tablet; import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema; import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; -import java.util.Random; @SuppressWarnings("squid:S106") public class VectorSessionExample { @@ -226,10 +226,10 @@ public class VectorSessionExample { timestamps[row] = time; long[] sensor = (long[]) values[0]; - sensor[row] = new Random().nextLong(); + sensor[row] = new SecureRandom().nextLong(); int[] sensors = (int[]) values[1]; - sensors[row] = new Random().nextInt(); + sensors[row] = new SecureRandom().nextInt(); if (tablet.rowSize == tablet.getMaxRowNumber()) { session.insertTablet(tablet, true); @@ -258,6 +258,7 @@ public class VectorSessionExample { long[] timestamps = tablet.timestamps; Object[] values = tablet.values; + // Use the bitMap to mark the null value point BitMap[] bitMaps = new BitMap[values.length]; tablet.bitMaps = bitMaps; @@ -267,11 +268,12 @@ public class VectorSessionExample { timestamps[row] = time; long[] sensor = (long[]) values[0]; - sensor[row] = new Random().nextLong(); + sensor[row] = new SecureRandom().nextLong(); int[] sensors = (int[]) values[1]; - sensors[row] = new Random().nextInt(); + sensors[row] = new SecureRandom().nextInt(); + // mark this point as null value if (time % 5 == 0) { bitMaps[1].mark(row); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java index dced8ed..883fc00 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java @@ -140,14 +140,12 @@ public class ReadOnlyMemChunk { } /** - * The constructor for VECTOR type + * The constructor for VECTOR type. * * @param schema VectorMeasurementSchema * @param tvList VectorTvList * @param size The Number of Chunk data points * @param deletionList The timeRange of deletionList - * @throws IOException - * @throws QueryProcessException */ public ReadOnlyMemChunk( IMeasurementSchema schema, TVList tvList, int size, List<TimeRange> deletionList) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java index 2390a7c..c6a7abc 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResource.java @@ -662,7 +662,11 @@ public class TsFileResource { this.processor = processor; } - /** @return TimeseriesMetadata or VectorTimeseriesMetadata */ + /** + * Get a timeseriesMetadata. + * + * @return TimeseriesMetadata or the first ValueTimeseriesMetadata in VectorTimeseriesMetadata + */ public TimeseriesMetadata getTimeSeriesMetadata() { if (timeSeriesMetadata == null) { return null; diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java index 3cc4bc5..cb5c32e 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java @@ -1238,7 +1238,7 @@ public class PlanExecutor implements IPlanExecutor { throw new StorageEngineException( "failed to insert points " + failedMeasurements - + (" caused by " + exception.getMessage())); + + (exception != null ? (" caused by " + exception.getMessage()) : "")); } } catch (StorageEngineException | MetadataException e) { diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/CreateTemplatePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/CreateTemplatePlan.java index 35bae43..6dba97a 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/CreateTemplatePlan.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/crud/CreateTemplatePlan.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.iotdb.db.qp.physical.crud; import org.apache.iotdb.db.metadata.PartialPath; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java index 092c3d3..b81a18b 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/IChunkMetadata.java @@ -16,6 +16,7 @@ * specific language governing permissions and limitations * under the License. */ + package org.apache.iotdb.tsfile.file.metadata; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/BitMap.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/BitMap.java index a7f2589..91affdb 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/BitMap.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/BitMap.java @@ -38,12 +38,14 @@ public class BitMap { private byte[] bits; private int size; + /** Initialize a BitMap with given size. */ public BitMap(int size) { this.size = size; bits = new byte[size / Byte.SIZE + 1]; Arrays.fill(bits, (byte) 0); } + /** Initialize a BitMap with given size and bytes. */ public BitMap(int size, byte[] bits) { this.size = size; this.bits = bits; @@ -62,12 +64,12 @@ public class BitMap { return (bits[position / Byte.SIZE] & BIT_UTIL[position % Byte.SIZE]) != 0; } - /** mark as 1 at the given bit position */ + /** mark as 1 at the given bit position. */ public void mark(int position) { bits[position / Byte.SIZE] |= BIT_UTIL[position % Byte.SIZE]; } - /** mark as 0 at all positions */ + /** mark as 0 at all positions. */ public void reset() { Arrays.fill(bits, (byte) 0); } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java index 165566a..81249b3 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/utils/TsPrimitiveType.java @@ -77,7 +77,7 @@ public abstract class TsPrimitiveType implements Serializable { } public TsPrimitiveType[] getVector() { - throw new UnsupportedOperationException("setDouble() is not supported for current sub-class"); + throw new UnsupportedOperationException("getVector() is not supported for current sub-class"); } public void setBoolean(boolean val) { @@ -105,7 +105,7 @@ public abstract class TsPrimitiveType implements Serializable { } public void setVector(TsPrimitiveType[] val) { - throw new UnsupportedOperationException("setDouble() is not supported for current sub-class"); + throw new UnsupportedOperationException("setVector() is not supported for current sub-class"); } /** @@ -475,27 +475,29 @@ public abstract class TsPrimitiveType implements Serializable { public static class TsVector extends TsPrimitiveType { - private TsPrimitiveType[] value; + private TsPrimitiveType[] values; - public TsVector(TsPrimitiveType[] value) { - this.value = value; + public TsVector(TsPrimitiveType[] values) { + this.values = values; } @Override public TsPrimitiveType[] getVector() { - return value; + return values; } @Override - public void setVector(TsPrimitiveType[] val) { - this.value = val; + public void setVector(TsPrimitiveType[] vals) { + this.values = vals; } @Override public int getSize() { int size = 0; - for (TsPrimitiveType type : value) { - size += type.getSize(); + for (TsPrimitiveType type : values) { + if (type != null) { + size += type.getSize(); + } } // object header + array object header return 4 + 4 + size; @@ -509,9 +511,9 @@ public abstract class TsPrimitiveType implements Serializable { @Override public String getStringValue() { StringBuilder builder = new StringBuilder("["); - builder.append(value[0] == null ? "null" : value[0].getStringValue()); - for (int i = 1; i < value.length; i++) { - builder.append(", ").append(value[i] == null ? "null" : value[i].getStringValue()); + builder.append(values[0] == null ? "null" : values[0].getStringValue()); + for (int i = 1; i < values.length; i++) { + builder.append(", ").append(values[i] == null ? "null" : values[i].getStringValue()); } builder.append("]"); return builder.toString(); @@ -521,5 +523,30 @@ public abstract class TsPrimitiveType implements Serializable { public TSDataType getDataType() { return TSDataType.VECTOR; } + + @Override + public int hashCode() { + return values.hashCode(); + } + + @Override + public boolean equals(Object anObject) { + if (this == anObject) { + return true; + } + if (anObject instanceof TsVector) { + TsVector anotherTs = (TsVector) anObject; + if (anotherTs.values.length != this.values.length) { + return false; + } + for (int i = 0; i < this.values.length; i++) { + if (!values[i].equals(anotherTs.values[i])) { + return false; + } + } + return true; + } + return false; + } } }
