You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2020/02/28 06:57:13 UTC

[incubator-iotdb] branch new_TsFile created (now 544453d)

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

haonan pushed a change to branch new_TsFile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git.


      at 544453d  new TsFile

This branch includes the following new commits:

     new affde79  fix deviceMNode bugs
     new 92094bd  Merge branch 'master' of https://github.com/apache/incubator-iotdb into new_tsFile_v2
     new 3c7ea7b  fix bugs
     new 544453d  new TsFile

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[incubator-iotdb] 04/04: new TsFile

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch new_TsFile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 544453d77af0303f40f634c21c73e591bcd8a6d1
Merge: 3c7ea7b d6ae1c3
Author: HTHou <hh...@outlook.com>
AuthorDate: Fri Feb 28 14:51:07 2020 +0800

    new TsFile

 README.md                                          |  2 +-
 client-py/src/client_example.py                    | 33 +++++------
 .../SystemDesign/5-DataQuery/2-SeriesReader.md     |  2 +-
 .../UserGuide/0-Get Started/1-QuickStart.md        |  2 +-
 .../UserGuide/4-Client/6-Status Codes.md           | 65 +++++++++++++++++++++
 .../2-DML (Data Manipulation Language).md          | 23 +++++++-
 .../5-Operation Manual/4-SQL Reference.md          | 25 ++++----
 docs/Documentation/UserGuide/0-Content.md          |  1 +
 .../UserGuide/0-Get Started/1-QuickStart.md        |  9 ++-
 .../UserGuide/4-Client/6-Status Codes.md           | 66 ++++++++++++++++++++++
 .../2-DML (Data Manipulation Language).md          | 19 ++++++-
 .../5-Operation Manual/4-SQL Reference.md          | 12 ++--
 .../main/java/org/apache/iotdb/JDBCExample.java    |  2 +-
 .../org/apache/iotdb/jdbc/IoTDBConnection.java     | 27 +++++----
 .../org/apache/iotdb/jdbc/IoTDBResultMetadata.java |  7 +--
 .../apache/iotdb/jdbc/IoTDBResultMetadataTest.java | 30 +++++-----
 .../org/apache/iotdb/db/qp/strategy/SqlBase.g4     | 33 ++---------
 .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java | 33 +++++++----
 .../apache/iotdb/db/engine/cache/ChunkCache.java   | 37 +++++++-----
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  2 +-
 .../iotdb/db/engine/merge/task/MergeTask.java      |  3 +-
 .../engine/storagegroup/StorageGroupProcessor.java | 37 +++++++-----
 .../org/apache/iotdb/db/metadata/MManager.java     |  2 +-
 .../java/org/apache/iotdb/db/metadata/MTree.java   | 64 +++++++++++++++++----
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  9 ++-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    | 13 +----
 .../db/query/aggregation/impl/AvgAggrResult.java   |  6 ++
 .../db/query/aggregation/impl/CountAggrResult.java |  2 +-
 .../iotdb/db/query/control/FileReaderManager.java  | 34 +++++++----
 .../iotdb/db/query/control/QueryFileManager.java   | 17 +++---
 .../dataset/RawQueryDataSetWithoutValueFilter.java | 13 +++--
 .../iotdb/db/query/reader/series/SeriesReader.java |  8 +--
 .../reader/universal/PriorityMergeReader.java      | 26 +++++++--
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 19 ++++++-
 .../java/org/apache/iotdb/db/utils/MemUtils.java   | 21 ++++---
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |  3 +-
 .../integration/IOTDBGroupByInnerIntervalIT.java   |  4 +-
 .../iotdb/db/integration/IoTDBAggregationIT.java   |  8 +--
 .../integration/IoTDBAggregationSmallDataIT.java   |  2 +-
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java |  4 +-
 .../integration/IoTDBLoadExternalTsfileTest.java   |  2 +-
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |  4 +-
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  4 ++
 .../iotdb/db/integration/IoTDBSimpleQueryTest.java | 59 +++++++++++++++++++
 .../iotdb/db/metadata/MManagerAdvancedTest.java    | 14 +++--
 .../iotdb/db/metadata/MManagerBasicTest.java       | 57 ++++++++++++++++++-
 .../java/org/apache/iotdb/db/qp/PlannerTest.java   | 16 ++++--
 .../db/query/aggregation/AggregateResultTest.java  |  2 +
 .../main/java/org/apache/iotdb/rpc/RpcUtils.java   |  2 +-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |  4 +-
 service-rpc/src/main/thrift/rpc.thrift             |  3 +-
 .../java/org/apache/iotdb/session/Session.java     | 14 +++--
 .../org/apache/iotdb/spark/db/Converter.scala      | 37 ++++++------
 .../org/apache/iotdb/spark/db/DefaultSource.scala  | 37 ++++++------
 .../org/apache/iotdb/spark/db/IoTDBOptions.scala   | 37 ++++++------
 .../scala/org/apache/iotdb/spark/db/IoTDBRDD.scala | 37 ++++++------
 .../org/apache/iotdb/spark/db/IoTDBRelation.scala  | 37 ++++++------
 .../org/apache/iotdb/spark/db/Transformer.scala    | 37 ++++++------
 .../scala/org/apache/iotdb/spark/db/package.scala  | 37 ++++++------
 .../org/apache/iotdb/spark/db/IoTDBTest.scala      | 37 ++++++------
 .../org/apache/iotdb/spark/tsfile/Converter.scala  | 37 ++++++------
 .../apache/iotdb/spark/tsfile/DefaultSource.scala  | 36 ++++++------
 .../iotdb/spark/tsfile/NarrowConverter.scala       | 37 ++++++------
 .../spark/tsfile/NarrowTsFileOutputWriter.scala    | 37 ++++++------
 .../apache/iotdb/spark/tsfile/Transformer.scala    | 37 ++++++------
 .../iotdb/spark/tsfile/TsFileWriterFactory.scala   | 36 ++++++------
 .../apache/iotdb/spark/tsfile/WideConverter.scala  | 37 ++++++------
 .../spark/tsfile/WideTsFileOutputWriter.scala      | 37 ++++++------
 .../org/apache/iotdb/spark/tsfile/package.scala    | 36 ++++++------
 .../apache/iotdb/spark/tsfile/ConverterTest.scala  | 37 ++++++------
 .../org/apache/iotdb/spark/tsfile/TSFileSuit.scala | 37 ++++++------
 .../iotdb/tsfile/read/TsFileSequenceReader.java    | 27 ++++-----
 .../tsfile/read/query/dataset/EmptyDataSet.java    | 39 +++++++++++++
 .../read/query/timegenerator/node/AndNode.java     | 14 ++++-
 .../read/query/timegenerator/node/LeafNode.java    | 11 ++--
 .../tsfile/read/reader/DefaultTsFileInput.java     |  2 +-
 .../tsfile/read/query/timegenerator/NodeTest.java  | 66 +++++-----------------
 .../iotdb/tsfile/read/reader/FakedBatchReader.java | 55 ++++++++++++++++++
 78 files changed, 1172 insertions(+), 648 deletions(-)

diff --cc server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
index b84b393,533bd9f..c17783f
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeTask.java
@@@ -23,10 -23,7 +23,11 @@@ import java.io.File
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Collections;
 +import java.util.HashMap;
  import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
++import java.util.Set;
  import java.util.concurrent.Callable;
  import org.apache.iotdb.db.engine.merge.manage.MergeContext;
  import org.apache.iotdb.db.engine.merge.manage.MergeResource;
@@@ -113,15 -110,9 +114,15 @@@ public class MergeTask implements Calla
  
      mergeLogger.logFiles(resource);
  
-     List<String> devices = MManager.getInstance().getDevices(storageGroupName);
 -    List<MeasurementSchema> measurementSchemas = MManager.getInstance()
 -        .getStorageGroupSchema(storageGroupName);
 -    resource.addMeasurements(measurementSchemas);
++    Set<String> devices = MManager.getInstance().getDevices(storageGroupName);
 +    Map<Path, MeasurementSchema> measurementSchemaMap = new HashMap<>();
 +    for (String device : devices) {
 +      Map<String, MeasurementSchema> schema = MManager.getInstance().getDeviceSchemaMap(device);
 +      for (Entry<String, MeasurementSchema> entry : schema.entrySet()) {
 +        measurementSchemaMap.put(new Path(device, entry.getKey()), entry.getValue());
 +      }
 +    }
 +    resource.setMeasurementSchemaMap(measurementSchemaMap);
  
      List<String> storageGroupPaths = MManager.getInstance().getAllTimeseriesName(storageGroupName + ".*");
      List<Path> unmergedSeries = new ArrayList<>();
diff --cc server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index 090590d,9a07c20..b8f8fd7
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@@ -538,15 -505,18 +540,18 @@@ public class MTree implements Serializa
        return;
      }
      String nodeReg = MetaUtils.getNodeRegByIdx(idx, nodes);
-     if (!(PATH_WILDCARD).equals(nodeReg)) {
+     if (!nodeReg.contains(PATH_WILDCARD)) {
        if (node.hasChild(nodeReg)) {
          findPath(node.getChild(nodeReg), nodes, idx + 1, parent + node.getName() + PATH_SEPARATOR,
 -            timeseriesSchemaList);
 +            MeasurementSchemaList);
        }
      } else {
        for (MNode child : node.getChildren().values()) {
+         if (!Pattern.matches(nodeReg.replace("*", ".*"), child.getName())) {
+           continue;
+         }
          findPath(child, nodes, idx + 1, parent + node.getName() + PATH_SEPARATOR,
 -            timeseriesSchemaList);
 +            MeasurementSchemaList);
        }
      }
    }
diff --cc server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
index 388dc13,c18ce58..21c99f6
--- a/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java
@@@ -18,14 -18,9 +18,15 @@@
   */
  package org.apache.iotdb.db.utils;
  
 +import java.util.HashMap;
  import java.util.List;
 +import java.util.Map;
 +import java.util.Map.Entry;
++import java.util.Set;
 +
  import org.apache.iotdb.db.exception.metadata.MetadataException;
  import org.apache.iotdb.db.metadata.MManager;
 +import org.apache.iotdb.tsfile.read.common.Path;
  import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
  import org.apache.iotdb.tsfile.write.schema.Schema;
  
