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

jiangtian pushed a commit to branch tsFile_v4
in repository https://gitbox.apache.org/repos/asf/tsfile.git


The following commit(s) were added to refs/heads/tsFile_v4 by this push:
     new 6f99016a Replace MeasurmentId with interface Fix empty deviceId 
initialization
6f99016a is described below

commit 6f99016a10456262b0c3b9aa89476609a486f6fc
Author: Tian Jiang <[email protected]>
AuthorDate: Mon Apr 15 13:03:01 2024 +0800

    Replace MeasurmentId with interface
    Fix empty deviceId initialization
---
 .../tsfile/TsFileWriteAlignedWithTSRecord.java     |   4 +-
 .../tsfile/TsFileWriteAlignedWithTablet.java       |   6 +-
 .../org/apache/tsfile/TsFileWriteWithTSRecord.java |   4 +-
 .../org/apache/tsfile/TsFileWriteWithTablet.java   |   4 +-
 .../tsfile/file/metadata/LogicalTableSchema.java   |   9 +-
 .../tsfile/file/metadata/StringArrayDeviceID.java  |   4 +
 .../apache/tsfile/file/metadata/TableSchema.java   |  13 +--
 .../apache/tsfile/read/TsFileSequenceReader.java   |  22 +++--
 .../apache/tsfile/read/common/block/TsBlock.java   |   3 +-
 .../org/apache/tsfile/utils/MeasurementGroup.java  |  13 +--
 .../apache/tsfile/utils/TsFileGeneratorUtils.java  |  16 ++--
 .../java/org/apache/tsfile/write/TsFileWriter.java | 105 ++++++++-------------
 .../write/chunk/AlignedChunkGroupWriterImpl.java   |  13 +--
 .../tsfile/write/chunk/IChunkGroupWriter.java      |   5 +-
 .../chunk/NonAlignedChunkGroupWriterImpl.java      |   6 +-
 .../org/apache/tsfile/write/record/Tablet.java     |  33 +++----
 .../org/apache/tsfile/write/schema/Schema.java     |   6 +-
 .../write/writer/RestorableTsFileIOWriter.java     |  11 ++-
 .../tsfile/read/TsFileSequenceReaderTest.java      |   8 +-
 .../org/apache/tsfile/tableview/TableViewTest.java |  15 +--
 .../org/apache/tsfile/utils/FileGenerator.java     |   3 +-
 .../tsfile/utils/TsFileGeneratorForTest.java       |   5 +-
 .../tsfile/write/DefaultSchemaTemplateTest.java    |   5 +-
 .../tsfile/write/MetadataIndexConstructorTest.java |   5 +-
 .../apache/tsfile/write/TsFileIOWriterTest.java    |   7 +-
 .../apache/tsfile/write/TsFileWriteApiTest.java    |  26 ++---
 .../org/apache/tsfile/write/TsFileWriterTest.java  |   9 +-
 .../java/org/apache/tsfile/write/WriteTest.java    |   5 +-
 .../org/apache/tsfile/write/record/TabletTest.java |   5 +-
 .../write/schema/converter/SchemaBuilderTest.java  |   4 +-
 .../write/writer/RestorableTsFileIOWriterTest.java |   4 +-
 31 files changed, 190 insertions(+), 188 deletions(-)

