You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/12/12 08:18:54 UTC

[iotdb] branch rel/0.13 updated: [To rel/0.13][IOTDB-5184] Fix CompressionType ArrayIndexOutOfBounds (#8401)

This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch rel/0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.13 by this push:
     new 5463e72a7a [To rel/0.13][IOTDB-5184] Fix CompressionType ArrayIndexOutOfBounds (#8401)
5463e72a7a is described below

commit 5463e72a7a9d685ea0f9403cce212eb9038ba46a
Author: 周沛辰 <45...@users.noreply.github.com>
AuthorDate: Mon Dec 12 16:18:47 2022 +0800

    [To rel/0.13][IOTDB-5184] Fix CompressionType ArrayIndexOutOfBounds (#8401)
    
    Co-authored-by: Liu Xuxin <37...@users.noreply.github.com>
---
 .../org/apache/iotdb/db/metadata/logfile/MLogWriter.java   |  2 +-
 .../iotdb/db/qp/physical/sys/AppendTemplatePlan.java       |  6 +++---
 .../db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java    |  6 +++---
 .../db/qp/physical/sys/CreateMultiTimeSeriesPlan.java      |  6 +++---
 .../iotdb/db/qp/physical/sys/CreateTemplatePlan.java       |  7 ++++---
 .../iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java     |  6 +++---
 .../apache/iotdb/db/service/thrift/impl/TSServiceImpl.java |  8 ++++----
 .../src/main/java/org/apache/iotdb/session/Session.java    | 14 +++++++-------
 8 files changed, 28 insertions(+), 27 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
index 1ec1e16d7e..6e481c797f 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/logfile/MLogWriter.java
@@ -277,7 +277,7 @@ public class MLogWriter implements AutoCloseable {
                 words[1],
                 TSDataType.values()[Integer.parseInt(words[3])],
                 TSEncoding.values()[Integer.parseInt(words[4])],
-                CompressionType.values()[Integer.parseInt(words[5])]));
+                CompressionType.deserialize((byte) Integer.parseInt(words[5]))));
       case "1":
         return new StorageGroupMNodePlan(
             words[1], Long.parseLong(words[2]), Integer.parseInt(words[3]));
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/AppendTemplatePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/AppendTemplatePlan.java
index 5e9287dc81..508a7afb0f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/AppendTemplatePlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/AppendTemplatePlan.java
@@ -134,7 +134,7 @@ public class AppendTemplatePlan extends PhysicalPlan {
     // compressor
     ReadWriteIOUtils.write(compressors.length, buffer);
     for (CompressionType type : compressors) {
-      ReadWriteIOUtils.write(type.ordinal(), buffer);
+      ReadWriteIOUtils.write((int) type.serialize(), buffer);
     }
 
     buffer.putLong(index);
@@ -171,7 +171,7 @@ public class AppendTemplatePlan extends PhysicalPlan {
     size = ReadWriteIOUtils.readInt(buffer);
     compressors = new CompressionType[size];
     for (int i = 0; i < size; i++) {
-      compressors[i] = CompressionType.values()[ReadWriteIOUtils.readInt(buffer)];
+      compressors[i] = CompressionType.deserialize((byte) ReadWriteIOUtils.readInt(buffer));
     }
 
     this.index = buffer.getLong();
@@ -205,7 +205,7 @@ public class AppendTemplatePlan extends PhysicalPlan {
     // compressor
     ReadWriteIOUtils.write(compressors.length, stream);
     for (CompressionType type : compressors) {
-      ReadWriteIOUtils.write(type.ordinal(), stream);
+      ReadWriteIOUtils.write((int) type.serialize(), stream);
     }
 
     stream.writeLong(index);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java
index b02a98e35e..2e9f408a1b 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateAlignedTimeSeriesPlan.java
@@ -157,7 +157,7 @@ public class CreateAlignedTimeSeriesPlan extends PhysicalPlan {
       stream.write(encoding.ordinal());
     }
     for (CompressionType compressor : compressors) {
-      stream.write(compressor.ordinal());
+      stream.write(compressor.serialize());
     }
 
     // alias
@@ -190,7 +190,7 @@ public class CreateAlignedTimeSeriesPlan extends PhysicalPlan {
       buffer.put((byte) encoding.ordinal());
     }
     for (CompressionType compressor : compressors) {
-      buffer.put((byte) compressor.ordinal());
+      buffer.put(compressor.serialize());
     }
 
     // alias
@@ -228,7 +228,7 @@ public class CreateAlignedTimeSeriesPlan extends PhysicalPlan {
     }
     compressors = new ArrayList<>();
     for (int i = 0; i < size; i++) {
-      compressors.add(CompressionType.values()[buffer.get()]);
+      compressors.add(CompressionType.deserialize(buffer.get()));
     }
 
     // alias
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
index 38c323cc0d..a6b86f36b2 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateMultiTimeSeriesPlan.java
@@ -184,7 +184,7 @@ public class CreateMultiTimeSeriesPlan extends PhysicalPlan implements BatchPlan
     }
 
     for (CompressionType compressor : compressors) {
-      stream.write(compressor.ordinal());
+      stream.write(compressor.serialize());
     }
 
     serializeOptional(stream);
@@ -242,7 +242,7 @@ public class CreateMultiTimeSeriesPlan extends PhysicalPlan implements BatchPlan
     }
 
     for (CompressionType compressor : compressors) {
-      buffer.put((byte) compressor.ordinal());
+      buffer.put(compressor.serialize());
     }
 
     serializeOptional(buffer);
@@ -298,7 +298,7 @@ public class CreateMultiTimeSeriesPlan extends PhysicalPlan implements BatchPlan
     }
     compressors = new ArrayList<>(totalSize);
     for (int i = 0; i < totalSize; i++) {
-      compressors.add(CompressionType.values()[buffer.get()]);
+      compressors.add(CompressionType.deserialize(buffer.get()));
     }
 
     deserializeOptional(buffer, totalSize);
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
index dfbce3c17a..809a28a3ed 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
@@ -226,7 +226,8 @@ public class CreateTemplatePlan extends PhysicalPlan {
       String measurementName = ReadWriteIOUtils.readString(buffer);
       TSDataType dataType = TSDataType.values()[ReadWriteIOUtils.readByte(buffer)];
       TSEncoding encoding = TSEncoding.values()[ReadWriteIOUtils.readByte(buffer)];
-      CompressionType compressionType = CompressionType.values()[ReadWriteIOUtils.readByte(buffer)];
+      CompressionType compressionType =
+          CompressionType.deserialize(ReadWriteIOUtils.readByte(buffer));
 
       if (alignedPrefix.containsKey(prefix) && !isAlign) {
         throw new MetadataException("Align designation incorrect at: " + prefix);
@@ -401,7 +402,7 @@ public class CreateTemplatePlan extends PhysicalPlan {
         int listSize = ReadWriteIOUtils.readInt(buffer);
         compressors[i] = new CompressionType[listSize];
         for (int j = 0; j < listSize; j++) {
-          compressors[i][j] = CompressionType.values()[ReadWriteIOUtils.readInt(buffer)];
+          compressors[i][j] = CompressionType.deserialize((byte) ReadWriteIOUtils.readInt(buffer));
         }
       }
     } else {
@@ -411,7 +412,7 @@ public class CreateTemplatePlan extends PhysicalPlan {
         int listSize = measurements[i].length;
         compressors[i] = new CompressionType[listSize];
         CompressionType alignedCompressionType =
-            CompressionType.values()[ReadWriteIOUtils.readInt(buffer)];
+            CompressionType.deserialize((byte) ReadWriteIOUtils.readInt(buffer));
         for (int j = 0; j < listSize; j++) {
           compressors[i][j] = alignedCompressionType;
         }
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
index aceae26e51..1252781ab5 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTimeSeriesPlan.java
@@ -169,7 +169,7 @@ public class CreateTimeSeriesPlan extends PhysicalPlan {
     stream.write(bytes);
     stream.write(dataType.ordinal());
     stream.write(encoding.ordinal());
-    stream.write(compressor.ordinal());
+    stream.write(compressor.serialize());
     stream.writeLong(tagOffset);
 
     // alias
@@ -215,7 +215,7 @@ public class CreateTimeSeriesPlan extends PhysicalPlan {
     buffer.put(bytes);
     buffer.put((byte) dataType.ordinal());
     buffer.put((byte) encoding.ordinal());
-    buffer.put((byte) compressor.ordinal());
+    buffer.put(compressor.serialize());
     buffer.putLong(tagOffset);
 
     // alias
@@ -261,7 +261,7 @@ public class CreateTimeSeriesPlan extends PhysicalPlan {
     path = new PartialPath(new String(bytes));
     dataType = TSDataType.values()[buffer.get()];
     encoding = TSEncoding.values()[buffer.get()];
-    compressor = CompressionType.values()[buffer.get()];
+    compressor = CompressionType.deserialize(buffer.get());
     tagOffset = buffer.getLong();
 
     // alias
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index 41ee38f4de..47176a83ba 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -1796,7 +1796,7 @@ public class TSServiceImpl implements TSIService.Iface {
               new PartialPath(req.path),
               TSDataType.values()[req.dataType],
               TSEncoding.values()[req.encoding],
-              CompressionType.values()[req.compressor],
+              CompressionType.deserialize((byte) req.compressor),
               req.props,
               req.tags,
               req.attributes,
@@ -1836,7 +1836,7 @@ public class TSServiceImpl implements TSIService.Iface {
       }
       List<CompressionType> compressors = new ArrayList<>();
       for (int compressor : req.compressors) {
-        compressors.add(CompressionType.values()[compressor]);
+        compressors.add(CompressionType.deserialize((byte) compressor));
       }
 
       CreateAlignedTimeSeriesPlan plan =
@@ -1906,7 +1906,7 @@ public class TSServiceImpl implements TSIService.Iface {
         }
 
         paths.add(new PartialPath(req.paths.get(i)));
-        compressors.add(CompressionType.values()[req.compressors.get(i)]);
+        compressors.add(CompressionType.deserialize(req.compressors.get(i).byteValue()));
         if (alias != null) {
           alias.add(req.measurementAliasList.get(i));
         }
@@ -2014,7 +2014,7 @@ public class TSServiceImpl implements TSIService.Iface {
       measurements[i] = req.getMeasurements().get(i);
       dataTypes[i] = TSDataType.values()[req.getDataTypes().get(i)];
       encodings[i] = TSEncoding.values()[req.getEncodings().get(i)];
-      compressionTypes[i] = CompressionType.values()[req.getCompressors().get(i)];
+      compressionTypes[i] = CompressionType.deserialize(req.getCompressors().get(i).byteValue());
     }
 
     AppendTemplatePlan plan =
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 8d57a1977d..13d6e4c646 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -578,7 +578,7 @@ public class Session {
     request.setPath(path);
     request.setDataType(dataType.ordinal());
     request.setEncoding(encoding.ordinal());
-    request.setCompressor(compressor.ordinal());
+    request.setCompressor(compressor.serialize());
     request.setProps(props);
     request.setTags(tags);
     request.setAttributes(attributes);
@@ -613,7 +613,7 @@ public class Session {
     request.setDataTypes(dataTypes.stream().map(TSDataType::ordinal).collect(Collectors.toList()));
     request.setEncodings(encodings.stream().map(TSEncoding::ordinal).collect(Collectors.toList()));
     request.setCompressors(
-        compressors.stream().map(CompressionType::ordinal).collect(Collectors.toList()));
+        compressors.stream().map(i -> (int) i.serialize()).collect(Collectors.toList()));
     request.setMeasurementAlias(measurementAliasList);
     return request;
   }
@@ -668,7 +668,7 @@ public class Session {
 
     List<Integer> compressionOrdinals = new ArrayList<>(paths.size());
     for (CompressionType compression : compressors) {
-      compressionOrdinals.add(compression.ordinal());
+      compressionOrdinals.add((int) compression.serialize());
     }
     request.setCompressors(compressionOrdinals);
 
@@ -2869,7 +2869,7 @@ public class Session {
     req.setDataTypes(dataTypes.stream().map(TSDataType::ordinal).collect(Collectors.toList()));
     req.setEncodings(encodings.stream().map(TSEncoding::ordinal).collect(Collectors.toList()));
     req.setCompressors(
-        compressors.stream().map(CompressionType::ordinal).collect(Collectors.toList()));
+        compressors.stream().map(i -> (int) i.serialize()).collect(Collectors.toList()));
     req.setIsAligned(true);
     defaultSessionConnection.appendSchemaTemplate(req);
   }
@@ -2891,7 +2891,7 @@ public class Session {
     req.setMeasurements(Collections.singletonList(measurementPath));
     req.setDataTypes(Collections.singletonList(dataType.ordinal()));
     req.setEncodings(Collections.singletonList(encoding.ordinal()));
-    req.setCompressors(Collections.singletonList(compressor.ordinal()));
+    req.setCompressors(Collections.singletonList((int) compressor.serialize()));
     req.setIsAligned(true);
     defaultSessionConnection.appendSchemaTemplate(req);
   }
@@ -2913,7 +2913,7 @@ public class Session {
     req.setDataTypes(dataTypes.stream().map(TSDataType::ordinal).collect(Collectors.toList()));
     req.setEncodings(encodings.stream().map(TSEncoding::ordinal).collect(Collectors.toList()));
     req.setCompressors(
-        compressors.stream().map(CompressionType::ordinal).collect(Collectors.toList()));
+        compressors.stream().map(i -> (int) i.serialize()).collect(Collectors.toList()));
     req.setIsAligned(false);
     defaultSessionConnection.appendSchemaTemplate(req);
   }
@@ -2934,7 +2934,7 @@ public class Session {
     req.setMeasurements(Collections.singletonList(measurementPath));
     req.setDataTypes(Collections.singletonList(dataType.ordinal()));
     req.setEncodings(Collections.singletonList(encoding.ordinal()));
-    req.setCompressors(Collections.singletonList(compressor.ordinal()));
+    req.setCompressors(Collections.singletonList((int) compressor.serialize()));
     req.setIsAligned(false);
     defaultSessionConnection.appendSchemaTemplate(req);
   }