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);
+  }
+}

Reply via email to