This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch rel/0.10
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/rel/0.10 by this push:
new 7f2b282 [To rel/0.10][ISSUE#1599]check datatype with encoding (#1602)
7f2b282 is described below
commit 7f2b282c3f4e172e0a8fb2ecd5d7c1fc8d5444ee
Author: Boris <[email protected]>
AuthorDate: Fri Aug 7 11:49:51 2020 +0800
[To rel/0.10][ISSUE#1599]check datatype with encoding (#1602)
* Update SchemaUtils.java
---
.../org/apache/iotdb/db/metadata/MManager.java | 5 +--
.../apache/iotdb/db/metrics/ui/MetricsPage.java | 3 +-
.../org/apache/iotdb/db/utils/SchemaUtils.java | 39 ++++++++++++++++++++++
.../iotdb/db/metadata/MManagerBasicTest.java | 35 +++++++++++++++++++
.../iotdb/db/metadata/MManagerImproveTest.java | 2 +-
5 files changed, 79 insertions(+), 5 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..cb2a2fb 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;
@@ -292,8 +293,9 @@ public class MManager {
public void createTimeseries(CreateTimeSeriesPlan plan, long offset) throws
MetadataException {
lock.writeLock().lock();
- String path = plan.getPath().getFullPath();
try {
+ String path = plan.getPath().getFullPath();
+ SchemaUtils.checkDataTypeWithEncoding(plan.getDataType(),
plan.getEncoding());
/*
* get the storage group with auto create schema
*/
@@ -345,7 +347,6 @@ public class MManager {
logWriter.createTimeseries(plan, offset);
}
leafMNode.setOffset(offset);
-
} catch (IOException | ConfigAdjusterException e) {
throw new MetadataException(e.getMessage());
} finally {
diff --git
a/server/src/main/java/org/apache/iotdb/db/metrics/ui/MetricsPage.java
b/server/src/main/java/org/apache/iotdb/db/metrics/ui/MetricsPage.java
index b6760f8..5003241 100644
--- a/server/src/main/java/org/apache/iotdb/db/metrics/ui/MetricsPage.java
+++ b/server/src/main/java/org/apache/iotdb/db/metrics/ui/MetricsPage.java
@@ -14,13 +14,13 @@
*/
package org.apache.iotdb.db.metrics.ui;
+import com.codahale.metrics.MetricRegistry;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.SimpleDateFormat;
-import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.iotdb.db.conf.IoTDBConstant;
@@ -29,7 +29,6 @@ import org.apache.iotdb.db.service.TSServiceImpl;
import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementResp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.codahale.metrics.MetricRegistry;
public class MetricsPage {
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..6ab5d51 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.EnumMap;
+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
EnumMap<>(TSDataType.class);
+
+ 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());
}
}