You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ge...@apache.org on 2020/08/06 09:13:27 UTC
[incubator-iotdb] branch fix_check_0.10 created (now b380ec1)
This is an automated email from the ASF dual-hosted git repository.
geniuspig pushed a change to branch fix_check_0.10
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.
at b380ec1 fix_check
This branch includes the following new commits:
new b380ec1 fix_check
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[incubator-iotdb] 01/01: fix_check
Posted by ge...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
geniuspig pushed a commit to branch fix_check_0.10
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit b380ec1e531d1cc4ce8344b4775aeb28c0e6c36b
Author: zhutianci <zh...@gmail.com>
AuthorDate: Thu Aug 6 17:13:06 2020 +0800
fix_check
---
.../org/apache/iotdb/db/metadata/MManager.java | 3 +-
.../org/apache/iotdb/db/utils/SchemaUtils.java | 39 ++++++++++++++++++++++
.../iotdb/db/metadata/MManagerBasicTest.java | 35 +++++++++++++++++++
.../iotdb/db/metadata/MManagerImproveTest.java | 2 +-
4 files changed, 77 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 9c20c8e..baa924d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -61,6 +61,7 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
import org.apache.iotdb.db.qp.physical.sys.ShowTimeSeriesPlan;
import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
import org.apache.iotdb.db.utils.RandomDeleteCache;
+import org.apache.iotdb.db.utils.SchemaUtils;
import org.apache.iotdb.db.utils.TestOnly;
import org.apache.iotdb.tsfile.exception.cache.CacheException;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -345,7 +346,7 @@ public class MManager {
logWriter.createTimeseries(plan, offset);
}
leafMNode.setOffset(offset);
-
+ SchemaUtils.checkDataTypeWithEncoding(plan.getDataType(), plan.getEncoding());
} catch (IOException | ConfigAdjusterException e) {
throw new MetadataException(e.getMessage());
} finally {
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index fd359e1..0352a66 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@ -21,7 +21,11 @@ package org.apache.iotdb.db.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.apache.iotdb.db.exception.metadata.MetadataException;
import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException;
import org.apache.iotdb.db.metadata.MManager;
@@ -40,6 +44,33 @@ public class SchemaUtils {
}
+ private static Map<TSDataType, Set<TSEncoding>> schemaChecker = new HashMap<>();
+
+ static {
+ Set<TSEncoding> booleanSet = new HashSet<>();
+ booleanSet.add(TSEncoding.PLAIN);
+ booleanSet.add(TSEncoding.RLE);
+ schemaChecker.put(TSDataType.BOOLEAN, booleanSet);
+ Set<TSEncoding> int32Set = new HashSet<>();
+ int32Set.add(TSEncoding.PLAIN);
+ int32Set.add(TSEncoding.RLE);
+ int32Set.add(TSEncoding.TS_2DIFF);
+ int32Set.add(TSEncoding.REGULAR);
+ schemaChecker.put(TSDataType.INT32, int32Set);
+ schemaChecker.put(TSDataType.INT64, int32Set);
+ Set<TSEncoding> floatSet = new HashSet<>();
+ floatSet.add(TSEncoding.PLAIN);
+ floatSet.add(TSEncoding.RLE);
+ floatSet.add(TSEncoding.TS_2DIFF);
+ floatSet.add(TSEncoding.GORILLA);
+ schemaChecker.put(TSDataType.FLOAT, floatSet);
+ schemaChecker.put(TSDataType.DOUBLE, floatSet);
+ Set<TSEncoding> textSet = new HashSet<>();
+ textSet.add(TSEncoding.PLAIN);
+ schemaChecker.put(TSDataType.TEXT, textSet);
+ }
+
+
private static final Logger logger = LoggerFactory.getLogger(SchemaUtils.class);
public static void registerTimeseries(MeasurementSchema schema) {
@@ -140,4 +171,12 @@ public class SchemaUtils {
"aggregate does not support " + aggregation + " function.");
}
}
+
+
+ public static void checkDataTypeWithEncoding(TSDataType dataType, TSEncoding encoding)
+ throws MetadataException {
+ if(!schemaChecker.get(dataType).contains(encoding)) {
+ throw new MetadataException(String.format("encoding %s does not support %s", dataType.toString(), encoding.toString()));
+ }
+ }
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index cbd14d4..0725293 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -412,4 +412,39 @@ public class MManagerBasicTest {
fail(e.getMessage());
}
}
+
+ @Test
+ public void testInvalidSchema() throws MetadataException {
+ MManager manager = MManager.getInstance();
+ manager.setStorageGroup("root.sg1");
+
+ try {
+ manager.createTimeseries("root.sg1.d1.s1", TSDataType.BOOLEAN, TSEncoding.TS_2DIFF,
+ CompressionType.GZIP, null);
+ } catch (Exception e) {
+ Assert.assertEquals("encoding BOOLEAN does not support TS_2DIFF", e.getMessage());
+ }
+
+ try {
+ manager.createTimeseries("root.sg1.d1.s2", TSDataType.INT32, TSEncoding.GORILLA,
+ CompressionType.GZIP, null);
+ } catch (Exception e) {
+ Assert.assertEquals("encoding INT32 does not support GORILLA", e.getMessage());
+ }
+
+ try {
+ manager.createTimeseries("root.sg1.d1.s3", TSDataType.DOUBLE, TSEncoding.REGULAR,
+ CompressionType.GZIP, null);
+ } catch (Exception e) {
+ Assert.assertEquals("encoding DOUBLE does not support REGULAR", e.getMessage());
+ }
+
+ try {
+ manager.createTimeseries("root.sg1.d1.s4", TSDataType.TEXT, TSEncoding.TS_2DIFF,
+ CompressionType.GZIP, null);
+ } catch (Exception e) {
+ Assert.assertEquals("encoding TEXT does not support TS_2DIFF", e.getMessage());
+ }
+
+ }
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
index 3aaac3a..2ff37e8 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
@@ -56,7 +56,7 @@ public class MManagerImproveTest {
for (int j = 0; j < DEVICE_NUM; j++) {
for (int i = 0; i < TIMESERIES_NUM; i++) {
String p = "root.t1.v2.d" + j + ".s" + i;
- mManager.createTimeseries(p, TSDataType.TEXT, TSEncoding.RLE,
+ mManager.createTimeseries(p, TSDataType.TEXT, TSEncoding.PLAIN,
TSFileDescriptor.getInstance().getConfig().getCompressor(), Collections.emptyMap());
}
}