diff --git 
a/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java 
b/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
index d218fc94..3b376a2c 100644
--- 
a/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
+++ 
b/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTSRecord.java
@@ -55,7 +55,7 @@ public class TsFileWriteAlignedWithTSRecord {
     }
 
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       measurementSchemas.add(
           new MeasurementSchema(Constant.SENSOR_1, TSDataType.INT64, 
TSEncoding.RLE));
       measurementSchemas.add(
@@ -76,7 +76,7 @@ public class TsFileWriteAlignedWithTSRecord {
   private static void writeAligned(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowSize,
       long startTime,
       long startValue)
diff --git 
a/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java 
b/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
index d82acc62..c5113f54 100644
--- a/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
+++ b/examples/src/main/java/org/apache/tsfile/TsFileWriteAlignedWithTablet.java
@@ -59,7 +59,7 @@ public class TsFileWriteAlignedWithTablet {
     }
 
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       measurementSchemas.add(new MeasurementSchema(SENSOR_1, TSDataType.TEXT, 
TSEncoding.PLAIN));
       measurementSchemas.add(new MeasurementSchema(SENSOR_2, TSDataType.TEXT, 
TSEncoding.PLAIN));
       measurementSchemas.add(new MeasurementSchema(SENSOR_3, TSDataType.TEXT, 
TSEncoding.PLAIN));
@@ -79,7 +79,7 @@ public class TsFileWriteAlignedWithTablet {
   private static void writeAlignedWithTablet(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowNum,
       long startTime,
       long startValue)
@@ -117,7 +117,7 @@ public class TsFileWriteAlignedWithTablet {
     tsFileWriter.registerTimeseries(
         new Path(DEVICE_2), new MeasurementSchema(SENSOR_2, TSDataType.INT64, 
TSEncoding.RLE));
     // construct Tablet
-    List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+    List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
     measurementSchemas.add(new MeasurementSchema(SENSOR_1, TSDataType.INT64, 
TSEncoding.RLE));
     measurementSchemas.add(new MeasurementSchema(SENSOR_2, TSDataType.INT64, 
TSEncoding.RLE));
     Tablet tablet = new Tablet(DEVICE_2, measurementSchemas);
diff --git 
a/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java 
b/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
index 3d0d7ff7..46a49622 100644
--- a/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
+++ b/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTSRecord.java
@@ -56,7 +56,7 @@ public class TsFileWriteWithTSRecord {
       }
 
       try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
-        List<MeasurementSchema> schemas = new ArrayList<>();
+        List<IMeasurementSchema> schemas = new ArrayList<>();
         schemas.add(new MeasurementSchema(Constant.SENSOR_1, TSDataType.INT64, 
TSEncoding.RLE));
         schemas.add(new MeasurementSchema(Constant.SENSOR_2, TSDataType.INT64, 
TSEncoding.RLE));
         schemas.add(new MeasurementSchema(Constant.SENSOR_3, TSDataType.INT64, 
TSEncoding.RLE));
@@ -75,7 +75,7 @@ public class TsFileWriteWithTSRecord {
   private static void write(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowSize,
       long startTime,
       long startValue)
diff --git 
a/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java 
b/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
index 2461f1da..1109b6cc 100644
--- a/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
+++ b/examples/src/main/java/org/apache/tsfile/TsFileWriteWithTablet.java
@@ -53,7 +53,7 @@ public class TsFileWriteWithTablet {
       }
 
       try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
-        List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+        List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
         measurementSchemas.add(
             new MeasurementSchema(Constant.SENSOR_1, TSDataType.TEXT, 
TSEncoding.PLAIN));
         measurementSchemas.add(
@@ -75,7 +75,7 @@ public class TsFileWriteWithTablet {
   private static void writeWithTablet(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowNum,
       long startTime,
       long startValue)
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/LogicalTableSchema.java 
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/LogicalTableSchema.java
index d25fb8c6..e61008b8 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/LogicalTableSchema.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/LogicalTableSchema.java
@@ -23,6 +23,7 @@ import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.write.record.Tablet.ColumnType;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import java.util.ArrayList;
@@ -46,8 +47,8 @@ public class LogicalTableSchema extends TableSchema {
     this.maxLevel = Math.max(this.maxLevel, 
chunkGroupMetadata.getDevice().segmentNum());
   }
 
-  private List<MeasurementSchema> generateIdColumns() {
-    List<MeasurementSchema> generatedIdColumns = new ArrayList<>();
+  private List<IMeasurementSchema> generateIdColumns() {
+    List<IMeasurementSchema> generatedIdColumns = new ArrayList<>();
     for (int i = 0; i < maxLevel; i++) {
       generatedIdColumns.add(
           new MeasurementSchema(
@@ -58,12 +59,12 @@ public class LogicalTableSchema extends TableSchema {
 
   /** Once called, the schema is no longer updatable. */
   @Override
-  public List<MeasurementSchema> getColumnSchemas() {
+  public List<IMeasurementSchema> getColumnSchemas() {
     if (!updatable) {
       return columnSchemas;
     }
 
-    List<MeasurementSchema> allColumns = new ArrayList<>(generateIdColumns());
+    List<IMeasurementSchema> allColumns = new ArrayList<>(generateIdColumns());
     List<ColumnType> allColumnTypes = ColumnType.nCopy(ColumnType.ID, 
allColumns.size());
     allColumns.addAll(columnSchemas);
     allColumnTypes.addAll(columnTypes);
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java 
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
index a19b26d2..c882481f 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/StringArrayDeviceID.java
@@ -154,6 +154,10 @@ public class StringArrayDeviceID implements IDeviceID {
 
   public static StringArrayDeviceID deserialize(InputStream stream) throws 
IOException {
     final int cnt = ReadWriteIOUtils.readInt(stream);
+    if (cnt == 0) {
+      return new StringArrayDeviceID(new String[] {""});
+    }
+
     String[] segments = new String[cnt];
     for (int i = 0; i < cnt; i++) {
       final int stringSize = ReadWriteIOUtils.readInt(stream);
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableSchema.java 
b/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableSchema.java
index 7005d779..28ebe767 100644
--- a/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableSchema.java
+++ b/tsfile/src/main/java/org/apache/tsfile/file/metadata/TableSchema.java
@@ -22,6 +22,7 @@ package org.apache.tsfile.file.metadata;
 import org.apache.tsfile.compatibility.DeserializeConfig;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.apache.tsfile.write.record.Tablet.ColumnType;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import java.io.IOException;
@@ -36,7 +37,7 @@ public class TableSchema {
   // the tableName is not serialized since the TableSchema is always stored in 
a Map, from whose
   // key the tableName can be known
   protected String tableName;
-  protected List<MeasurementSchema> columnSchemas;
+  protected List<IMeasurementSchema> columnSchemas;
   protected List<ColumnType> columnTypes;
   protected boolean updatable = false;
 
@@ -51,7 +52,7 @@ public class TableSchema {
   }
 
   public TableSchema(
-      String tableName, List<MeasurementSchema> columnSchemas, 
List<ColumnType> columnTypes) {
+      String tableName, List<IMeasurementSchema> columnSchemas, 
List<ColumnType> columnTypes) {
     this.tableName = tableName;
     this.columnSchemas = columnSchemas;
     this.columnTypes = columnTypes;
@@ -78,7 +79,7 @@ public class TableSchema {
             });
   }
 
-  public MeasurementSchema findColumnSchema(String columnName) {
+  public IMeasurementSchema findColumnSchema(String columnName) {
     final int columnIndex = findColumnIndex(columnName);
     return columnIndex >= 0 ? columnSchemas.get(columnIndex) : null;
   }
@@ -99,7 +100,7 @@ public class TableSchema {
     }
   }
 
-  public List<MeasurementSchema> getColumnSchemas() {
+  public List<IMeasurementSchema> getColumnSchemas() {
     return columnSchemas;
   }
 
@@ -112,7 +113,7 @@ public class TableSchema {
     if (columnSchemas != null) {
       cnt += ReadWriteIOUtils.write(columnSchemas.size(), out);
       for (int i = 0; i < columnSchemas.size(); i++) {
-        MeasurementSchema columnSchema = columnSchemas.get(i);
+        IMeasurementSchema columnSchema = columnSchemas.get(i);
         ColumnType columnType = columnTypes.get(i);
         cnt += columnSchema.serializeTo(out);
         cnt += ReadWriteIOUtils.write(columnType.ordinal(), out);
@@ -126,7 +127,7 @@ public class TableSchema {
 
   public static TableSchema deserialize(ByteBuffer buffer, DeserializeConfig 
context) {
     final int tableNum = buffer.getInt();
-    List<MeasurementSchema> measurementSchemas = new ArrayList<>(tableNum);
+    List<IMeasurementSchema> measurementSchemas = new ArrayList<>(tableNum);
     List<ColumnType> columnTypes = new ArrayList<>();
     for (int i = 0; i < tableNum; i++) {
       MeasurementSchema measurementSchema =
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java 
b/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
index 1e656910..edd7e421 100644
--- a/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
+++ b/tsfile/src/main/java/org/apache/tsfile/read/TsFileSequenceReader.java
@@ -70,6 +70,7 @@ import org.apache.tsfile.utils.TsPrimitiveType;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
+import org.apache.tsfile.write.schema.Schema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -1888,7 +1889,7 @@ public class TsFileSequenceReader implements 
AutoCloseable {
    */
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   public long selfCheck(
-      Map<Path, IMeasurementSchema> newSchema,
+      Schema schema,
       List<ChunkGroupMetadata> chunkGroupMetadataList,
       boolean fastFinish)
       throws IOException {
@@ -2095,10 +2096,9 @@ public class TsFileSequenceReader implements 
AutoCloseable {
             truncatedSize = this.position() - 1;
             if (lastDeviceId != null) {
               // schema of last chunk group
-              if (newSchema != null) {
+              if (schema != null) {
                 for (IMeasurementSchema tsSchema : measurementSchemaList) {
-                  newSchema.putIfAbsent(
-                      new Path(lastDeviceId, tsSchema.getMeasurementId(), 
true), tsSchema);
+                  schema.registerTimeseries(lastDeviceId, tsSchema);
                 }
               }
               measurementSchemaList = new ArrayList<>();
@@ -2114,10 +2114,9 @@ public class TsFileSequenceReader implements 
AutoCloseable {
             truncatedSize = this.position() - 1;
             if (lastDeviceId != null) {
               // schema of last chunk group
-              if (newSchema != null) {
+              if (schema != null) {
                 for (IMeasurementSchema tsSchema : measurementSchemaList) {
-                  newSchema.putIfAbsent(
-                      new Path(lastDeviceId, tsSchema.getMeasurementId(), 
true), tsSchema);
+                  schema.registerTimeseries(lastDeviceId, tsSchema);
                 }
               }
               measurementSchemaList = new ArrayList<>();
@@ -2137,10 +2136,9 @@ public class TsFileSequenceReader implements 
AutoCloseable {
       // ChunkGroupFooter is complete.
       if (lastDeviceId != null) {
         // schema of last chunk group
-        if (newSchema != null) {
+        if (schema != null) {
           for (IMeasurementSchema tsSchema : measurementSchemaList) {
-            newSchema.putIfAbsent(
-                new Path(lastDeviceId, tsSchema.getMeasurementId(), true), 
tsSchema);
+            schema.registerTimeseries(lastDeviceId, tsSchema);
           }
         }
         // last chunk group Metadata
@@ -2158,6 +2156,10 @@ public class TsFileSequenceReader implements 
AutoCloseable {
           this.position(),
           e.getMessage());
     }
+
+    for (ChunkGroupMetadata chunkGroupMetadata : chunkGroupMetadataList) {
+      schema.updateTableSchema(chunkGroupMetadata);
+    }
     // Despite the completeness of the data section, we will discard current 
FileMetadata
     // so that we can continue to write data into this tsfile.
     return truncatedSize;
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlock.java 
b/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlock.java
index 2774a2c3..bd1f1e86 100644
--- a/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlock.java
+++ b/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlock.java
@@ -29,6 +29,7 @@ import org.apache.tsfile.read.reader.IPointReader;
 import org.apache.tsfile.utils.RamUsageEstimator;
 import org.apache.tsfile.utils.TsPrimitiveType;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import java.util.Arrays;
@@ -578,7 +579,7 @@ public class TsBlock {
     Column[] columns = new Column[columnNames.size()];
     for (int i = 0; i < columnNames.size(); i++) {
       final String columnName = columnNames.get(i);
-      final MeasurementSchema columnSchema = 
schema.findColumnSchema(columnName);
+      final IMeasurementSchema columnSchema = 
schema.findColumnSchema(columnName);
       columns[i] = ColumnFactory.create(columnSchema.getType(), blockSize);
     }
     return new TsBlock(timeColumn, columns);
diff --git a/tsfile/src/main/java/org/apache/tsfile/utils/MeasurementGroup.java 
b/tsfile/src/main/java/org/apache/tsfile/utils/MeasurementGroup.java
index 996e3476..16c6880c 100644
--- a/tsfile/src/main/java/org/apache/tsfile/utils/MeasurementGroup.java
+++ b/tsfile/src/main/java/org/apache/tsfile/utils/MeasurementGroup.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tsfile.utils;
 
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import java.io.Serializable;
@@ -27,22 +28,22 @@ import java.util.Map;
 
 public class MeasurementGroup implements Serializable {
   private boolean isAligned;
-  private Map<String, MeasurementSchema> measurementSchemaMap;
+  private Map<String, IMeasurementSchema> measurementSchemaMap;
 
   public MeasurementGroup(boolean isAligned) {
     this.isAligned = isAligned;
     measurementSchemaMap = new HashMap<>();
   }
 
-  public MeasurementGroup(boolean isAligned, List<MeasurementSchema> 
measurementSchemas) {
+  public MeasurementGroup(boolean isAligned, List<IMeasurementSchema> 
measurementSchemas) {
     this.isAligned = isAligned;
     measurementSchemaMap = new HashMap<>();
-    for (MeasurementSchema schema : measurementSchemas) {
+    for (IMeasurementSchema schema : measurementSchemas) {
       measurementSchemaMap.put(schema.getMeasurementId(), schema);
     }
   }
 
-  public MeasurementGroup(boolean isAligned, Map<String, MeasurementSchema> 
measurementSchemaMap) {
+  public MeasurementGroup(boolean isAligned, Map<String, IMeasurementSchema> 
measurementSchemaMap) {
     this.isAligned = isAligned;
     this.measurementSchemaMap = measurementSchemaMap;
   }
@@ -55,11 +56,11 @@ public class MeasurementGroup implements Serializable {
     isAligned = aligned;
   }
 
-  public Map<String, MeasurementSchema> getMeasurementSchemaMap() {
+  public Map<String, IMeasurementSchema> getMeasurementSchemaMap() {
     return measurementSchemaMap;
   }
 
-  public void setMeasurementSchemaMap(Map<String, MeasurementSchema> 
measurementSchemaMap) {
+  public void setMeasurementSchemaMap(Map<String, IMeasurementSchema> 
measurementSchemaMap) {
     this.measurementSchemaMap = measurementSchemaMap;
   }
 }
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/utils/TsFileGeneratorUtils.java 
b/tsfile/src/main/java/org/apache/tsfile/utils/TsFileGeneratorUtils.java
index d029dd63..a8e1e259 100644
--- a/tsfile/src/main/java/org/apache/tsfile/utils/TsFileGeneratorUtils.java
+++ b/tsfile/src/main/java/org/apache/tsfile/utils/TsFileGeneratorUtils.java
@@ -51,7 +51,7 @@ public class TsFileGeneratorUtils {
   public static void writeWithTsRecord(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowSize,
       long startTime,
       long startValue,
@@ -76,7 +76,7 @@ public class TsFileGeneratorUtils {
   public static void writeWithTablet(
       TsFileWriter tsFileWriter,
       String deviceId,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long rowNum,
       long startTime,
       long startValue,
@@ -139,7 +139,7 @@ public class TsFileGeneratorUtils {
         
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
       try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
         // register align timeseries
-        List<MeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
+        List<IMeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
         for (int i = 0; i < measurementNum; i++) {
           alignedMeasurementSchemas.add(
               new MeasurementSchema("s" + i, TSDataType.INT64, 
TSEncoding.PLAIN));
@@ -162,7 +162,7 @@ public class TsFileGeneratorUtils {
         }
 
         // register nonAlign timeseries
-        List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+        List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
         for (int i = 0; i < measurementNum; i++) {
           measurementSchemas.add(
               new MeasurementSchema("s" + i, TSDataType.INT64, 
TSEncoding.PLAIN));
@@ -211,7 +211,7 @@ public class TsFileGeneratorUtils {
       
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
     try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
       // register align timeseries
-      List<MeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
       for (int i = 0; i < measurementNum; i++) {
         alignedMeasurementSchemas.add(
             new MeasurementSchema("s" + i, TSDataType.INT64, 
TSEncoding.PLAIN));
@@ -256,7 +256,7 @@ public class TsFileGeneratorUtils {
       
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
     try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
       // register nonAlign timeseries
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       for (int i = 0; i < measurementNum; i++) {
         measurementSchemas.add(new MeasurementSchema("s" + i, 
TSDataType.INT64, TSEncoding.PLAIN));
       }
@@ -300,7 +300,7 @@ public class TsFileGeneratorUtils {
       
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
     try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
       // register align timeseries
-      List<MeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
       for (int i = 0; i < measurementIndex.size(); i++) {
         alignedMeasurementSchemas.add(
             new MeasurementSchema(
@@ -358,7 +358,7 @@ public class TsFileGeneratorUtils {
       
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
     try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
       // register nonAlign timeseries
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       for (int i = 0; i < measurementIndex.size(); i++) {
         measurementSchemas.add(
             new MeasurementSchema(
diff --git a/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java 
b/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
index 6b4ef019..a8e00946 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/TsFileWriter.java
@@ -58,15 +58,17 @@ import java.util.Map;
 /**
  * TsFileWriter is the entrance for writing processing. It receives a record 
and send it to
  * responding chunk group write. It checks memory size for all writing 
processing along its strategy
- * and flush data stored in memory to OutputStream. At the end of writing, 
user should call {@code
- * close()} method to flush the last data outside and close the normal 
outputStream and error
+ * and flush data stored in memory to OutputStream. At the end of writing, 
user should call
+ * {@code close()} method to flush the last data outside and close the normal 
outputStream and error
  * outputStream.
  */
 public class TsFileWriter implements AutoCloseable {
 
   protected static final TSFileConfig config = 
TSFileDescriptor.getInstance().getConfig();
   private static final Logger LOG = 
LoggerFactory.getLogger(TsFileWriter.class);
-  /** IO writer of this TsFile. */
+  /**
+   * IO writer of this TsFile.
+   */
   private final TsFileIOWriter fileWriter;
 
   private final int pageSize;
@@ -89,7 +91,9 @@ public class TsFileWriter implements AutoCloseable {
 
   private Map<IDeviceID, IChunkGroupWriter> groupWriters = new HashMap<>();
 
-  /** min value of threshold of data points num check. */
+  /**
+   * min value of threshold of data points num check.
+   */
   private long recordCountForNextMemCheck = 100;
 
   private long chunkGroupSizeThreshold;
@@ -117,7 +121,7 @@ public class TsFileWriter implements AutoCloseable {
   /**
    * init this TsFileWriter.
    *
-   * @param file the File to be written by this TsFileWriter
+   * @param file   the File to be written by this TsFileWriter
    * @param schema the schema of this TsFile
    */
   public TsFileWriter(File file, Schema schema) throws IOException {
@@ -137,9 +141,9 @@ public class TsFileWriter implements AutoCloseable {
   /**
    * init this TsFileWriter.
    *
-   * @param file the File to be written by this TsFileWriter
+   * @param file   the File to be written by this TsFileWriter
    * @param schema the schema of this TsFile
-   * @param conf the configuration of this TsFile
+   * @param conf   the configuration of this TsFile
    */
   public TsFileWriter(File file, Schema schema, TSFileConfig conf) throws 
IOException {
     this(new TsFileIOWriter(file), schema, conf);
@@ -149,8 +153,8 @@ public class TsFileWriter implements AutoCloseable {
    * init this TsFileWriter.
    *
    * @param fileWriter the io writer of this TsFile
-   * @param schema the schema of this TsFile
-   * @param conf the configuration of this TsFile
+   * @param schema     the schema of this TsFile
+   * @param conf       the configuration of this TsFile
    */
   protected TsFileWriter(TsFileIOWriter fileWriter, Schema schema, 
TSFileConfig conf)
       throws IOException {
@@ -161,43 +165,11 @@ public class TsFileWriter implements AutoCloseable {
     this.fileWriter = fileWriter;
 
     if (fileWriter instanceof RestorableTsFileIOWriter) {
-      Map<Path, IMeasurementSchema> schemaMap =
+      schema =
           ((RestorableTsFileIOWriter) fileWriter).getKnownSchema();
-      Map<IDeviceID, MeasurementGroup> measurementGroupMap = new HashMap<>();
-      for (Map.Entry<Path, IMeasurementSchema> entry : schemaMap.entrySet()) {
-        IMeasurementSchema measurementSchema = entry.getValue();
-        if (measurementSchema instanceof VectorMeasurementSchema) {
-          final IDeviceID deviceID =
-              
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDeviceString());
-          MeasurementGroup group =
-              measurementGroupMap.getOrDefault(deviceID, new 
MeasurementGroup(true));
-          List<String> measurementList = 
measurementSchema.getSubMeasurementsList();
-          for (int i = 0; i < measurementList.size(); i++) {
-            group
-                .getMeasurementSchemaMap()
-                .put(
-                    measurementList.get(i),
-                    new MeasurementSchema(
-                        measurementList.get(i),
-                        
measurementSchema.getSubMeasurementsTSDataTypeList().get(i),
-                        
measurementSchema.getSubMeasurementsTSEncodingList().get(i)));
-          }
-          measurementGroupMap.put(deviceID, group);
-        } else {
-          final IDeviceID deviceID =
-              
IDeviceID.Factory.DEFAULT_FACTORY.create(entry.getKey().getDeviceString());
-          MeasurementGroup group =
-              measurementGroupMap.getOrDefault(deviceID, new 
MeasurementGroup(false));
-          group
-              .getMeasurementSchemaMap()
-              .put(measurementSchema.getMeasurementId(), (MeasurementSchema) 
measurementSchema);
-          measurementGroupMap.put(deviceID, group);
-        }
-      }
-      getSchema().setRegisteredTimeseries(measurementGroupMap);
-    } else {
-      fileWriter.setSchema(schema);
     }
+    fileWriter.setSchema(schema);
+
     this.pageSize = conf.getPageSizeInByte();
     this.chunkGroupSizeThreshold = conf.getGroupSizeInByte();
     config.setTSFileStorageFs(conf.getTSFileStorageFs());
@@ -211,7 +183,7 @@ public class TsFileWriter implements AutoCloseable {
   }
 
   public void registerSchemaTemplate(
-      String templateName, Map<String, MeasurementSchema> template, boolean 
isAligned) {
+      String templateName, Map<String, IMeasurementSchema> template, boolean 
isAligned) {
     getSchema().registerSchemaTemplate(templateName, new 
MeasurementGroup(isAligned, template));
   }
 
@@ -235,14 +207,16 @@ public class TsFileWriter implements AutoCloseable {
   }
 
   @Deprecated
-  public void registerTimeseries(Path devicePath, MeasurementSchema 
measurementSchema)
+  public void registerTimeseries(Path devicePath, IMeasurementSchema 
measurementSchema)
       throws WriteProcessException {
     registerTimeseries(
         
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()), 
measurementSchema);
   }
 
-  /** Register nonAligned timeseries by single. */
-  public void registerTimeseries(IDeviceID deviceID, MeasurementSchema 
measurementSchema)
+  /**
+   * Register nonAligned timeseries by single.
+   */
+  public void registerTimeseries(IDeviceID deviceID, IMeasurementSchema 
measurementSchema)
       throws WriteProcessException {
     MeasurementGroup measurementGroup;
     if (getSchema().containsDevice(deviceID)) {
@@ -269,8 +243,8 @@ public class TsFileWriter implements AutoCloseable {
 
   @Deprecated
   /** Register nonAligned timeseries by groups. */
-  public void registerTimeseries(Path devicePath, List<MeasurementSchema> 
measurementSchemas) {
-    for (MeasurementSchema schema : measurementSchemas) {
+  public void registerTimeseries(Path devicePath, List<IMeasurementSchema> 
measurementSchemas) {
+    for (IMeasurementSchema schema : measurementSchemas) {
       try {
         registerTimeseries(
             
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()), schema);
@@ -280,17 +254,18 @@ public class TsFileWriter implements AutoCloseable {
     }
   }
 
-  public void registerAlignedTimeseries(Path devicePath, 
List<MeasurementSchema> measurementSchemas)
+  public void registerAlignedTimeseries(Path devicePath, 
List<IMeasurementSchema> measurementSchemas)
       throws WriteProcessException {
     registerAlignedTimeseries(
         
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()), 
measurementSchemas);
   }
+
   /**
    * Register aligned timeseries. Once the device is registered for aligned 
timeseries, it cannot be
    * expanded.
    */
   public void registerAlignedTimeseries(
-      IDeviceID deviceID, List<MeasurementSchema> measurementSchemas) throws 
WriteProcessException {
+      IDeviceID deviceID, List<IMeasurementSchema> measurementSchemas) throws 
WriteProcessException {
     if (getSchema().containsDevice(deviceID)) {
       if (getSchema().getSeriesSchema(deviceID).isAligned()) {
         throw new WriteProcessException(
@@ -319,7 +294,7 @@ public class TsFileWriter implements AutoCloseable {
     IChunkGroupWriter groupWriter = tryToInitialGroupWriter(deviceID, 
isAligned);
 
     // initial all SeriesWriters of measurements in this TSRecord
-    List<MeasurementSchema> measurementSchemas;
+    List<IMeasurementSchema> measurementSchemas;
     if (getSchema().containsDevice(deviceID)) {
       measurementSchemas =
           checkIsAllMeasurementsInGroup(
@@ -358,12 +333,12 @@ public class TsFileWriter implements AutoCloseable {
       throw new NoTableException(tableName);
     }
 
-    for (MeasurementSchema writingColumnSchema : tablet.getSchemas()) {
+    for (IMeasurementSchema writingColumnSchema : tablet.getSchemas()) {
       final int columnIndex = 
tableSchema.findColumnIndex(writingColumnSchema.getMeasurementId());
       if (columnIndex < 0) {
         throw new 
NoMeasurementException(writingColumnSchema.getMeasurementId());
       }
-      final MeasurementSchema registeredColumnSchema =
+      final IMeasurementSchema registeredColumnSchema =
           tableSchema.getColumnSchemas().get(columnIndex);
       if 
(!writingColumnSchema.getType().equals(registeredColumnSchema.getType())) {
         throw new ConflictDataTypeException(
@@ -377,7 +352,7 @@ public class TsFileWriter implements AutoCloseable {
     final IDeviceID deviceID = 
IDeviceID.Factory.DEFAULT_FACTORY.create(tablet.insertTargetName);
     IChunkGroupWriter groupWriter = tryToInitialGroupWriter(deviceID, 
isAligned);
 
-    List<MeasurementSchema> schemas = tablet.getSchemas();
+    List<IMeasurementSchema> schemas = tablet.getSchemas();
     if (getSchema().containsDevice(deviceID)) {
       checkIsAllMeasurementsInGroup(getSchema().getSeriesSchema(deviceID), 
schemas, isAligned);
       if (isAligned) {
@@ -411,7 +386,7 @@ public class TsFileWriter implements AutoCloseable {
    */
   private void checkIsAllMeasurementsInGroup(
       MeasurementGroup measurementGroup,
-      List<MeasurementSchema> measurementSchemas,
+      List<IMeasurementSchema> measurementSchemas,
       boolean isAligned)
       throws NoMeasurementException {
     if (isAligned && !measurementGroup.isAligned()) {
@@ -419,7 +394,7 @@ public class TsFileWriter implements AutoCloseable {
     } else if (!isAligned && measurementGroup.isAligned()) {
       throw new NoMeasurementException("nonAligned");
     }
-    for (MeasurementSchema measurementSchema : measurementSchemas) {
+    for (IMeasurementSchema measurementSchema : measurementSchemas) {
       if (!measurementGroup
           .getMeasurementSchemaMap()
           .containsKey(measurementSchema.getMeasurementId())) {
@@ -432,8 +407,10 @@ public class TsFileWriter implements AutoCloseable {
     }
   }
 
-  /** Check whether all measurements of dataPoints list are in the 
measurementGroup. */
-  private List<MeasurementSchema> checkIsAllMeasurementsInGroup(
+  /**
+   * Check whether all measurements of dataPoints list are in the 
measurementGroup.
+   */
+  private List<IMeasurementSchema> checkIsAllMeasurementsInGroup(
       List<DataPoint> dataPoints, MeasurementGroup measurementGroup, boolean 
isAligned)
       throws NoMeasurementException {
     if (isAligned && !measurementGroup.isAligned()) {
@@ -441,7 +418,7 @@ public class TsFileWriter implements AutoCloseable {
     } else if (!isAligned && measurementGroup.isAligned()) {
       throw new NoMeasurementException("nonAligned");
     }
-    List<MeasurementSchema> schemas = new ArrayList<>();
+    List<IMeasurementSchema> schemas = new ArrayList<>();
     for (DataPoint dataPoint : dataPoints) {
       if 
(!measurementGroup.getMeasurementSchemaMap().containsKey(dataPoint.getMeasurementId()))
 {
         if (isAligned) {
@@ -486,7 +463,7 @@ public class TsFileWriter implements AutoCloseable {
    *
    * @param record - record responding a data line
    * @return true -size of tsfile or metadata reaches the threshold. false - 
otherwise
-   * @throws IOException exception in IO
+   * @throws IOException           exception in IO
    * @throws WriteProcessException exception in write process
    */
   public boolean write(TSRecord record) throws IOException, 
WriteProcessException {
@@ -511,7 +488,7 @@ public class TsFileWriter implements AutoCloseable {
    * write a tablet
    *
    * @param tablet - multiple time series of one device that share a time 
column
-   * @throws IOException exception in IO
+   * @throws IOException           exception in IO
    * @throws WriteProcessException exception in write process
    */
   public boolean write(Tablet tablet) throws IOException, 
WriteProcessException {
@@ -577,7 +554,7 @@ public class TsFileWriter implements AutoCloseable {
    * outputStream.
    *
    * @return true - size of tsfile or metadata reaches the threshold. false - 
otherwise. But this
-   *     function just return false, the Override of IoTDB may return true.
+   * function just return false, the Override of IoTDB may return true.
    * @throws IOException exception in IO
    */
   public boolean flushAllChunkGroups() throws IOException {
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
 
b/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
index 08054c22..9bea331d 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
@@ -31,6 +31,7 @@ import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.writer.TsFileIOWriter;
 
@@ -69,11 +70,11 @@ public class AlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
   }
 
   @Override
-  public void tryToAddSeriesWriter(MeasurementSchema measurementSchema) throws 
IOException {
+  public void tryToAddSeriesWriter(IMeasurementSchema measurementSchema) 
throws IOException {
     tryToAddSeriesWriterInternal(measurementSchema);
   }
 
-  public ValueChunkWriter tryToAddSeriesWriterInternal(MeasurementSchema 
measurementSchema)
+  public ValueChunkWriter tryToAddSeriesWriterInternal(IMeasurementSchema 
measurementSchema)
       throws IOException {
     ValueChunkWriter valueChunkWriter =
         valueChunkWriterMap.get(measurementSchema.getMeasurementId());
@@ -92,8 +93,8 @@ public class AlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
   }
 
   @Override
-  public void tryToAddSeriesWriter(List<MeasurementSchema> measurementSchemas) 
throws IOException {
-    for (MeasurementSchema schema : measurementSchemas) {
+  public void tryToAddSeriesWriter(List<IMeasurementSchema> 
measurementSchemas) throws IOException {
+    for (IMeasurementSchema schema : measurementSchemas) {
       if (!valueChunkWriterMap.containsKey(schema.getMeasurementId())) {
         ValueChunkWriter valueChunkWriter =
             new ValueChunkWriter(
@@ -172,12 +173,12 @@ public class AlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
       Tablet tablet, int startRowIndex, int endRowIndex, int startColIndex, 
int endColIndex)
       throws WriteProcessException, IOException {
     int pointCount = 0;
-    List<MeasurementSchema> measurementSchemas = tablet.getSchemas();
+    List<IMeasurementSchema> measurementSchemas = tablet.getSchemas();
     List<ValueChunkWriter> emptyValueChunkWriters = new ArrayList<>();
     // TODO: should we allow duplicated measurements in a Tablet?
     Set<String> existingMeasurements =
         measurementSchemas.stream()
-            .map(MeasurementSchema::getMeasurementId)
+            .map(IMeasurementSchema::getMeasurementId)
             .collect(Collectors.toSet());
     for (Map.Entry<String, ValueChunkWriter> entry : 
valueChunkWriterMap.entrySet()) {
       if (!existingMeasurements.contains(entry.getKey())) {
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/write/chunk/IChunkGroupWriter.java 
b/tsfile/src/main/java/org/apache/tsfile/write/chunk/IChunkGroupWriter.java
index f63c8950..e0932474 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/chunk/IChunkGroupWriter.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/chunk/IChunkGroupWriter.java
@@ -21,6 +21,7 @@ package org.apache.tsfile.write.chunk;
 import org.apache.tsfile.exception.write.WriteProcessException;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.writer.TsFileIOWriter;
 
@@ -82,13 +83,13 @@ public interface IChunkGroupWriter {
    *
    * @param measurementSchema a measurement descriptor containing the message 
of the series
    */
-  void tryToAddSeriesWriter(MeasurementSchema measurementSchema) throws 
IOException;
+  void tryToAddSeriesWriter(IMeasurementSchema measurementSchema) throws 
IOException;
 
   /**
    * given a measurement descriptor list, create corresponding writers and put 
into this
    * ChunkGroupWriter.
    */
-  void tryToAddSeriesWriter(List<MeasurementSchema> measurementSchemas) throws 
IOException;
+  void tryToAddSeriesWriter(List<IMeasurementSchema> measurementSchemas) 
throws IOException;
 
   /**
    * get the serialized size of current chunkGroup header + all chunks. 
Notice, the value does not
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
 
b/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
index 3512b8ce..799dc21e 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
@@ -57,14 +57,14 @@ public class NonAlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
   }
 
   @Override
-  public void tryToAddSeriesWriter(MeasurementSchema schema) {
+  public void tryToAddSeriesWriter(IMeasurementSchema schema) {
     if (!chunkWriters.containsKey(schema.getMeasurementId())) {
       this.chunkWriters.put(schema.getMeasurementId(), new 
ChunkWriterImpl(schema));
     }
   }
 
   @Override
-  public void tryToAddSeriesWriter(List<MeasurementSchema> schemas) {
+  public void tryToAddSeriesWriter(List<IMeasurementSchema> schemas) {
     for (IMeasurementSchema schema : schemas) {
       if (!chunkWriters.containsKey(schema.getMeasurementId())) {
         this.chunkWriters.put(schema.getMeasurementId(), new 
ChunkWriterImpl(schema));
@@ -103,7 +103,7 @@ public class NonAlignedChunkGroupWriterImpl implements 
IChunkGroupWriter {
       Tablet tablet, int startRowIndex, int endRowIndex, int startColIndex, 
int endColIndex)
       throws WriteProcessException, IOException {
     int maxPointCount = 0, pointCount;
-    List<MeasurementSchema> timeseries = tablet.getSchemas();
+    List<IMeasurementSchema> timeseries = tablet.getSchemas();
     for (int column = startColIndex; column < endColIndex; column++) {
       String measurementId = timeseries.get(column).getMeasurementId();
       TSDataType tsDataType = timeseries.get(column).getType();
diff --git a/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java 
b/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
index 1049752b..0baad826 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/record/Tablet.java
@@ -29,6 +29,7 @@ import org.apache.tsfile.utils.BytesUtils;
 import org.apache.tsfile.utils.PublicBAOS;
 import org.apache.tsfile.utils.ReadWriteIOUtils;
 import org.apache.tsfile.write.UnSupportedDataTypeException;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import java.io.DataOutputStream;
@@ -59,7 +60,7 @@ public class Tablet {
   public String insertTargetName;
 
   /** The list of {@link MeasurementSchema}s for creating the {@link Tablet} */
-  private List<MeasurementSchema> schemas;
+  private List<IMeasurementSchema> schemas;
   /**
    * Marking the type of each column, namely ID or MEASUREMENT. Notice: the ID 
columns must be the
    * FIRST ones.
@@ -91,11 +92,11 @@ public class Tablet {
    * @param schemas the list of {@link MeasurementSchema}s for creating the 
tablet, only
    *     measurementId and type take effects
    */
-  public Tablet(String insertTargetName, List<MeasurementSchema> schemas) {
+  public Tablet(String insertTargetName, List<IMeasurementSchema> schemas) {
     this(insertTargetName, schemas, DEFAULT_SIZE);
   }
 
-  public Tablet(String insertTargetName, List<MeasurementSchema> schemas, int 
maxRowNumber) {
+  public Tablet(String insertTargetName, List<IMeasurementSchema> schemas, int 
maxRowNumber) {
     this(
         insertTargetName,
         schemas,
@@ -104,7 +105,7 @@ public class Tablet {
   }
 
   public Tablet(
-      String insertTargetName, List<MeasurementSchema> schemas, 
List<ColumnType> columnTypes) {
+      String insertTargetName, List<IMeasurementSchema> schemas, 
List<ColumnType> columnTypes) {
     this(insertTargetName, schemas, columnTypes, DEFAULT_SIZE);
   }
 
@@ -120,7 +121,7 @@ public class Tablet {
    */
   public Tablet(
       String insertTargetName,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       List<ColumnType> columnTypes,
       int maxRowNumber) {
     this.insertTargetName = insertTargetName;
@@ -149,7 +150,7 @@ public class Tablet {
    */
   public Tablet(
       String insertTargetName,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       long[] timestamps,
       Object[] values,
       BitMap[] bitMaps,
@@ -166,7 +167,7 @@ public class Tablet {
 
   public Tablet(
       String insertTargetName,
-      List<MeasurementSchema> schemas,
+      List<IMeasurementSchema> schemas,
       List<ColumnType> columnTypes,
       long[] timestamps,
       Object[] values,
@@ -187,7 +188,7 @@ public class Tablet {
 
   private void constructMeasurementIndexMap() {
     int indexInSchema = 0;
-    for (MeasurementSchema schema : schemas) {
+    for (IMeasurementSchema schema : schemas) {
       measurementIndex.put(schema.getMeasurementId(), indexInSchema);
       indexInSchema++;
     }
@@ -197,7 +198,7 @@ public class Tablet {
     this.insertTargetName = insertTargetName;
   }
 
-  public void setSchemas(List<MeasurementSchema> schemas) {
+  public void setSchemas(List<IMeasurementSchema> schemas) {
     this.schemas = schemas;
   }
 
@@ -214,7 +215,7 @@ public class Tablet {
 
   public void addValue(String measurementId, int rowIndex, Object value) {
     int indexOfSchema = measurementIndex.get(measurementId);
-    MeasurementSchema measurementSchema = schemas.get(indexOfSchema);
+    IMeasurementSchema measurementSchema = schemas.get(indexOfSchema);
     addValueOfDataType(measurementSchema.getType(), rowIndex, indexOfSchema, 
value);
   }
 
@@ -281,7 +282,7 @@ public class Tablet {
     }
   }
 
-  public List<MeasurementSchema> getSchemas() {
+  public List<IMeasurementSchema> getSchemas() {
     return schemas;
   }
 
@@ -312,7 +313,7 @@ public class Tablet {
     // value column
     values = new Object[valueColumnsSize];
     int columnIndex = 0;
-    for (MeasurementSchema schema : schemas) {
+    for (IMeasurementSchema schema : schemas) {
       TSDataType dataType = schema.getType();
       values[columnIndex] = createValueColumnOfDataType(dataType);
       columnIndex++;
@@ -355,7 +356,7 @@ public class Tablet {
   public int getTotalValueOccupation() {
     int valueOccupation = 0;
     int columnIndex = 0;
-    for (MeasurementSchema schema : schemas) {
+    for (IMeasurementSchema schema : schemas) {
       valueOccupation += calOccupationOfOneColumn(schema.getType(), 
columnIndex);
       columnIndex++;
     }
@@ -422,7 +423,7 @@ public class Tablet {
     ReadWriteIOUtils.write(BytesUtils.boolToByte(schemas != null), stream);
     if (schemas != null) {
       ReadWriteIOUtils.write(schemas.size(), stream);
-      for (MeasurementSchema schema : schemas) {
+      for (IMeasurementSchema schema : schemas) {
         if (schema == null) {
           ReadWriteIOUtils.write(BytesUtils.boolToByte(false), stream);
         } else {
@@ -529,7 +530,7 @@ public class Tablet {
 
     // deserialize schemas
     int schemaSize = 0;
-    List<MeasurementSchema> schemas = new ArrayList<>();
+    List<IMeasurementSchema> schemas = new ArrayList<>();
     boolean isSchemasNotNull = 
BytesUtils.byteToBool(ReadWriteIOUtils.readByte(byteBuffer));
     if (isSchemasNotNull) {
       schemaSize = ReadWriteIOUtils.readInt(byteBuffer);
@@ -559,7 +560,7 @@ public class Tablet {
 
     // deserialize values
     TSDataType[] dataTypes =
-        
schemas.stream().map(MeasurementSchema::getType).toArray(TSDataType[]::new);
+        
schemas.stream().map(IMeasurementSchema::getType).toArray(TSDataType[]::new);
     Object[] values = new Object[schemaSize];
     boolean isValuesNotNull = 
BytesUtils.byteToBool(ReadWriteIOUtils.readByte(byteBuffer));
     if (isValuesNotNull) {
diff --git a/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java 
b/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
index 7f09ce77..a20fd00e 100644
--- a/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
+++ b/tsfile/src/main/java/org/apache/tsfile/write/schema/Schema.java
@@ -56,12 +56,12 @@ public class Schema implements Serializable {
   }
 
   @Deprecated
-  public void registerTimeseries(Path devicePath, MeasurementSchema 
measurementSchema) {
+  public void registerTimeseries(Path devicePath, IMeasurementSchema 
measurementSchema) {
     registerTimeseries(
         
IDeviceID.Factory.DEFAULT_FACTORY.create(devicePath.getDeviceString()), 
measurementSchema);
   }
   // This method can only register nonAligned timeseries.
-  public void registerTimeseries(IDeviceID deviceID, MeasurementSchema 
measurementSchema) {
+  public void registerTimeseries(IDeviceID deviceID, IMeasurementSchema 
measurementSchema) {
     MeasurementGroup group =
         registeredTimeseries.getOrDefault(deviceID, new 
MeasurementGroup(false));
     group.getMeasurementSchemaMap().put(measurementSchema.getMeasurementId(), 
measurementSchema);
@@ -109,7 +109,7 @@ public class Schema implements Serializable {
     if (!schemaTemplates.containsKey(templateName)) {
       return;
     }
-    Map<String, MeasurementSchema> template =
+    Map<String, IMeasurementSchema> template =
         schemaTemplates.get(templateName).getMeasurementSchemaMap();
     boolean isAligned = schemaTemplates.get(templateName).isAligned();
     registerMeasurementGroup(deviceId, new MeasurementGroup(isAligned, 
template));
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
 
b/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
index d5c1b44f..11fecab1 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriter.java
@@ -31,6 +31,7 @@ import org.apache.tsfile.read.TsFileSequenceReader;
 import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 
+import org.apache.tsfile.write.schema.Schema;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -59,7 +60,7 @@ public class RestorableTsFileIOWriter extends TsFileIOWriter {
 
   private static final Logger logger = LoggerFactory.getLogger("FileMonitor");
   private long truncatedSize = -1;
-  private Map<Path, IMeasurementSchema> knownSchemas = new HashMap<>();
+  private Schema schema = new Schema();
 
   private int lastFlushedChunkGroupIndex = 0;
 
@@ -109,7 +110,7 @@ public class RestorableTsFileIOWriter extends 
TsFileIOWriter {
     if (file.exists()) {
       try (TsFileSequenceReader reader = new 
TsFileSequenceReader(file.getAbsolutePath(), false)) {
 
-        truncatedSize = reader.selfCheck(knownSchemas, chunkGroupMetadataList, 
true);
+        truncatedSize = reader.selfCheck(schema, chunkGroupMetadataList, true);
         minPlanIndex = reader.getMinPlanIndex();
         maxPlanIndex = reader.getMaxPlanIndex();
         if (truncatedSize == TsFileCheckStatus.COMPLETE_FILE) {
@@ -167,8 +168,8 @@ public class RestorableTsFileIOWriter extends 
TsFileIOWriter {
     return truncatedSize;
   }
 
-  public Map<Path, IMeasurementSchema> getKnownSchema() {
-    return knownSchemas;
+  public Schema getKnownSchema() {
+    return schema;
   }
 
   /**
@@ -254,7 +255,7 @@ public class RestorableTsFileIOWriter extends 
TsFileIOWriter {
   }
 
   public void addSchema(Path path, IMeasurementSchema schema) {
-    knownSchemas.put(path, schema);
+    this.schema.registerTimeseries(path.getIDeviceID(), schema);
   }
 
   @Override
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/read/TsFileSequenceReaderTest.java 
b/tsfile/src/test/java/org/apache/tsfile/read/TsFileSequenceReaderTest.java
index b07e76ed..c65a7fdb 100644
--- a/tsfile/src/test/java/org/apache/tsfile/read/TsFileSequenceReaderTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/read/TsFileSequenceReaderTest.java
@@ -35,8 +35,10 @@ import org.apache.tsfile.utils.FileGenerator;
 import org.apache.tsfile.utils.Pair;
 import org.apache.tsfile.utils.TsFileGeneratorUtils;
 import org.apache.tsfile.write.TsFileWriter;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
+import org.apache.tsfile.write.schema.Schema;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -148,14 +150,14 @@ public class TsFileSequenceReaderTest {
     // create tsfile with empty page
     try (TsFileWriter tsFileWriter = new TsFileWriter(testFile)) {
       // register aligned timeseries
-      List<MeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
       alignedMeasurementSchemas.add(
           new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN));
       alignedMeasurementSchemas.add(
           new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.PLAIN));
       tsFileWriter.registerAlignedTimeseries(new Path("d1"), 
alignedMeasurementSchemas);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // only write s1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       TsFileGeneratorUtils.writeWithTsRecord(
@@ -173,7 +175,7 @@ public class TsFileSequenceReaderTest {
     try (TsFileSequenceReader reader = new TsFileSequenceReader(FILE_PATH)) {
       Assert.assertEquals(
           TsFileCheckStatus.COMPLETE_FILE,
-          reader.selfCheck(new HashMap<>(), new ArrayList<>(), false));
+          reader.selfCheck(new Schema(), new ArrayList<>(), false));
     }
   }
 }
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/tableview/TableViewTest.java 
b/tsfile/src/test/java/org/apache/tsfile/tableview/TableViewTest.java
index 530e8326..7bd62b8a 100644
--- a/tsfile/src/test/java/org/apache/tsfile/tableview/TableViewTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/tableview/TableViewTest.java
@@ -46,6 +46,7 @@ import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.Tablet.ColumnType;
 import org.apache.tsfile.write.record.datapoint.LongDataPoint;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import org.apache.commons.io.FileUtils;
@@ -99,7 +100,7 @@ public class TableViewTest {
 
     final List<String> columns =
         testTableSchema.getColumnSchemas().stream()
-            .map(MeasurementSchema::getMeasurementId)
+            .map(IMeasurementSchema::getMeasurementId)
             .collect(Collectors.toList());
     final TsBlockReader reader =
         tableQueryExecutor.query(testTableSchema.getTableName(), columns, 
null, null, null);
@@ -139,7 +140,7 @@ public class TableViewTest {
 
     final List<String> columns =
         testTableSchema.getColumnSchemas().stream()
-            .map(MeasurementSchema::getMeasurementId)
+            .map(IMeasurementSchema::getMeasurementId)
             .collect(Collectors.toList());
 
     for (int i = 0; i < tableNum; i++) {
@@ -165,7 +166,7 @@ public class TableViewTest {
     writer.registerTableSchema(testTableSchema);
     // tree-view registration
     final IDeviceID deviceID = Factory.DEFAULT_FACTORY.create("root.a.b.c.d1");
-    List<MeasurementSchema> treeSchemas = new ArrayList<>();
+    List<IMeasurementSchema> treeSchemas = new ArrayList<>();
     for (int i = 0; i < measurementSchemaNum; i++) {
       final MeasurementSchema measurementSchema =
           new MeasurementSchema(
@@ -199,7 +200,7 @@ public class TableViewTest {
 
       List<String> columns =
           testTableSchema.getColumnSchemas().stream()
-              .map(MeasurementSchema::getMeasurementId)
+              .map(IMeasurementSchema::getMeasurementId)
               .collect(Collectors.toList());
       TsBlockReader reader =
           tableQueryExecutor.query(testTableSchema.getTableName(), columns, 
null, null, null);
@@ -245,7 +246,7 @@ public class TableViewTest {
 
       List<String> columns =
           treeSchemas.stream()
-              .map(MeasurementSchema::getMeasurementId)
+              .map(IMeasurementSchema::getMeasurementId)
               .collect(Collectors.toList());
       TsBlockReader reader =
           tableQueryExecutor.query(deviceID.getTableName(), columns, null, 
null, null);
@@ -294,7 +295,7 @@ public class TableViewTest {
             tableSchema.getColumnTypes());
     for (int i = 0; i < num; i++) {
       tablet.addTimestamp(i, offset + i);
-      for (MeasurementSchema columnSchema : tableSchema.getColumnSchemas()) {
+      for (IMeasurementSchema columnSchema : tableSchema.getColumnSchemas()) {
         tablet.addValue(columnSchema.getMeasurementId(), i, 
getValue(columnSchema.getType(), i));
       }
     }
@@ -314,7 +315,7 @@ public class TableViewTest {
   }
 
   private TableSchema genTableSchema(int tableNum) {
-    List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+    List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
     List<ColumnType> columnTypes = new ArrayList<>();
 
     for (int i = 0; i < idSchemaNum; i++) {
diff --git a/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java 
b/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
index 09f7d140..d3386655 100755
--- a/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
+++ b/tsfile/src/test/java/org/apache/tsfile/utils/FileGenerator.java
@@ -27,6 +27,7 @@ import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.schema.Schema;
 
@@ -266,7 +267,7 @@ public class FileGenerator {
 
   private static void generateTestSchema() {
     schema = new Schema();
-    List<MeasurementSchema> schemaList = new ArrayList<>();
+    List<IMeasurementSchema> schemaList = new ArrayList<>();
     schemaList.add(
         new MeasurementSchema(
             "s1", TSDataType.INT32, 
TSEncoding.valueOf(config.getValueEncoder())));
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/utils/TsFileGeneratorForTest.java 
b/tsfile/src/test/java/org/apache/tsfile/utils/TsFileGeneratorForTest.java
index cba45990..52f2951e 100755
--- a/tsfile/src/test/java/org/apache/tsfile/utils/TsFileGeneratorForTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/utils/TsFileGeneratorForTest.java
@@ -31,6 +31,7 @@ import org.apache.tsfile.fileSystem.fsFactory.FSFactory;
 import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.write.TsFileWriter;
 import org.apache.tsfile.write.record.TSRecord;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.schema.Schema;
 
@@ -296,7 +297,7 @@ public class TsFileGeneratorForTest {
     
TSFileDescriptor.getInstance().getConfig().setMaxNumberOfPointsInPage(pageSize);
     try (TsFileWriter tsFileWriter = new TsFileWriter(file)) {
       // register align timeseries
-      List<MeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> alignedMeasurementSchemas = new ArrayList<>();
       alignedMeasurementSchemas.add(
           new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN, 
CompressionType.LZ4));
       alignedMeasurementSchemas.add(
@@ -307,7 +308,7 @@ public class TsFileGeneratorForTest {
       tsFileWriter.registerAlignedTimeseries(new Path("d1"), 
alignedMeasurementSchemas);
 
       // register nonAlign timeseries
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       measurementSchemas.add(
           new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.PLAIN, 
CompressionType.LZ4));
       measurementSchemas.add(
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/DefaultSchemaTemplateTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/DefaultSchemaTemplateTest.java
index 6fa667cc..d57cf30a 100644
--- 
a/tsfile/src/test/java/org/apache/tsfile/write/DefaultSchemaTemplateTest.java
+++ 
b/tsfile/src/test/java/org/apache/tsfile/write/DefaultSchemaTemplateTest.java
@@ -28,6 +28,7 @@ import org.apache.tsfile.read.expression.QueryExpression;
 import org.apache.tsfile.read.query.dataset.QueryDataSet;
 import org.apache.tsfile.utils.TsFileGeneratorForTest;
 import org.apache.tsfile.write.record.Tablet;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.Assert;
@@ -53,11 +54,11 @@ public class DefaultSchemaTemplateTest {
       MeasurementSchema s1 = new MeasurementSchema("s1", TSDataType.INT64, 
TSEncoding.PLAIN);
       MeasurementSchema s2 = new MeasurementSchema("s2", TSDataType.INT64, 
TSEncoding.PLAIN);
 
-      List<MeasurementSchema> schemaList = new ArrayList<>();
+      List<IMeasurementSchema> schemaList = new ArrayList<>();
       schemaList.add(s1);
       schemaList.add(s2);
 
-      Map<String, MeasurementSchema> schema = new HashMap<>();
+      Map<String, IMeasurementSchema> schema = new HashMap<>();
       schema.put("s1", s1);
       schema.put("s2", s2);
 
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
 
b/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
index 09d211fc..db0990c4 100644
--- 
a/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
+++ 
b/tsfile/src/test/java/org/apache/tsfile/write/MetadataIndexConstructorTest.java
@@ -41,6 +41,7 @@ import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.DataPoint;
 import org.apache.tsfile.write.record.datapoint.LongDataPoint;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.schema.Schema;
 
@@ -458,8 +459,8 @@ public class MetadataIndexConstructorTest {
               vectorPrefix + generateIndexString(vectorIndex, 
vectorMeasurement.length);
           logger.info("generating vector {}...", vectorName);
           int measurementNum = vectorMeasurement[i][vectorIndex];
-          List<MeasurementSchema> schemas = new ArrayList<>();
-          List<MeasurementSchema> tabletSchema = new ArrayList<>();
+          List<IMeasurementSchema> schemas = new ArrayList<>();
+          List<IMeasurementSchema> tabletSchema = new ArrayList<>();
           for (int measurementIndex = 0; measurementIndex < measurementNum; 
measurementIndex++) {
             String measurementName =
                 measurementPrefix + generateIndexString(measurementIndex, 
measurementNum);
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
index f60d9cf5..331d7aab 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/TsFileIOWriterTest.java
@@ -35,6 +35,7 @@ import org.apache.tsfile.file.metadata.utils.TestHelper;
 import org.apache.tsfile.read.TsFileSequenceReader;
 import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.utils.MeasurementGroup;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.schema.Schema;
 import org.apache.tsfile.write.schema.VectorMeasurementSchema;
@@ -68,11 +69,11 @@ public class TsFileIOWriterTest {
     TsFileIOWriter writer = new TsFileIOWriter(new File(FILE_PATH));
 
     // file schema
-    MeasurementSchema measurementSchema = 
TestHelper.createSimpleMeasurementSchema(SENSOR_1);
+    IMeasurementSchema measurementSchema = 
TestHelper.createSimpleMeasurementSchema(SENSOR_1);
     VectorMeasurementSchema vectorMeasurementSchema =
         new VectorMeasurementSchema(
             "", new String[] {"s1", "s2"}, new TSDataType[] {TSDataType.INT64, 
TSDataType.INT64});
-    List<MeasurementSchema> schemas = new ArrayList<>();
+    List<IMeasurementSchema> schemas = new ArrayList<>();
     schemas.add(new MeasurementSchema("s1", TSDataType.INT64, TSEncoding.RLE));
     schemas.add(new MeasurementSchema("s2", TSDataType.INT64, TSEncoding.RLE));
     MeasurementGroup group = new MeasurementGroup(true, schemas);
@@ -169,7 +170,7 @@ public class TsFileIOWriterTest {
     Assert.assertEquals(2, cnt);
   }
 
-  private void writeChunkGroup(TsFileIOWriter writer, MeasurementSchema 
measurementSchema)
+  private void writeChunkGroup(TsFileIOWriter writer, IMeasurementSchema 
measurementSchema)
       throws IOException {
     for (int i = 0; i < CHUNK_GROUP_NUM; i++) {
       // chunk group
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
index ffb3b01b..a1ec2aa1 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriteApiTest.java
@@ -59,8 +59,8 @@ import java.util.List;
 public class TsFileWriteApiTest {
   private final File f = 
FSFactoryProducer.getFSFactory().getFile("TsFileWriteTest.tsfile");
   private final String deviceId = "root.sg.d1";
-  private final List<MeasurementSchema> alignedMeasurementSchemas = new 
ArrayList<>();
-  private final List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+  private final List<IMeasurementSchema> alignedMeasurementSchemas = new 
ArrayList<>();
+  private final List<IMeasurementSchema> measurementSchemas = new 
ArrayList<>();
   private int oldChunkGroupSize = 
TSFileDescriptor.getInstance().getConfig().getGroupSizeInByte();
   private int oldMaxNumOfPointsInPage =
       TSFileDescriptor.getInstance().getConfig().getMaxNumberOfPointsInPage();
@@ -109,7 +109,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(measurementSchemas.get(0));
       writeMeasurementScheams.add(measurementSchemas.get(1));
@@ -137,7 +137,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(1));
@@ -165,7 +165,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(measurementSchemas.get(0));
       writeMeasurementScheams.add(measurementSchemas.get(1));
@@ -193,7 +193,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       TsFileGeneratorUtils.writeWithTablet(
@@ -220,7 +220,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(1));
@@ -247,7 +247,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(1));
@@ -273,7 +273,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(1));
@@ -314,7 +314,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example 1
       writeMeasurementScheams.add(measurementSchemas.get(0));
       writeMeasurementScheams.add(measurementSchemas.get(1));
@@ -448,7 +448,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(0));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(1));
@@ -499,7 +499,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerAlignedTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementScheams = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementScheams = new ArrayList<>();
       // example1
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(3));
       writeMeasurementScheams.add(alignedMeasurementSchemas.get(2));
@@ -611,7 +611,7 @@ public class TsFileWriteApiTest {
     try (TsFileWriter tsFileWriter = new TsFileWriter(f)) {
       registerTimeseries(tsFileWriter);
 
-      List<MeasurementSchema> writeMeasurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> writeMeasurementSchemas = new ArrayList<>();
       writeMeasurementSchemas.add(measurementSchemas.get(0));
 
       TsFileGeneratorUtils.writeWithTsRecord(
diff --git a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
index 7f3c278f..7d6c380c 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/TsFileWriterTest.java
@@ -36,6 +36,7 @@ import org.apache.tsfile.write.record.TSRecord;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.record.datapoint.FloatDataPoint;
 import org.apache.tsfile.write.record.datapoint.IntDataPoint;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.After;
@@ -106,7 +107,7 @@ public class TsFileWriterTest {
       Assert.assertEquals("given nonAligned timeseries .d1.s1 has been 
registered.", e.getMessage());
     }
     try {
-      List<MeasurementSchema> schemas = new ArrayList<>();
+      List<IMeasurementSchema> schemas = new ArrayList<>();
       schemas.add(
           new MeasurementSchema("s1", TSDataType.FLOAT, TSEncoding.RLE, 
CompressionType.SNAPPY));
       writer.registerAlignedTimeseries(new Path("d1"), schemas);
@@ -114,7 +115,7 @@ public class TsFileWriterTest {
       Assert.assertEquals(
           "given device .d1 has been registered for nonAligned timeseries.", 
e.getMessage());
     }
-    List<MeasurementSchema> schemas = new ArrayList<>();
+    List<IMeasurementSchema> schemas = new ArrayList<>();
     schemas.add(
         new MeasurementSchema("s2", TSDataType.INT32, TSEncoding.RLE, 
CompressionType.SNAPPY));
     schemas.add(
@@ -123,7 +124,7 @@ public class TsFileWriterTest {
 
     // Register aligned timeseries "d2.s1" , "d2.s2", "d2.s3"
     try {
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       measurementSchemas.add(new MeasurementSchema("s1", TSDataType.TEXT, 
TSEncoding.PLAIN));
       measurementSchemas.add(new MeasurementSchema("s2", TSDataType.TEXT, 
TSEncoding.PLAIN));
       measurementSchemas.add(new MeasurementSchema("s3", TSDataType.TEXT, 
TSEncoding.PLAIN));
@@ -133,7 +134,7 @@ public class TsFileWriterTest {
       fail(e.getMessage());
     }
     try {
-      List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+      List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
       measurementSchemas.add(new MeasurementSchema("s4", TSDataType.TEXT, 
TSEncoding.PLAIN));
       writer.registerAlignedTimeseries(new Path("d2"), measurementSchemas);
     } catch (WriteProcessException e) {
diff --git a/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
index d97ae61d..99b0b5db 100755
--- a/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/WriteTest.java
@@ -31,6 +31,7 @@ import org.apache.tsfile.read.common.Path;
 import org.apache.tsfile.utils.RecordUtils;
 import org.apache.tsfile.utils.StringContainer;
 import org.apache.tsfile.write.record.TSRecord;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.apache.tsfile.write.schema.Schema;
 
@@ -60,7 +61,7 @@ public class WriteTest {
   private String outputDataFile;
   private String errorOutputDataFile;
   private Random rm = new Random();
-  private ArrayList<MeasurementSchema> measurementArray;
+  private ArrayList<IMeasurementSchema> measurementArray;
   private ArrayList<Path> pathArray;
   private Schema schema;
   private int stageSize = 4;
@@ -250,7 +251,7 @@ public class WriteTest {
     }
     // test duplicate measurement adding
     Path path = pathArray.get(measurementArray.size() - 1);
-    MeasurementSchema dupTimeseries = 
measurementArray.get(measurementArray.size() - 1);
+    IMeasurementSchema dupTimeseries = 
measurementArray.get(measurementArray.size() - 1);
     try {
       tsFileWriter.registerTimeseries(new Path(path.getDeviceString()), 
dupTimeseries);
     } catch (WriteProcessException e) {
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/record/TabletTest.java 
b/tsfile/src/test/java/org/apache/tsfile/write/record/TabletTest.java
index 07412e8d..dd9f38b1 100644
--- a/tsfile/src/test/java/org/apache/tsfile/write/record/TabletTest.java
+++ b/tsfile/src/test/java/org/apache/tsfile/write/record/TabletTest.java
@@ -22,6 +22,7 @@ package org.apache.tsfile.write.record;
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
 import org.apache.tsfile.utils.BitMap;
+import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 
 import org.junit.Test;
@@ -37,7 +38,7 @@ public class TabletTest {
   @Test
   public void testSerializationAndDeSerialization() {
     String deviceId = "root.sg";
-    List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+    List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
     measurementSchemas.add(new MeasurementSchema("s0", TSDataType.INT32, 
TSEncoding.PLAIN));
     measurementSchemas.add(new MeasurementSchema("s1", TSDataType.INT64, 
TSEncoding.PLAIN));
 
@@ -74,7 +75,7 @@ public class TabletTest {
   @Test
   public void testSerializationAndDeSerializationWithMoreData() {
     String deviceId = "root.sg";
-    List<MeasurementSchema> measurementSchemas = new ArrayList<>();
+    List<IMeasurementSchema> measurementSchemas = new ArrayList<>();
     measurementSchemas.add(new MeasurementSchema("s0", TSDataType.INT32, 
TSEncoding.PLAIN));
     measurementSchemas.add(new MeasurementSchema("s1", TSDataType.INT64, 
TSEncoding.PLAIN));
     measurementSchemas.add(new MeasurementSchema("s2", TSDataType.FLOAT, 
TSEncoding.PLAIN));
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/schema/converter/SchemaBuilderTest.java
 
b/tsfile/src/test/java/org/apache/tsfile/write/schema/converter/SchemaBuilderTest.java
index cdab89fb..70fc3fec 100644
--- 
a/tsfile/src/test/java/org/apache/tsfile/write/schema/converter/SchemaBuilderTest.java
+++ 
b/tsfile/src/test/java/org/apache/tsfile/write/schema/converter/SchemaBuilderTest.java
@@ -77,7 +77,7 @@ public class SchemaBuilderTest {
     Map<String, String> props = new HashMap<>();
     props.put(JsonFormatConstant.MAX_POINT_NUMBER, "3");
     Schema schema = new Schema();
-    Map<String, MeasurementSchema> template = new HashMap<>();
+    Map<String, IMeasurementSchema> template = new HashMap<>();
     template.put(
         "s4",
         new MeasurementSchema(
@@ -113,7 +113,7 @@ public class SchemaBuilderTest {
     Map<String, String> props = new HashMap<>();
     props.put(JsonFormatConstant.MAX_POINT_NUMBER, "3");
     Schema schema = new Schema();
-    Map<String, MeasurementSchema> template = new HashMap<>();
+    Map<String, IMeasurementSchema> template = new HashMap<>();
     template.put(
         "s4",
         new MeasurementSchema(
diff --git 
a/tsfile/src/test/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriterTest.java
 
b/tsfile/src/test/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriterTest.java
index d6d0f942..74c793ac 100644
--- 
a/tsfile/src/test/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriterTest.java
+++ 
b/tsfile/src/test/java/org/apache/tsfile/write/writer/RestorableTsFileIOWriterTest.java
@@ -254,7 +254,7 @@ public class RestorableTsFileIOWriterTest {
     writer = new TsFileWriter(rWriter);
     writer.close();
     assertNotEquals(TsFileIOWriter.MAGIC_STRING_BYTES.length, 
rWriter.getTruncatedSize());
-    assertEquals(89, rWriter.getTruncatedSize());
+    assertEquals(100, rWriter.getTruncatedSize());
     rWriter.close();
 
     TsFileSequenceReader reader = new TsFileSequenceReader(FILE_NAME);
@@ -290,7 +290,7 @@ public class RestorableTsFileIOWriterTest {
     writer = new TsFileWriter(rWriter);
     writer.close();
     assertNotEquals(TsFileIOWriter.MAGIC_STRING_BYTES.length, 
rWriter.getTruncatedSize());
-    assertEquals(89, rWriter.getTruncatedSize());
+    assertEquals(105, rWriter.getTruncatedSize());
     rWriter.close();
 
     TsFileSequenceReader reader = new TsFileSequenceReader(FILE_NAME);

Reply via email to