This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new c2ca774 Avoid type conversion when encoding MeasureSchema (#1749)
c2ca774 is described below
commit c2ca774ee88c00bebef019067e250157b1577826
Author: yanhong wang <[email protected]>
AuthorDate: Sun Sep 27 11:15:44 2020 +0800
Avoid type conversion when encoding MeasureSchema (#1749)
---
.../file/metadata/enums/CompressionType.java | 67 +++++++++++++++++++++-
.../tsfile/file/metadata/enums/TSDataType.java | 60 +++++++++++++++++--
.../tsfile/file/metadata/enums/TSEncoding.java | 67 +++++++++++++++++++++-
.../tsfile/write/schema/MeasurementSchema.java | 37 ++++++------
.../writer/MeasurementSchemaSerializeTest.java | 55 ++++++++++++++++++
5 files changed, 256 insertions(+), 30 deletions(-)
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/CompressionType.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/CompressionType.java
index 43a0eaa..47143fc 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/CompressionType.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/CompressionType.java
@@ -26,11 +26,46 @@ public enum CompressionType {
/**
* deserialize short number.
*
- * @param i short number
+ * @param compressor short number
* @return CompressionType
*/
- public static CompressionType deserialize(short i) {
- switch (i) {
+ public static CompressionType deserialize(short compressor) {
+ if (compressor >= 8) {
+ throw new IllegalArgumentException("Invalid input: " + compressor);
+ }
+ switch (compressor) {
+ case 0:
+ return UNCOMPRESSED;
+ case 1:
+ return SNAPPY;
+ case 2:
+ return GZIP;
+ case 3:
+ return LZO;
+ case 4:
+ return SDT;
+ case 5:
+ return PAA;
+ case 6:
+ return PLA;
+ case 7:
+ return LZ4;
+ default:
+ return UNCOMPRESSED;
+ }
+ }
+
+ /**
+ * give an byte to return a compression type.
+ *
+ * @param compressor byte number
+ * @return CompressionType
+ */
+ public static CompressionType byteToEnum(byte compressor) {
+ if (compressor >= 8) {
+ throw new IllegalArgumentException("Invalid input: " + compressor);
+ }
+ switch (compressor) {
case 0:
return UNCOMPRESSED;
case 1:
@@ -117,6 +152,32 @@ public enum CompressionType {
}
/**
+ * @return byte number
+ */
+ public byte enumToByte() {
+ switch (this) {
+ case UNCOMPRESSED:
+ return 0;
+ case SNAPPY:
+ return 1;
+ case GZIP:
+ return 2;
+ case LZO:
+ return 3;
+ case SDT:
+ return 4;
+ case PAA:
+ return 5;
+ case PLA:
+ return 6;
+ case LZ4:
+ return 7;
+ default:
+ return 0;
+ }
+ }
+
+ /**
* get extension.
*
* @return extension (string type), for example: .snappy, .gz, .lzo
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
index 287cbf0..588de0b 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSDataType.java
@@ -28,14 +28,42 @@ public enum TSDataType {
/**
* give an integer to return a data type.
*
- * @param i -param to judge enum type
+ * @param type -param to judge enum type
* @return -enum type
*/
- public static TSDataType deserialize(short i) {
- if (i >= 6) {
- throw new IllegalArgumentException("Invalid input: " + i);
+ public static TSDataType deserialize(short type) {
+ if (type >= 6) {
+ throw new IllegalArgumentException("Invalid input: " + type);
}
- switch (i) {
+ switch (type) {
+ case 0:
+ return BOOLEAN;
+ case 1:
+ return INT32;
+ case 2:
+ return INT64;
+ case 3:
+ return FLOAT;
+ case 4:
+ return DOUBLE;
+ case 5:
+ return TEXT;
+ default:
+ return TEXT;
+ }
+ }
+
+ /**
+ * give an byte to return a data type.
+ *
+ * @param type byte number
+ * @return data type
+ */
+ public static TSDataType byteToEnum(byte type) {
+ if (type >= 6) {
+ throw new IllegalArgumentException("Invalid input: " + type);
+ }
+ switch (type) {
case 0:
return BOOLEAN;
case 1:
@@ -92,4 +120,26 @@ public enum TSDataType {
return -1;
}
}
+
+ /**
+ * @return byte number
+ */
+ public byte enumToByte() {
+ switch (this) {
+ case BOOLEAN:
+ return 0;
+ case INT32:
+ return 1;
+ case INT64:
+ return 2;
+ case FLOAT:
+ return 3;
+ case DOUBLE:
+ return 4;
+ case TEXT:
+ return 5;
+ default:
+ return -1;
+ }
+ }
}
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSEncoding.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSEncoding.java
index f386150..2c8e525 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSEncoding.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/enums/TSEncoding.java
@@ -25,11 +25,46 @@ public enum TSEncoding {
/**
* judge the encoding deserialize type.
*
- * @param i -use to determine encoding type
+ * @param encoding -use to determine encoding type
* @return -encoding type
*/
- public static TSEncoding deserialize(short i) {
- switch (i) {
+ public static TSEncoding deserialize(short encoding) {
+ if (encoding >= 8) {
+ throw new IllegalArgumentException("Invalid input: " + encoding);
+ }
+ switch (encoding) {
+ case 0:
+ return PLAIN;
+ case 1:
+ return PLAIN_DICTIONARY;
+ case 2:
+ return RLE;
+ case 3:
+ return DIFF;
+ case 4:
+ return TS_2DIFF;
+ case 5:
+ return BITMAP;
+ case 6:
+ return GORILLA;
+ case 7:
+ return REGULAR;
+ default:
+ return PLAIN;
+ }
+ }
+
+ /**
+ * give an byte to return a encoding type.
+ *
+ * @param encoding byte number
+ * @return encoding type
+ */
+ public static TSEncoding byteToEnum(byte encoding) {
+ if (encoding >= 8) {
+ throw new IllegalArgumentException("Invalid input: " + encoding);
+ }
+ switch (encoding) {
case 0:
return PLAIN;
case 1:
@@ -82,4 +117,30 @@ public enum TSEncoding {
return 0;
}
}
+
+ /**
+ * @return byte number
+ */
+ public byte enumToByte() {
+ switch (this) {
+ case PLAIN:
+ return 0;
+ case PLAIN_DICTIONARY:
+ return 1;
+ case RLE:
+ return 2;
+ case DIFF:
+ return 3;
+ case TS_2DIFF:
+ return 4;
+ case BITMAP:
+ return 5;
+ case GORILLA:
+ return 6;
+ case REGULAR:
+ return 7;
+ default:
+ return 0;
+ }
+ }
}
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
index c5a1ab7..d9ea02b 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/MeasurementSchema.java
@@ -83,11 +83,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
*/
public MeasurementSchema(String measurementId, TSDataType type, TSEncoding
encoding,
CompressionType compressionType, Map<String, String> props) {
- this.type = (byte) type.serialize();
+ this.type = type.enumToByte();
this.measurementId = measurementId;
- this.encoding = (byte) encoding.serialize();
+ this.encoding = encoding.enumToByte();
this.props = props;
- this.compressor = (byte) compressionType.serialize();
+ this.compressor = compressionType.enumToByte();
}
/**
@@ -98,12 +98,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
measurementSchema.measurementId = ReadWriteIOUtils.readString(inputStream);
- measurementSchema.type = (byte)
ReadWriteIOUtils.readDataType(inputStream).serialize();
+ measurementSchema.type =
ReadWriteIOUtils.readDataType(inputStream).enumToByte();
- measurementSchema.encoding = (byte)
ReadWriteIOUtils.readEncoding(inputStream).serialize();
+ measurementSchema.encoding =
ReadWriteIOUtils.readEncoding(inputStream).enumToByte();
- measurementSchema.compressor = (byte)
ReadWriteIOUtils.readCompressionType(inputStream)
- .serialize();
+ measurementSchema.compressor =
ReadWriteIOUtils.readCompressionType(inputStream).enumToByte();
int size = ReadWriteIOUtils.readInt(inputStream);
if (size > 0) {
@@ -128,11 +127,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
measurementSchema.measurementId = ReadWriteIOUtils.readString(buffer);
- measurementSchema.type = (byte)
ReadWriteIOUtils.readDataType(buffer).serialize();
+ measurementSchema.type =
ReadWriteIOUtils.readDataType(buffer).enumToByte();
- measurementSchema.encoding = (byte)
ReadWriteIOUtils.readEncoding(buffer).serialize();
+ measurementSchema.encoding =
ReadWriteIOUtils.readEncoding(buffer).enumToByte();
- measurementSchema.compressor = (byte)
ReadWriteIOUtils.readCompressionType(buffer).serialize();
+ measurementSchema.compressor =
ReadWriteIOUtils.readCompressionType(buffer).enumToByte();
int size = ReadWriteIOUtils.readInt(buffer);
if (size > 0) {
@@ -162,11 +161,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
}
public TSEncoding getEncodingType() {
- return TSEncoding.deserialize(encoding);
+ return TSEncoding.byteToEnum(encoding);
}
public TSDataType getType() {
- return TSDataType.deserialize(type);
+ return TSDataType.byteToEnum(type);
}
public void setProps(Map<String, String> props) {
@@ -200,7 +199,7 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
}
public CompressionType getCompressor() {
- return CompressionType.deserialize(compressor);
+ return CompressionType.byteToEnum(compressor);
}
/**
@@ -211,11 +210,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
byteLen += ReadWriteIOUtils.write(measurementId, outputStream);
- byteLen += ReadWriteIOUtils.write(type, outputStream);
+ byteLen += ReadWriteIOUtils.write(TSDataType.byteToEnum(type),
outputStream);
- byteLen += ReadWriteIOUtils.write(encoding, outputStream);
+ byteLen += ReadWriteIOUtils.write(TSEncoding.byteToEnum(encoding),
outputStream);
- byteLen += ReadWriteIOUtils.write(compressor, outputStream);
+ byteLen += ReadWriteIOUtils.write(CompressionType.byteToEnum(compressor),
outputStream);
if (props == null) {
byteLen += ReadWriteIOUtils.write(0, outputStream);
@@ -238,11 +237,11 @@ public class MeasurementSchema implements
Comparable<MeasurementSchema>, Seriali
byteLen += ReadWriteIOUtils.write(measurementId, buffer);
- byteLen += ReadWriteIOUtils.write(type, buffer);
+ byteLen += ReadWriteIOUtils.write(TSDataType.byteToEnum(type), buffer);
- byteLen += ReadWriteIOUtils.write(encoding, buffer);
+ byteLen += ReadWriteIOUtils.write(TSEncoding.byteToEnum(encoding), buffer);
- byteLen += ReadWriteIOUtils.write(compressor, buffer);
+ byteLen += ReadWriteIOUtils.write(CompressionType.byteToEnum(compressor),
buffer);
if (props == null) {
byteLen += ReadWriteIOUtils.write(0, buffer);
diff --git
a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/MeasurementSchemaSerializeTest.java
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/MeasurementSchemaSerializeTest.java
new file mode 100644
index 0000000..ac914fe
--- /dev/null
+++
b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/MeasurementSchemaSerializeTest.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.tsfile.write.writer;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.junit.Test;
+
+public class MeasurementSchemaSerializeTest {
+
+ @Test
+ public void deserializeFromByteBufferTest() throws IOException {
+ MeasurementSchema standard = new MeasurementSchema("sensor_1",
+ TSDataType.FLOAT, TSEncoding.RLE);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ standard.serializeTo(outputStream);
+ ByteBuffer byteBuffer = ByteBuffer.wrap(outputStream.toByteArray());
+ MeasurementSchema measurementSchema =
MeasurementSchema.deserializeFrom(byteBuffer);
+ assertEquals(standard, measurementSchema);
+ }
+
+ @Test
+ public void deserializeFromInputStreamTest() throws IOException {
+ MeasurementSchema standard = new MeasurementSchema("sensor_1",
+ TSDataType.FLOAT, TSEncoding.RLE);
+ ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
+ standard.serializeTo(byteBuffer);
+ ByteArrayInputStream inputStream = new
ByteArrayInputStream(byteBuffer.array());
+ MeasurementSchema measurementSchema =
MeasurementSchema.deserializeFrom(inputStream);
+ assertEquals(standard, measurementSchema);
+ }
+}