You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hx...@apache.org on 2019/03/01 15:06:28 UTC
[incubator-iotdb] branch master updated: [IOTDB-31] add props of a
time series declarison into FileNodeProcessor (#81)
This is an automated email from the ASF dual-hosted git repository.
hxd 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 6b21794 [IOTDB-31] add props of a time series declarison into FileNodeProcessor (#81)
6b21794 is described below
commit 6b2179490b19592543ff881a57b975a2b44ebd1f
Author: Xiangdong Huang <hx...@qq.com>
AuthorDate: Fri Mar 1 23:06:24 2019 +0800
[IOTDB-31] add props of a time series declarison into FileNodeProcessor (#81)
* fix #31. add props of a time series declarison into FileNodeProcessor; pick Compressor out of props
* fix ITs Tests and some bugs added by modifying mmanager
* fix bug and optimize checkMetadata parameters logic
* add float precision it
* add NotImplementedException
---
Readme.md | 1 +
docs/Documentation/QuickStart.md | 9 +-
docs/Documentation/UserGuideV0.7.0/2-Concept.md | 2 +-
.../UserGuideV0.7.0/5-SQL Documentation.md | 4 +-
.../antlr3/org/apache/iotdb/db/sql/parse/TSLexer.g | 1 +
.../org/apache/iotdb/db/sql/parse/TSParser.g | 5 +-
.../iotdb/db/engine/filenode/FileNodeManager.java | 9 +-
.../db/engine/filenode/FileNodeProcessor.java | 34 ++---
.../org/apache/iotdb/db/metadata/ColumnSchema.java | 83 -----------
.../java/org/apache/iotdb/db/metadata/MGraph.java | 32 ++--
.../org/apache/iotdb/db/metadata/MManager.java | 85 +++++++----
.../java/org/apache/iotdb/db/metadata/MNode.java | 17 ++-
.../java/org/apache/iotdb/db/metadata/MTree.java | 73 +++++----
.../org/apache/iotdb/db/metadata/Metadata.java | 9 +-
.../org/apache/iotdb/db/monitor/StatMonitor.java | 9 +-
.../iotdb/db/qp/executor/OverflowQPExecutor.java | 30 ++--
.../iotdb/db/qp/logical/sys/MetadataOperator.java | 35 +++--
.../iotdb/db/qp/physical/sys/MetadataPlan.java | 55 ++++---
.../iotdb/db/qp/strategy/LogicalGenerator.java | 96 ++++++------
.../iotdb/db/qp/strategy/PhysicalGenerator.java | 4 +-
.../java/org/apache/iotdb/db/service/Utils.java | 40 -----
.../org/apache/iotdb/db/utils/FileSchemaUtils.java | 49 +-----
.../org/apache/iotdb/db/utils/LoadDataUtils.java | 4 +-
.../iotdb/db/engine/MetadataManagerHelper.java | 114 +++++++++-----
.../filenodev2/FileNodeManagerBenchmark.java | 2 +-
.../memcontrol/BufferwriteFileSizeControlTest.java | 46 +-----
.../memcontrol/BufferwriteMetaSizeControlTest.java | 45 +-----
.../engine/modification/DeletionFileNodeTest.java | 11 +-
.../db/engine/modification/DeletionQueryTest.java | 11 +-
.../iotdb/db/integration/IoTDBCompleteIT.java | 113 ++++++++++----
.../apache/iotdb/db/integration/IoTDBDaemonIT.java | 7 +-
.../db/integration/IoTDBEngineTimeGeneratorIT.java | 6 +-
.../db/integration/IoTDBFloatPrecisionIT.java | 166 +++++++++++++++++++++
.../iotdb/db/integration/IoTDBLargeDataIT.java | 6 -
.../iotdb/db/integration/IoTDBMetadataFetchIT.java | 31 ++--
.../iotdb/db/integration/IoTDBMultiSeriesIT.java | 8 -
.../db/integration/IoTDBSequenceDataQueryIT.java | 5 -
.../iotdb/db/metadata/MManagerAdvancedTest.java | 44 +++---
.../iotdb/db/metadata/MManagerBasicTest.java | 39 +++--
.../iotdb/db/metadata/MManagerEfficiencyTest.java | 3 +-
.../iotdb/db/metadata/MManagerImproveTest.java | 4 +-
.../org/apache/iotdb/db/metadata/MTreeTest.java | 26 ++--
.../apache/iotdb/db/writelog/PerformanceTest.java | 10 +-
.../iotdb/db/writelog/WriteLogNodeManagerTest.java | 8 +-
.../iotdb/jdbc/IoTDBDatabaseMetadataTest.java | 6 +-
.../apache/iotdb/tsfile/compress/ICompressor.java | 4 +-
.../tsfile/encoding/encoder/TSEncodingBuilder.java | 2 +-
.../tsfile/exception/NotImplementedException.java | 40 +++++
.../iotdb/tsfile/read/UnClosedTsFileReader.java | 3 +-
.../iotdb/tsfile/write/chunk/ChunkBuffer.java | 2 +-
.../tsfile/write/record/datapoint/DataPoint.java | 48 +++---
.../tsfile/write/schema/MeasurementSchema.java | 47 +++---
.../iotdb/tsfile/write/TsFileIOWriterTest.java | 2 +-
53 files changed, 856 insertions(+), 689 deletions(-)
diff --git a/Readme.md b/Readme.md
index a862087..6ae2882 100644
--- a/Readme.md
+++ b/Readme.md
@@ -232,6 +232,7 @@ root:{
s0:{
DataType: INT32,
Encoding: RLE,
+ Compressor: UNCOMPRESSED,
args: {},
StorageGroup: root.vehicle
}
diff --git a/docs/Documentation/QuickStart.md b/docs/Documentation/QuickStart.md
index d1a3fd8..63419b3 100755
--- a/docs/Documentation/QuickStart.md
+++ b/docs/Documentation/QuickStart.md
@@ -223,8 +223,9 @@ root:{
status:{
DataType: BOOLEAN,
Encoding: PLAIN,
+ Compressor: UNCOMPRESSED,
args: {},
- StorageGroup: root.ln
+ StorageGroup: root.vehicle
}
}
}
@@ -246,14 +247,16 @@ root:{
status:{
DataType: BOOLEAN,
Encoding: PLAIN,
+ Compressor: UNCOMPRESSED,
args: {},
- StorageGroup: root.ln
+ StorageGroup: root.vehicle
},
temperature:{
DataType: FLOAT,
Encoding: RLE,
+ Compressor: UNCOMPRESSED,
args: {},
- StorageGroup: root.ln
+ StorageGroup: root.vehicle
}
}
}
diff --git a/docs/Documentation/UserGuideV0.7.0/2-Concept.md b/docs/Documentation/UserGuideV0.7.0/2-Concept.md
index b51ad78..1b38728 100644
--- a/docs/Documentation/UserGuideV0.7.0/2-Concept.md
+++ b/docs/Documentation/UserGuideV0.7.0/2-Concept.md
@@ -244,4 +244,4 @@ The four encodings described in the previous sections are applicable to differen
When the time series is written and encoded as binary data according to the specified type, IoTDB compresses the data using compression technology to further improve space storage efficiency. Although both encoding and compression are designed to improve storage efficiency, encoding techniques are usually only available for specific data types (e.g., second-order differential encoding is only suitable for INT32 or INT64 data type, and storing floating-point numbers requires multiplying t [...]
-IoTDB allows you to specify the compression method of the column when creating a time series. IoTDB now supports two kinds of compression: UNCOMPRESSOR (no compression) and SNAPPY compression. The specified syntax for compression is detailed in [Create Timeseries Statement](#chapter-5-iotdb-sql-documentation).
\ No newline at end of file
+IoTDB allows you to specify the compression method of the column when creating a time series. IoTDB now supports two kinds of compression: UNCOMPRESSED (no compression) and SNAPPY compression. The specified syntax for compression is detailed in [Create Timeseries Statement](#chapter-5-iotdb-sql-documentation).
\ No newline at end of file
diff --git a/docs/Documentation/UserGuideV0.7.0/5-SQL Documentation.md b/docs/Documentation/UserGuideV0.7.0/5-SQL Documentation.md
index b02f794..db1b72f 100644
--- a/docs/Documentation/UserGuideV0.7.0/5-SQL Documentation.md
+++ b/docs/Documentation/UserGuideV0.7.0/5-SQL Documentation.md
@@ -67,7 +67,7 @@ ExtraAttributeClause: {
COMPRESSOR = <CompressorValue>
MAX_POINT_NUMBER = Integer
}
-CompressorValue: UNCOMPRESSOR | SNAPPY
+CompressorValue: UNCOMPRESSED | SNAPPY
Eg: IoTDB > CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
Eg: IoTDB > CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE
Eg: IoTDB > CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE, COMPRESSOR=SNAPPY, MAX_POINT_NUMBER=3
@@ -528,7 +528,7 @@ ADD, BY, COMPRESSOR, CREATE, DATATYPE, DELETE, DESCRIBE, DROP, ENCODING, EXIT, F
Keywords with special meanings (case sensitive):
* Data Types: BOOLEAN, DOUBLE, FLOAT, INT32, INT64, TEXT (Only capitals is acceptable)
* Encoding Methods: BITMAP, DFT, GORILLA, PLAIN, RLE, TS_2DIFF (Only capitals is acceptable)
-* Compression Methods: UNCOMPRESSOR, SNAPPY (Only capitals is acceptable)
+* Compression Methods: UNCOMPRESSED, SNAPPY (Only capitals is acceptable)
* Logical symbol: AND, &, &&, OR, | , ||, NOT, !, TRUE, FALSE
```
diff --git a/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSLexer.g b/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSLexer.g
index df7a7bc..f95bc92 100644
--- a/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSLexer.g
+++ b/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSLexer.g
@@ -37,6 +37,7 @@ KW_QUIT: 'QUIT';
KW_METADATA: 'METADATA';
KW_DATATYPE: 'DATATYPE';
KW_ENCODING: 'ENCODING';
+KW_COMPRESSOR: 'COMPRESSOR';
KW_ROOT: 'ROOT';
KW_STORAGE: 'STORAGE';
diff --git a/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSParser.g b/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSParser.g
index 84be5d0..b9a5bd0 100644
--- a/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSParser.g
+++ b/iotdb/src/main/antlr3/org/apache/iotdb/db/sql/parse/TSParser.g
@@ -88,6 +88,7 @@ TOK_WITH;
TOK_ROOT;
TOK_DATATYPE;
TOK_ENCODING;
+TOK_COMPRESSOR;
TOK_CLAUSE;
TOK_TIMESERIES;
TOK_SET;
@@ -395,8 +396,8 @@ timeseries
;
propertyClauses
- : KW_DATATYPE EQUAL propertyName=identifier COMMA KW_ENCODING EQUAL pv=propertyValue (COMMA propertyClause)*
- -> ^(TOK_DATATYPE $propertyName) ^(TOK_ENCODING $pv) propertyClause*
+ : KW_DATATYPE EQUAL propertyName=identifier COMMA KW_ENCODING EQUAL pv=propertyValue (COMMA KW_COMPRESSOR EQUAL compressor=propertyValue)? (COMMA propertyClause)*
+ -> ^(TOK_DATATYPE $propertyName) ^(TOK_ENCODING $pv) ^(TOK_COMPRESSOR $compressor)? propertyClause*
;
propertyClause
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
index a88f076..049235f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeManager.java
@@ -61,7 +61,9 @@ import org.apache.iotdb.db.utils.MemUtils;
import org.apache.iotdb.db.writelog.manager.MultiFileLogNodeManager;
import org.apache.iotdb.db.writelog.node.WriteLogNode;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
import org.apache.iotdb.tsfile.write.record.TSRecord;
@@ -931,16 +933,17 @@ public class FileNodeManager implements IStatistic, IService {
/**
* add time series.
*/
- public void addTimeSeries(Path path, String dataType, String encoding)
- throws FileNodeManagerException {
+ public void addTimeSeries(Path path, TSDataType dataType, TSEncoding encoding, CompressionType compressor,
+ Map<String, String> props) throws FileNodeManagerException {
FileNodeProcessor fileNodeProcessor = getProcessor(path.getFullPath(), true);
try {
- fileNodeProcessor.addTimeSeries(path.getMeasurement(), dataType, encoding);
+ fileNodeProcessor.addTimeSeries(path.getMeasurement(), dataType, encoding, compressor, props);
} finally {
fileNodeProcessor.writeUnlock();
}
}
+
/**
* Force to close the filenode processor.
*/
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
index 7cdeecb..1bc385e 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/engine/filenode/FileNodeProcessor.java
@@ -69,7 +69,6 @@ import org.apache.iotdb.db.exception.FileNodeProcessorException;
import org.apache.iotdb.db.exception.OverflowProcessorException;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.exception.ProcessorException;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.monitor.IStatistic;
import org.apache.iotdb.db.monitor.MonitorConstants;
@@ -85,6 +84,7 @@ import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.file.footer.ChunkGroupFooter;
import org.apache.iotdb.tsfile.file.metadata.ChunkMetaData;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
@@ -107,7 +107,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static java.time.ZonedDateTime.ofInstant;
-import static org.apache.iotdb.db.utils.FileSchemaUtils.constructJsonFileSchema;
public class FileNodeProcessor extends Processor implements IStatistic {
@@ -912,11 +911,10 @@ public class FileNodeProcessor extends Processor implements IStatistic {
/**
* add time series.
*/
- public void addTimeSeries(String measurementToString, String dataType, String encoding) {
- ColumnSchema col = new ColumnSchema(measurementToString, TSDataType.valueOf(dataType),
- TSEncoding.valueOf(encoding));
- JSONObject measurement = FileSchemaUtils.constructJsonColumnSchema(col);
- fileSchema.registerMeasurement(JsonConverter.convertJsonToMeasurementSchema(measurement));
+ public void addTimeSeries(String measurementId, TSDataType dataType, TSEncoding encoding,
+ CompressionType compressor, Map<String, String> props) {
+ fileSchema.registerMeasurement(new MeasurementSchema(measurementId, dataType, encoding,
+ compressor, props));
}
/**
@@ -1631,31 +1629,17 @@ public class FileNodeProcessor extends Processor implements IStatistic {
private FileSchema constructFileSchema(String processorName) throws WriteProcessException {
- List<ColumnSchema> columnSchemaList;
+ List<MeasurementSchema> columnSchemaList;
columnSchemaList = mManager.getSchemaForFileName(processorName);
- FileSchema schema;
- try {
- schema = getFileSchemaFromColumnSchema(columnSchemaList, processorName);
- } catch (WriteProcessException e) {
- LOGGER.error("Get the FileSchema error, the list of ColumnSchema is {}", columnSchemaList);
- throw e;
+ FileSchema schema = new FileSchema();
+ for (MeasurementSchema measurementSchema : columnSchemaList) {
+ schema.registerMeasurement(measurementSchema);
}
return schema;
}
- private FileSchema getFileSchemaFromColumnSchema(List<ColumnSchema> schemaList, String deviceType)
- throws WriteProcessException {
- JSONArray rowGroup = new JSONArray();
-
- for (ColumnSchema col : schemaList) {
- JSONObject measurement = FileSchemaUtils.constructJsonColumnSchema(col);
- rowGroup.put(measurement);
- }
- return constructJsonFileSchema(deviceType, rowGroup);
- }
-
@Override
public boolean canBeClosed() {
if (isMerging != FileNodeProcessorStatus.NONE) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/ColumnSchema.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/ColumnSchema.java
deleted file mode 100644
index ba94f80..0000000
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/ColumnSchema.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * 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.db.metadata;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
-
-public class ColumnSchema implements Serializable {
-
- private static final long serialVersionUID = -8257474930341487207L;
-
-
- private String name;
- public TSDataType dataType;
- public TSEncoding encoding;
- private Map<String, String> args;
-
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * constructor of ColumnSchema.
- *
- * @param name name
- * @param dataType time series data type
- * @param encoding time series data encoding type
- */
- public ColumnSchema(String name, TSDataType dataType, TSEncoding encoding) {
- this.name = name;
- this.dataType = dataType;
- this.encoding = encoding;
- this.args = new HashMap<>();
- }
-
- public void putKeyValueToArgs(String key, String value) {
- this.args.put(key, value);
- }
-
- public String getValueFromArgs(String key) {
- return args.get(key);
- }
-
- public String getName() {
- return name;
- }
-
- public TSDataType geTsDataType() {
- return dataType;
- }
-
- public TSEncoding getEncoding() {
- return encoding;
- }
-
- public Map<String, String> getArgsMap() {
- return args;
- }
-
- public void setArgsMap(Map<String, String> argsMap) {
- this.args = argsMap;
- }
-
-}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MGraph.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MGraph.java
index 5667a76..1de292f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MGraph.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MGraph.java
@@ -26,6 +26,10 @@ import java.util.List;
import java.util.Map;
import org.apache.iotdb.db.exception.MetadataArgsErrorException;
import org.apache.iotdb.db.exception.PathErrorException;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+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;
/**
* Metadata Graph consists of one {@code MTree} and several {@code PTree}.
@@ -59,13 +63,13 @@ public class MGraph implements Serializable {
*
* @param path Format: root.node.(node)*
*/
- public void addPathToMTree(String path, String dataType, String encoding, String[] args)
- throws PathErrorException, MetadataArgsErrorException {
+ public void addPathToMTree(String path, TSDataType dataType, TSEncoding encoding,
+ CompressionType compressor, Map<String, String> props) throws PathErrorException, MetadataArgsErrorException {
String[] nodes = path.trim().split(DOUB_SEPARATOR);
if (nodes.length == 0) {
throw new PathErrorException("Timeseries is null");
}
- mtree.addTimeseriesPath(path, dataType, encoding, args);
+ mtree.addTimeseriesPath(path, dataType, encoding, compressor, props);
}
/**
@@ -179,8 +183,8 @@ public class MGraph implements Serializable {
*
* @return a HashMap contains all distinct deviceId type separated by deviceId Type
*/
- public Map<String, List<ColumnSchema>> getSchemaForAllType() throws PathErrorException {
- Map<String, List<ColumnSchema>> res = new HashMap<>();
+ public Map<String, List<MeasurementSchema>> getSchemaForAllType() throws PathErrorException {
+ Map<String, List<MeasurementSchema>> res = new HashMap<>();
List<String> typeList = mtree.getAllType();
for (String type : typeList) {
res.put(type, getSchemaForOneType("root." + type));
@@ -210,7 +214,7 @@ public class MGraph implements Serializable {
* @return A {@code Metadata} instance which stores all metadata info
*/
public Metadata getMetadata() throws PathErrorException {
- Map<String, List<ColumnSchema>> seriesMap = getSchemaForAllType();
+ Map<String, List<MeasurementSchema>> seriesMap = getSchemaForAllType();
Map<String, List<String>> deviceIdMap = getDeviceForAllType();
return new Metadata(seriesMap, deviceIdMap);
}
@@ -229,7 +233,7 @@ public class MGraph implements Serializable {
* @param path A seriesPath represented one Delta object
* @return a list contains all column schema
*/
- public ArrayList<ColumnSchema> getSchemaForOneType(String path) throws PathErrorException {
+ public ArrayList<MeasurementSchema> getSchemaForOneType(String path) throws PathErrorException {
return mtree.getSchemaForOneType(path);
}
@@ -239,11 +243,11 @@ public class MGraph implements Serializable {
* @param path the filenode seriesPath
* @return ArrayList<' ColumnSchema '> The list of the schema
*/
- public ArrayList<ColumnSchema> getSchemaForOneFileNode(String path) {
+ public ArrayList<MeasurementSchema> getSchemaForOneFileNode(String path) {
return mtree.getSchemaForOneFileNode(path);
}
- public Map<String, ColumnSchema> getSchemaMapForOneFileNode(String path) {
+ public Map<String, MeasurementSchema> getSchemaMapForOneFileNode(String path) {
return mtree.getSchemaMapForOneFileNode(path);
}
@@ -309,23 +313,23 @@ public class MGraph implements Serializable {
}
/**
- * Get ColumnSchema for given seriesPath. Notice: Path must be a complete Path from root to leaf
+ * Get MeasurementSchema for given seriesPath. Notice: Path must be a complete Path from root to leaf
* node.
*/
- public ColumnSchema getSchemaForOnePath(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(String path) throws PathErrorException {
return mtree.getSchemaForOnePath(path);
}
- public ColumnSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
return mtree.getSchemaForOnePath(node, path);
}
- public ColumnSchema getSchemaForOnePathWithCheck(MNode node, String path)
+ public MeasurementSchema getSchemaForOnePathWithCheck(MNode node, String path)
throws PathErrorException {
return mtree.getSchemaForOnePathWithCheck(node, path);
}
- public ColumnSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
return mtree.getSchemaForOnePathWithCheck(path);
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index 3a700e2..ea7c37f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -38,9 +39,13 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.MetadataArgsErrorException;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.utils.RandomDeleteCache;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.exception.cache.CacheException;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
/**
* This class takes the responsibility of serialization of all the metadata info and persistent it
@@ -170,19 +175,27 @@ public class MManager {
private void operation(String cmd)
throws PathErrorException, IOException, MetadataArgsErrorException {
-
+ //see addPathToMTree() to get the detailed format of the cmd
String[] args = cmd.trim().split(",");
if (args[0].equals(MetadataOperationType.ADD_PATH_TO_MTREE)) {
String[] leftArgs;
- if (args.length > 4) {
- leftArgs = new String[args.length - 4];
- for (int k = 4; k < args.length; k++) {
- leftArgs[k - 4] = args[k];
+ Map<String, String> props = null;
+ if (args.length > 5) {
+ String[] kv = new String[2];
+ props = new HashMap<>(args.length - 5 + 1, 1);
+ leftArgs = new String[args.length - 5];
+ for (int k = 5; k < args.length; k++) {
+ kv = args[k].split("=");
+ props.put(kv[0], kv[1]);
}
} else {
+ //when ????
leftArgs = new String[0];
}
- addPathToMTree(args[1], args[2], args[3], leftArgs);
+ addPathToMTree(args[1], TSDataType.deserialize(Short.valueOf(args[2])),
+ TSEncoding.deserialize(Short.valueOf(args[3])),
+ CompressionType.deserialize(Short.valueOf(args[4])),
+ props);
} else if (args[0].equals(MetadataOperationType.DELETE_PATH_FROM_MTREE)) {
deletePathFromMTree(args[1]);
} else if (args[0].equals(MetadataOperationType.SET_STORAGE_LEVEL_TO_MTREE)) {
@@ -226,19 +239,23 @@ public class MManager {
* @param path the timeseries seriesPath
* @param dataType the datetype {@code DataType} for the timeseries
* @param encoding the encoding function {@code Encoding} for the timeseries
+ * @param compressor the compressor function {@code Compressor} for the time series
*/
- public void addPathToMTree(String path, String dataType, String encoding, String[] args)
+ public void addPathToMTree(String path, TSDataType dataType, TSEncoding encoding,
+ CompressionType compressor, Map<String, String> props)
throws PathErrorException, IOException, MetadataArgsErrorException {
lock.writeLock().lock();
try {
- mgraph.addPathToMTree(path, dataType, encoding, args);
+ mgraph.addPathToMTree(path, dataType, encoding, compressor, props);
if (writeToLog) {
initLogStream();
- logWriter.write(
- MetadataOperationType.ADD_PATH_TO_MTREE + "," + path + "," + dataType + "," + encoding);
- for (int i = 0; i < args.length; i++) {
- logWriter.write("," + args[i]);
+ logWriter.write(String.format("%s,%s,%s,%s,%s", MetadataOperationType.ADD_PATH_TO_MTREE,
+ path, dataType.serialize(), encoding.serialize(), compressor.serialize()));
+ if (props != null) {
+ for (Map.Entry entry : props.entrySet()) {
+ logWriter.write(String.format(",%s=%s", entry.getKey(), entry.getValue()));
+ }
}
logWriter.newLine();
logWriter.flush();
@@ -249,6 +266,24 @@ public class MManager {
}
/**
+ * <p> Add one timeseries to metadata. Must invoke the<code>pathExist</code> and
+ * <code>getFileNameByPath</code> method first to check timeseries. </p>
+ *
+ * this is just for compatibility
+ *
+ * @param path the timeseries seriesPath
+ * @param dataType the datetype {@code DataType} for the timeseries
+ * @param encoding the encoding function {@code Encoding} for the timeseries
+ */
+ public void addPathToMTree(String path, String dataType, String encoding)
+ throws PathErrorException, IOException, MetadataArgsErrorException {
+ TSDataType tsDataType = TSDataType.valueOf(dataType);
+ TSEncoding tsEncoding = TSEncoding.valueOf(encoding);
+ CompressionType type = CompressionType.valueOf(TSFileConfig.compressor);
+ addPathToMTree(path, tsDataType, tsEncoding, type, Collections.emptyMap());
+ }
+
+ /**
* function for deleting a given path from mTree.
*/
public String deletePathFromMTree(String path) throws PathErrorException, IOException {
@@ -411,7 +446,7 @@ public class MManager {
lock.readLock().lock();
try {
- return getSchemaForOnePath(fullPath).dataType;
+ return getSchemaForOnePath(fullPath).getType();
} finally {
lock.readLock().unlock();
}
@@ -424,7 +459,7 @@ public class MManager {
lock.readLock().lock();
try {
- return getSchemaForOnePath(node, fullPath).dataType;
+ return getSchemaForOnePath(node, fullPath).getType();
} finally {
lock.readLock().unlock();
}
@@ -437,7 +472,7 @@ public class MManager {
lock.readLock().lock();
try {
- return getSchemaForOnePathWithCheck(node, fullPath).dataType;
+ return getSchemaForOnePathWithCheck(node, fullPath).getType();
} finally {
lock.readLock().unlock();
}
@@ -450,7 +485,7 @@ public class MManager {
lock.readLock().lock();
try {
- return getSchemaForOnePathWithCheck(fullPath).dataType;
+ return getSchemaForOnePathWithCheck(fullPath).getType();
} finally {
lock.readLock().unlock();
}
@@ -461,7 +496,7 @@ public class MManager {
*
* @return a HashMap contains all distinct device type separated by device Type
*/
- public Map<String, List<ColumnSchema>> getSchemaForAllType() throws PathErrorException {
+ public Map<String, List<MeasurementSchema>> getSchemaForAllType() throws PathErrorException {
lock.readLock().lock();
try {
@@ -502,13 +537,13 @@ public class MManager {
}
/**
- * @deprecated Get all ColumnSchemas for given delta object type.
+ * @deprecated Get all MeasurementSchemas for given delta object type.
*
* @param path A seriesPath represented one Delta object
* @return a list contains all column schema
*/
@Deprecated
- public ArrayList<ColumnSchema> getSchemaForOneType(String path) throws PathErrorException {
+ public ArrayList<MeasurementSchema> getSchemaForOneType(String path) throws PathErrorException {
lock.readLock().lock();
try {
@@ -521,7 +556,7 @@ public class MManager {
/**
* Get all ColumnSchemas for the filenode seriesPath.
*/
- public ArrayList<ColumnSchema> getSchemaForFileName(String path) {
+ public ArrayList<MeasurementSchema> getSchemaForFileName(String path) {
lock.readLock().lock();
try {
@@ -534,7 +569,7 @@ public class MManager {
/**
* function for getting schema map for one file node.
*/
- public Map<String, ColumnSchema> getSchemaMapForOneFileNode(String path) {
+ public Map<String, MeasurementSchema> getSchemaMapForOneFileNode(String path) {
lock.readLock().lock();
try {
@@ -775,7 +810,7 @@ public class MManager {
* Get ColumnSchema for given seriesPath. Notice: Path must be a complete Path from root to leaf
* node.
*/
- public ColumnSchema getSchemaForOnePath(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(String path) throws PathErrorException {
lock.readLock().lock();
try {
@@ -788,7 +823,7 @@ public class MManager {
/**
* function for getting schema for one path.
*/
- public ColumnSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
lock.readLock().lock();
try {
@@ -801,7 +836,7 @@ public class MManager {
/**
* function for getting schema for one path with check.
*/
- public ColumnSchema getSchemaForOnePathWithCheck(MNode node, String path)
+ public MeasurementSchema getSchemaForOnePathWithCheck(MNode node, String path)
throws PathErrorException {
lock.readLock().lock();
@@ -815,7 +850,7 @@ public class MManager {
/**
* function for getting schema for one path with check.
*/
- public ColumnSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
lock.readLock().lock();
try {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MNode.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MNode.java
index 18b7463..a6c98d6 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MNode.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MNode.java
@@ -22,8 +22,10 @@ import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
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;
/**
* This class is the implementation of Metadata Node where "MNode" is the shorthand of "Metadata
@@ -40,13 +42,13 @@ public class MNode implements Serializable {
// Whether current node is Storage Level in the Metadata Tree
private boolean isStorageLevel;
// Map for the schema in this storage group
- private Map<String, ColumnSchema> schemaMap;
+ private Map<String, MeasurementSchema> schemaMap;
private Map<String, Integer> numSchemaMap;
// Corresponding data file name for current node
private String dataFileName;
// Column's Schema for one timeseries represented by current node if current
// node is one leaf
- private ColumnSchema schema;
+ private MeasurementSchema schema;
private MNode parent;
private LinkedHashMap<String, MNode> children;
@@ -63,9 +65,10 @@ public class MNode implements Serializable {
}
}
- public MNode(String name, MNode parent, TSDataType dataType, TSEncoding encoding) {
+ public MNode(String name, MNode parent, TSDataType dataType, TSEncoding encoding,
+ CompressionType type) {
this(name, parent, true);
- this.schema = new ColumnSchema(name, dataType, encoding);
+ this.schema = new MeasurementSchema(name, dataType, encoding, type);
}
public boolean isStorageLevel() {
@@ -86,7 +89,7 @@ public class MNode implements Serializable {
}
}
- public Map<String, ColumnSchema> getSchemaMap() {
+ public Map<String, MeasurementSchema> getSchemaMap() {
return schemaMap;
}
@@ -163,11 +166,11 @@ public class MNode implements Serializable {
return this.getName();
}
- public ColumnSchema getSchema() {
+ public MeasurementSchema getSchema() {
return schema;
}
- public void setSchema(ColumnSchema schema) {
+ public void setSchema(MeasurementSchema schema) {
this.schema = schema;
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 6c534aa..76c284e 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -20,13 +20,17 @@ package org.apache.iotdb.db.metadata;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.apache.iotdb.db.exception.PathErrorException;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
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;
/**
* The hierarchical struct of the Metadata Tree is implemented in this class.
@@ -52,11 +56,21 @@ public class MTree implements Serializable {
}
/**
- * function for adding timeseries.It should check whether seriesPath exists.
+ * this is just for compatibility
*/
- public void addTimeseriesPath(String timeseriesPath, String dataType, String encoding,
- String[] args)
+ public void addTimeseriesPath(String timeseriesPath, String dataType, String encoding)
throws PathErrorException {
+ TSDataType tsDataType = TSDataType.valueOf(dataType);
+ TSEncoding tsEncoding = TSEncoding.valueOf(encoding);
+ CompressionType compressionType = CompressionType.valueOf(TSFileConfig.compressor);
+ addTimeseriesPath(timeseriesPath, tsDataType, tsEncoding, compressionType,
+ Collections.emptyMap());
+ }
+ /**
+ * function for adding timeseries.It should check whether seriesPath exists.
+ */
+ public void addTimeseriesPath(String timeseriesPath, TSDataType dataType, TSEncoding encoding,
+ CompressionType compressor, Map<String, String> props) throws PathErrorException {
String[] nodeNames = timeseriesPath.trim().split(DOUB_SEPARATOR);
if (nodeNames.length <= 1 || !nodeNames[0].equals(root.getName())) {
throw new PathErrorException(String.format("Timeseries %s is not right.", timeseriesPath));
@@ -88,14 +102,9 @@ public class MTree implements Serializable {
}
i++;
}
- TSDataType dt = TSDataType.valueOf(dataType);
- TSEncoding ed = TSEncoding.valueOf(encoding);
- MNode leaf = new MNode(nodeNames[nodeNames.length - 1], cur, dt, ed);
- if (args.length > 0) {
- for (int k = 0; k < args.length; k++) {
- String[] arg = args[k].split("=");
- leaf.getSchema().putKeyValueToArgs(arg[0], arg[1]);
- }
+ MNode leaf = new MNode(nodeNames[nodeNames.length - 1], cur, dataType, encoding, compressor);
+ if ( props != null && !props.isEmpty()) {
+ leaf.getSchema().setProps(props);
}
levelPath = cur.getDataFileName();
leaf.setDataFileName(levelPath);
@@ -107,6 +116,7 @@ public class MTree implements Serializable {
cur.addChild(nodeNames[nodeNames.length - 1], leaf);
}
+
/**
* function for checking whether the given path exists.
*
@@ -302,23 +312,23 @@ public class MTree implements Serializable {
* Get ColumnSchema for given seriesPath. Notice: Path must be a complete Path from root to leaf
* node.
*/
- public ColumnSchema getSchemaForOnePath(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(String path) throws PathErrorException {
MNode leaf = getLeafByPath(path);
return leaf.getSchema();
}
- public ColumnSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePath(MNode node, String path) throws PathErrorException {
MNode leaf = getLeafByPath(node, path);
return leaf.getSchema();
}
- public ColumnSchema getSchemaForOnePathWithCheck(MNode node, String path)
+ public MeasurementSchema getSchemaForOnePathWithCheck(MNode node, String path)
throws PathErrorException {
MNode leaf = getLeafByPathWithCheck(node, path);
return leaf.getSchema();
}
- public ColumnSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
+ public MeasurementSchema getSchemaForOnePathWithCheck(String path) throws PathErrorException {
MNode leaf = getLeafByPathWithCheck(path);
return leaf.getSchema();
}
@@ -751,7 +761,7 @@ public class MTree implements Serializable {
* @param path A seriesPath represented one Delta object
* @return a list contains all column schema
*/
- public ArrayList<ColumnSchema> getSchemaForOneType(String path) throws PathErrorException {
+ public ArrayList<MeasurementSchema> getSchemaForOneType(String path) throws PathErrorException {
String[] nodes = path.split(DOUB_SEPARATOR);
if (nodes.length != 2 || !nodes[0].equals(getRoot().getName()) || !getRoot()
.hasChild(nodes[1])) {
@@ -759,9 +769,9 @@ public class MTree implements Serializable {
"Timeseries must be " + getRoot().getName()
+ ". X (X is one of the nodes of root's children)");
}
- HashMap<String, ColumnSchema> leafMap = new HashMap<>();
+ HashMap<String, MeasurementSchema> leafMap = new HashMap<>();
putLeafToLeafMap(getRoot().getChild(nodes[1]), leafMap);
- ArrayList<ColumnSchema> res = new ArrayList<>();
+ ArrayList<MeasurementSchema> res = new ArrayList<>();
res.addAll(leafMap.values());
return res;
}
@@ -771,17 +781,17 @@ public class MTree implements Serializable {
*
* @return ArrayList< ColumnSchema > The list of the schema
*/
- public ArrayList<ColumnSchema> getSchemaForOneFileNode(String path) {
+ public ArrayList<MeasurementSchema> getSchemaForOneFileNode(String path) {
String[] nodes = path.split(DOUB_SEPARATOR);
- HashMap<String, ColumnSchema> leafMap = new HashMap<>();
+ HashMap<String, MeasurementSchema> leafMap = new HashMap<>();
MNode cur = getRoot();
for (int i = 1; i < nodes.length; i++) {
cur = cur.getChild(nodes[i]);
}
// cur is the storage group node
putLeafToLeafMap(cur, leafMap);
- ArrayList<ColumnSchema> res = new ArrayList<>();
+ ArrayList<MeasurementSchema> res = new ArrayList<>();
res.addAll(leafMap.values());
return res;
}
@@ -789,7 +799,7 @@ public class MTree implements Serializable {
/**
* function for getting schema map for one file node.
*/
- public Map<String, ColumnSchema> getSchemaMapForOneFileNode(String path) {
+ public Map<String, MeasurementSchema> getSchemaMapForOneFileNode(String path) {
String[] nodes = path.split(DOUB_SEPARATOR);
MNode cur = getRoot();
for (int i = 1; i < nodes.length; i++) {
@@ -810,7 +820,7 @@ public class MTree implements Serializable {
return cur.getNumSchemaMap();
}
- private void putLeafToLeafMap(MNode node, HashMap<String, ColumnSchema> leafMap) {
+ private void putLeafToLeafMap(MNode node, HashMap<String, MeasurementSchema> leafMap) {
if (node.isLeaf()) {
if (!leafMap.containsKey(node.getName())) {
leafMap.put(node.getName(), node.getSchema());
@@ -861,10 +871,10 @@ public class MTree implements Serializable {
String nodePath = parent + node;
List<String> tsRow = new ArrayList<>(4);// get [name,storage group,dataType,encoding]
tsRow.add(nodePath);
- ColumnSchema columnSchema = node.getSchema();
+ MeasurementSchema measurementSchema = node.getSchema();
tsRow.add(node.getDataFileName());
- tsRow.add(columnSchema.dataType.toString());
- tsRow.add(columnSchema.encoding.toString());
+ tsRow.add(measurementSchema.getType().toString());
+ tsRow.add(measurementSchema.getEncodingType().toString());
res.add(tsRow);
}
return;
@@ -929,13 +939,16 @@ public class MTree implements Serializable {
} else if (node.isLeaf()) {
builder.append(":{\n");
builder
- .append(String.format("%s DataType: %s,\n", getTabs(tab + 1), node.getSchema().dataType));
+ .append(String.format("%s DataType: %s,\n", getTabs(tab + 1), node.getSchema().getType()));
+ builder
+ .append(String.format("%s Encoding: %s,\n", getTabs(tab + 1), node.getSchema().getEncodingType()));
+
builder
- .append(String.format("%s Encoding: %s,\n", getTabs(tab + 1), node.getSchema().encoding));
+ .append(String.format("%s Compressor: %s,\n", getTabs(tab + 1), node.getSchema().getCompressor()));
builder
- .append(String.format("%s args: %s,\n", getTabs(tab + 1), node.getSchema().getArgsMap()));
+ .append(String.format("%s args: %s,\n", getTabs(tab + 1), node.getSchema().getProps()));
builder.append(
- String.format("%s StorageGroup: %s \n", getTabs(tab + 1), node.getDataFileName()));
+ String.format("%s StorageGroup: %s\n", getTabs(tab + 1), node.getDataFileName()));
builder.append(getTabs(tab));
builder.append("}");
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/metadata/Metadata.java b/iotdb/src/main/java/org/apache/iotdb/db/metadata/Metadata.java
index 33fac57..40fd0e4 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/metadata/Metadata.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/metadata/Metadata.java
@@ -21,16 +21,17 @@ package org.apache.iotdb.db.metadata;
import java.util.List;
import java.util.Map;
import org.apache.iotdb.db.exception.PathErrorException;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
/**
* This class stores all the metadata info for every deviceId and every timeseries.
*/
public class Metadata {
- private Map<String, List<ColumnSchema>> seriesMap;
+ private Map<String, List<MeasurementSchema>> seriesMap;
private Map<String, List<String>> deviceIdMap;
- public Metadata(Map<String, List<ColumnSchema>> seriesMap,
+ public Metadata(Map<String, List<MeasurementSchema>> seriesMap,
Map<String, List<String>> deviceIdMap) {
this.seriesMap = seriesMap;
this.deviceIdMap = deviceIdMap;
@@ -39,7 +40,7 @@ public class Metadata {
/**
* function for getting series for one type.
*/
- public List<ColumnSchema> getSeriesForOneType(String type) throws PathErrorException {
+ public List<MeasurementSchema> getSeriesForOneType(String type) throws PathErrorException {
if (this.seriesMap.containsKey(type)) {
return seriesMap.get(type);
} else {
@@ -58,7 +59,7 @@ public class Metadata {
}
}
- public Map<String, List<ColumnSchema>> getSeriesMap() {
+ public Map<String, List<MeasurementSchema>> getSeriesMap() {
return seriesMap;
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java b/iotdb/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
index 56d9891..f1ef62b 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/monitor/StatMonitor.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.db.monitor;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
@@ -38,6 +39,10 @@ import org.apache.iotdb.db.exception.StartupException;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.service.IService;
import org.apache.iotdb.db.service.ServiceType;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.write.record.TSRecord;
import org.apache.iotdb.tsfile.write.record.datapoint.DataPoint;
import org.apache.iotdb.tsfile.write.record.datapoint.LongDataPoint;
@@ -144,7 +149,9 @@ public class StatMonitor implements IService {
}
if (!mManager.pathExist(entry.getKey())) {
- mManager.addPathToMTree(entry.getKey(), entry.getValue(), "RLE", new String[0]);
+ mManager.addPathToMTree(entry.getKey(), TSDataType.valueOf(entry.getValue()),
+ TSEncoding.valueOf("RLE"), CompressionType.valueOf(TSFileConfig.compressor),
+ Collections.emptyMap());
}
}
} catch (MetadataArgsErrorException | IOException | PathErrorException e) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/OverflowQPExecutor.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/OverflowQPExecutor.java
index 2a41019..86a3cc2 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/OverflowQPExecutor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/OverflowQPExecutor.java
@@ -36,7 +36,6 @@ import org.apache.iotdb.db.exception.ArgsErrorException;
import org.apache.iotdb.db.exception.FileNodeManagerException;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.exception.ProcessorException;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.metadata.MNode;
import org.apache.iotdb.db.monitor.MonitorConstants;
@@ -54,13 +53,16 @@ import org.apache.iotdb.db.qp.physical.sys.MetadataPlan;
import org.apache.iotdb.db.qp.physical.sys.PropertyPlan;
import org.apache.iotdb.db.utils.AuthUtils;
import org.apache.iotdb.db.utils.LoadDataUtils;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.expression.IExpression;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.write.record.TSRecord;
import org.apache.iotdb.tsfile.write.record.datapoint.DataPoint;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -275,7 +277,7 @@ public class OverflowQPExecutor extends QueryProcessExecutor {
measurementList.get(i)));
}
- TSDataType dataType = measurementNode.getSchema().dataType;
+ TSDataType dataType = measurementNode.getSchema().getType();
String value = insertValues.get(i);
value = checkValue(dataType, value);
DataPoint dataPoint = DataPoint.getDataPoint(dataType, measurementList.get(i), value);
@@ -482,9 +484,10 @@ public class OverflowQPExecutor extends QueryProcessExecutor {
private boolean operateMetadata(MetadataPlan metadataPlan) throws ProcessorException {
MetadataOperator.NamespaceType namespaceType = metadataPlan.getNamespaceType();
Path path = metadataPlan.getPath();
- String dataType = metadataPlan.getDataType();
- String encoding = metadataPlan.getEncoding();
- String[] encodingArgs = metadataPlan.getEncodingArgs();
+ TSDataType dataType = metadataPlan.getDataType();
+ CompressionType compressor = metadataPlan.getCompressor();
+ TSEncoding encoding = metadataPlan.getEncoding();
+ Map<String, String> props = metadataPlan.getProps();
List<Path> deletePathList = metadataPlan.getDeletePathList();
try {
switch (namespaceType) {
@@ -499,7 +502,7 @@ public class OverflowQPExecutor extends QueryProcessExecutor {
// optimize the speed of adding timeseries
String fileNodePath = mManager.getFileNameByPath(path.getFullPath());
// the two map is stored in the storage group node
- Map<String, ColumnSchema> schemaMap = mManager.getSchemaMapForOneFileNode(fileNodePath);
+ Map<String, MeasurementSchema> schemaMap = mManager.getSchemaMapForOneFileNode(fileNodePath);
Map<String, Integer> numSchemaMap = mManager.getNumSchemaMapForOneFileNode(fileNodePath);
String lastNode = path.getMeasurement();
boolean isNewMeasurement = true;
@@ -507,25 +510,26 @@ public class OverflowQPExecutor extends QueryProcessExecutor {
synchronized (schemaMap) {
if (schemaMap.containsKey(lastNode)) {
isNewMeasurement = false;
- ColumnSchema columnSchema = schemaMap.get(lastNode);
- if (!columnSchema.geTsDataType().toString().equals(dataType)
- || !columnSchema.getEncoding().toString().equals(encoding)) {
+ MeasurementSchema columnSchema = schemaMap.get(lastNode);
+ if (!columnSchema.getType().equals(dataType)
+ || !columnSchema.getEncodingType().equals(encoding)) {
throw new ProcessorException(String.format(
"The dataType or encoding of the last node %s is conflicting in the storage group %s",
lastNode, fileNodePath));
}
- mManager.addPathToMTree(path.getFullPath(), dataType, encoding, encodingArgs);
+ mManager.addPathToMTree(path.getFullPath(), dataType, encoding, compressor, props);
numSchemaMap.put(lastNode, numSchemaMap.get(lastNode) + 1);
} else {
- mManager.addPathToMTree(path.getFullPath(), dataType, encoding, encodingArgs);
- ColumnSchema columnSchema = mManager.getSchemaForOnePath(path.toString());
+ mManager.addPathToMTree(path.getFullPath(), dataType, encoding, compressor, props);
+ MeasurementSchema columnSchema = mManager.getSchemaForOnePath(path.toString());
schemaMap.put(lastNode, columnSchema);
numSchemaMap.put(lastNode, 1);
}
try {
if (isNewMeasurement) {
// add time series to schema
- fileNodeManager.addTimeSeries(path, dataType, encoding);
+ fileNodeManager.addTimeSeries(path, dataType, encoding, compressor, props);
+ //TODO fileNodeManager.addTimeSeries(path, dataType, encoding, compressor, encodingArgs);
}
// fileNodeManager.closeOneFileNode(namespacePath);
} catch (FileNodeManagerException e) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/MetadataOperator.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/MetadataOperator.java
index c755b47..813b0c5 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/MetadataOperator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/logical/sys/MetadataOperator.java
@@ -19,7 +19,11 @@
package org.apache.iotdb.db.qp.logical.sys;
import java.util.List;
+import java.util.Map;
import org.apache.iotdb.db.qp.logical.RootOperator;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
/**
@@ -29,9 +33,10 @@ public class MetadataOperator extends RootOperator {
private final NamespaceType namespaceType;
private Path path;
- private String dataType;
- private String encoding;
- private String[] encodingArgs;
+ private TSDataType dataType;
+ private TSEncoding encoding;
+ private CompressionType compressor;
+ private Map<String, String> props;
private List<Path> deletePathList;
/**
@@ -61,28 +66,36 @@ public class MetadataOperator extends RootOperator {
this.path = path;
}
- public String getDataType() {
+ public TSDataType getDataType() {
return dataType;
}
- public void setDataType(String dataType) {
+ public void setDataType(TSDataType dataType) {
this.dataType = dataType;
}
- public String getEncoding() {
+ public TSEncoding getEncoding() {
return encoding;
}
- public void setEncoding(String encoding) {
+ public void setEncoding(TSEncoding encoding) {
this.encoding = encoding;
}
- public String[] getEncodingArgs() {
- return encodingArgs;
+ public void setCompressor(CompressionType compressor) {
+ this.compressor = compressor;
}
- public void setEncodingArgs(String[] encodingArgs) {
- this.encodingArgs = encodingArgs;
+ public CompressionType getCompressor() {
+ return compressor;
+ }
+
+ public Map<String, String> getProps() {
+ return props;
+ }
+
+ public void setProps(Map<String, String> props) {
+ this.props = props;
}
public NamespaceType getNamespaceType() {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/MetadataPlan.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/MetadataPlan.java
index f21264a..df0c566 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/MetadataPlan.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/physical/sys/MetadataPlan.java
@@ -20,33 +20,39 @@ package org.apache.iotdb.db.qp.physical.sys;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import org.apache.iotdb.db.qp.logical.Operator;
import org.apache.iotdb.db.qp.logical.sys.MetadataOperator;
import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
public class MetadataPlan extends PhysicalPlan {
private final MetadataOperator.NamespaceType namespaceType;
private Path path;
- private String dataType;
- private String encoding;
- private String[] encodingArgs;
+ private TSDataType dataType;
+ private CompressionType compressor;
+ private TSEncoding encoding;
+ private Map<String, String> props;
private List<Path> deletePathList;
/**
* Constructor of MetadataPlan.
*/
- public MetadataPlan(MetadataOperator.NamespaceType namespaceType, Path path, String dataType,
- String encoding,
- String[] encodingArgs, List<Path> deletePathList) {
+ public MetadataPlan(MetadataOperator.NamespaceType namespaceType, Path path, TSDataType dataType,
+ CompressionType compressor, TSEncoding encoding, Map<String, String> props,
+ List<Path> deletePathList) {
super(false, Operator.OperatorType.METADATA);
this.namespaceType = namespaceType;
this.path = path;
this.dataType = dataType;
+ this.compressor = compressor;
this.encoding = encoding;
- this.encodingArgs = encodingArgs;
+ this.props = props;
this.deletePathList = deletePathList;
switch (namespaceType) {
case SET_FILE_LEVEL:
@@ -69,28 +75,36 @@ public class MetadataPlan extends PhysicalPlan {
this.path = path;
}
- public String getDataType() {
+ public TSDataType getDataType() {
return dataType;
}
- public void setDataType(String dataType) {
+ public void setDataType(TSDataType dataType) {
this.dataType = dataType;
}
- public String getEncoding() {
+ public CompressionType getCompressor() {
+ return compressor;
+ }
+
+ public void setCompressor(CompressionType compressor) {
+ this.compressor = compressor;
+ }
+
+ public TSEncoding getEncoding() {
return encoding;
}
- public void setEncoding(String encoding) {
+ public void setEncoding(TSEncoding encoding) {
this.encoding = encoding;
}
- public String[] getEncodingArgs() {
- return encodingArgs;
+ public Map<String, String> getProps() {
+ return props;
}
- public void setEncodingArgs(String[] encodingArgs) {
- this.encodingArgs = encodingArgs;
+ public void setProps(Map<String, String> props) {
+ this.props = props;
}
public MetadataOperator.NamespaceType getNamespaceType() {
@@ -99,12 +113,13 @@ public class MetadataPlan extends PhysicalPlan {
@Override
public String toString() {
- String ret = "seriesPath: " + path + "\ndataType: " + dataType + "\nencoding: " + encoding
- + "\nnamespace type: " + namespaceType + "\nargs: ";
- for (String arg : encodingArgs) {
- ret = ret + arg + ",";
+ String ret = String.format("seriesPath: %s\ndataType: %s\nencoding: %s\nnamespace type: %s\nargs: ", path, dataType, encoding, namespaceType);
+ StringBuilder stringBuilder = new StringBuilder(ret.length()+50);
+ stringBuilder.append(ret);
+ for (Map.Entry prop : props.entrySet()) {
+ stringBuilder.append(prop.getKey()).append("=").append(prop.getValue()).append(",");
}
- return ret;
+ return stringBuilder.toString();
}
public void addDeletePath(Path path) {
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index a0634be..c80ff1f 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@ -55,8 +55,11 @@ import org.apache.iotdb.db.query.fill.PreviousFill;
import org.apache.iotdb.db.sql.parse.AstNode;
import org.apache.iotdb.db.sql.parse.Node;
import org.apache.iotdb.db.sql.parse.TSParser;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.constant.SystemConstant;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.utils.StringContainer;
@@ -370,18 +373,28 @@ public class LogicalGenerator {
AstNode paramNode = astNode.getChild(1);
String dataType = paramNode.getChild(0).getChild(0).getText();
String encodingType = paramNode.getChild(1).getChild(0).getText();
- checkMetadataArgs(dataType, encodingType);
- String[] paramStrings = new String[paramNode.getChildCount() - 2];
- for (int i = 0; i < paramStrings.length; i++) {
- AstNode node = paramNode.getChild(i + 2);
- paramStrings[i] = node.getChild(0) + SQLConstant.METADATA_PARAM_EQUAL + node.getChild(1);
+ String compressor;
+ int offset = 2;
+ if (paramNode.getChildren().size() > offset
+ && paramNode.getChild(offset).getToken().getText().equals("TOK_COMPRESSOR")) {
+ compressor = paramNode.getChild(offset).getChild(0).getText();
+ offset++;
+ } else {
+ compressor = TSFileConfig.compressor;
+ }
+ checkMetadataArgs(dataType, encodingType, compressor);
+ Map<String, String> props = new HashMap<>(paramNode.getChildCount() - offset + 1, 1);
+ while (offset < paramNode.getChildCount()) {
+ AstNode node = paramNode.getChild(offset++);
+ props.put(node.getChild(0).getText().toLowerCase(), node.getChild(1).getText());
}
MetadataOperator metadataOperator = new MetadataOperator(SQLConstant.TOK_METADATA_CREATE,
MetadataOperator.NamespaceType.ADD_PATH);
metadataOperator.setPath(series);
- metadataOperator.setDataType(dataType);
- metadataOperator.setEncoding(encodingType);
- metadataOperator.setEncodingArgs(paramStrings);
+ metadataOperator.setDataType(TSDataType.valueOf(dataType));
+ metadataOperator.setEncoding(TSEncoding.valueOf(encodingType));
+ metadataOperator.setProps(props);
+ metadataOperator.setCompressor(CompressionType.valueOf(compressor));
initializedOperator = metadataOperator;
}
@@ -1052,14 +1065,15 @@ public class LogicalGenerator {
initializedOperator = authorOperator;
}
- private void checkMetadataArgs(String dataType, String encoding)
+ private void checkMetadataArgs(String dataType, String encoding, String compressor)
throws MetadataArgsErrorException {
- final String rle = "RLE";
- final String plain = "PLAIN";
- final String ts2Diff = "TS_2DIFF";
- final String bitmap = "BITMAP";
- final String gorilla = "GORILLA";
+// final String rle = "RLE";
+// final String plain = "PLAIN";
+// final String ts2Diff = "TS_2DIFF";
+// final String bitmap = "BITMAP";
+// final String gorilla = "GORILLA";
TSDataType tsDataType;
+ TSEncoding tsEncoding;
if (dataType == null) {
throw new MetadataArgsErrorException("data type cannot be null");
}
@@ -1074,53 +1088,49 @@ public class LogicalGenerator {
throw new MetadataArgsErrorException("encoding type cannot be null");
}
- if (!encoding.equals(rle) && !encoding.equals(plain) && !encoding.equals(ts2Diff) && !encoding
- .equals(bitmap)
- && !encoding.equals(gorilla)) {
+ try {
+ tsEncoding = TSEncoding.valueOf(encoding);
+ } catch (Exception e) {
throw new MetadataArgsErrorException(String.format("encoding %s is not support", encoding));
}
+
+ try {
+ CompressionType.valueOf(compressor);
+ } catch (Exception e) {
+ throw new MetadataArgsErrorException(String.format("compressor %s is not support", compressor));
+ }
+ boolean throwExp = false;
switch (tsDataType) {
case BOOLEAN:
- if (!encoding.equals(plain) && !encoding.equals(rle)) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
+ if (!(tsEncoding.equals(TSEncoding.RLE) || tsEncoding.equals(TSEncoding.PLAIN))){
+ throwExp = true;
}
break;
case INT32:
- if ((!encoding.equals(plain) && !encoding.equals(rle) && !encoding.equals(ts2Diff))) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
- }
- break;
case INT64:
- if ((!encoding.equals(plain) && !encoding.equals(rle) && !encoding.equals(ts2Diff))) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
+ if (!(tsEncoding.equals(TSEncoding.RLE) || tsEncoding.equals(TSEncoding.PLAIN)
+ || tsEncoding.equals(TSEncoding.TS_2DIFF))) {
+ throwExp = true;
}
break;
case FLOAT:
- if ((!encoding.equals(plain) && !encoding.equals(rle) && !encoding.equals(ts2Diff)
- && !encoding.equals(gorilla))) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
- }
- break;
case DOUBLE:
- if ((!encoding.equals(plain) && !encoding.equals(rle) && !encoding.equals(ts2Diff)
- && !encoding.equals(gorilla))) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
+ if (!(tsEncoding.equals(TSEncoding.RLE) || tsEncoding.equals(TSEncoding.PLAIN)
+ || tsEncoding.equals(TSEncoding.TS_2DIFF) || tsEncoding.equals(TSEncoding.GORILLA))) {
+ throwExp = true;
}
break;
case TEXT:
- if (!encoding.equals(plain)) {
- throw new MetadataArgsErrorException(
- String.format("encoding %s does not support %s", encoding, dataType));
+ if (!tsEncoding.equals(TSEncoding.PLAIN)) {
+ throwExp = true;
}
break;
default:
- throw new MetadataArgsErrorException(
- String.format("data type %s is not supported", dataType));
+ throwExp = true;
+ }
+ if (throwExp) {
+ throw new MetadataArgsErrorException(
+ String.format("encoding %s does not support %s", encoding, dataType));
}
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
index 65f06f0..2caac94 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java
@@ -84,8 +84,8 @@ public class PhysicalGenerator {
case METADATA:
MetadataOperator metadata = (MetadataOperator) operator;
return new MetadataPlan(metadata.getNamespaceType(), metadata.getPath(),
- metadata.getDataType(),
- metadata.getEncoding(), metadata.getEncodingArgs(), metadata.getDeletePathList());
+ metadata.getDataType(), metadata.getCompressor(),
+ metadata.getEncoding(), metadata.getProps(), metadata.getDeletePathList());
case PROPERTY:
PropertyOperator property = (PropertyOperator) operator;
return new PropertyPlan(property.getPropertyType(), property.getPropertyPath(),
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/service/Utils.java b/iotdb/src/main/java/org/apache/iotdb/db/service/Utils.java
index 531940e..75826da 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/service/Utils.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/service/Utils.java
@@ -17,11 +17,7 @@ package org.apache.iotdb.db.service;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.apache.iotdb.db.metadata.ColumnSchema;
-import org.apache.iotdb.service.rpc.thrift.TSColumnSchema;
import org.apache.iotdb.service.rpc.thrift.TSDataValue;
import org.apache.iotdb.service.rpc.thrift.TSQueryDataSet;
import org.apache.iotdb.service.rpc.thrift.TSRowRecord;
@@ -38,42 +34,6 @@ public class Utils {
private Utils(){}
/**
- * convert all schema.
- *
- * @param allSchema -all schema
- */
- public static Map<String, List<TSColumnSchema>> convertAllSchema(
- Map<String, List<ColumnSchema>> allSchema) {
- if (allSchema == null) {
- return null;
- }
- Map<String, List<TSColumnSchema>> tsAllSchema = new HashMap<>();
- for (Map.Entry<String, List<ColumnSchema>> entry : allSchema.entrySet()) {
- List<TSColumnSchema> tsColumnSchemas = new ArrayList<>();
- for (ColumnSchema columnSchema : entry.getValue()) {
- tsColumnSchemas.add(convertColumnSchema(columnSchema));
- }
- tsAllSchema.put(entry.getKey(), tsColumnSchemas);
- }
- return tsAllSchema;
- }
-
- private static TSColumnSchema convertColumnSchema(ColumnSchema columnSchema) {
- if (columnSchema == null) {
- return null;
- }
- TSColumnSchema tsColumnSchema = new TSColumnSchema();
- tsColumnSchema.setName(columnSchema.getName());
- tsColumnSchema
- .setDataType(columnSchema.dataType == null ? null : columnSchema.dataType.toString());
- tsColumnSchema
- .setEncoding(columnSchema.encoding == null ? null : columnSchema.encoding.toString());
- tsColumnSchema
- .setOtherArgs(columnSchema.getArgsMap() == null ? null : columnSchema.getArgsMap());
- return tsColumnSchema;
- }
-
- /**
* convert query data set by fetch size.
*
* @param queryDataSet -query dataset
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/utils/FileSchemaUtils.java b/iotdb/src/main/java/org/apache/iotdb/db/utils/FileSchemaUtils.java
index 6d7ef9f..24c79cd 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/FileSchemaUtils.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/FileSchemaUtils.java
@@ -19,15 +19,10 @@
package org.apache.iotdb.db.utils;
import java.util.List;
-import java.util.Map.Entry;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
-import org.apache.iotdb.tsfile.common.constant.JsonFormatConstant;
-import org.apache.iotdb.tsfile.exception.write.InvalidJsonSchemaException;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.write.schema.FileSchema;
-import org.json.JSONArray;
-import org.json.JSONObject;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
public class FileSchemaUtils {
@@ -41,12 +36,9 @@ public class FileSchemaUtils {
* @throws WriteProcessException when the fileSchema cannot be created.
*/
public static FileSchema constructFileSchema(String processorName) throws WriteProcessException {
-
- List<ColumnSchema> columnSchemaList;
+ List<MeasurementSchema> columnSchemaList;
columnSchemaList = MManager.getInstance().getSchemaForFileName(processorName);
-
return getFileSchemaFromColumnSchema(columnSchemaList, processorName);
-
}
/**
@@ -57,40 +49,13 @@ public class FileSchemaUtils {
* @return a FileSchema contains the provided schemas.
* @throws WriteProcessException when the FileSchema cannot be constructed.
*/
- public static FileSchema getFileSchemaFromColumnSchema(List<ColumnSchema> schemaList,
+ public static FileSchema getFileSchemaFromColumnSchema(List<MeasurementSchema> schemaList,
String deviceType)
throws WriteProcessException {
- // TODO: is using a JSON as the media necessary?
- JSONArray rowGroup = new JSONArray();
-
- for (ColumnSchema columnSchema : schemaList) {
- JSONObject measurement = constructJsonColumnSchema(columnSchema);
- rowGroup.put(measurement);
- }
- return constructJsonFileSchema(deviceType, rowGroup);
- }
-
- public static FileSchema constructJsonFileSchema(String deviceType, JSONArray rowGroup) throws InvalidJsonSchemaException {
- JSONObject jsonSchema = new JSONObject();
- jsonSchema.put(JsonFormatConstant.JSON_SCHEMA, rowGroup);
- jsonSchema.put(JsonFormatConstant.DELTA_TYPE, deviceType);
- return new FileSchema(jsonSchema);
- }
-
- public static JSONObject constructJsonColumnSchema(ColumnSchema columnSchema) {
- JSONObject measurement = new JSONObject();
- measurement.put(JsonFormatConstant.MEASUREMENT_UID, columnSchema.getName());
- measurement.put(JsonFormatConstant.DATA_TYPE, columnSchema.dataType.toString());
- measurement.put(JsonFormatConstant.MEASUREMENT_ENCODING, columnSchema.encoding.toString());
- for (Entry<String, String> entry : columnSchema.getArgsMap().entrySet()) {
- if (JsonFormatConstant.ENUM_VALUES.equals(entry.getKey())) {
- String[] valueArray = entry.getValue().split(",");
- measurement.put(JsonFormatConstant.ENUM_VALUES, new JSONArray(valueArray));
- } else {
- measurement.put(entry.getKey(), entry.getValue());
- }
+ FileSchema schema = new FileSchema();
+ for (MeasurementSchema measurementSchema : schemaList) {
+ schema.registerMeasurement(measurementSchema);
}
- return measurement;
+ return schema;
}
-
}
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/utils/LoadDataUtils.java b/iotdb/src/main/java/org/apache/iotdb/db/utils/LoadDataUtils.java
index 3f6ae36..2fdef09 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/utils/LoadDataUtils.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/utils/LoadDataUtils.java
@@ -35,11 +35,11 @@ import org.apache.iotdb.db.engine.filenode.FileNodeManager;
import org.apache.iotdb.db.exception.FileNodeManagerException;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.exception.ProcessorException;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.write.record.TSRecord;
import org.apache.iotdb.tsfile.write.schema.FileSchema;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -206,7 +206,7 @@ public class LoadDataUtils {
this.mmanager = mmanager;
// get measurement schema
try {
- ArrayList<ColumnSchema> meaSchema = mmanager.getSchemaForOneType(measureType);
+ ArrayList<MeasurementSchema> meaSchema = mmanager.getSchemaForOneType(measureType);
fileSchema = FileSchemaUtils.getFileSchemaFromColumnSchema(meaSchema, measureType);
} catch (PathErrorException e) {
logger.error("the seriesPath of input measurement schema meet error!", e);
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
index 59b2685..8ebcbf0 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
@@ -18,7 +18,12 @@
*/
package org.apache.iotdb.db.engine;
+import java.util.Collections;
import org.apache.iotdb.db.metadata.MManager;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
/**
* @author liukun
@@ -36,26 +41,52 @@ public class MetadataManagerHelper {
mmanager.setStorageLevelToMTree("root.vehicle.d1");
mmanager.setStorageLevelToMTree("root.vehicle.d2");
- mmanager.addPathToMTree("root.vehicle.d0.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s5", "TEXT", "PLAIN", new String[0]);
-
- mmanager.addPathToMTree("root.vehicle.d1.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s5", "TEXT", "PLAIN", new String[0]);
-
- mmanager.addPathToMTree("root.vehicle.d2.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s5", "TEXT", "PLAIN", new String[0]);
+ CompressionType compressionType =CompressionType.valueOf(TSFileConfig.compressor);
+
+ mmanager.addPathToMTree("root.vehicle.d0.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType,
+ Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s1", TSDataType.valueOf("INT64"),
+ TSEncoding.valueOf("RLE"), compressionType,
+ Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s2", TSDataType.valueOf("FLOAT"),
+ TSEncoding.valueOf("RLE"), compressionType,
+ Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s3", TSDataType.valueOf("DOUBLE"),
+ TSEncoding.valueOf("RLE"), compressionType,
+ Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s4", TSDataType.valueOf("BOOLEAN"),
+ TSEncoding.valueOf("PLAIN"), compressionType,
+ Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s5", TSDataType.valueOf("TEXT"),
+ TSEncoding.valueOf("PLAIN"), compressionType,
+ Collections.emptyMap());
+
+ mmanager.addPathToMTree("root.vehicle.d1.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s1", TSDataType.valueOf("INT64"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s2", TSDataType.valueOf("FLOAT"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s3", TSDataType.valueOf("DOUBLE"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s4", TSDataType.valueOf("BOOLEAN"),
+ TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s5", TSDataType.valueOf("TEXT"),
+ TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+
+ mmanager.addPathToMTree("root.vehicle.d2.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s1", TSDataType.valueOf("INT64"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s2", TSDataType.valueOf("FLOAT"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s3", TSDataType.valueOf("DOUBLE"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s4", TSDataType.valueOf("BOOLEAN"),
+ TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s5", TSDataType.valueOf("TEXT"),
+ TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
} catch (Exception e) {
throw new RuntimeException("Initialize the metadata manager failed", e);
@@ -68,27 +99,28 @@ public class MetadataManagerHelper {
mmanager.clear();
try {
mmanager.setStorageLevelToMTree("root.vehicle");
-
- mmanager.addPathToMTree("root.vehicle.d0.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s5", "TEXT", "PLAIN", new String[0]);
-
- mmanager.addPathToMTree("root.vehicle.d1.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s5", "TEXT", "PLAIN", new String[0]);
-
- mmanager.addPathToMTree("root.vehicle.d2.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s5", "TEXT", "PLAIN", new String[0]);
+ CompressionType compressionType =CompressionType.valueOf(TSFileConfig.compressor);
+
+ mmanager.addPathToMTree("root.vehicle.d0.s0", TSDataType.valueOf("INT32"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s1", TSDataType.valueOf("INT64"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s2", TSDataType.valueOf("FLOAT"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s3", TSDataType.valueOf("DOUBLE"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s4", TSDataType.valueOf("BOOLEAN"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d0.s5", TSDataType.valueOf("TEXT"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+
+ mmanager.addPathToMTree("root.vehicle.d1.s0", TSDataType.valueOf("INT32"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s1", TSDataType.valueOf("INT64"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s2", TSDataType.valueOf("FLOAT"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s3", TSDataType.valueOf("DOUBLE"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s4", TSDataType.valueOf("BOOLEAN"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d1.s5", TSDataType.valueOf("TEXT"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+
+ mmanager.addPathToMTree("root.vehicle.d2.s0", TSDataType.valueOf("INT32"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s1", TSDataType.valueOf("INT64"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s2", TSDataType.valueOf("FLOAT"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s3", TSDataType.valueOf("DOUBLE"), TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s4", TSDataType.valueOf("BOOLEAN"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
+ mmanager.addPathToMTree("root.vehicle.d2.s5", TSDataType.valueOf("TEXT"), TSEncoding.valueOf("PLAIN"), compressionType, Collections.emptyMap());
} catch (Exception e) {
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/filenodev2/FileNodeManagerBenchmark.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/filenodev2/FileNodeManagerBenchmark.java
index 97f2383..5829f0e 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/filenodev2/FileNodeManagerBenchmark.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/filenodev2/FileNodeManagerBenchmark.java
@@ -67,7 +67,7 @@ public class FileNodeManagerBenchmark {
for (String device : devices) {
for (String measurement : measurements) {
manager.addPathToMTree(device + "." + measurement, TSDataType.INT64.toString(),
- TSEncoding.PLAIN.toString(), new String[0]);
+ TSEncoding.PLAIN.toString());
}
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteFileSizeControlTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteFileSizeControlTest.java
index a947254..a61fa07 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteFileSizeControlTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteFileSizeControlTest.java
@@ -38,9 +38,9 @@ import org.apache.iotdb.db.engine.bufferwrite.BufferWriteProcessor;
import org.apache.iotdb.db.engine.bufferwrite.FileNodeConstants;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.exception.BufferWriteProcessorException;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.db.utils.FileSchemaUtils;
import org.apache.iotdb.db.utils.MemUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -48,6 +48,7 @@ import org.apache.iotdb.tsfile.common.constant.JsonFormatConstant;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.write.schema.FileSchema;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.After;
@@ -144,7 +145,7 @@ public class BufferwriteFileSizeControlTest {
try {
processor = new BufferWriteProcessor(Directories.getInstance().getFolderForTest(), nsp,
filename,
- parameters, SysTimeVersionController.INSTANCE, constructFileSchema(nsp));
+ parameters, SysTimeVersionController.INSTANCE, FileSchemaUtils.constructFileSchema(nsp));
} catch (BufferWriteProcessorException e) {
e.printStackTrace();
fail(e.getMessage());
@@ -168,45 +169,4 @@ public class BufferwriteFileSizeControlTest {
assertTrue(processor.getFileSize() < dbConfig.bufferwriteFileSizeThreshold);
fail("Method unimplemented");
}
-
- private FileSchema constructFileSchema(String processorName) throws WriteProcessException {
-
- List<ColumnSchema> columnSchemaList;
- columnSchemaList = MManager.getInstance().getSchemaForFileName(processorName);
-
- FileSchema fileSchema = null;
- try {
- fileSchema = getFileSchemaFromColumnSchema(columnSchemaList, processorName);
- } catch (WriteProcessException e) {
- throw e;
- }
- return fileSchema;
-
- }
-
- private FileSchema getFileSchemaFromColumnSchema(List<ColumnSchema> schemaList,
- String deviceIdType)
- throws WriteProcessException {
- JSONArray rowGroup = new JSONArray();
-
- for (ColumnSchema columnSchema : schemaList) {
- JSONObject measurement = new JSONObject();
- measurement.put(JsonFormatConstant.MEASUREMENT_UID, columnSchema.getName());
- measurement.put(JsonFormatConstant.DATA_TYPE, columnSchema.dataType.toString());
- measurement.put(JsonFormatConstant.MEASUREMENT_ENCODING, columnSchema.encoding.toString());
- for (Entry<String, String> entry : columnSchema.getArgsMap().entrySet()) {
- if (JsonFormatConstant.ENUM_VALUES.equals(entry.getKey())) {
- String[] valueArray = entry.getValue().split(",");
- measurement.put(JsonFormatConstant.ENUM_VALUES, new JSONArray(valueArray));
- } else {
- measurement.put(entry.getKey(), entry.getValue().toString());
- }
- }
- rowGroup.put(measurement);
- }
- JSONObject jsonSchema = new JSONObject();
- jsonSchema.put(JsonFormatConstant.JSON_SCHEMA, rowGroup);
- jsonSchema.put(JsonFormatConstant.DELTA_TYPE, deviceIdType);
- return new FileSchema(jsonSchema);
- }
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteMetaSizeControlTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteMetaSizeControlTest.java
index 0f5f259..dbacdf4 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteMetaSizeControlTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/memcontrol/BufferwriteMetaSizeControlTest.java
@@ -38,9 +38,9 @@ import org.apache.iotdb.db.engine.bufferwrite.BufferWriteProcessor;
import org.apache.iotdb.db.engine.bufferwrite.FileNodeConstants;
import org.apache.iotdb.db.engine.version.SysTimeVersionController;
import org.apache.iotdb.db.exception.BufferWriteProcessorException;
-import org.apache.iotdb.db.metadata.ColumnSchema;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.db.utils.FileSchemaUtils;
import org.apache.iotdb.db.utils.MemUtils;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -48,6 +48,7 @@ import org.apache.iotdb.tsfile.common.constant.JsonFormatConstant;
import org.apache.iotdb.tsfile.exception.write.WriteProcessException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.write.schema.FileSchema;
+import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.After;
@@ -144,7 +145,7 @@ public class BufferwriteMetaSizeControlTest {
try {
processor = new BufferWriteProcessor(Directories.getInstance().getFolderForTest(), nsp,
filename,
- parameters, SysTimeVersionController.INSTANCE, constructFileSchema(nsp));
+ parameters, SysTimeVersionController.INSTANCE, FileSchemaUtils.constructFileSchema(nsp));
} catch (BufferWriteProcessorException e) {
e.printStackTrace();
fail(e.getMessage());
@@ -169,44 +170,4 @@ public class BufferwriteMetaSizeControlTest {
fail("Method unimplemented");
}
-
- private FileSchema constructFileSchema(String processorName) throws WriteProcessException {
-
- List<ColumnSchema> columnSchemaList;
- columnSchemaList = MManager.getInstance().getSchemaForFileName(processorName);
-
- FileSchema fileSchema = null;
- try {
- fileSchema = getFileSchemaFromColumnSchema(columnSchemaList, processorName);
- } catch (WriteProcessException e) {
- throw e;
- }
- return fileSchema;
-
- }
-
- private FileSchema getFileSchemaFromColumnSchema(List<ColumnSchema> schemaList, String deviceType)
- throws WriteProcessException {
- JSONArray rowGroup = new JSONArray();
-
- for (ColumnSchema columnSchema : schemaList) {
- JSONObject measurement = new JSONObject();
- measurement.put(JsonFormatConstant.MEASUREMENT_UID, columnSchema.getName());
- measurement.put(JsonFormatConstant.DATA_TYPE, columnSchema.dataType.toString());
- measurement.put(JsonFormatConstant.MEASUREMENT_ENCODING, columnSchema.encoding.toString());
- for (Entry<String, String> entry : columnSchema.getArgsMap().entrySet()) {
- if (JsonFormatConstant.ENUM_VALUES.equals(entry.getKey())) {
- String[] valueArray = entry.getValue().split(",");
- measurement.put(JsonFormatConstant.ENUM_VALUES, new JSONArray(valueArray));
- } else {
- measurement.put(entry.getKey(), entry.getValue().toString());
- }
- }
- rowGroup.put(measurement);
- }
- JSONObject jsonSchema = new JSONObject();
- jsonSchema.put(JsonFormatConstant.JSON_SCHEMA, rowGroup);
- jsonSchema.put(JsonFormatConstant.DELTA_TYPE, deviceType);
- return new FileSchema(jsonSchema);
- }
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
index 2c3bd20..1a76dd7 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionFileNodeTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.conf.directories.Directories;
@@ -38,6 +39,8 @@ import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.query.context.QueryContext;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.db.utils.TimeValuePair;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
@@ -55,7 +58,6 @@ public class DeletionFileNodeTest {
private static String[] measurements = new String[10];
private String dataType = TSDataType.DOUBLE.toString();
private String encoding = TSEncoding.PLAIN.toString();
- private String[] args = new String[0];
static {
for (int i = 0; i < 10; i++) {
@@ -69,10 +71,11 @@ public class DeletionFileNodeTest {
MManager.getInstance().setStorageLevelToMTree(processorName);
for (int i = 0; i < 10; i++) {
MManager.getInstance().addPathToMTree(processorName + "." + measurements[i], dataType,
- encoding, args);
+ encoding);
FileNodeManager.getInstance()
- .addTimeSeries(new Path(processorName, measurements[i]), dataType,
- encoding);
+ .addTimeSeries(new Path(processorName, measurements[i]), TSDataType.valueOf(dataType),
+ TSEncoding.valueOf(encoding), CompressionType.valueOf(TSFileConfig.compressor),
+ Collections.emptyMap());
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionQueryTest.java b/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionQueryTest.java
index e7890ab..c3e7dc3 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionQueryTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/engine/modification/DeletionQueryTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.apache.iotdb.db.engine.filenode.FileNodeManager;
import org.apache.iotdb.db.engine.memcontrol.BasicMemController.UsageLevel;
@@ -32,6 +33,8 @@ import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.metadata.MManager;
import org.apache.iotdb.db.query.executor.EngineQueryRouter;
import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
@@ -50,7 +53,6 @@ public class DeletionQueryTest {
private static String[] measurements = new String[10];
private String dataType = TSDataType.DOUBLE.toString();
private String encoding = TSEncoding.PLAIN.toString();
- private String[] args = new String[0];
private EngineQueryRouter router = new EngineQueryRouter();
static {
@@ -65,10 +67,11 @@ public class DeletionQueryTest {
MManager.getInstance().setStorageLevelToMTree(processorName);
for (int i = 0; i < 10; i++) {
MManager.getInstance().addPathToMTree(processorName + "." + measurements[i], dataType,
- encoding, args);
+ encoding);
FileNodeManager.getInstance()
- .addTimeSeries(new Path(processorName, measurements[i]), dataType,
- encoding);
+ .addTimeSeries(new Path(processorName, measurements[i]), TSDataType.valueOf(dataType),
+ TSEncoding.valueOf(encoding), CompressionType.valueOf(TSFileConfig.compressor),
+ Collections.emptyMap());
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java
index 7bf3056..942e6a2 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java
@@ -69,50 +69,99 @@ public class IoTDBCompleteIT {
public void simpleTest() throws ClassNotFoundException, SQLException {
String[] sqlS = {"CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32,ENCODING=RLE",
"SHOW TIMESERIES",
- "=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " vehicle:{\n" + " d0:{\n"
- + " s0:{\n" + " DataType: INT32,\n"
- + " Encoding: RLE,\n" + " args: {},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " }\n"
- + " }\n" + "}",
- "DELETE TIMESERIES root.vehicle.d0.s0", "SHOW TIMESERIES",
- "=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " vehicle\n" + "}",
+ "=== Timeseries Tree ===\n"
+ + "\n"
+ + "root:{\n"
+ + " vehicle:{\n"
+ + " d0:{\n"
+ + " s0:{\n"
+ + " DataType: INT32,\n"
+ + " Encoding: RLE,\n"
+ + " Compressor: UNCOMPRESSED,\n"
+ + " args: {},\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + "}",
+ "DELETE TIMESERIES root.vehicle.d0.s0",
+ "SHOW TIMESERIES",
+ "=== Timeseries Tree ===\n"
+ + "\n"
+ + "root:{\n"
+ + " vehicle\n"
+ + "}",
"CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=BOOLEAN,ENCODING=PLAIN",
"CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64,ENCODING=TS_2DIFF",
"CREATE TIMESERIES root.vehicle.d0.s2 WITH DATATYPE=FLOAT,ENCODING=GORILLA",
"CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=DOUBLE,ENCODING=RLE",
"CREATE TIMESERIES root.vehicle.d1.s5 WITH DATATYPE=TEXT,ENCODING=PLAIN",
- "CREATE TIMESERIES root.vehicle.d2.s6 WITH DATATYPE=INT32,ENCODING=TS_2DIFF,compressor=UNCOMPRESSOR",
+ "CREATE TIMESERIES root.vehicle.d2.s6 WITH DATATYPE=INT32,ENCODING=TS_2DIFF,compressor=UNCOMPRESSED",
"CREATE TIMESERIES root.vehicle.d3.s7 WITH DATATYPE=INT32,ENCODING=RLE,compressor=SNAPPY",
"CREATE TIMESERIES root.vehicle.d4.s8 WITH DATATYPE=INT32,ENCODING=RLE,MAX_POINT_NUMBER=100",
"CREATE TIMESERIES root.vehicle.d5.s9 WITH DATATYPE=FLOAT,ENCODING=PLAIN,compressor=SNAPPY,MAX_POINT_NUMBER=10",
"CREATE TIMESERIES root.vehicle.d6.s10 WITH DATATYPE=DOUBLE,ENCODING=RLE,compressor=UNCOMPRESSOR,MAX_POINT_NUMBER=10",
- "DELETE TIMESERIES root.vehicle.d0.*", "SHOW TIMESERIES",
- "=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " vehicle:{\n" + " d1:{\n"
- + " s5:{\n" + " DataType: TEXT,\n"
- + " Encoding: PLAIN,\n" + " args: {},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " },\n"
- + " d2:{\n" + " s6:{\n" + " DataType: INT32,\n"
+ "DELETE TIMESERIES root.vehicle.d0.*",
+ "SHOW TIMESERIES",
+ "=== Timeseries Tree ===\n"
+ + "\n"
+ + "root:{\n"
+ + " vehicle:{\n"
+ + " d1:{\n"
+ + " s5:{\n"
+ + " DataType: TEXT,\n"
+ + " Encoding: PLAIN,\n"
+ + " Compressor: UNCOMPRESSED,\n"
+ + " args: {},\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " },\n"
+ + " d2:{\n"
+ + " s6:{\n"
+ + " DataType: INT32,\n"
+ " Encoding: TS_2DIFF,\n"
- + " args: {compressor=UNCOMPRESSOR},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " },\n"
- + " d3:{\n" + " s7:{\n" + " DataType: INT32,\n"
- + " Encoding: RLE,\n" + " args: {compressor=SNAPPY},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " },\n"
- + " d4:{\n" + " s8:{\n" + " DataType: INT32,\n"
+ + " Compressor: UNCOMPRESSED,\n"
+ + " args: {},\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " },\n"
+ + " d3:{\n"
+ + " s7:{\n"
+ + " DataType: INT32,\n"
+ " Encoding: RLE,\n"
+ + " Compressor: SNAPPY,\n"
+ + " args: {},\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " },\n"
+ + " d4:{\n"
+ + " s8:{\n"
+ + " DataType: INT32,\n"
+ + " Encoding: RLE,\n"
+ + " Compressor: UNCOMPRESSED,\n"
+ " args: {MAX_POINT_NUMBER=100},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " },\n"
- + " d5:{\n" + " s9:{\n" + " DataType: FLOAT,\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " },\n"
+ + " d5:{\n"
+ + " s9:{\n"
+ + " DataType: FLOAT,\n"
+ " Encoding: PLAIN,\n"
- + " args: {MAX_POINT_NUMBER=10, compressor=SNAPPY},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " },\n"
- + " d6:{\n" + " s10:{\n" + " DataType: DOUBLE,\n"
- + " Encoding: RLE,\n"
- + " args: {MAX_POINT_NUMBER=10, compressor=UNCOMPRESSOR},\n"
- + " StorageGroup: root.vehicle \n" + " }\n" + " }\n"
- + " }\n" + "}",
- "DELETE TIMESERIES root.vehicle.*", "SHOW TIMESERIES",
- "=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " vehicle\n" + "}"};
+ + " Compressor: SNAPPY,\n"
+ + " args: {MAX_POINT_NUMBER=10},\n"
+ + " StorageGroup: root.vehicle\n"
+ + " }\n"
+ + " }\n"
+ + " }\n"
+ + "}",
+ "DELETE TIMESERIES root.vehicle.*",
+ "SHOW TIMESERIES",
+ "=== Timeseries Tree ===\n"
+ + "\n"
+ + "root:{\n"
+ + " vehicle\n"
+ + "}"
+ };
executeSQL(sqlS);
}
@@ -262,7 +311,7 @@ public class IoTDBCompleteIT {
.getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
for (String sql : sqls) {
if (cmp) {
- Assert.assertEquals(result, sql);
+ Assert.assertEquals(sql, result);
cmp = false;
} else if (sql.equals("SHOW TIMESERIES")) {
DatabaseMetaData data = connection.getMetaData();
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java
index 2b81507..ff5e9e9 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java
@@ -48,9 +48,6 @@ import org.junit.Test;
public class IoTDBDaemonIT {
private static IoTDB daemon;
-
- private static Connection connection;
-
private static String[] sqls = new String[]{
"SET STORAGE GROUP TO root.vehicle.d0", "SET STORAGE GROUP TO root.vehicle.d1",
@@ -120,13 +117,11 @@ public class IoTDBDaemonIT {
EnvironmentUtils.envSetUp();
insertData();
- connection = DriverManager
- .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+
}
@AfterClass
public static void tearDown() throws Exception {
- connection.close();
daemon.stop();
EnvironmentUtils.cleanEnv();
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java
index 4e8a444..2a45c29 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java
@@ -58,7 +58,6 @@ public class IoTDBEngineTimeGeneratorIT {
private static int maxNumberOfPointsInPage;
private static int pageSizeInByte;
private static int groupSizeInByte;
- private static Connection connection;
private static int count = 0;
private static int count2 = 150;
@@ -85,14 +84,11 @@ public class IoTDBEngineTimeGeneratorIT {
Thread.sleep(5000);
insertData();
- connection = DriverManager
- .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+
}
@AfterClass
public static void tearDown() throws Exception {
- connection.close();
-
daemon.stop();
// recovery value
tsFileConfig.maxNumberOfPointsInPage = maxNumberOfPointsInPage;
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBFloatPrecisionIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBFloatPrecisionIT.java
new file mode 100644
index 0000000..f818d7f
--- /dev/null
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBFloatPrecisionIT.java
@@ -0,0 +1,166 @@
+/**
+ * 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.db.integration;
+
+import org.apache.iotdb.db.service.IoTDB;
+import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.jdbc.Config;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.iotdb.db.integration.Constant.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Notice that, all test begins with "IoTDB" is integration test. All test which will start the IoTDB server should be
+ * defined as integration test.
+ */
+public class IoTDBFloatPrecisionIT {
+
+ private static IoTDB daemon;
+
+ private static final String CREATE_TEMPLATE_SQL = "CREATE TIMESERIES root.vehicle.%s.%s WITH DATATYPE=%s, ENCODING=%s, MAX_POINT_NUMBER=%d";
+ private static final String INSERT_TEMPLATE_SQL = "insert into root.vehicle.%s(timestamp,%s) values(%d,%s)";
+ private static List<String> sqls = new ArrayList<>();
+ private static final int TIMESTAMP = 10;
+ private static final String VALUE = "1.2345678901";
+ private static final float DELTA_FLOAT = 0.0000001f;
+ private static final double DELTA_DOUBLE = 0.0000001d;
+
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ EnvironmentUtils.closeStatMonitor();
+ EnvironmentUtils.closeMemControl();
+ initCreateSQLStatement();
+ for(String sql : sqls){
+ System.out.println(sql);
+ }
+ daemon = IoTDB.getInstance();
+ daemon.active();
+ EnvironmentUtils.envSetUp();
+ insertData();
+ }
+
+ @AfterClass
+ public static void tearDown() throws Exception {
+ daemon.stop();
+ EnvironmentUtils.cleanEnv();
+ }
+
+ private static void initCreateSQLStatement(){
+ sqls.add("SET STORAGE GROUP TO root.vehicle.f0");
+ sqls.add("SET STORAGE GROUP TO root.vehicle.d0");
+ for(int i = 0; i < 10; i++){
+ sqls.add(String.format(CREATE_TEMPLATE_SQL, "f0", "s"+i+"rle", "FLOAT", "RLE", i));
+ sqls.add(String.format(CREATE_TEMPLATE_SQL, "f0", "s"+i+"2f", "FLOAT", "TS_2DIFF", i));
+ sqls.add(String.format(CREATE_TEMPLATE_SQL, "d0", "s"+i+"rle", "DOUBLE", "RLE", i));
+ sqls.add(String.format(CREATE_TEMPLATE_SQL, "d0", "s"+i+"2f", "DOUBLE", "TS_2DIFF", i));
+ }
+ for(int i = 0; i < 10; i++){
+ sqls.add(String.format(INSERT_TEMPLATE_SQL, "f0", "s"+i+"rle", TIMESTAMP, VALUE));
+ sqls.add(String.format(INSERT_TEMPLATE_SQL, "f0", "s"+i+"2f", TIMESTAMP, VALUE));
+ sqls.add(String.format(INSERT_TEMPLATE_SQL, "d0", "s"+i+"rle", TIMESTAMP, VALUE));
+ sqls.add(String.format(INSERT_TEMPLATE_SQL, "d0", "s"+i+"2f", TIMESTAMP, VALUE));
+ }
+
+ }
+
+ private static void insertData() throws ClassNotFoundException, SQLException {
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ Connection connection = null;
+ try {
+ connection = DriverManager
+ .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement();
+ for (String sql : sqls) {
+ statement.execute(sql);
+ }
+ statement.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (connection != null) {
+ connection.close();
+ }
+ }
+ }
+
+ @Test
+ public void selectAllSQLTest() throws ClassNotFoundException, SQLException {
+ Class.forName(Config.JDBC_DRIVER_NAME);
+ Connection connection = null;
+ try {
+ connection = DriverManager
+ .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
+ Statement statement = connection.createStatement();
+ boolean hasResultSet = statement.execute("select * from root");
+ Assert.assertTrue(hasResultSet);
+ ResultSet resultSet = statement.getResultSet();
+ int cnt = 0;
+ while (resultSet.next()) {
+ assertEquals(TIMESTAMP+"", resultSet.getString(TIMESTAMP_STR));
+ for(int i = 0; i < 10; i++){
+ Assert.assertEquals(Float.parseFloat(VALUE), resultSet.getFloat(String.format("root.vehicle.%s.%s", "f0", "s"+i+"rle")), DELTA_FLOAT);
+ Assert.assertEquals(Float.parseFloat(VALUE), resultSet.getFloat(String.format("root.vehicle.%s.%s", "f0", "s"+i+"2f")), DELTA_FLOAT);
+ Assert.assertEquals(Double.parseDouble(VALUE), resultSet.getDouble(String.format("root.vehicle.%s.%s", "d0", "s"+i+"rle")), DELTA_FLOAT);
+ Assert.assertEquals(Double.parseDouble(VALUE), resultSet.getDouble(String.format("root.vehicle.%s.%s", "d0", "s"+i+"2f")), DELTA_DOUBLE);
+ }
+ cnt++;
+ }
+ Assert.assertEquals(1, cnt);
+ statement.close();
+
+ statement = connection.createStatement();
+ statement.execute("flush");
+ resultSet = statement.executeQuery("select * from root");
+ cnt = 0;
+ while (resultSet.next()) {
+ assertEquals(TIMESTAMP+"", resultSet.getString(TIMESTAMP_STR));
+ for(int i = 0; i < 10; i++){
+ BigDecimal b = new BigDecimal(VALUE);
+ Assert.assertEquals(b.setScale(i, RoundingMode.HALF_UP).floatValue(), resultSet.getFloat(String.format("root.vehicle.%s.%s", "f0", "s"+i+"rle")), DELTA_FLOAT);
+ Assert.assertEquals(b.setScale(i, RoundingMode.HALF_UP).floatValue(), resultSet.getFloat(String.format("root.vehicle.%s.%s", "f0", "s"+i+"2f")), DELTA_FLOAT);
+ Assert.assertEquals(b.setScale(i, RoundingMode.HALF_UP).doubleValue(), resultSet.getDouble(String.format("root.vehicle.%s.%s", "d0", "s"+i+"rle")), DELTA_DOUBLE);
+ Assert.assertEquals(b.setScale(i, RoundingMode.HALF_UP).doubleValue(), resultSet.getDouble(String.format("root.vehicle.%s.%s", "d0", "s"+i+"2f")), DELTA_DOUBLE);
+ }
+ cnt++;
+ }
+ Assert.assertEquals(1, cnt);
+ statement.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail(e.getMessage());
+ } finally {
+ if (connection != null) {
+ connection.close();
+ }
+ }
+ }
+
+}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java
index 2effc15..df2902e 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java
@@ -50,7 +50,6 @@ public class IoTDBLargeDataIT {
private static int maxNumberOfPointsInPage;
private static int pageSizeInByte;
private static int groupSizeInByte;
- private static Connection connection;
@BeforeClass
public static void setUp() throws Exception {
@@ -76,16 +75,11 @@ public class IoTDBLargeDataIT {
Thread.sleep(5000);
insertData();
- connection = DriverManager
- .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
}
@AfterClass
public static void tearDown() throws Exception {
-
- connection.close();
-
daemon.stop();
// recovery value
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
index 2c9c579..830328c 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
@@ -358,17 +358,30 @@ public class IoTDBMetadataFetchIT {
private void showTimeseriesInJson() {
String metadataInJson = databaseMetaData.toString();
String standard =
- "=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " ln:{\n" + " wf01:{\n"
- + " wt01:{\n" + " status:{\n"
+ "=== Timeseries Tree ===\n"
+ + "\n"
+ + "root:{\n"
+ + " ln:{\n"
+ + " wf01:{\n"
+ + " wt01:{\n"
+ + " status:{\n"
+ " DataType: BOOLEAN,\n"
- + " Encoding: PLAIN,\n" + " args: {},\n"
- + " StorageGroup: root.ln.wf01.wt01 \n" + " },\n"
- + " temperature:{\n" + " DataType: FLOAT,\n"
+ + " Encoding: PLAIN,\n"
+ + " Compressor: UNCOMPRESSED,\n"
+ + " args: {},\n"
+ + " StorageGroup: root.ln.wf01.wt01\n"
+ + " },\n"
+ + " temperature:{\n"
+ + " DataType: FLOAT,\n"
+ " Encoding: RLE,\n"
- + " args: {MAX_POINT_NUMBER=3, compressor=SNAPPY},\n"
- + " StorageGroup: root.ln.wf01.wt01 \n" + " }\n"
+ + " Compressor: SNAPPY,\n"
+ + " args: {max_point_number=3},\n"
+ + " StorageGroup: root.ln.wf01.wt01\n"
+ + " }\n"
+ " }\n"
- + " }\n" + " }\n" + "}";
- Assert.assertEquals(metadataInJson, standard);
+ + " }\n"
+ + " }\n"
+ + "}";
+ Assert.assertEquals(standard, metadataInJson);
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java
index 2bb5a86..f97e6c1 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java
@@ -50,7 +50,6 @@ public class IoTDBMultiSeriesIT {
private static int maxNumberOfPointsInPage;
private static int pageSizeInByte;
private static int groupSizeInByte;
- private static Connection connection;
@BeforeClass
public static void setUp() throws Exception {
@@ -75,17 +74,10 @@ public class IoTDBMultiSeriesIT {
Thread.sleep(5000);
insertData();
-
- connection = DriverManager
- .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
-
}
@AfterClass
public static void tearDown() throws Exception {
-
- connection.close();
-
daemon.stop();
// recovery value
tsFileConfig.maxNumberOfPointsInPage = maxNumberOfPointsInPage;
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java
index 4598176..b910437 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java
@@ -57,7 +57,6 @@ public class IoTDBSequenceDataQueryIT {
private static int maxNumberOfPointsInPage;
private static int pageSizeInByte;
private static int groupSizeInByte;
- private static Connection connection;
// count : d0s0 >= 14
private static int count = 0;
@@ -84,14 +83,10 @@ public class IoTDBSequenceDataQueryIT {
Thread.sleep(5000);
insertData();
- connection = DriverManager
- .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
}
@AfterClass
public static void tearDown() throws Exception {
- connection.close();
-
daemon.stop();
// recovery value
tsFileConfig.maxNumberOfPointsInPage = maxNumberOfPointsInPage;
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
index 4a92d97..d5bcb68 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerAdvancedTest.java
@@ -46,19 +46,19 @@ public class MManagerAdvancedTest {
mmanager.setStorageLevelToMTree("root.vehicle.d1");
mmanager.setStorageLevelToMTree("root.vehicle.d0");
- mmanager.addPathToMTree("root.vehicle.d0.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d0.s5", "TEXT", "PLAIN", new String[0]);
-
- mmanager.addPathToMTree("root.vehicle.d1.s0", "INT32", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s1", "INT64", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s2", "FLOAT", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s3", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s4", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d1.s5", "TEXT", "PLAIN", new String[0]);
+ mmanager.addPathToMTree("root.vehicle.d0.s0", "INT32", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d0.s1", "INT64", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d0.s2", "FLOAT", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d0.s3", "DOUBLE", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d0.s4", "BOOLEAN", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d0.s5", "TEXT", "PLAIN");
+
+ mmanager.addPathToMTree("root.vehicle.d1.s0", "INT32", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d1.s1", "INT64", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d1.s2", "FLOAT", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d1.s3", "DOUBLE", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d1.s4", "BOOLEAN", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d1.s5", "TEXT", "PLAIN");
}
@After
@@ -96,10 +96,10 @@ public class MManagerAdvancedTest {
@Test
public void testCache() throws PathErrorException, IOException, MetadataArgsErrorException {
- mmanager.addPathToMTree("root.vehicle.d2.s0", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s1", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s2.g0", "TEXT", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s3", "TEXT", "PLAIN", new String[0]);
+ mmanager.addPathToMTree("root.vehicle.d2.s0", "DOUBLE", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d2.s1", "BOOLEAN", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d2.s2.g0", "TEXT", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d2.s3", "TEXT", "PLAIN");
Assert.assertEquals(TSDataType.INT32,
mmanager.checkPathStorageLevelAndGetDataType("root.vehicle.d0.s0").getDataType());
@@ -112,7 +112,7 @@ public class MManagerAdvancedTest {
mmanager.checkPathStorageLevelAndGetDataType("root.vehicle.d0.s100").getDataType());
MNode node = mmanager.getNodeByDeviceIdFromCache("root.vehicle.d0");
- Assert.assertEquals(TSDataType.INT32, node.getChild("s0").getSchema().dataType);
+ Assert.assertEquals(TSDataType.INT32, node.getChild("s0").getSchema().getType());
try {
MNode node1 = mmanager.getNodeByDeviceIdFromCache("root.vehicle.d100");
@@ -125,10 +125,10 @@ public class MManagerAdvancedTest {
@Test
public void testGetNextLevelPath()
throws PathErrorException, IOException, MetadataArgsErrorException {
- mmanager.addPathToMTree("root.vehicle.d2.s0", "DOUBLE", "RLE", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s1", "BOOLEAN", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s2.g0", "TEXT", "PLAIN", new String[0]);
- mmanager.addPathToMTree("root.vehicle.d2.s3", "TEXT", "PLAIN", new String[0]);
+ mmanager.addPathToMTree("root.vehicle.d2.s0", "DOUBLE", "RLE");
+ mmanager.addPathToMTree("root.vehicle.d2.s1", "BOOLEAN", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d2.s2.g0", "TEXT", "PLAIN");
+ mmanager.addPathToMTree("root.vehicle.d2.s3", "TEXT", "PLAIN");
List<String> paths = mmanager.getLeafNodePathInNextLevel("root.vehicle.d2");
Assert.assertEquals(3, paths.size());
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index e82e5bd..dbd619e 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -23,10 +23,15 @@ import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.apache.iotdb.db.exception.MetadataArgsErrorException;
import org.apache.iotdb.db.exception.PathErrorException;
import org.apache.iotdb.db.utils.EnvironmentUtils;
+import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
+import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
import org.junit.After;
import org.junit.Assert;
@@ -35,8 +40,11 @@ import org.junit.Test;
public class MManagerBasicTest {
+ CompressionType compressionType;
+
@Before
public void setUp() throws Exception {
+ compressionType = CompressionType.valueOf(TSFileConfig.compressor);
}
@After
@@ -68,7 +76,9 @@ public class MManagerBasicTest {
}
try {
- manager.addPathToMTree("root.laptop.d1.s0", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections
+ .emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e) {
e.printStackTrace();
fail(e.getMessage());
@@ -78,7 +88,8 @@ public class MManagerBasicTest {
assertEquals(manager.pathExist("root.laptop.d1.s0"), true);
assertEquals(manager.pathExist("root.laptop.d1.s1"), false);
try {
- manager.addPathToMTree("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s1", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
@@ -112,14 +123,16 @@ public class MManagerBasicTest {
// fail(e.getMessage());
// }
try {
- manager.addPathToMTree("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s1", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
}
try {
- manager.addPathToMTree("root.laptop.d1.s0", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
@@ -163,14 +176,16 @@ public class MManagerBasicTest {
}
try {
- manager.addPathToMTree("root.laptop.d2.s1", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d2.s1", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
}
try {
- manager.addPathToMTree("root.laptop.d2.s0", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d2.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
@@ -190,14 +205,16 @@ public class MManagerBasicTest {
}
try {
- manager.addPathToMTree("root.laptop.d1.s0", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s0", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
}
try {
- manager.addPathToMTree("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s1", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
@@ -213,7 +230,8 @@ public class MManagerBasicTest {
}
try {
- manager.addPathToMTree("root.laptop.d1.s2", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s2", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
@@ -228,7 +246,8 @@ public class MManagerBasicTest {
}
try {
- manager.addPathToMTree("root.laptop.d1.s3", "INT32", "RLE", new String[0]);
+ manager.addPathToMTree("root.laptop.d1.s3", TSDataType.valueOf("INT32"),
+ TSEncoding.valueOf("RLE"), compressionType, Collections.emptyMap());
} catch (PathErrorException | MetadataArgsErrorException | IOException e1) {
e1.printStackTrace();
fail(e1.getMessage());
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerEfficiencyTest.java b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerEfficiencyTest.java
index 7cb52ef..f04a43f 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerEfficiencyTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerEfficiencyTest.java
@@ -39,7 +39,6 @@ public class MManagerEfficiencyTest {
String[] storageGroup = new String[storageGroupCount];
String[] devices = new String[deviceCount];
String[] sensors = new String[sensorCount];
- String args[] = new String[0];
String[] paths;
private MManager manager;
@@ -136,7 +135,7 @@ public class MManagerEfficiencyTest {
for (String sensor : sensors) {
String path = new StringBuilder(root).append(".").append(group).append(".").append(device)
.append(".").append(sensor).toString();
- manager.addPathToMTree(path, dataType, encoding, args);
+ manager.addPathToMTree(path, dataType, encoding);
}
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
index 721c1ce..999dce5 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MManagerImproveTest.java
@@ -48,7 +48,7 @@ public class MManagerImproveTest {
for (int i = 0; i < TIMESERIES_NUM; i++) {
String p = new StringBuilder().append("root.t1.v2.d").append(j).append(".s").append(i)
.toString();
- mManager.addPathToMTree(p, "TEXT", "RLE", new String[0]);
+ mManager.addPathToMTree(p, "TEXT", "RLE");
}
}
@@ -215,7 +215,7 @@ public class MManagerImproveTest {
assertEquals(true, node.hasChild(measurementList.get(i)));
MNode measurementNode = node.getChild(measurementList.get(i));
assertEquals(true, measurementNode.isLeaf());
- TSDataType dataType = measurementNode.getSchema().dataType;
+ TSDataType dataType = measurementNode.getSchema().getType();
assertEquals(TSDataType.TEXT, dataType);
}
}
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
index 1888cd4..fdd6f47 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/metadata/MTreeTest.java
@@ -46,13 +46,13 @@ public class MTreeTest {
public void testAddLeftNodePath() {
MTree root = new MTree("root");
try {
- root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE");
} catch (PathErrorException e) {
e.printStackTrace();
fail(e.getMessage());
}
try {
- root.addTimeseriesPath("root.laptop.d1.s1.b", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d1.s1.b", "INT32", "RLE");
} catch (PathErrorException e) {
Assert.assertEquals(
String.format("The Node [%s] is left node, the timeseries %s can't be created", "s1",
@@ -67,7 +67,7 @@ public class MTreeTest {
assertEquals(root.isPathExist(path1), true);
assertEquals(root.isPathExist("root.laptop.d1"), false);
try {
- root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE");
} catch (PathErrorException e1) {
fail(e1.getMessage());
}
@@ -75,7 +75,7 @@ public class MTreeTest {
assertEquals(root.isPathExist("root.laptop"), true);
assertEquals(root.isPathExist("root.laptop.d1.s2"), false);
try {
- root.addTimeseriesPath("aa.bb.cc", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("aa.bb.cc", "INT32", "RLE");
} catch (PathErrorException e) {
Assert.assertEquals(String.format("Timeseries %s is not right.", "aa.bb.cc"), e.getMessage());
}
@@ -88,17 +88,17 @@ public class MTreeTest {
assertEquals(false, root.isPathExist("root.a.d0"));
assertEquals(false, root.checkFileNameByPath("root.a.d0"));
root.setStorageGroup("root.a.d0");
- root.addTimeseriesPath("root.a.d0.s0", "INT32", "RLE", new String[0]);
- root.addTimeseriesPath("root.a.d0.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.a.d0.s0", "INT32", "RLE");
+ root.addTimeseriesPath("root.a.d0.s1", "INT32", "RLE");
assertEquals(false, root.isPathExist("root.a.d1"));
assertEquals(false, root.checkFileNameByPath("root.a.d1"));
root.setStorageGroup("root.a.d1");
- root.addTimeseriesPath("root.a.d1.s0", "INT32", "RLE", new String[0]);
- root.addTimeseriesPath("root.a.d1.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.a.d1.s0", "INT32", "RLE");
+ root.addTimeseriesPath("root.a.d1.s1", "INT32", "RLE");
root.setStorageGroup("root.a.b.d0");
- root.addTimeseriesPath("root.a.b.d0.s0", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.a.b.d0.s0", "INT32", "RLE");
} catch (PathErrorException e1) {
e1.printStackTrace();
@@ -159,13 +159,13 @@ public class MTreeTest {
try {
assertEquals("root.laptop.d1", root.getFileNameByPath("root.laptop.d1.s0"));
- root.addTimeseriesPath("root.laptop.d1.s0", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d1.s0", "INT32", "RLE");
assertEquals("root.laptop.d1", root.getFileNameByPath("root.laptop.d1.s1"));
- root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d1.s1", "INT32", "RLE");
assertEquals("root.laptop.d2", root.getFileNameByPath("root.laptop.d2.s0"));
- root.addTimeseriesPath("root.laptop.d2.s0", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d2.s0", "INT32", "RLE");
assertEquals("root.laptop.d2", root.getFileNameByPath("root.laptop.d2.s1"));
- root.addTimeseriesPath("root.laptop.d2.s1", "INT32", "RLE", new String[0]);
+ root.addTimeseriesPath("root.laptop.d2.s1", "INT32", "RLE");
} catch (PathErrorException e) {
e.printStackTrace();
fail(e.getMessage());
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java b/iotdb/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
index c21bed2..e3b81c4 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/writelog/PerformanceTest.java
@@ -141,17 +141,15 @@ public class PerformanceTest {
}
MManager.getInstance().addPathToMTree("root.logTestDevice.s1",
TSDataType.DOUBLE.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance()
.addPathToMTree("root.logTestDevice.s2", TSDataType.INT32.name(),
- TSEncoding.PLAIN.name(),
- new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance()
.addPathToMTree("root.logTestDevice.s3", TSDataType.TEXT.name(),
- TSEncoding.PLAIN.name(),
- new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance().addPathToMTree("root.logTestDevice.s4", TSDataType.BOOLEAN.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
WriteLogNode logNode = new ExclusiveWriteLogNode("root.logTestDevice",
tempRestore.getPath(),
tempProcessorStore.getPath());
diff --git a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
index 448ef2c..b6fa93e 100644
--- a/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
+++ b/iotdb/src/test/java/org/apache/iotdb/db/writelog/WriteLogNodeManagerTest.java
@@ -109,13 +109,13 @@ public class WriteLogNodeManagerTest {
try {
MManager.getInstance().setStorageLevelToMTree(deviceName);
MManager.getInstance().addPathToMTree(deviceName + ".s1", TSDataType.DOUBLE.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance().addPathToMTree(deviceName + ".s2", TSDataType.INT32.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance().addPathToMTree(deviceName + ".s3", TSDataType.TEXT.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
MManager.getInstance().addPathToMTree(deviceName + ".s4", TSDataType.BOOLEAN.name(),
- TSEncoding.PLAIN.name(), new String[]{});
+ TSEncoding.PLAIN.name());
} catch (PathErrorException ignored) {
}
WriteLogNode logNode = manager
diff --git a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java
index fbd45b5..1f5ac25 100644
--- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java
+++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBDatabaseMetadataTest.java
@@ -291,15 +291,15 @@ public class IoTDBDatabaseMetadataTest {
"=== Timeseries Tree ===\n" + "\n" + "root:{\n" + " vehicle:{\n" + " d0:{\n"
+ " s0:{\n" + " DataType: INT32,\n"
+ " Encoding: RLE,\n"
- + " args: {},\n" + " StorageGroup: root.vehicle \n"
+ + " args: {},\n" + " StorageGroup: root.vehicle\n"
+ " },\n"
+ " s1:{\n" + " DataType: INT64,\n"
+ " Encoding: RLE,\n"
- + " args: {},\n" + " StorageGroup: root.vehicle \n"
+ + " args: {},\n" + " StorageGroup: root.vehicle\n"
+ " },\n"
+ " s2:{\n" + " DataType: FLOAT,\n"
+ " Encoding: RLE,\n"
- + " args: {},\n" + " StorageGroup: root.vehicle \n"
+ + " args: {},\n" + " StorageGroup: root.vehicle\n"
+ " }\n"
+ " }\n" + " }\n" + "}";
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/compress/ICompressor.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/compress/ICompressor.java
index 0b04a8d..d54580d 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/compress/ICompressor.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/compress/ICompressor.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.tsfile.compress;
import java.io.IOException;
+import java.io.Serializable;
import java.nio.ByteBuffer;
import org.apache.iotdb.tsfile.exception.compress.CompressionTypeNotSupportedException;
import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
@@ -27,8 +28,9 @@ import org.xerial.snappy.Snappy;
/**
* compress data according to type in schema.
+ * TODO we need to modify MManger.flush method to avoid add Serializable interface
*/
-public interface ICompressor {
+public interface ICompressor extends Serializable {
static ICompressor getCompressor(String name) {
return getCompressor(CompressionType.valueOf(name));
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/TSEncodingBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/TSEncodingBuilder.java
index 5154050..c8169c1 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/TSEncodingBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/encoding/encoder/TSEncodingBuilder.java
@@ -68,7 +68,7 @@ public abstract class TSEncodingBuilder {
}
/**
- * return a series's encoder with different types and parameters according to its measurement id
+ * return a thread safe series's encoder with different types and parameters according to its measurement id
* and data type.
*
* @param type - given data type
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotImplementedException.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotImplementedException.java
new file mode 100644
index 0000000..eb3e019
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/exception/NotImplementedException.java
@@ -0,0 +1,40 @@
+/**
+ * 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.exception;
+
+public class NotImplementedException extends RuntimeException {
+
+ private static final long serialVersionUID = 6455048223316780984L;
+
+ public NotImplementedException() {
+ super();
+ }
+
+ public NotImplementedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public NotImplementedException(String message) {
+ super(message);
+ }
+
+ public NotImplementedException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/UnClosedTsFileReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/UnClosedTsFileReader.java
index 99f010b..ad029f4 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/UnClosedTsFileReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/UnClosedTsFileReader.java
@@ -22,8 +22,7 @@ import java.io.IOException;
import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadata;
import org.apache.iotdb.tsfile.file.metadata.TsDeviceMetadataIndex;
import org.apache.iotdb.tsfile.file.metadata.TsFileMetaData;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
-
+import org.apache.iotdb.tsfile.exception.NotImplementedException;
/**
* A class for reading unclosed tsfile.
*/
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
index 9fef1db..8b0a5f8 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkBuffer.java
@@ -63,7 +63,7 @@ public class ChunkBuffer {
*/
public ChunkBuffer(MeasurementSchema schema) {
this.schema = schema;
- this.compressor = schema.getCompressor();
+ this.compressor = ICompressor.getCompressor(schema.getCompressor());
this.pageBuffer = new PublicBAOS();
}
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/datapoint/DataPoint.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/datapoint/DataPoint.java
index 83b7f2a..dc13faf 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/datapoint/DataPoint.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/record/datapoint/DataPoint.java
@@ -65,28 +65,34 @@ public abstract class DataPoint {
*/
public static DataPoint getDataPoint(TSDataType dataType, String measurementId, String value) {
DataPoint dataPoint = null;
- switch (dataType) {
- case INT32:
- dataPoint = new IntDataPoint(measurementId, Integer.valueOf(value));
- break;
- case INT64:
- dataPoint = new LongDataPoint(measurementId, Long.valueOf(value));
- break;
- case FLOAT:
- dataPoint = new FloatDataPoint(measurementId, Float.valueOf(value));
- break;
- case DOUBLE:
- dataPoint = new DoubleDataPoint(measurementId, Double.valueOf(value));
- break;
- case BOOLEAN:
- dataPoint = new BooleanDataPoint(measurementId, Boolean.valueOf(value));
- break;
- case TEXT:
- dataPoint = new StringDataPoint(measurementId, new Binary(value));
- break;
- default:
- throw new UnSupportedDataTypeException("This data type is not supoort -" + dataType);
+ try {
+ switch (dataType) {
+ case INT32:
+ dataPoint = new IntDataPoint(measurementId, Integer.valueOf(value));
+ break;
+ case INT64:
+ dataPoint = new LongDataPoint(measurementId, Long.valueOf(value));
+ break;
+ case FLOAT:
+ dataPoint = new FloatDataPoint(measurementId, Float.valueOf(value));
+ break;
+ case DOUBLE:
+ dataPoint = new DoubleDataPoint(measurementId, Double.valueOf(value));
+ break;
+ case BOOLEAN:
+ dataPoint = new BooleanDataPoint(measurementId, Boolean.valueOf(value));
+ break;
+ case TEXT:
+ dataPoint = new StringDataPoint(measurementId, new Binary(value));
+ break;
+ default:
+ throw new UnSupportedDataTypeException(String.format("Data type %s is not supported.", dataType));
+ }
+ } catch (Exception e){
+ throw new UnSupportedDataTypeException(String.format("Data type of %s is %s, but input value is %s", measurementId,
+ dataType, value));
}
+
return dataPoint;
}
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 a65a434..9ae7c83 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
@@ -21,6 +21,7 @@ package org.apache.iotdb.tsfile.write.schema;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.HashMap;
@@ -47,14 +48,15 @@ import org.apache.iotdb.tsfile.utils.StringContainer;
* @author kangrong
* @since version 0.1.0
*/
-public class MeasurementSchema implements Comparable<MeasurementSchema> {
+public class MeasurementSchema implements Comparable<MeasurementSchema>, Serializable {
private TSDataType type;
private TSEncoding encoding;
private String measurementId;
+ //TODO serializable interface may serialize this field. So it is time to
+ // improve how to serialize MGraph in MManager.
private TSEncodingBuilder encodingConverter;
- private ICompressor compressor;
- private TSFileConfig conf;
+ private CompressionType compressor;
private Map<String, String> props = new HashMap<>();
public MeasurementSchema() {
@@ -86,12 +88,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
this.measurementId = measurementId;
this.encoding = encoding;
this.props = props == null ? Collections.emptyMap() : props;
- // get config from TSFileDescriptor
- this.conf = TSFileDescriptor.getInstance().getConfig();
- // initialize TSEncoding. e.g. set max error for PLA and SDT
- encodingConverter = TSEncodingBuilder.getConverter(encoding);
- encodingConverter.initFromProps(props);
- this.compressor = ICompressor.getCompressor(compressionType);
+ this.compressor = compressionType;
}
/**
@@ -106,8 +103,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
measurementSchema.encoding = ReadWriteIOUtils.readEncoding(inputStream);
- CompressionType compressionType = ReadWriteIOUtils.readCompressionType(inputStream);
- measurementSchema.compressor = ICompressor.getCompressor(compressionType);
+ measurementSchema.compressor = ReadWriteIOUtils.readCompressionType(inputStream);
int size = ReadWriteIOUtils.readInt(inputStream);
if (size > 0) {
@@ -136,8 +132,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
measurementSchema.encoding = ReadWriteIOUtils.readEncoding(buffer);
- CompressionType compressionType = ReadWriteIOUtils.readCompressionType(buffer);
- measurementSchema.compressor = ICompressor.getCompressor(compressionType);
+ measurementSchema.compressor = ReadWriteIOUtils.readCompressionType(buffer);
int size = ReadWriteIOUtils.readInt(buffer);
if (size > 0) {
@@ -174,6 +169,10 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
return type;
}
+ public void setProps(Map<String, String> props) {
+ this.props = props;
+ }
+
/**
* return the max possible length of given type.
*
@@ -202,6 +201,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
/**
* function for getting time encoder.
+ * TODO can I be optimized?
*/
public Encoder getTimeEncoder() {
TSEncoding timeSeriesEncoder = TSEncoding.valueOf(TSFileConfig.timeSeriesEncoder);
@@ -211,14 +211,20 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
/**
* get Encoder of value from encodingConverter by measurementID and data type.
- *
+ * TODO can I be optimized?
* @return Encoder for value
*/
public Encoder getValueEncoder() {
+ //it is ok even if encodingConverter is constructed two instances for concurrent scenario..
+ if (encodingConverter == null) {
+ // initialize TSEncoding. e.g. set max error for PLA and SDT
+ encodingConverter = TSEncodingBuilder.getConverter(encoding);
+ encodingConverter.initFromProps(props);
+ }
return encodingConverter.getEncoder(type);
}
- public ICompressor getCompressor() {
+ public CompressionType getCompressor() {
return compressor;
}
@@ -234,7 +240,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
byteLen += ReadWriteIOUtils.write(encoding, outputStream);
- byteLen += ReadWriteIOUtils.write(compressor.getType(), outputStream);
+ byteLen += ReadWriteIOUtils.write(compressor, outputStream);
if (props == null) {
byteLen += ReadWriteIOUtils.write(0, outputStream);
@@ -261,7 +267,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
byteLen += ReadWriteIOUtils.write(encoding, buffer);
- byteLen += ReadWriteIOUtils.write(compressor.getType(), buffer);
+ byteLen += ReadWriteIOUtils.write(compressor, buffer);
if (props == null) {
byteLen += ReadWriteIOUtils.write(0, buffer);
@@ -288,13 +294,12 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
return type == that.type && encoding == that.encoding && Objects
.equals(measurementId, that.measurementId)
&& Objects.equals(encodingConverter, that.encodingConverter)
- && Objects.equals(compressor, that.compressor) && Objects.equals(conf, that.conf)
- && Objects.equals(props, that.props);
+ && Objects.equals(compressor, that.compressor) && Objects.equals(props, that.props);
}
@Override
public int hashCode() {
- return Objects.hash(type, encoding, measurementId, encodingConverter, compressor, conf, props);
+ return Objects.hash(type, encoding, measurementId, encodingConverter, compressor, props);
}
/**
@@ -314,7 +319,7 @@ public class MeasurementSchema implements Comparable<MeasurementSchema> {
StringContainer sc = new StringContainer("");
sc.addTail("[", measurementId, ",", type.toString(), ",", encoding.toString(), ",",
props.toString(), ",",
- compressor.getType().toString());
+ compressor.toString());
sc.addTail("]");
return sc.toString();
}
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
index 6894702..8c6cf00 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileIOWriterTest.java
@@ -57,7 +57,7 @@ public class TsFileIOWriterTest {
// chunk group 1
writer.startFlushChunkGroup(deviceId);
- writer.startFlushChunk(measurementSchema, measurementSchema.getCompressor().getType(),
+ writer.startFlushChunk(measurementSchema, measurementSchema.getCompressor(),
measurementSchema.getType(), measurementSchema.getEncodingType(), statistics, 0, 0, 0, 0);
writer.endChunk(0);
ChunkGroupFooter footer = new ChunkGroupFooter(deviceId, 0, 1);