@@@ -42,15 -37,9 +43,15 @@@ public class SchemaUtils 
     * @return the schema of the FileNode named processorName.
     */
    public static Schema constructSchema(String processorName) throws MetadataException {
-     List<String> devices = MManager.getInstance().getDevices(processorName);
 -    List<MeasurementSchema> columnSchemaList;
 -    columnSchemaList = MManager.getInstance().getStorageGroupSchema(processorName);
 -    return getSchemaFromColumnSchema(columnSchemaList);
++    Set<String> devices = MManager.getInstance().getDevices(processorName);
 +    Map<Path, MeasurementSchema> measurementSchemaMap = new HashMap<>();
 +    for (String device : devices) {
 +      Map<String, MeasurementSchema> schema = MManager.getInstance().getDeviceSchemaMap(device);
 +      for (Entry<String, MeasurementSchema> entry : schema.entrySet()) {
 +        measurementSchemaMap.put(new Path(device, entry.getKey()), entry.getValue());
 +      }
 +    }
 +    return getSchemaFromColumnSchema(measurementSchemaMap);
    }
  
    /**
diff --cc tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index a81a0b9,6fd2e43..8a3e96d
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@@ -53,6 -40,17 +41,19 @@@ import org.apache.iotdb.tsfile.write.sc
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
+ import java.io.File;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.util.ArrayList;
+ import java.util.Comparator;
++import java.util.HashMap;
++import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.concurrent.ConcurrentHashMap;
+ 
+ import static org.apache.iotdb.tsfile.write.writer.TsFileIOWriter.magicStringBytes;
+ 
  public class TsFileSequenceReader implements AutoCloseable {
  
    private static final Logger logger = LoggerFactory.getLogger(TsFileSequenceReader.class);


[incubator-iotdb] 01/04: fix deviceMNode bugs

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch new_TsFile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit affde792555bb8145acacf9841f90eddad325a90
Author: HTHou <hh...@outlook.com>
AuthorDate: Wed Feb 26 01:12:09 2020 +0800

    fix deviceMNode bugs
---
 .../iotdb/tsfile/TsFileWriteWithTSRecord.java      |  2 +-
 .../db/engine/merge/task/MergeMultiChunkTask.java  |  4 +-
 .../org/apache/iotdb/db/metadata/MManager.java     |  2 +-
 .../java/org/apache/iotdb/db/metadata/MTree.java   |  6 +++
 .../iotdb/db/metadata/mnode/DeviceMNode.java       |  4 ++
 .../iotdb/db/engine/MetadataManagerHelper.java     |  4 +-
 .../iotdb/db/engine/merge/MergeOverLapTest.java    |  4 +-
 .../iotdb/db/engine/merge/MergeUpgradeTest.java    | 12 ++---
 .../storagegroup/StorageGroupProcessorTest.java    |  2 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |  1 +
 .../iotdb/db/integration/IOTDBGroupByIT.java       |  2 +-
 .../iotdb/db/integration/IoTDBAggregationIT.java   |  2 +-
 .../iotdb/db/integration/IoTDBAuthorizationIT.java | 52 +++++++++++-----------
 .../iotdb/db/integration/IoTDBMergeTest.java       |  9 ++--
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java | 22 ++++-----
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  4 +-
 .../iotdb/db/integration/IoTDBRecoverIT.java       |  5 +--
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  2 +-
 .../iotdb/db/integration/IoTDBVersionIT.java       |  6 +--
 .../iotdb/db/metadata/MManagerBasicTest.java       | 20 ++++-----
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  1 +
 .../java/org/apache/iotdb/session/Session.java     | 12 ++---
 .../iotdb/tsfile/read/TsFileSequenceReader.java    | 10 ++---
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |  4 +-
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  | 30 ++++++-------
 .../apache/iotdb/tsfile/write/page/PageWriter.java |  8 ++--
 .../apache/iotdb/tsfile/write/schema/Schema.java   | 24 +++++-----
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |  8 ++--
 .../file/metadata/TimeSeriesMetadataTest.java      |  6 +--
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |  6 +--
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     | 12 ++---
 31 files changed, 148 insertions(+), 138 deletions(-)

diff --git a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTSRecord.java b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTSRecord.java
index b01ede3..724abfa 100644
--- a/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTSRecord.java
+++ b/example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteWithTSRecord.java
@@ -34,7 +34,7 @@ import java.io.File;
 /**
  * An example of writing data with TSRecord to TsFile
  * It uses the interface:
- * public void addMeasurement(MeasurementSchema MeasurementSchema) throws WriteProcessException
+ * public void addMeasurement(MeasurementSchema measurementSchema) throws WriteProcessException
  */
 public class TsFileWriteWithTSRecord {
 
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeMultiChunkTask.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeMultiChunkTask.java
index abffb30..1be2e9e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeMultiChunkTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeMultiChunkTask.java
@@ -275,8 +275,8 @@ class MergeMultiChunkTask {
       int pathIdx = metaListEntry.getPathId();
       boolean isLastChunk = !metaListEntry.hasNext();
       Path path = currMergingPaths.get(pathIdx);
-      MeasurementSchema MeasurementSchema = resource.getSchema(path);
-      IChunkWriter chunkWriter = resource.getChunkWriter(MeasurementSchema);
+      MeasurementSchema measurementSchema = resource.getSchema(path);
+      IChunkWriter chunkWriter = resource.getChunkWriter(measurementSchema);
 
       boolean chunkOverflowed = MergeUtils.isChunkOverflowed(currTimeValuePairs[pathIdx], currMeta);
       boolean chunkTooSmall = MergeUtils
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
index ff3e07c..7f03d44 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MManager.java
@@ -300,7 +300,7 @@ public class MManager {
       createTimeseriesWithMemoryCheckAndLog(path, dataType, encoding, compressor, props);
       // register schema in this device
       if (isNewMeasurement) {
-        schemaMap.put(measurement,
+        mtree.addSchemaToDevice(device,
             new MeasurementSchema(measurement, dataType, encoding, compressor, props));
       }
       // update statistics
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
index e27f6e0..090590d 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MTree.java
@@ -657,6 +657,12 @@ public class MTree implements Serializable {
     }
   }
 
+
+  void addSchemaToDevice(String device, MeasurementSchema schema) throws MetadataException {
+    DeviceMNode deviceMNode = getDeviceNode(device);
+    deviceMNode.addMeasurementSchema(schema);
+  }
+
   /**
    * Get all ColumnSchemas for the device path.
    *
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/DeviceMNode.java b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/DeviceMNode.java
index 6e98089..c8291c0 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mnode/DeviceMNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mnode/DeviceMNode.java
@@ -43,4 +43,8 @@ public class DeviceMNode extends InternalMNode {
     this.schemaMap.put(child.getName(), child.getSchema());
   }
 
+  public void addMeasurementSchema(MeasurementSchema schema) {
+    this.schemaMap.put(schema.getMeasurementId(), schema);
+  }
+
 }
\ No newline at end of file
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java b/server/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
index 76c0bb9..3554525 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/MetadataManagerHelper.java
@@ -32,9 +32,7 @@ public class MetadataManagerHelper {
     mmanager.init();
     mmanager.clear();
     try {
-      mmanager.setStorageGroup("root.vehicle.d0");
-      mmanager.setStorageGroup("root.vehicle.d1");
-      mmanager.setStorageGroup("root.vehicle.d2");
+      mmanager.setStorageGroup("root.vehicle");
 
       CompressionType compressionType = TSFileDescriptor.getInstance().getConfig().getCompressor();
 
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
index a384680..047b9e6 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeOverLapTest.java
@@ -112,9 +112,9 @@ public class MergeOverLapTest extends MergeTest {
       throws IOException, WriteProcessException {
     TsFileWriter fileWriter = new TsFileWriter(tsFileResource.getFile());
     for (String deviceId : deviceIds) {
-      for (MeasurementSchema MeasurementSchema : measurementSchemas) {
+      for (MeasurementSchema measurementSchema : measurementSchemas) {
         fileWriter.addTimeseries(
-            new Path(deviceId, MeasurementSchema.getMeasurementId()), MeasurementSchema);
+            new Path(deviceId, measurementSchema.getMeasurementId()), measurementSchema);
       }
     }
     for (long i = timeOffset; i < timeOffset + ptNum; i++) {
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeUpgradeTest.java b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeUpgradeTest.java
index e48f22e..e79bb0f 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeUpgradeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/merge/MergeUpgradeTest.java
@@ -54,7 +54,7 @@ public class MergeUpgradeTest {
 
   private int seqFileNum = 2;
   private TSEncoding encoding = TSEncoding.RLE;
-  private MeasurementSchema[] MeasurementSchemas;
+  private MeasurementSchema[] measurementSchemas;
   private int timeseriesNum = 5;
   private long ptNum = 10;
   private boolean changeVersion = true;
@@ -105,9 +105,9 @@ public class MergeUpgradeTest {
   }
 
   private void prepareSeries() {
-    MeasurementSchemas = new MeasurementSchema[timeseriesNum];
+    measurementSchemas = new MeasurementSchema[timeseriesNum];
     for (int i = 0; i < timeseriesNum; i++) {
-      MeasurementSchemas[i] = new MeasurementSchema("sensor" + i, TSDataType.DOUBLE,
+      measurementSchemas[i] = new MeasurementSchema("sensor" + i, TSDataType.DOUBLE,
           encoding, CompressionType.UNCOMPRESSED);
     }
   }
@@ -145,14 +145,14 @@ public class MergeUpgradeTest {
 
   private void prepareData(TsFileResource tsFileResource, TsFileWriter fileWriter, long timeOffset,
       long ptNum, long valueOffset) throws WriteProcessException, IOException {
-    for (MeasurementSchema MeasurementSchema : MeasurementSchemas) {
+    for (MeasurementSchema MeasurementSchema : measurementSchemas) {
       fileWriter.addTimeseries(new Path(deviceName, MeasurementSchema.getMeasurementId()), MeasurementSchema);
     }
     for (long i = timeOffset; i < timeOffset + ptNum; i++) {
       TSRecord record = new TSRecord(i, deviceName);
       for (int k = 0; k < timeseriesNum; k++) {
-        record.addTuple(DataPoint.getDataPoint(MeasurementSchemas[k].getType(),
-            MeasurementSchemas[k].getMeasurementId(), String.valueOf(i + valueOffset)));
+        record.addTuple(DataPoint.getDataPoint(measurementSchemas[k].getType(),
+            measurementSchemas[k].getMeasurementId(), String.valueOf(i + valueOffset)));
       }
       fileWriter.write(record);
       tsFileResource.updateStartTime(deviceName, i);
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java
index 7617ab5..f7c10aa 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessorTest.java
@@ -56,7 +56,7 @@ import static org.junit.Assert.assertFalse;
 
 public class StorageGroupProcessorTest {
 
-  private String storageGroup = "root.vehicle.d0";
+  private String storageGroup = "root.vehicle";
   private String systemDir = TestConstant.OUTPUT_DATA_DIR.concat("info");
   private String deviceId = "root.vehicle.d0";
   private String measurementId = "s0";
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
index eb8c54e..3aa72b4 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TTLTest.java
@@ -71,6 +71,7 @@ public class TTLTest {
   private String sg2 = "root.TTL_SG2";
   private long ttl = 12345;
   private StorageGroupProcessor storageGroupProcessor;
+  private String d1 = "d1";
   private String s1 = "s1";
   private String g1s1 = sg1 + IoTDBConstant.PATH_SEPARATOR + s1;
 
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
index 3ccad2a..0bfca49 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
@@ -47,7 +47,7 @@ public class IOTDBGroupByIT {
 
 
   private static String[] dataSet1 = new String[]{
-      "SET STORAGE GROUP TO root.ln.wf01.wt01",
+      "SET STORAGE GROUP TO root.ln.wf01",
       "CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=DOUBLE, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.hardware WITH DATATYPE=INT32, ENCODING=PLAIN",
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
index d06b49c..7da9590 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAggregationIT.java
@@ -59,7 +59,7 @@ public class IoTDBAggregationIT {
       "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN"
   };
   private static String[] dataSet2 = new String[]{
-      "SET STORAGE GROUP TO root.ln.wf01.wt01",
+      "SET STORAGE GROUP TO root.ln.wf01",
       "CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.hardware WITH DATATYPE=INT32, ENCODING=PLAIN",
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAuthorizationIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAuthorizationIT.java
index 92f18d9..651b396 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAuthorizationIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBAuthorizationIT.java
@@ -120,14 +120,14 @@ public class IoTDBAuthorizationIT {
       adminStmt.execute("GRANT USER tempuser PRIVILEGES 'ALL' ON root");
 
       userStmt.execute("SET STORAGE GROUP TO root.a");
-      userStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
-      userStmt.execute("INSERT INTO root.a(timestamp, b) VALUES (100, 100)");
+      userStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+      userStmt.execute("INSERT INTO root.a.d(timestamp, b) VALUES (100, 100)");
       userStmt.execute("SELECT * from root.a");
       userStmt.execute("GRANT USER tempuser PRIVILEGES 'SET_STORAGE_GROUP' ON root.a");
-      userStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.b.b");
+      userStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.b.d.b");
 
       adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'ALL' ON root");
-      adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.b.b");
+      adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.b.d.b");
 
       caught = false;
       try {
@@ -139,7 +139,7 @@ public class IoTDBAuthorizationIT {
 
       caught = false;
       try {
-        userStmt.execute("CREATE TIMESERIES root.b.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+        userStmt.execute("CREATE TIMESERIES root.b.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
       } catch (SQLException e) {
         caught = true;
       }
@@ -147,7 +147,7 @@ public class IoTDBAuthorizationIT {
 
       caught = false;
       try {
-        userStmt.execute("INSERT INTO root.b(timestamp, b) VALUES (100, 100)");
+        userStmt.execute("INSERT INTO root.b.d(timestamp, b) VALUES (100, 100)");
       } catch (SQLException e) {
         caught = true;
       }
@@ -373,8 +373,8 @@ public class IoTDBAuthorizationIT {
 
     adminStmt.execute("GRANT USER tempuser PRIVILEGES 'SET_STORAGE_GROUP' ON root.a");
     userStmt.execute("SET STORAGE GROUP TO root.a");
-    adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.b");
-    userStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+    adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.d.b");
+    userStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
 
     caught = false;
     try {
@@ -407,7 +407,7 @@ public class IoTDBAuthorizationIT {
     caught = false;
     try {
       // no privilege to create timeseries
-      userStmt.execute("CREATE TIMESERIES root.b.a WITH DATATYPE=INT32,ENCODING=PLAIN");
+      userStmt.execute("CREATE TIMESERIES root.b.d.a WITH DATATYPE=INT32,ENCODING=PLAIN");
     } catch (SQLException e) {
       caught = true;
     }
@@ -416,13 +416,13 @@ public class IoTDBAuthorizationIT {
     caught = false;
     try {
       // privilege already exists
-      adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.b");
+      adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.d.b");
     } catch (SQLException e) {
       caught = true;
     }
     assertTrue(caught);
 
-    adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.b");
+    adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.d.b");
     caught = false;
     try {
       // no privilege to create this one any more
@@ -436,7 +436,7 @@ public class IoTDBAuthorizationIT {
     caught = false;
     try {
       // no privilege to delete this one any more
-      userStmt.execute("DELETE TIMESERIES root.a.b");
+      userStmt.execute("DELETE TIMESERIES root.a.d.b");
     } catch (SQLException e) {
       caught = true;
     }
@@ -445,18 +445,18 @@ public class IoTDBAuthorizationIT {
     // the user can delete the timeseries now
     adminStmt.execute("GRANT USER tempuser PRIVILEGES 'DELETE_TIMESERIES' on root.a");
     adminStmt.execute("GRANT USER tempuser PRIVILEGES 'DELETE_TIMESERIES' on root.b");
-    userStmt.execute("DELETE TIMESERIES root.a.b");
+    userStmt.execute("DELETE TIMESERIES root.a.d.b");
 
     // revoke the privilege to delete time series
-    adminStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+    adminStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
     adminStmt.execute("SET STORAGE GROUP TO root.b");
-    adminStmt.execute("CREATE TIMESERIES root.b.a WITH DATATYPE=INT32,ENCODING=PLAIN");
+    adminStmt.execute("CREATE TIMESERIES root.b.d.a WITH DATATYPE=INT32,ENCODING=PLAIN");
     adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'DELETE_TIMESERIES' on root.a");
-    userStmt.execute("DELETE TIMESERIES root.b.a");
+    userStmt.execute("DELETE TIMESERIES root.b.d.a");
     caught = false;
     try {
       // no privilege to create this one any more
-      userStmt.execute("DELETE TIMESERIES root.a.b");
+      userStmt.execute("DELETE TIMESERIES root.a.d.b");
     } catch (SQLException e) {
       caught = true;
     }
@@ -482,25 +482,25 @@ public class IoTDBAuthorizationIT {
 
     adminStmt.execute("GRANT USER tempuser PRIVILEGES 'SET_STORAGE_GROUP' ON root.a");
     userStmt.execute("SET STORAGE GROUP TO root.a");
-    adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.b");
-    userStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+    adminStmt.execute("GRANT USER tempuser PRIVILEGES 'CREATE_TIMESERIES' ON root.a.d.b");
+    userStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
 
     // grant privilege to insert
     boolean caught = false;
     try {
-      userStmt.execute("INSERT INTO root.a(timestamp, b) VALUES (1,100)");
+      userStmt.execute("INSERT INTO root.a.d(timestamp, b) VALUES (1,100)");
     } catch (SQLException e) {
       caught = true;
     }
     assertTrue(caught);
     adminStmt.execute("GRANT USER tempuser PRIVILEGES 'INSERT_TIMESERIES' on root.a");
-    userStmt.execute("INSERT INTO root.a(timestamp, b) VALUES (1,100)");
+    userStmt.execute("INSERT INTO root.a.d(timestamp, b) VALUES (1,100)");
 
     // revoke privilege to insert
     adminStmt.execute("REVOKE USER tempuser PRIVILEGES 'INSERT_TIMESERIES' on root.a");
     caught = false;
     try {
-      userStmt.execute("INSERT INTO root.a(timestamp, b) VALUES (1,100)");
+      userStmt.execute("INSERT INTO root.a.d(timestamp, b) VALUES (1,100)");
     } catch (SQLException e) {
       caught = true;
     }
@@ -559,9 +559,9 @@ public class IoTDBAuthorizationIT {
     adminStmt.execute("GRANT admin TO tempuser");
 
     userStmt.execute("SET STORAGE GROUP TO root.a");
-    userStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
-    userStmt.execute("CREATE TIMESERIES root.a.c WITH DATATYPE=INT32,ENCODING=PLAIN");
-    userStmt.execute("INSERT INTO root.a(timestamp,b,c) VALUES (1,100,1000)");
+    userStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+    userStmt.execute("CREATE TIMESERIES root.a.d.c WITH DATATYPE=INT32,ENCODING=PLAIN");
+    userStmt.execute("INSERT INTO root.a.d(timestamp,b,c) VALUES (1,100,1000)");
     // userStmt.execute("DELETE FROM root.a.b WHERE TIME <= 1000000000");
     userStmt.execute("SELECT * FROM root");
     userStmt.getResultSet().close();
@@ -581,7 +581,7 @@ public class IoTDBAuthorizationIT {
     userStmt.getResultSet().close();
     caught = false;
     try {
-      userStmt.execute("CREATE TIMESERIES root.a.b WITH DATATYPE=INT32,ENCODING=PLAIN");
+      userStmt.execute("CREATE TIMESERIES root.a.d.b WITH DATATYPE=INT32,ENCODING=PLAIN");
     } catch (SQLException e) {
       caught = true;
     }
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
index cb141a8..daf0145 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
@@ -94,9 +94,12 @@ public class IoTDBMergeTest {
             long s1 = resultSet.getLong("root.mergeTest.d0.s1");
             long s2 = resultSet.getLong("root.mergeTest.d0.s2");
             long s3 = resultSet.getLong("root.mergeTest.d0.s3");
-            assertEquals(time + 10, s1);
-            assertEquals(time + 20, s2);
-            assertEquals(time + 30, s3);
+            System.out.println(time + " "+ s1 + " " + s2 + " " + s3);
+            if (i != 0) {
+              assertEquals(time + 10, s1);
+              assertEquals(time + 20, s2);
+              assertEquals(time + 30, s3);
+            }
             cnt++;
           }
         }
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
index 3eebae1..2eba6d7 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
@@ -46,7 +46,7 @@ public class IoTDBMetadataFetchIT {
         .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
 
-      String[] insertSqls = new String[]{"SET STORAGE GROUP TO root.ln.wf01.wt01",
+      String[] insertSqls = new String[]{"SET STORAGE GROUP TO root.ln.wf01",
           "CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE = BOOLEAN, ENCODING = PLAIN",
           "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE = FLOAT, ENCODING = RLE, "
               + "compressor = SNAPPY, MAX_POINT_NUMBER = 3"};
@@ -87,16 +87,16 @@ public class IoTDBMetadataFetchIT {
           "show timeseries root.a.b", // nonexistent timeseries, thus returning ""
       };
       String[] standards = new String[]{
-          "root.ln.wf01.wt01.status,root.ln.wf01.wt01,BOOLEAN,PLAIN,SNAPPY,\n",
+          "root.ln.wf01.wt01.status,root.ln.wf01,BOOLEAN,PLAIN,SNAPPY,\n",
 
-          "root.ln.wf01.wt01.status,root.ln.wf01.wt01,BOOLEAN,PLAIN,SNAPPY,\n"
-              + "root.ln.wf01.wt01.temperature,root.ln.wf01.wt01,FLOAT,RLE,SNAPPY,\n",
+          "root.ln.wf01.wt01.status,root.ln.wf01,BOOLEAN,PLAIN,SNAPPY,\n"
+              + "root.ln.wf01.wt01.temperature,root.ln.wf01,FLOAT,RLE,SNAPPY,\n",
 
-          "root.ln.wf01.wt01.status,root.ln.wf01.wt01,BOOLEAN,PLAIN,SNAPPY,\n"
-              + "root.ln.wf01.wt01.temperature,root.ln.wf01.wt01,FLOAT,RLE,SNAPPY,\n",
+          "root.ln.wf01.wt01.status,root.ln.wf01,BOOLEAN,PLAIN,SNAPPY,\n"
+              + "root.ln.wf01.wt01.temperature,root.ln.wf01,FLOAT,RLE,SNAPPY,\n",
 
-          "root.ln.wf01.wt01.status,root.ln.wf01.wt01,BOOLEAN,PLAIN,SNAPPY,\n"
-                  + "root.ln.wf01.wt01.temperature,root.ln.wf01.wt01,FLOAT,RLE,SNAPPY,\n",
+          "root.ln.wf01.wt01.status,root.ln.wf01,BOOLEAN,PLAIN,SNAPPY,\n"
+                  + "root.ln.wf01.wt01.temperature,root.ln.wf01,FLOAT,RLE,SNAPPY,\n",
 
           "",
 
@@ -134,7 +134,7 @@ public class IoTDBMetadataFetchIT {
         .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
       String[] sqls = new String[]{"show storage group"};
-      String[] standards = new String[]{"root.ln.wf01.wt01,\n"};
+      String[] standards = new String[]{"root.ln.wf01,\n"};
       for (int n = 0; n < sqls.length; n++) {
         String sql = sqls[n];
         String standard = standards[n];
@@ -390,14 +390,14 @@ public class IoTDBMetadataFetchIT {
             + "\t\t\t\t\"wt01\":{\n"
             + "\t\t\t\t\t\"temperature\":{\n"
             + "\t\t\t\t\t\t\"args\":\"{max_point_number=3}\",\n"
-            + "\t\t\t\t\t\t\"StorageGroup\":\"root.ln.wf01.wt01\",\n"
+            + "\t\t\t\t\t\t\"StorageGroup\":\"root.ln.wf01\",\n"
             + "\t\t\t\t\t\t\"DataType\":\"FLOAT\",\n"
             + "\t\t\t\t\t\t\"Compressor\":\"SNAPPY\",\n"
             + "\t\t\t\t\t\t\"Encoding\":\"RLE\"\n"
             + "\t\t\t\t\t},\n"
             + "\t\t\t\t\t\"status\":{\n"
             + "\t\t\t\t\t\t\"args\":\"{}\",\n"
-            + "\t\t\t\t\t\t\"StorageGroup\":\"root.ln.wf01.wt01\",\n"
+            + "\t\t\t\t\t\t\"StorageGroup\":\"root.ln.wf01\",\n"
             + "\t\t\t\t\t\t\"DataType\":\"BOOLEAN\",\n"
             + "\t\t\t\t\t\t\"Compressor\":\"SNAPPY\",\n"
             + "\t\t\t\t\t\t\"Encoding\":\"PLAIN\"\n"
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java
index d3199a1..99e7ad1 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java
@@ -57,13 +57,13 @@ public class IoTDBQuotedPathIT {
               "1509465600002,false",
               "1509465600003,false"
       };
-      statement.execute("SET STORAGE GROUP TO root.ln.wf01.wt01");
+      statement.execute("SET STORAGE GROUP TO root.ln.wf01");
       statement.execute("CREATE TIMESERIES root.ln.wf01.wt01.\"status.2.3\" WITH DATATYPE=BOOLEAN, ENCODING=PLAIN");
       statement.execute("INSERT INTO root.ln.wf01.wt01(timestamp,\"status.2.3\") values(1509465600000,true)");
       statement.execute("INSERT INTO root.ln.wf01.wt01(timestamp,\'status.2.3\') values(1509465600001,true)");
       statement.execute("INSERT INTO root.ln.wf01.wt01(timestamp,\"status.2.3\") values(1509465600002,false)");
       statement.execute("INSERT INTO root.ln.wf01.wt01(timestamp,\'status.2.3\') values(1509465600003,false)");
-      statement.execute("SET STORAGE GROUP TO root.ln.wf01.wt02");
+      // statement.execute("SET STORAGE GROUP TO root.ln.wf01.wt02");
       statement.execute("CREATE TIMESERIES root.ln.wf01.wt02.\"abd\" WITH DATATYPE=BOOLEAN, ENCODING=PLAIN");
       statement.execute("CREATE TIMESERIES root.ln.wf01.wt02.\"asf.asd.sdf\" WITH DATATYPE=BOOLEAN, ENCODING=PLAIN");
       statement.execute("CREATE TIMESERIES root.ln.wf01.wt02.\"asd12\" WITH DATATYPE=BOOLEAN, ENCODING=PLAIN");
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java
index 4c3a2ec..db03e92 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java
@@ -46,8 +46,7 @@ public class IoTDBRecoverIT {
   private static final String TIMESTAMP_STR = "Time";
   private static final String TEMPERATURE_STR = "root.ln.wf01.wt01.temperature";
   private static String[] creationSqls = new String[]{
-      "SET STORAGE GROUP TO root.vehicle.d0",
-      "SET STORAGE GROUP TO root.vehicle.d1",
+      "SET STORAGE GROUP TO root.vehicle",
 
       "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
       "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=INT64, ENCODING=RLE",
@@ -56,7 +55,7 @@ public class IoTDBRecoverIT {
       "CREATE TIMESERIES root.vehicle.d0.s4 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN"
   };
   private static String[] dataSet2 = new String[]{
-      "SET STORAGE GROUP TO root.ln.wf01.wt01",
+      "SET STORAGE GROUP TO root.ln.wf01",
       "CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=PLAIN",
       "CREATE TIMESERIES root.ln.wf01.wt01.hardware WITH DATATYPE=INT32, ENCODING=PLAIN",
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java
index 25983f3..6860b6b 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java
@@ -39,7 +39,7 @@ public class IoTDBTimeZoneIT {
   private static String[] insertSqls = new String[]{"SET STORAGE GROUP TO root.timezone",
       "CREATE TIMESERIES root.timezone.d0.tz1 WITH DATATYPE = INT32, ENCODING = PLAIN",};
   private final String TIMESTAMP_STR = "Time";
-  private final String tz1 = "root.timezone.tz1";
+  private final String tz1 = "root.timezone.d0.tz1";
 
   // private boolean testFlag = TestUtils.testFlag;
   private String[] retArray = new String[]{"1514775603000,4", "1514779200000,1", "1514779201000,2",
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java
index 36b337c..0342d2d 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java
@@ -50,15 +50,15 @@ public class IoTDBVersionIT {
         Statement statement = connection.createStatement()){
       statement.execute("SET STORAGE GROUP TO root.versionTest1");
       statement.execute("SET STORAGE GROUP TO root.versionTest2");
-      statement.execute("CREATE TIMESERIES root.versionTest1.s0"
+      statement.execute("CREATE TIMESERIES root.versionTest1.d0.s0"
           + " WITH DATATYPE=INT32,ENCODING=PLAIN");
-      statement.execute("CREATE TIMESERIES root.versionTest2.s0"
+      statement.execute("CREATE TIMESERIES root.versionTest2.d0.s0"
           + " WITH DATATYPE=INT32,ENCODING=PLAIN");
 
       // insert and flush enough times to make the version file persist
       for (int i = 0; i < SimpleFileVersionController.getSaveInterval() + 1; i ++) {
         statement.execute(String
-            .format("INSERT INTO root.versionTest1(timestamp, s0) VALUES (%d, %d)", i*100, i));
+            .format("INSERT INTO root.versionTest1.d0(timestamp, s0) VALUES (%d, %d)", i*100, i));
         statement.execute("FLUSH");
         statement.execute("MERGE");
       }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
index 819e0c5..4ccf2ab 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/MManagerBasicTest.java
@@ -63,7 +63,7 @@ public class MManagerBasicTest {
     assertFalse(manager.isPathExist("root.laptop"));
 
     try {
-      manager.setStorageGroup("root.laptop.d1");
+      manager.setStorageGroup("root.laptop");
     } catch (MetadataException e) {
       e.printStackTrace();
       fail(e.getMessage());
@@ -102,7 +102,7 @@ public class MManagerBasicTest {
       e.printStackTrace();
       fail(e.getMessage());
     }
-    // just delete s0, and don't delete root.laptop.d1??
+    // just delete s0, and don't delete root.laptop??
     // delete storage group or not
     assertFalse(manager.isPathExist("root.laptop.d1.s1"));
     try {
@@ -112,7 +112,7 @@ public class MManagerBasicTest {
       fail(e.getMessage());
     }
     assertFalse(manager.isPathExist("root.laptop.d1.s0"));
-    assertTrue(manager.isPathExist("root.laptop.d1"));
+    assertFalse(manager.isPathExist("root.laptop.d1"));
     assertTrue(manager.isPathExist("root.laptop"));
     assertTrue(manager.isPathExist("root"));
 
@@ -132,8 +132,8 @@ public class MManagerBasicTest {
       fail(e1.getMessage());
     }
 
-    assertFalse(manager.isPathExist("root.laptop.d2"));
-    assertFalse(manager.checkStorageGroupByPath("root.laptop.d2"));
+    assertFalse(manager.isPathExist("root.laptop1.d2"));
+    assertFalse(manager.checkStorageGroupByPath("root.laptop1.d2"));
 
     try {
       manager.deleteTimeseries("root.laptop.d1.s0");
@@ -149,11 +149,11 @@ public class MManagerBasicTest {
     }
 
     try {
-      manager.setStorageGroup("root.laptop.d2");
+      manager.setStorageGroup("root.laptop1");
     } catch (MetadataException e) {
       Assert.assertEquals(
           String.format("The seriesPath of %s already exist, it can't be set to the storage group",
-              "root.laptop.d2"),
+              "root.laptop1"),
           e.getMessage());
     }
   }
@@ -189,8 +189,7 @@ public class MManagerBasicTest {
 
     MManager manager = MManager.getInstance();
     try {
-      manager.setStorageGroup("root.laptop.d1");
-      manager.setStorageGroup("root.laptop.d2");
+      manager.setStorageGroup("root.laptop");
       manager.createTimeseries("root.laptop.d1.s1", TSDataType.INT32, TSEncoding.PLAIN,
           CompressionType.GZIP, null);
       manager.createTimeseries("root.laptop.d2.s1", TSDataType.INT32, TSEncoding.PLAIN,
@@ -198,11 +197,10 @@ public class MManagerBasicTest {
 
       List<String> list = new ArrayList<>();
 
-      list.add("root.laptop.d1");
+      list.add("root.laptop");
       assertEquals(list, manager.getStorageGroupByPath("root.laptop.d1.s1"));
       assertEquals(list, manager.getStorageGroupByPath("root.laptop.d1"));
 
-      list.add("root.laptop.d2");
       assertEquals(list, manager.getStorageGroupByPath("root.laptop"));
       assertEquals(list, manager.getStorageGroupByPath("root"));
     } catch (MetadataException e) {
diff --git a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index f436b3d..0462e59 100644
--- a/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ b/server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -200,6 +200,7 @@ public class EnvironmentUtils {
     try {
       EnvironmentUtils.daemon.active();
     } catch (Exception e) {
+      e.printStackTrace();
       fail(e.getMessage());
     }
 
diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java
index 771457f..ce60c27 100644
--- a/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -203,9 +203,9 @@ public class Session {
     TSBatchInsertionReq request = new TSBatchInsertionReq();
     request.setSessionId(sessionId);
     request.deviceId = rowBatch.deviceId;
-    for (MeasurementSchema MeasurementSchema : rowBatch.timeseries) {
-      request.addToMeasurements(MeasurementSchema.getMeasurementId());
-      request.addToTypes(MeasurementSchema.getType().ordinal());
+    for (MeasurementSchema measurementSchema : rowBatch.timeseries) {
+      request.addToMeasurements(measurementSchema.getMeasurementId());
+      request.addToTypes(measurementSchema.getType().ordinal());
     }
     request.setTimestamps(SessionUtils.getTimeBuffer(rowBatch));
     request.setValues(SessionUtils.getValueBuffer(rowBatch));
@@ -393,9 +393,9 @@ public class Session {
     TSBatchInsertionReq request = new TSBatchInsertionReq();
     request.setSessionId(sessionId);
     request.deviceId = rowBatch.deviceId;
-    for (MeasurementSchema MeasurementSchema : rowBatch.timeseries) {
-      request.addToMeasurements(MeasurementSchema.getMeasurementId());
-      request.addToTypes(MeasurementSchema.getType().ordinal());
+    for (MeasurementSchema measurementSchema : rowBatch.timeseries) {
+      request.addToMeasurements(measurementSchema.getMeasurementId());
+      request.addToTypes(measurementSchema.getType().ordinal());
     }
     request.setTimestamps(SessionUtils.getTimeBuffer(rowBatch));
     request.setValues(SessionUtils.getValueBuffer(rowBatch));
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index d263dc7..1180d26 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -628,7 +628,7 @@ public class TsFileSequenceReader implements AutoCloseable {
     boolean goon = true;
     byte marker;
     int chunkCnt = 0;
-    List<MeasurementSchema> MeasurementSchemaList = new ArrayList<>();
+    List<MeasurementSchema> measurementSchemaList = new ArrayList<>();
     try {
       while (goon && (marker = this.readMarker()) != MetaMarker.SEPARATOR) {
         switch (marker) {
@@ -645,10 +645,10 @@ public class TsFileSequenceReader implements AutoCloseable {
             // insertion is not tolerable
             ChunkHeader header = this.readChunkHeader();
             measurementID = header.getMeasurementID();
-            MeasurementSchema MeasurementSchema = new MeasurementSchema(measurementID,
+            MeasurementSchema measurementSchema = new MeasurementSchema(measurementID,
                 header.getDataType(),
                 header.getEncodingType(), header.getCompressionType());
-            MeasurementSchemaList.add(MeasurementSchema);
+            measurementSchemaList.add(measurementSchema);
             dataType = header.getDataType();
             Statistics<?> chunkStatistics = Statistics.getStatsByType(dataType);
             if (header.getNumOfPages() > 0) {
@@ -680,7 +680,7 @@ public class TsFileSequenceReader implements AutoCloseable {
             ChunkGroupFooter chunkGroupFooter = this.readChunkGroupFooter();
             deviceID = chunkGroupFooter.getDeviceID();
             if (newSchema != null) {
-              for (MeasurementSchema tsSchema : MeasurementSchemaList) {
+              for (MeasurementSchema tsSchema : measurementSchemaList) {
                 newSchema.putIfAbsent(new Path(deviceID, tsSchema.getMeasurementId()), tsSchema);
               }
             }
@@ -699,7 +699,7 @@ public class TsFileSequenceReader implements AutoCloseable {
 
             totalChunkNum += chunkCnt;
             chunkCnt = 0;
-            MeasurementSchemaList = new ArrayList<>();
+            measurementSchemaList = new ArrayList<>();
             break;
           default:
             // the disk file is corrupted, using this file may be dangerous
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java
index 656f5d0..0f55a6c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/TsFileWriter.java
@@ -163,12 +163,12 @@ public class TsFileWriter implements AutoCloseable {
     schema.registerDevice(deviceId, templateName);
   }
 
-  public void addTimeseries(Path path, MeasurementSchema MeasurementSchema)
+  public void addTimeseries(Path path, MeasurementSchema measurementSchema)
       throws WriteProcessException {
     if (schema.containsTimeseries(path)) {
       throw new WriteProcessException("given timeseries has exists! " + path.toString());
     }
-    schema.registerTimeseries(path, MeasurementSchema);
+    schema.registerTimeseries(path, measurementSchema);
   }
 
   /**
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
index 379ee86..4b10f4b 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkWriterImpl.java
@@ -41,7 +41,7 @@ public class ChunkWriterImpl implements IChunkWriter {
 
   private static final Logger logger = LoggerFactory.getLogger(ChunkWriterImpl.class);
 
-  private MeasurementSchema MeasurementSchema;
+  private MeasurementSchema measurementSchema;
 
   private ICompressor compressor;
 
@@ -81,7 +81,7 @@ public class ChunkWriterImpl implements IChunkWriter {
    * @param schema schema of this measurement
    */
   public ChunkWriterImpl(MeasurementSchema schema) {
-    this.MeasurementSchema = schema;
+    this.measurementSchema = schema;
     this.compressor = ICompressor.getCompressor(schema.getCompressor());
     this.pageBuffer = new PublicBAOS();
 
@@ -92,11 +92,11 @@ public class ChunkWriterImpl implements IChunkWriter {
     this.valueCountInOnePageForNextCheck = MINIMUM_RECORD_COUNT_FOR_CHECK;
 
     // init statistics for this chunk and page
-    this.statistics = Statistics.getStatsByType(MeasurementSchema.getType());
+    this.statistics = Statistics.getStatsByType(measurementSchema.getType());
 
-    this.pageWriter = new PageWriter(MeasurementSchema);
-    this.pageWriter.setTimeEncoder(MeasurementSchema.getTimeEncoder());
-    this.pageWriter.setValueEncoder(MeasurementSchema.getValueEncoder());
+    this.pageWriter = new PageWriter(measurementSchema);
+    this.pageWriter.setTimeEncoder(measurementSchema.getTimeEncoder());
+    this.pageWriter.setValueEncoder(measurementSchema.getValueEncoder());
   }
 
   @Override
@@ -177,7 +177,7 @@ public class ChunkWriterImpl implements IChunkWriter {
    */
   private void checkPageSizeAndMayOpenANewPage() {
     if (pageWriter.getPointNumber() == maxNumberOfPointsInPage) {
-      logger.debug("current line count reaches the upper bound, write page {}", MeasurementSchema);
+      logger.debug("current line count reaches the upper bound, write page {}", measurementSchema);
       writePage();
     } else if (pageWriter.getPointNumber()
         >= valueCountInOnePageForNextCheck) { // need to check memory size
@@ -187,7 +187,7 @@ public class ChunkWriterImpl implements IChunkWriter {
         // we will write the current page
         logger.debug(
             "enough size, write page {}, pageSizeThreshold:{}, currentPateSize:{}, valueCountInOnePage:{}",
-            MeasurementSchema.getMeasurementId(), pageSizeThreshold, currentPageSize,
+            measurementSchema.getMeasurementId(), pageSizeThreshold, currentPageSize,
             pageWriter.getPointNumber());
         writePage();
         valueCountInOnePageForNextCheck = MINIMUM_RECORD_COUNT_FOR_CHECK;
@@ -210,7 +210,7 @@ public class ChunkWriterImpl implements IChunkWriter {
       logger.error("meet error in pageWriter.writePageHeaderAndDataIntoBuff,ignore this page:", e);
     } finally {
       // clear start time stamp for next initializing
-      pageWriter.reset(MeasurementSchema);
+      pageWriter.reset(measurementSchema);
     }
   }
 
@@ -221,7 +221,7 @@ public class ChunkWriterImpl implements IChunkWriter {
 
     // reinit this chunk writer
     pageBuffer.reset();
-    this.statistics = Statistics.getStatsByType(MeasurementSchema.getType());
+    this.statistics = Statistics.getStatsByType(measurementSchema.getType());
   }
 
   @Override
@@ -235,7 +235,7 @@ public class ChunkWriterImpl implements IChunkWriter {
       return 0;
     }
     // return the serialized size of the chunk header + all pages
-    return ChunkHeader.getSerializedSize(MeasurementSchema.getMeasurementId()) + (long) pageBuffer.size();
+    return ChunkHeader.getSerializedSize(measurementSchema.getMeasurementId()) + (long) pageBuffer.size();
   }
 
   @Override
@@ -252,7 +252,7 @@ public class ChunkWriterImpl implements IChunkWriter {
 
   @Override
   public TSDataType getDataType() {
-    return MeasurementSchema.getType();
+    return measurementSchema.getType();
   }
 
   /**
@@ -269,7 +269,7 @@ public class ChunkWriterImpl implements IChunkWriter {
       logger.debug("start to flush a page header into buffer, buffer position {} ", pageBuffer.size());
       header.serializeTo(pageBuffer);
       logger.debug("finish to flush a page header {} of {} into buffer, buffer position {} ", header,
-          MeasurementSchema.getMeasurementId(), pageBuffer.size());
+          measurementSchema.getMeasurementId(), pageBuffer.size());
 
       statistics.mergeStatistics(header.getStatistics());
 
@@ -300,8 +300,8 @@ public class ChunkWriterImpl implements IChunkWriter {
     }
 
     // start to write this column chunk
-    writer.startFlushChunk(MeasurementSchema, compressor.getType(), MeasurementSchema.getType(),
-        MeasurementSchema.getEncodingType(), statistics, pageBuffer.size(), numOfPages);
+    writer.startFlushChunk(measurementSchema, compressor.getType(), measurementSchema.getType(),
+        measurementSchema.getEncodingType(), statistics, pageBuffer.size(), numOfPages);
 
     long dataOffset = writer.getPos();
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/page/PageWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/page/PageWriter.java
index d755825..5ef7cbb 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/page/PageWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/page/PageWriter.java
@@ -64,10 +64,10 @@ public class PageWriter {
     this(null, null);
   }
 
-  public PageWriter(MeasurementSchema MeasurementSchema) {
-    this(MeasurementSchema.getTimeEncoder(), MeasurementSchema.getValueEncoder());
-    this.statistics = Statistics.getStatsByType(MeasurementSchema.getType());
-    this.compressor = ICompressor.getCompressor(MeasurementSchema.getCompressor());
+  public PageWriter(MeasurementSchema measurementSchema) {
+    this(measurementSchema.getTimeEncoder(), measurementSchema.getValueEncoder());
+    this.statistics = Statistics.getStatsByType(measurementSchema.getType());
+    this.compressor = ICompressor.getCompressor(measurementSchema.getCompressor());
   }
 
   private PageWriter(Encoder timeEncoder, Encoder valueEncoder) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/Schema.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/Schema.java
index dc49b12..87c2c77 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/Schema.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/Schema.java
@@ -35,10 +35,10 @@ import org.apache.iotdb.tsfile.write.record.RowBatch;
 public class Schema {
 
   /**
-   * Path (device + measurement) -> MeasurementSchema By default, use the LinkedHashMap to store the
+   * Path (device + measurement) -> measurementSchema By default, use the LinkedHashMap to store the
    * order of insertion
    */
-  private Map<Path, MeasurementSchema> MeasurementSchemaMap;
+  private Map<Path, MeasurementSchema> measurementSchemaMap;
 
   /**
    * template name -> (measuremnet -> MeasurementSchema)
@@ -55,11 +55,11 @@ public class Schema {
    */
 
   public Schema() {
-    this.MeasurementSchemaMap = new LinkedHashMap<>();
+    this.measurementSchemaMap = new LinkedHashMap<>();
   }
 
   public Schema(Map<Path, MeasurementSchema> knownSchema) {
-    this.MeasurementSchemaMap = knownSchema;
+    this.measurementSchemaMap = knownSchema;
   }
 
   /**
@@ -68,7 +68,7 @@ public class Schema {
    * @param deviceId the name of the device specified to be written in
    */
   public RowBatch createRowBatch(String deviceId) {
-    return new RowBatch(deviceId, new ArrayList<>(MeasurementSchemaMap.values()));
+    return new RowBatch(deviceId, new ArrayList<>(measurementSchemaMap.values()));
   }
 
   /**
@@ -78,11 +78,11 @@ public class Schema {
    * @param maxBatchSize max size of rows in batch
    */
   public RowBatch createRowBatch(String deviceId, int maxBatchSize) {
-    return new RowBatch(deviceId, new ArrayList<>(MeasurementSchemaMap.values()), maxBatchSize);
+    return new RowBatch(deviceId, new ArrayList<>(measurementSchemaMap.values()), maxBatchSize);
   }
 
   public void registerTimeseries(Path path, MeasurementSchema descriptor) {
-    this.MeasurementSchemaMap.put(path, descriptor);
+    this.measurementSchemaMap.put(path, descriptor);
   }
 
   public void registerDeviceTemplate(String templateName, Map<String, MeasurementSchema> template) {
@@ -115,14 +115,14 @@ public class Schema {
   }
 
   public MeasurementSchema getSeriesSchema(Path path) {
-    return MeasurementSchemaMap.get(path);
+    return measurementSchemaMap.get(path);
   }
 
   public TSDataType getTimeseriesDataType(Path path) {
-    if (!MeasurementSchemaMap.containsKey(path)) {
+    if (!measurementSchemaMap.containsKey(path)) {
       return null;
     }
-    return MeasurementSchemaMap.get(path).getType();
+    return measurementSchemaMap.get(path).getType();
   }
 
   public boolean containsDevice(String device) {
@@ -130,14 +130,14 @@ public class Schema {
   }
 
   public Map<Path, MeasurementSchema> getMeasurementSchemaMap() {
-    return MeasurementSchemaMap;
+    return measurementSchemaMap;
   }
 
   /**
    * check if this schema contains a measurement named measurementId.
    */
   public boolean containsTimeseries(Path path) {
-    return MeasurementSchemaMap.containsKey(path);
+    return measurementSchemaMap.containsKey(path);
   }
 
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index 0ab0d32..29ae5d2 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -168,22 +168,22 @@ public class TsFileIOWriter {
    * @param dataSize             - the serialized size of all pages
    * @throws IOException if I/O error occurs
    */
-  public void startFlushChunk(MeasurementSchema MeasurementSchema,
+  public void startFlushChunk(MeasurementSchema measurementSchema,
       CompressionType compressionCodecName,
       TSDataType tsDataType, TSEncoding encodingType, Statistics<?> statistics, int dataSize,
       int numOfPages)
       throws IOException {
 
-    currentChunkMetaData = new ChunkMetaData(MeasurementSchema.getMeasurementId(), tsDataType,
+    currentChunkMetaData = new ChunkMetaData(measurementSchema.getMeasurementId(), tsDataType,
         out.getPosition(),
         statistics);
 
     // flush ChunkHeader to TsFileIOWriter
     if (logger.isDebugEnabled()) {
-      logger.debug("start series chunk:{}, file position {}", MeasurementSchema, out.getPosition());
+      logger.debug("start series chunk:{}, file position {}", measurementSchema, out.getPosition());
     }
 
-    ChunkHeader header = new ChunkHeader(MeasurementSchema.getMeasurementId(), dataSize, tsDataType,
+    ChunkHeader header = new ChunkHeader(measurementSchema.getMeasurementId(), dataSize, tsDataType,
         compressionCodecName, encodingType, numOfPages);
     header.serializeTo(out.wrapAsStream());
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeSeriesMetadataTest.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeSeriesMetadataTest.java
index 5c5b389..7d68ffc 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeSeriesMetadataTest.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeSeriesMetadataTest.java
@@ -52,10 +52,10 @@ public class TimeSeriesMetadataTest {
 
   @Test
   public void testWriteIntoFile() throws IOException {
-    TimeseriesMetaData MeasurementSchema = TestHelper.createSimpleTimseriesMetaData(measurementUID);
-    serialized(MeasurementSchema);
+    TimeseriesMetaData timeseriesMetadata = TestHelper.createSimpleTimseriesMetaData(measurementUID);
+    serialized(timeseriesMetadata);
     TimeseriesMetaData readMetadata = deSerialized();
-    MeasurementSchema.equals(readMetadata);
+    timeseriesMetadata.equals(readMetadata);
     serialized(readMetadata);
   }
 
diff --git a/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/RecordUtils.java b/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/RecordUtils.java
index 233c3a1..bb82042 100644
--- a/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/RecordUtils.java
+++ b/tsfile/src/test/java/org/apache/iotdb/tsfile/utils/RecordUtils.java
@@ -69,12 +69,12 @@ public class RecordUtils {
     for (int i = 2; i < items.length - 1; i += 2) {
       // get measurementId and value
       measurementId = items[i].trim();
-      MeasurementSchema MeasurementSchema = schema.getSeriesSchema(new Path(deviceId, measurementId));
-      if (MeasurementSchema == null) {
+      MeasurementSchema measurementSchema = schema.getSeriesSchema(new Path(deviceId, measurementId));
+      if (measurementSchema == null) {
         LOG.warn("measurementId:{},type not found, pass", measurementId);
         continue;
       }
-      type = MeasurementSchema.getType();
+      type = measurementSchema.getType();
       String value = items[i + 1].trim();
       // if value is not null, wrap it with corresponding DataPoint and add to
       // TSRecord
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 4280119..3cadf12 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
@@ -50,19 +50,19 @@ public class TsFileIOWriterTest {
     TsFileIOWriter writer = new TsFileIOWriter(new File(tsfile));
 
     // file schema
-    MeasurementSchema MeasurementSchema = TestHelper.createSimpleMeasurementSchema("sensor01");
+    MeasurementSchema measurementSchema = TestHelper.createSimpleMeasurementSchema("sensor01");
     Schema schema = new Schema();
-    schema.registerTimeseries(new Path(deviceId, "sensor01"), MeasurementSchema);
+    schema.registerTimeseries(new Path(deviceId, "sensor01"), measurementSchema);
 
     // chunk statistics
-    Statistics statistics = Statistics.getStatsByType(MeasurementSchema.getType());
+    Statistics statistics = Statistics.getStatsByType(measurementSchema.getType());
     statistics.updateStats(0L, 0L);
 
     // chunk group 1
     writer.startChunkGroup(deviceId);
-    writer.startFlushChunk(MeasurementSchema, MeasurementSchema.getCompressor(),
-        MeasurementSchema.getType(),
-        MeasurementSchema.getEncodingType(), statistics, 0, 0);
+    writer.startFlushChunk(measurementSchema, measurementSchema.getCompressor(),
+        measurementSchema.getType(),
+        measurementSchema.getEncodingType(), statistics, 0, 0);
     writer.endCurrentChunk();
     writer.endChunkGroup(0);
 


[incubator-iotdb] 03/04: fix bugs

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch new_TsFile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 3c7ea7bf2e77c5a6201fafa6a27f6fc33699191e
Author: HTHou <hh...@outlook.com>
AuthorDate: Fri Feb 28 14:30:01 2020 +0800

    fix bugs
---
 .../iotdb/db/engine/merge/task/MergeFileTask.java  | 11 ++--
 .../writelog/recover/TsFileRecoverPerformer.java   | 16 ++---
 .../engine/storagegroup/TsFileProcessorTest.java   | 26 ++++----
 .../db/integration/IoTDBFlushQueryMergeTest.java   |  4 +-
 .../iotdb/db/integration/IoTDBMergeTest.java       |  1 -
 .../reader/series/SeriesReaderByTimestampTest.java |  3 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |  8 +--
 .../iotdb/tsfile/file/metadata/TsFileMetaData.java |  6 ++
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  8 +--
 .../query/dataset/DataSetWithoutTimeGenerator.java |  2 +-
 .../write/writer/RestorableTsFileIOWriter.java     | 37 +++++------
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  | 71 ++++++++++------------
 12 files changed, 93 insertions(+), 100 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
index bdd41d5..bc8646b 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/merge/task/MergeFileTask.java
@@ -140,15 +140,14 @@ class MergeFileTask {
       newFileWriter.close();
       try (TsFileSequenceReader newFileReader =
           new TsFileSequenceReader(newFileWriter.getFile().getPath())) {
-        List<List<ChunkMetaData>> chunkMetadataListInChunkGroups = newFileWriter
-            .getChunkMetadataListInChunkGroup();
-        List<String> devices = newFileWriter.getDeviceList();
+        Map<String, List<ChunkMetaData>> chunkMetadataListInChunkGroups = 
+            newFileWriter.getDeviceChunkMetadataMap();
         if (logger.isDebugEnabled()) {
           logger.debug("{} find {} merged chunk groups", taskName, chunkMetadataListInChunkGroups.size());
         }
-        for (int i = 0; i < chunkMetadataListInChunkGroups.size(); i++) {
-          List<ChunkMetaData> chunkMetaDataList = chunkMetadataListInChunkGroups.get(i);
-          String deviceId = devices.get(i);
+        for (Map.Entry<String, List<ChunkMetaData>> entry : chunkMetadataListInChunkGroups.entrySet()) {
+          String deviceId = entry.getKey();
+          List<ChunkMetaData> chunkMetaDataList = entry.getValue();
           writeMergedChunkGroup(chunkMetaDataList, deviceId, newFileReader, oldFileWriter);
         }
       }
diff --git a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
index 6e095d9..e7a3c48 100644
--- a/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
+++ b/server/src/main/java/org/apache/iotdb/db/writelog/recover/TsFileRecoverPerformer.java
@@ -176,16 +176,16 @@ public class TsFileRecoverPerformer {
     tsFileResource.serialize();
   }
 
+
   private void recoverResourceFromWriter(RestorableTsFileIOWriter restorableTsFileIOWriter) {
-    List<String> deviceList = restorableTsFileIOWriter.getDeviceList();
-    List<List<ChunkMetaData>> chunkMetaDataListInChunkGroup = 
-        restorableTsFileIOWriter.getChunkMetadataListInChunkGroup();
-    for (int i = 0; i < deviceList.size(); i++) {
-      List<ChunkMetaData> chunkMetaDataList = chunkMetaDataListInChunkGroup.get(i);
+    Map<String, List<ChunkMetaData>> deviceChunkMetaDataMap =
+        restorableTsFileIOWriter.getDeviceChunkMetadataMap();
+    for (Map.Entry<String, List<ChunkMetaData>> entry : deviceChunkMetaDataMap.entrySet()) {
+      String deviceId = entry.getKey();
+      List<ChunkMetaData> chunkMetaDataList = entry.getValue();
       for (ChunkMetaData chunkMetaData : chunkMetaDataList) {
-        tsFileResource
-            .updateStartTime(deviceList.get(i), chunkMetaData.getStartTime());
-        tsFileResource.updateEndTime(deviceList.get(i), chunkMetaData.getEndTime());
+        tsFileResource.updateStartTime(deviceId, chunkMetaData.getStartTime());
+        tsFileResource.updateEndTime(deviceId, chunkMetaData.getEndTime());
       }
     }
     long fileVersion =
diff --git a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorTest.java b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorTest.java
index 6cc13ba..7e51cc6 100644
--- a/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/engine/storagegroup/TsFileProcessorTest.java
@@ -179,20 +179,24 @@ public class TsFileProcessorTest {
     assertEquals(dataType, right.get(0).getDataType());
 
     RestorableTsFileIOWriter tsFileIOWriter = processor.getWriter();
-    List<List<ChunkMetaData>> chunkMetaDataListInChunkGroups = 
-        tsFileIOWriter.getChunkMetadataListInChunkGroup();
+    Map<String, List<ChunkMetaData>> chunkMetaDataListInChunkGroups = 
+        tsFileIOWriter.getDeviceChunkMetadataMap();
     RestorableTsFileIOWriter restorableTsFileIOWriter = new RestorableTsFileIOWriter(
         SystemFileFactory.INSTANCE.getFile(filePath));
-    List<List<ChunkMetaData>> restoredChunkMetaDataListInChunkGroups = restorableTsFileIOWriter
-        .getChunkMetadataListInChunkGroup();
+    Map<String, List<ChunkMetaData>> restoredChunkMetaDataListInChunkGroups = restorableTsFileIOWriter
+        .getDeviceChunkMetadataMap();
     assertEquals(chunkMetaDataListInChunkGroups.size(), restoredChunkMetaDataListInChunkGroups.size());
-    for (int i = 0; i < chunkMetaDataListInChunkGroups.size(); i++) {
-      List<ChunkMetaData> chunkMetaDataListInOneChunkGroup = chunkMetaDataListInChunkGroups.get(i);
-      List<ChunkMetaData> chunkMetaDataListInOneChunkGroupRestore = restoredChunkMetaDataListInChunkGroups.get(i);
-      for (int j = 0; j < chunkMetaDataListInOneChunkGroup.size(); j++) {
-        ChunkMetaData chunkMetaData = chunkMetaDataListInOneChunkGroup.get(j);
-        ChunkMetaData chunkMetaDataRestore = chunkMetaDataListInOneChunkGroupRestore.get(j);
-        assertEquals(chunkMetaData, chunkMetaDataRestore);
+    for (Map.Entry<String, List<ChunkMetaData>> entry1 
+        : chunkMetaDataListInChunkGroups.entrySet()) {
+      for (Map.Entry<String, List<ChunkMetaData>> entry2 
+          : restoredChunkMetaDataListInChunkGroups.entrySet()) {
+        assertEquals(entry1.getKey(), entry2.getKey());
+        assertEquals(entry1.getValue().size(), entry2.getValue().size());
+        for (int i = 0; i < entry1.getValue().size(); i++) {
+          ChunkMetaData chunkMetaData = entry1.getValue().get(i);
+          ChunkMetaData chunkMetaDataRestore = entry2.getValue().get(i);
+          assertEquals(chunkMetaData, chunkMetaDataRestore);
+        }
       }
     }
     restorableTsFileIOWriter.close();
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeTest.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeTest.java
index 8a41c63..a2670f2 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeTest.java
@@ -37,7 +37,7 @@ import org.junit.Test;
 public class IoTDBFlushQueryMergeTest {
 
   private static String[] sqls = new String[]{
-      "SET STORAGE GROUP TO root.vehicle.d0",
+      "SET STORAGE GROUP TO root.vehicle",
       "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 
       "insert into root.vehicle.d0(timestamp,s0) values(1,101)",
@@ -111,7 +111,7 @@ public class IoTDBFlushQueryMergeTest {
     Class.forName(Config.JDBC_DRIVER_NAME);
     IoTDBDescriptor.getInstance().getConfig().setAutoCreateSchemaEnabled(true);
     String insertTemplate =
-        "INSERT INTO root.group%d(timestamp, s1, s2, s3) VALUES (%d, %d, %f, %s)";
+        "INSERT INTO root.group%d.d1(timestamp, s1, s2, s3) VALUES (%d, %d, %f, %s)";
     try (Connection connection = DriverManager
         .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", "root");
         Statement statement = connection.createStatement()) {
diff --git a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
index daf0145..d72016b 100644
--- a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeTest.java
@@ -94,7 +94,6 @@ public class IoTDBMergeTest {
             long s1 = resultSet.getLong("root.mergeTest.d0.s1");
             long s2 = resultSet.getLong("root.mergeTest.d0.s2");
             long s3 = resultSet.getLong("root.mergeTest.d0.s3");
-            System.out.println(time + " "+ s1 + " " + s2 + " " + s3);
             if (i != 0) {
               assertEquals(time + 10, s1);
               assertEquals(time + 20, s2);
diff --git a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
index a0cdba0..19d3c8e 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
@@ -69,9 +69,8 @@ public class SeriesReaderByTimestampTest {
       new Path(SERIES_READER_TEST_SG + PATH_SEPARATOR + "device0", "sensor0"),
       TSDataType.INT32, new QueryContext(), dataSource, null);
 
-    for (int time = 0; time < 500; time++) {
+    for (int time = 0; time < 100; time++) {
       Integer value = (Integer) seriesReader.getValueInTimestamp(time);
-
       if (time < 200) {
         Assert.assertEquals(time + 20000, value.intValue());
       } else if (time < 260 || (time >= 300 && time < 380) || (time >= 400)) {
diff --git a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java
index c3d5023..830cd6e 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderTestUtil.java
@@ -50,10 +50,10 @@ import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 
 public class SeriesReaderTestUtil {
 
-  private static int seqFileNum = 5;
-  private static int unseqFileNum = 5;
-  private static int measurementNum = 10;
-  private static int deviceNum = 10;
+  private static int seqFileNum = 1;
+  private static int unseqFileNum = 1;
+  private static int measurementNum = 1;
+  private static int deviceNum = 1;
   private static long ptNum = 100;
   private static long flushInterval = 20;
   private static TSEncoding encoding = TSEncoding.PLAIN;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
index a73e8dc..1a9a3a4 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TsFileMetaData.java
@@ -48,6 +48,8 @@ public class TsFileMetaData {
   private BloomFilter bloomFilter;
 
   private Map<String, Pair<Long, Integer>> deviceMetaDataMap;
+  
+  private Map<Long, Long> versionInfo;
 
   public TsFileMetaData() {
   }
@@ -175,4 +177,8 @@ public class TsFileMetaData {
     this.deviceMetaDataMap = deviceMetaDataMap;
   }
 
+  public void setVersionInfo(Map<Long, Long> versionInfo) {
+    this.versionInfo = versionInfo;
+  }
+
 }
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
index 1180d26..a81a0b9 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileSequenceReader.java
@@ -687,10 +687,7 @@ public class TsFileSequenceReader implements AutoCloseable {
             if (chunkMetadataListMap != null) {
               for (ChunkMetaData chunk : chunks) {
                 Path path = new Path(deviceID, chunk.getMeasurementUid());
-                List<ChunkMetaData> chunkMetaDataList = chunkMetadataListMap
-                    .getOrDefault(path, new ArrayList<>());
-                chunkMetaDataList.add(chunk);
-                chunkMetadataListMap.put(path, chunkMetaDataList);
+                chunkMetadataListMap.computeIfAbsent(path, k -> new ArrayList<>()).add(chunk);
               }
             }
             endOffsetOfChunkGroup = this.position();
@@ -714,6 +711,7 @@ public class TsFileSequenceReader implements AutoCloseable {
       // complete.
       truncatedPosition = this.position() - 1;
     } catch (Exception e2) {
+      e2.printStackTrace();
       logger.info("TsFile {} self-check cannot proceed at position {} " + "recovered, because : {}",
           file,
           this.position(), e2.getMessage());
@@ -847,7 +845,7 @@ public class TsFileSequenceReader implements AutoCloseable {
    * @param spacePartitionEndPos   the end position of the space partition
    * @return LocateStatus
    */
-
+  // TODO: This function is not correct. 
   private LocateStatus checkLocateStatus(long deviceMetadataOffset, int deviceMetadataLength,
       long spacePartitionStartPos, long spacePartitionEndPos) {
     long middleOffset = deviceMetadataOffset + deviceMetadataLength / 2;
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/DataSetWithoutTimeGenerator.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/DataSetWithoutTimeGenerator.java
index f602fa0..948bc6d 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/DataSetWithoutTimeGenerator.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/DataSetWithoutTimeGenerator.java
@@ -106,7 +106,7 @@ public class DataSetWithoutTimeGenerator extends QueryDataSet {
       Field field = new Field(dataTypes.get(i));
 
       if (!hasDataRemaining.get(i)) {
-        //record.addField(new Field(null));
+        record.addField(new Field(null));
         continue;
       }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
index 968d244..f9855f8 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/RestorableTsFileIOWriter.java
@@ -57,6 +57,7 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
   private boolean crashed;
 
   /**
+   * 
    * all chunk group metadata which have been serialized on disk.
    */
   private Map<String, Map<String, List<ChunkMetaData>>> metadatas = new HashMap<>();
@@ -181,19 +182,17 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
   }
 
   /**
-   * add all appendChunkGroupMetadatas into memory. After calling this method, other classes can
+   * add all appendChunkMetadatas into memory. After calling this method, other classes can
    * read these metadata.
    */
 
   public void makeMetadataVisible() {
-    Pair<List<String>, List<List<ChunkMetaData>>> append = getAppendedRowGroupMetadata();
-    List<String> newlyFlushedDeviceList = append.left;
-    List<List<ChunkMetaData>> newlyFlushedMetadataList = append.right;
+    List<Pair<String, List<ChunkMetaData>>> newlyFlushedMetadataList = getAppendedRowMetadata();
     if (!newlyFlushedMetadataList.isEmpty()) {
-      for (int i = 0; i < newlyFlushedMetadataList.size(); i++) {
-        List<ChunkMetaData> rowGroupMetaData = newlyFlushedMetadataList.get(i);
-        String deviceId = newlyFlushedDeviceList.get(i);
-        for (ChunkMetaData chunkMetaData : rowGroupMetaData) {
+      for (Pair<String, List<ChunkMetaData>> pair : newlyFlushedMetadataList) {
+        List<ChunkMetaData> rowMetaDataList = pair.right;
+        String deviceId = pair.left;
+        for (ChunkMetaData chunkMetaData : rowMetaDataList) {
           String measurementId = chunkMetaData.getMeasurementUid();
           if (!metadatas.containsKey(deviceId)) {
             metadatas.put(deviceId, new HashMap<>());
@@ -212,24 +211,18 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
   }
 
   /**
-   * get all the chunkGroups' metadata which are appended after the last calling of this method, or
+   * get all the chunk's metadata which are appended after the last calling of this method, or
    * after the class instance is initialized if this is the first time to call the method.
    *
-   * @return a list of ChunkMetadataList
+   * @return a list of Device ChunkMetadataList Pair
    */
-  private Pair<List<String>, List<List<ChunkMetaData>>> getAppendedRowGroupMetadata() {
-    List<String> appendDevices = new ArrayList<>();
-    List<List<ChunkMetaData>> appendChunkGroupMetaDataList = new ArrayList<>();
-    if (lastFlushedChunkGroupIndex < chunkGroupMetaDataList.size()) {
-      appendDevices
-          .addAll(deviceList.subList(lastFlushedChunkGroupIndex, chunkGroupMetaDataList.size()));
-      appendChunkGroupMetaDataList.addAll(chunkGroupMetaDataList
-          .subList(lastFlushedChunkGroupIndex, chunkGroupMetaDataList.size()));
-      lastFlushedChunkGroupIndex = chunkGroupMetaDataList.size();
+  private List<Pair<String, List<ChunkMetaData>>> getAppendedRowMetadata() {
+    List<Pair<String, List<ChunkMetaData>>> append = new ArrayList<>();
+    if (lastFlushedChunkGroupIndex < chunkGroupInfoList.size()) {
+      append.addAll(chunkGroupInfoList
+          .subList(lastFlushedChunkGroupIndex, chunkGroupInfoList.size()));
+      lastFlushedChunkGroupIndex = chunkGroupInfoList.size();
     }
-    Pair<List<String>, List<List<ChunkMetaData>>> append =
-        new Pair<List<String>, List<List<ChunkMetaData>>>(appendDevices,
-            appendChunkGroupMetaDataList);
     return append;
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
index 29ae5d2..3cc9bd8 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/writer/TsFileIOWriter.java
@@ -18,15 +18,6 @@
  */
 package org.apache.iotdb.tsfile.write.writer;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.MetaMarker;
@@ -45,11 +36,19 @@ import org.apache.iotdb.tsfile.utils.BytesUtils;
 import org.apache.iotdb.tsfile.utils.Pair;
 import org.apache.iotdb.tsfile.utils.PublicBAOS;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
-import org.apache.iotdb.tsfile.write.schema.Schema;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
 /**
  * TSFileIOWriter is used to construct metadata and write data stored in memory to output stream.
  */
@@ -66,19 +65,18 @@ public class TsFileIOWriter {
   }
 
   protected TsFileOutput out;
+  protected List<Pair<String, List<ChunkMetaData>>> chunkGroupInfoList = new ArrayList<>();
   protected boolean canWrite = true;
   protected int totalChunkNum = 0;
   protected int invalidChunkNum;
   protected File file;
-  protected List<List<ChunkMetaData>> chunkGroupMetaDataList = new ArrayList<>();
-  protected List<String> deviceList = new ArrayList<>();
   protected List<ChunkMetaData> chunkMetaDataList = new ArrayList<>();
   protected Map<Path, List<ChunkMetaData>> chunkMetadataListMap = new TreeMap<>();
   private ChunkMetaData currentChunkMetaData;
   private long markedPosition;
-  private Map<String, Pair<Long, Integer>> deviceMetaDataMap;
   private String deviceId;
   private long currentChunkGroupStartOffset;
+  private Map<Long, Long> versionInfo = new HashMap<>();
 
   /**
    * empty construct function.
@@ -151,8 +149,8 @@ public class TsFileIOWriter {
     ChunkGroupFooter chunkGroupFooter = new ChunkGroupFooter(deviceId, dataSize,
         chunkMetaDataList.size());
     chunkGroupFooter.serializeTo(out.wrapAsStream());
-    chunkGroupMetaDataList.add(chunkMetaDataList);
-    deviceList.add(deviceId);
+    chunkGroupInfoList.add(new Pair<>(deviceId, chunkMetaDataList));
+    versionInfo.put(out.getPosition(), version);
     logger.debug("end chunk group:{}", chunkMetaDataList);
     deviceId = null;
     chunkMetaDataList = null;
@@ -231,10 +229,11 @@ public class TsFileIOWriter {
     
     logger.debug("get time series list:{}", chunkMetadataListMap.keySet());
     
-    deviceMetaDataMap = flushAllChunkMetadataList();
+    Map<String, Pair<Long, Integer>> deviceMetaDataMap = flushAllChunkMetadataList();
     
     TsFileMetaData tsFileMetaData = new TsFileMetaData();
     tsFileMetaData.setDeviceMetaDataMap(deviceMetaDataMap);
+    tsFileMetaData.setVersionInfo(versionInfo);
     tsFileMetaData.setTotalChunkNum(totalChunkNum);
     tsFileMetaData.setInvalidChunkNum(invalidChunkNum);
 
@@ -277,12 +276,10 @@ public class TsFileIOWriter {
 
     // convert ChunkMetadataList to this field
     Map<String, List<TimeseriesMetaData>> deviceTimeseriesMetadataMap = new LinkedHashMap<>();
+    // create device -> TimeseriesMetaDataList Map
     for (Map.Entry<Path, List<ChunkMetaData>> entry : chunkMetadataListMap.entrySet()) {
       Path path = entry.getKey();
       String deviceId = path.getDevice();
-      // create device -> TimeseriesMetaDataList Map
-      List<TimeseriesMetaData> timeseriesMetadataList = deviceTimeseriesMetadataMap
-          .getOrDefault(deviceId, new ArrayList<>());
       // create TimeseriesMetaData
       TimeseriesMetaData timeseriesMetaData = new TimeseriesMetaData();
       timeseriesMetaData.setMeasurementId(path.getMeasurement());
@@ -297,8 +294,8 @@ public class TsFileIOWriter {
       }
       timeseriesMetaData.setStatistics(statistics);
       timeseriesMetaData.setDataSizeOfChunkMetaDataList(chunkMetadataListLength);
-      timeseriesMetadataList.add(timeseriesMetaData);
-      deviceTimeseriesMetadataMap.put(deviceId, timeseriesMetadataList);
+      deviceTimeseriesMetadataMap.computeIfAbsent(deviceId, k -> new ArrayList<>())
+          .add(timeseriesMetaData);
     }
     // create DeviceMetaDataMap device -> Pair<TimeseriesMetaDataOffset, TimeseriesMetaDataLength> 
     Map<String, Pair<Long, Integer>> deviceMetadataMap = new HashMap<>();
@@ -328,12 +325,15 @@ public class TsFileIOWriter {
     return out.getPosition();
   }
 
-  public List<List<ChunkMetaData>> getChunkMetadataListInChunkGroup() {
-    return chunkGroupMetaDataList;
-  }
-
-  public List<String> getDeviceList() {
-    return deviceList;
+  public Map<String, List<ChunkMetaData>> getDeviceChunkMetadataMap() {
+    Map<String, List<ChunkMetaData>> deviceChunkMetadataMap = new HashMap<>();
+    for (Map.Entry<Path, List<ChunkMetaData>> entry : chunkMetadataListMap.entrySet()) {
+      Path path = entry.getKey();
+      String deviceId = path.getDevice();
+      deviceChunkMetadataMap.computeIfAbsent(deviceId, k -> new ArrayList<>())
+      .addAll(entry.getValue());
+    }
+    return deviceChunkMetadataMap;
   }
 
   public boolean canWrite() {
@@ -384,23 +384,18 @@ public class TsFileIOWriter {
   public void filterChunks(Map<Path, List<Long>> chunkStartTimes) {
     Map<Path, Integer> startTimeIdxes = new HashMap<>();
     chunkStartTimes.forEach((p, t) -> startTimeIdxes.put(p, 0));
-    Iterator<String> devicesIterator = deviceList.iterator();
-    Iterator<List<ChunkMetaData>> chunkGroupMetaDataIterator = chunkGroupMetaDataList.iterator();
 
-    while (devicesIterator.hasNext() && chunkGroupMetaDataIterator.hasNext()) {
-      List<ChunkMetaData> chunkMetaDataList = chunkGroupMetaDataIterator.next();
-      String deviceId = devicesIterator.next();
+    for (Map.Entry<Path, List<ChunkMetaData>> entry : chunkMetadataListMap.entrySet()) {
+      List<ChunkMetaData> chunkMetaDataList = entry.getValue();
+      Path path = entry.getKey();
       int chunkNum = chunkMetaDataList.size();
-      Iterator<ChunkMetaData> chunkMetaDataIterator = chunkMetaDataList.iterator();
-      while (chunkMetaDataIterator.hasNext()) {
-        ChunkMetaData chunkMetaData = chunkMetaDataIterator.next();
-        Path path = new Path(deviceId, chunkMetaData.getMeasurementUid());
+      for (ChunkMetaData chunkMetaData : chunkMetaDataList) {
         int startTimeIdx = startTimeIdxes.get(path);
         List<Long> pathChunkStartTimes = chunkStartTimes.get(path);
         boolean chunkValid = startTimeIdx < pathChunkStartTimes.size()
             && pathChunkStartTimes.get(startTimeIdx) == chunkMetaData.getStartTime();
         if (!chunkValid) {
-          chunkMetaDataIterator.remove();
+          chunkMetaDataList.remove(chunkMetaData);
           chunkNum--;
           invalidChunkNum++;
         } else {
@@ -408,7 +403,7 @@ public class TsFileIOWriter {
         }
       }
       if (chunkNum == 0) {
-        chunkGroupMetaDataIterator.remove();
+        chunkMetadataListMap.remove(path);
       }
     }
   }


[incubator-iotdb] 02/04: Merge branch 'master' of https://github.com/apache/incubator-iotdb into new_tsFile_v2

Posted by ha...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch new_TsFile
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 92094bd1953604522e794c657d2e4d5b3ffd3305
Merge: affde79 01487e9
Author: HTHou <hh...@outlook.com>
AuthorDate: Wed Feb 26 01:12:26 2020 +0800

    Merge branch 'master' of https://github.com/apache/incubator-iotdb into new_tsFile_v2

 .../SystemDesign/1-TsFile/3-Write.md               |   8 +-
 .../4-StorageEngine/1-StorageEngine.md             |  30 +--
 .../4-StorageEngine/5-DataPartition.md             |  86 +++++++
 .../4-StorageEngine/6-DataManipulation.md          |  96 ++++++++
 .../SystemDesign/7-Connector/3-Spark-TsFile.md     | 101 ++++++++
 .../SystemDesign/7-Connector/4-Spark-IOTDB.md      |  89 +++++++
 docs/Documentation/SystemDesign/0-Content.md       |   6 +-
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |  12 +-
 .../db/query/aggregation/AggregateResult.java      |  95 +++++++-
 .../db/query/aggregation/AggregationType.java      | 100 ++++++++
 .../db/query/aggregation/impl/AvgAggrResult.java   |  33 ++-
 .../db/query/aggregation/impl/CountAggrResult.java |  21 +-
 .../aggregation/impl/FirstValueAggrResult.java     |  38 ++-
 .../aggregation/impl/LastValueAggrResult.java      |  38 ++-
 .../query/aggregation/impl/MaxTimeAggrResult.java  |  24 +-
 .../query/aggregation/impl/MaxValueAggrResult.java |  20 +-
 .../query/aggregation/impl/MinTimeAggrResult.java  |  25 +-
 .../query/aggregation/impl/MinValueAggrResult.java |  21 +-
 .../db/query/aggregation/impl/SumAggrResult.java   |  32 ++-
 .../groupby/GroupByWithValueFilterDataSet.java     |  14 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   6 +-
 .../db/query/executor/AggregationExecutor.java     |   8 +-
 ...ultFactory.java => AggregateResultFactory.java} |  42 +++-
 .../db/query/aggregation/AggregateResultTest.java  | 263 +++++++++++++++++++++
 .../iotdb/db/query/component/SimpleFileWriter.java |  54 -----
 .../reader/series/SeriesAggregateReaderTest.java   |   4 +-
 server/src/test/resources/logback.xml              |   9 +-
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |  14 +-
 .../apache/iotdb/tsfile/write/page/PageWriter.java |  12 +-
 29 files changed, 1126 insertions(+), 175 deletions(-)