You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/08/30 12:38:00 UTC

[incubator-iotdb] 01/03: merge master

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

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

commit 7fe4a072d776d6acb6c62151653da2223a56440c
Merge: eeb1e3c 18ae6c7
Author: lta <li...@163.com>
AuthorDate: Fri Aug 30 10:46:17 2019 +0800

    merge master

 README.md                                          | 237 ++-------
 RELEASE_NOTES.md                                   |   4 +-
 client/pom.xml                                     |   1 -
 .../src/assembly/resources/sbin/start-client.bat   |   2 +-
 client/src/assembly/resources/sbin/start-client.sh |   2 +-
 client/src/assembly/resources/tools/export-csv.bat |   2 +-
 client/src/assembly/resources/tools/export-csv.sh  |   2 +-
 client/src/assembly/resources/tools/import-csv.bat |   2 +-
 client/src/assembly/resources/tools/import-csv.sh  |   2 +-
 .../iotdb/{cli => }/client/AbstractClient.java     | 207 ++++----
 .../org/apache/iotdb/{cli => }/client/Client.java  |  10 +-
 .../apache/iotdb/{cli => }/client/WinClient.java   |   6 +-
 .../{cli => }/exception/ArgsErrorException.java    |   2 +-
 .../iotdb/{cli => }/tool/AbstractCsvTool.java      |   4 +-
 .../org/apache/iotdb/{cli => }/tool/ExportCsv.java |   6 +-
 .../org/apache/iotdb/{cli => }/tool/ImportCsv.java |   6 +-
 .../iotdb/{cli => }/client/AbstractClientIT.java   |  62 ++-
 .../iotdb/{cli => }/client/AbstractScript.java     |   2 +-
 .../{cli => }/client/StartClientScriptIT.java      |   2 +-
 .../iotdb/{cli => }/tool/ExportCsvTestIT.java      |   4 +-
 .../iotdb/{cli => }/tool/ImportCsvTestIT.java      |   4 +-
 docs/Development.md                                |   4 +-
 docs/Documentation-CHN/QuickStart.md               |   8 +-
 .../UserGuide/1-Overview/3-Scenario.md             |   4 +-
 .../UserGuide/6-JDBC API/2-Status Code.md          |  64 +++
 .../UserGuide/7-Session API/1-Session API.md       | 105 ++++
 .../{7-TsFile => 8-TsFile}/1-Installation.md       |   2 +-
 .../UserGuide/{7-TsFile => 8-TsFile}/2-Usage.md    |   2 +-
 .../{7-TsFile => 8-TsFile}/3-Hierarchy.md          |   2 +-
 .../{8-System Tools => 9-System Tools}/1-Sync.md   |   2 +-
 .../2-Memory Estimation Tool.md                    |   2 +-
 .../UserGuide/{8-Tools-Cli.md => 9-Tools-Cli.md}   |  28 +-
 .../{8-Tools-Grafana.md => 9-Tools-Grafana.md}     |   0
 .../{8-Tools-Hadoop.md => 9-Tools-Hadoop.md}       |   0
 .../{8-Tools-spark.md => 9-Tools-spark.md}         |   0
 docs/Documentation/Frequently asked questions.md   |  14 +-
 docs/Documentation/QuickStart.md                   | 307 +++---------
 docs/Documentation/UserGuide/0-Content.md          |   7 +-
 .../UserGuide/1-Overview/3-Scenario.md             |   4 +-
 .../UserGuide/3-Operation Manual/3-Data Import.md  |   2 +-
 .../4-Deployment and Management/1-Deployment.md    |   4 +-
 .../6-Data Management.md                           |  42 +-
 .../7-Build and use IoTDB by Dockerfile.md         |   6 +-
 .../UserGuide/6-JDBC API/1-JDBC API.md             |   4 +-
 .../UserGuide/6-JDBC API/2-Status Code.md          |  64 +++
 .../UserGuide/7-Session API/1-Session API.md       | 115 +++++
 .../{7-TsFile => 8-TsFile}/1-Installation.md       |   2 +-
 .../UserGuide/{7-TsFile => 8-TsFile}/2-Usage.md    |  26 +-
 .../{7-TsFile => 8-TsFile}/3-Hierarchy.md          | 146 ++++--
 .../{8-System Tools => 9-System Tools}/1-Sync.md   |   2 +-
 .../2-Memory Estimation Tool.md                    |   2 +-
 .../UserGuide/{8-Tools-Cli.md => 9-Tools-Cli.md}   |  22 +-
 .../{8-Tools-Grafana.md => 9-Tools-Grafana.md}     |   0
 .../{8-Tools-Hadoop.md => 9-Tools-Hadoop.md}       |   0
 .../{8-Tools-spark.md => 9-Tools-spark.md}         |   0
 example/{tsfile => jdbc}/pom.xml                   |  26 +-
 .../main/java/org/apache/iotdb/JDBCExample.java    |  76 +++
 .../org/apache/iotdb}/PrepareStatementDemo.java    |  40 +-
 example/pom.xml                                    |   2 +
 .../iotdb/{example => rocketmq}/Constant.java      |   2 +-
 .../{example => rocketmq}/RocketMQConsumer.java    |   2 +-
 .../{example => rocketmq}/RocketMQProducer.java    |   2 +-
 .../apache/iotdb/{example => rocketmq}/Utils.java  |   2 +-
 example/{tsfile => session}/pom.xml                |  26 +-
 .../main/java/org/apache/iotdb/SessionExample.java |  70 +++
 example/tsfile/pom.xml                             |   9 -
 example/tsfile/readme.md                           |   2 +-
 .../iotdb/tsfile/TsFileWriteWithRowBatch.java      |  11 +-
 .../iotdb/tsfile/hadoop/TSFRecordWriter.java       |   6 +-
 .../org/apache/iotdb/jdbc/IoTDBConnection.java     |  96 +---
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |  32 +-
 .../jdbc/IoTDBPreparedInsertionStatement.java      |   7 +-
 .../apache/iotdb/jdbc/IoTDBPreparedStatement.java  |   1 +
 .../org/apache/iotdb/jdbc/IoTDBQueryResultSet.java |  22 +-
 .../org/apache/iotdb/jdbc/IoTDBSQLException.java   |   4 +
 .../java/org/apache/iotdb/jdbc/IoTDBStatement.java |  50 +-
 .../src/main/java/org/apache/iotdb/jdbc/Utils.java |  25 +-
 .../test/java/org/apache/iotdb/jdbc/BatchTest.java |  15 +-
 .../org/apache/iotdb/jdbc/IoTDBConnectionTest.java |  15 +-
 .../iotdb/jdbc/IoTDBDatabaseMetadataTest.java      |  36 +-
 .../iotdb/jdbc/IoTDBPreparedStatementTest.java     |  15 +-
 .../apache/iotdb/jdbc/IoTDBQueryResultSetTest.java | 109 ++--
 .../org/apache/iotdb/jdbc/IoTDBStatementTest.java  |  22 +-
 .../test/java/org/apache/iotdb/jdbc/UtilsTest.java |  19 +-
 .../org/apache/iotdb/jdbc/demo/MetadataDemo.java   |  36 --
 .../org/apache/iotdb/jdbc/demo/StatementDemo.java  |  68 ---
 pom.xml                                            |  25 +-
 .../resources/conf/iotdb-engine.properties         |  49 +-
 .../tools/print-tsfile-resource-files.bat          |  59 ++-
 .../resources/tools/print-tsfile-resource-files.sh |  48 +-
 .../org/apache/iotdb/db/sql/parse/TSParser.g       |   2 +-
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 152 +++++-
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |   2 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |  36 +-
 .../iotdb/db/cost/statistic/Measurement.java       |   2 +-
 .../apache/iotdb/db/cost/statistic/Operation.java  |   3 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |  58 ++-
 .../iotdb/db/engine/cache/DeviceMetaDataCache.java |  20 +-
 .../iotdb/db/engine/cache/TsFileMetaDataCache.java |  27 +-
 .../iotdb/db/engine/cache/TsFileMetadataUtils.java |  17 +-
 .../apache/iotdb/db/engine/flush/FlushManager.java |   2 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |  13 +-
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  21 +-
 .../apache/iotdb/db/engine/memtable/IMemTable.java |   7 +-
 .../db/engine/memtable/IWritableMemChunk.java      |  15 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |  86 +++-
 .../iotdb/db/engine/merge/manage/MergeContext.java |  90 ++++
 .../iotdb/db/engine/merge/manage/MergeManager.java | 127 +++++
 .../db/engine/merge/manage/MergeResource.java      | 262 ++++++++++
 .../apache/iotdb/db/engine/merge/package-info.java |  11 +-
 .../iotdb/db/engine/merge/recover/LogAnalyzer.java | 300 +++++++++++
 .../iotdb/db/engine/merge/recover/MergeLogger.java | 132 +++++
 .../merge/selector/IFileQueryMemMeasurement.java}  |  22 +-
 .../engine/merge/selector/IMergeFileSelector.java  |  18 +-
 .../engine/merge/selector/IMergePathSelector.java  |  16 +-
 .../merge/selector/MaxFileMergeFileSelector.java   | 303 ++++++++++++
 .../merge/selector/MaxSeriesMergeFileSelector.java | 108 ++++
 .../engine/merge/selector/MergeFileStrategy.java   |  15 +-
 .../engine/merge/selector/NaivePathSelector.java   |  42 +-
 .../iotdb/db/engine/merge/task/MergeCallback.java  |  27 +-
 .../iotdb/db/engine/merge/task/MergeFileTask.java  | 238 +++++++++
 .../db/engine/merge/task/MergeMultiChunkTask.java  | 440 +++++++++++++++++
 .../iotdb/db/engine/merge/task/MergeTask.java      | 172 +++++++
 .../db/engine/merge/task/RecoverMergeTask.java     | 268 ++++++++++
 .../db/engine/modification/ModificationFile.java   |   7 +
 .../engine/storagegroup/StorageGroupProcessor.java | 408 ++++++++++++---
 .../db/engine/storagegroup/TsFileProcessor.java    |  51 +-
 .../db/engine/storagegroup/TsFileResource.java     |  63 ++-
 .../MergeException.java}                           |  22 +-
 .../java/org/apache/iotdb/db/metadata/MGraph.java  |   2 -
 .../db/qp/executor/IQueryProcessExecutor.java      |   7 +
 .../iotdb/db/qp/executor/QueryProcessExecutor.java |  37 +-
 .../org/apache/iotdb/db/qp/logical/Operator.java   |   2 +-
 .../iotdb/db/qp/logical/sys/MetadataOperator.java  |   8 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |   7 +-
 .../iotdb/db/qp/physical/crud/BatchInsertPlan.java | 276 +++++++++++
 .../iotdb/db/qp/physical/sys/MetadataPlan.java     |  48 +-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |   6 +-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   6 -
 .../iotdb/db/query/control/FileReaderManager.java  |  77 +--
 .../iotdb/db/query/control/JobFileManager.java     |  35 +-
 .../db/query/control/QueryResourceManager.java     | 122 +----
 .../groupby/GroupByWithValueFilterDataSet.java     |   3 -
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   1 -
 .../db/query/executor/AggregateEngineExecutor.java |  21 +-
 .../iotdb/db/query/executor/EngineExecutor.java    |   7 -
 .../iotdb/db/query/executor/EngineQueryRouter.java |   8 +-
 .../db/query/executor/FillEngineExecutor.java      |   1 -
 .../apache/iotdb/db/query/reader/IPointReader.java |   1 +
 ...ChunkReader.java => CachedDiskChunkReader.java} |  42 +-
 .../query/reader/chunkRelated/DiskChunkReader.java |   1 +
 .../fileRelated/UnSealedTsFileIterateReader.java   |   6 +-
 .../UnSealedTsFileReaderByTimestamp.java           |   6 +-
 .../CachedUnseqResourceMergeReader.java            |  37 +-
 .../resourceRelated/SeqResourceIterateReader.java  |   9 +-
 .../SeqResourceReaderByTimestamp.java              |   8 +-
 .../resourceRelated/UnseqResourceMergeReader.java  |  22 +-
 .../UnseqResourceReaderByTimestamp.java            |   4 +-
 .../universal/CachedPriorityMergeReader.java       |  95 ++++
 .../reader/universal/PriorityMergeReader.java      | 109 ++--
 .../org/apache/iotdb/db/rescon/MemTablePool.java   |   1 +
 .../java/org/apache/iotdb/db/service/IoTDB.java    |   6 +-
 .../org/apache/iotdb/db/service/JDBCService.java   |   3 +-
 .../org/apache/iotdb/db/service/ServiceType.java   |   3 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java | 414 +++++++++-------
 .../iotdb/db/tools/TsFileResourcePrinter.java      |  64 +++
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |  30 +-
 .../java/org/apache/iotdb/db/utils/MergeUtils.java | 306 ++++++++++++
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   |  86 ++++
 .../{FileSchemaUtils.java => SchemaUtils.java}     |  20 +-
 .../apache/iotdb/db/utils/TimeValuePairUtils.java  | 100 +++-
 .../org/apache/iotdb/db/utils/TsPrimitiveType.java |  54 ++
 .../iotdb/db/utils/datastructure/BinaryTVList.java |  31 ++
 .../db/utils/datastructure/BooleanTVList.java      |  31 ++
 .../iotdb/db/utils/datastructure/DoubleTVList.java |  31 ++
 .../iotdb/db/utils/datastructure/FloatTVList.java  |  31 ++
 .../iotdb/db/utils/datastructure/IntTVList.java    |  31 ++
 .../iotdb/db/utils/datastructure/LongTVList.java   |  31 ++
 .../iotdb/db/utils/datastructure/TVList.java       |  38 ++
 .../writelog/manager/MultiFileLogNodeManager.java  |   2 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |  23 +-
 .../writelog/recover/TsFileRecoverPerformer.java   | 118 +++--
 .../db/cost/statistic/PerformanceStatTest.java     |   2 +-
 .../db/engine/memtable/MemTableFlushTaskTest.java  |   2 +-
 .../db/engine/memtable/MemTableTestUtils.java      |  10 +-
 .../engine/merge/MaxFileMergeFileSelectorTest.java |  85 ++++
 .../merge/MaxSeriesMergeFileSelectorTest.java      | 103 ++++
 .../apache/iotdb/db/engine/merge/MergeLogTest.java |  82 +++
 .../iotdb/db/engine/merge/MergePerfTest.java       | 105 ++++
 .../iotdb/db/engine/merge/MergeTaskTest.java       | 233 +++++++++
 .../apache/iotdb/db/engine/merge/MergeTest.java    | 169 +++++++
 .../engine/modification/DeletionFileNodeTest.java  |   2 -
 .../db/engine/modification/DeletionQueryTest.java  |   4 +-
 .../storagegroup/StorageGroupProcessorTest.java    | 134 ++++-
 .../engine/storagegroup/TsFileProcessorTest.java   |  10 +-
 .../apache/iotdb/db/integration/IOTDBFillIT.java   | 202 ++++----
 .../iotdb/db/integration/IOTDBGroupByIT.java       | 309 +++++-------
 .../iotdb/db/integration/IoTDBAggregationIT.java   | 478 ++++++++----------
 .../integration/IoTDBAggregationLargeDataIT.java   | 435 ++++++----------
 .../integration/IoTDBAggregationSmallDataIT.java   | 549 +++++++++------------
 .../iotdb/db/integration/IoTDBCompleteIT.java      |  15 +-
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java | 216 ++++----
 .../iotdb/db/integration/IoTDBDeletionIT.java      | 198 ++++----
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |  14 +-
 .../db/integration/IoTDBFloatPrecisionIT.java      | 110 ++---
 .../db/integration/IoTDBFlushQueryMergeTest.java   |  44 +-
 .../iotdb/db/integration/IoTDBLargeDataIT.java     | 167 +++----
 .../iotdb/db/integration/IoTDBLimitSlimitIT.java   |  73 ++-
 .../iotdb/db/integration/IoTDBMergeTest.java       |  97 ++++
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java | 208 ++++----
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   | 167 +++----
 .../iotdb/db/integration/IoTDBPreparedStmtIT.java  |  58 +--
 .../db/integration/IoTDBSequenceDataQueryIT.java   |  13 +-
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  19 +-
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  30 +-
 .../iotdb/db/integration/IoTDBVersionIT.java       |  13 +-
 .../apache/iotdb/db/qp/utils/MemIntQpExecutor.java |   6 +
 .../db/query/control/FileReaderManagerTest.java    |  33 +-
 .../fileRelated/UnSealedTsFileReaderTest.java      |   6 +-
 .../resourceRelated/SeqResourceReaderTest.java     |   6 +-
 .../resourceRelated/UnseqResourceReaderTest.java   |   8 +-
 .../iotdb/db/sync/sender/SingleClientSyncTest.java |   2 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |   2 +-
 .../iotdb/db/writelog/IoTDBLogFileSizeTest.java    |  59 +--
 .../iotdb/db/writelog/recover/LogReplayerTest.java |  25 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |  38 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |  40 +-
 .../2-Usage.md => service-rpc/rpc-changelist.md    |   4 +-
 .../org/apache/iotdb/rpc/IoTDBRPCException.java    |  12 +-
 .../main/java/org/apache/iotdb/rpc/RpcUtils.java   |  43 ++
 .../org/apache/iotdb/rpc/SynchronizedHandler.java  |  54 ++
 .../java/org/apache/iotdb/rpc/TSStatusType.java    |  55 +++
 service-rpc/src/main/thrift/rpc.thrift             |  92 ++--
 {example/tsfile => session}/pom.xml                |  37 +-
 .../main/java/org/apache/iotdb/session/Config.java |  16 +-
 .../iotdb/session/IoTDBSessionException.java       |  17 +-
 .../java/org/apache/iotdb/session/Session.java     | 201 ++++++++
 .../org/apache/iotdb/session/SessionUtils.java     |  90 ++++
 .../apache/iotdb/tsfile/io/TsFileOutputFormat.java |  10 +-
 .../apache/iotdb/tsfile/io/TsFileRecordWriter.java |   6 +-
 .../scala/org/apache/iotdb/tsfile/Converter.scala  |   4 +-
 .../org/apache/iotdb/tsfile/HDFSInputTest.java     |   4 +-
 .../2-Usage.md => tsfile/format-changelist.md      |   4 +-
 .../iotdb/tsfile/common/conf/TSFileConfig.java     |   4 +-
 .../iotdb/tsfile/encoding/common/EndianType.java   |   2 +-
 .../iotdb/tsfile/encoding/decoder/Decoder.java     |   6 +-
 .../encoding/decoder/DeltaBinaryDecoder.java       |   1 +
 .../tsfile/encoding/decoder/FloatDecoder.java      |   4 +-
 .../tsfile/encoding/decoder/PlainDecoder.java      |  41 +-
 .../encoding/encoder/DeltaBinaryEncoder.java       |   9 +-
 .../tsfile/encoding/encoder/FloatEncoder.java      |   4 +-
 .../tsfile/encoding/encoder/PlainEncoder.java      |  39 +-
 .../tsfile/encoding/encoder/TSEncodingBuilder.java |   6 +-
 .../write/TsFileNotCompleteException.java          |  21 +-
 .../tsfile/file/metadata/ChunkGroupMetaData.java   |   2 +-
 .../iotdb/tsfile/file/metadata/ChunkMetaData.java  |   2 +-
 .../iotdb/tsfile/file/metadata/TsDigest.java       | 171 +++----
 .../iotdb/tsfile/file/metadata/TsFileMetaData.java |  31 ++
 .../file/metadata/statistics/BinaryStatistics.java |  70 ++-
 .../metadata/statistics/BooleanStatistics.java     |  79 ++-
 .../file/metadata/statistics/DoubleStatistics.java |  70 ++-
 .../file/metadata/statistics/FloatStatistics.java  |  68 ++-
 .../metadata/statistics/IntegerStatistics.java     |  72 +--
 .../file/metadata/statistics/LongStatistics.java   |  61 ++-
 .../file/metadata/statistics/Statistics.java       |  20 +-
 .../apache/iotdb/tsfile/read/ReadOnlyTsFile.java   |   8 +-
 .../iotdb/tsfile/read/TsFileSequenceReader.java    | 101 +++-
 .../apache/iotdb/tsfile/read/common/BatchData.java |   1 +
 .../org/apache/iotdb/tsfile/read/common/Chunk.java |   8 +-
 .../org/apache/iotdb/tsfile/read/common/Path.java  |   2 +-
 .../tsfile/read/controller/ChunkLoaderImpl.java    |  10 +-
 .../{ChunkLoader.java => IChunkLoader.java}        |   6 +-
 ...{MetadataQuerier.java => IMetadataQuerier.java} |   7 +-
 .../read/controller/MetadataQuerierByFileImpl.java |  34 +-
 .../iotdb/tsfile/read/filter/DigestForFilter.java  |  14 +
 .../iotdb/tsfile/read/filter/operator/Eq.java      |   3 +
 .../iotdb/tsfile/read/filter/operator/Gt.java      |   3 +
 .../iotdb/tsfile/read/filter/operator/GtEq.java    |   3 +
 .../iotdb/tsfile/read/filter/operator/Lt.java      |   3 +
 .../iotdb/tsfile/read/filter/operator/LtEq.java    |   3 +
 .../iotdb/tsfile/read/filter/operator/NotEq.java   |   3 +
 .../query/executor/ExecutorWithTimeGenerator.java  |  10 +-
 .../tsfile/read/query/executor/TsFileExecutor.java |  10 +-
 .../query/timegenerator/TimeGeneratorImpl.java     |  12 +-
 .../tsfile/read/reader/chunk/ChunkReader.java      |   3 +
 .../iotdb/tsfile/read/reader/page/PageReader.java  |   3 +-
 .../read/reader/series/FileSeriesReader.java       |   6 +-
 .../reader/series/FileSeriesReaderByTimestamp.java |   6 +-
 .../reader/series/FileSeriesReaderWithFilter.java  |  20 +-
 .../series/FileSeriesReaderWithoutFilter.java      |   4 +-
 .../org/apache/iotdb/tsfile/utils/BytesUtils.java  |  14 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |  16 +-
 .../iotdb/tsfile/write/chunk/ChunkBuffer.java      |  15 +-
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |   2 +-
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |  11 +-
 .../iotdb/tsfile/write/chunk/IChunkWriter.java     |   3 +
 .../apache/iotdb/tsfile/write/record/RowBatch.java |  47 ++
 .../apache/iotdb/tsfile/write/record/TSRecord.java |   2 -
 .../tsfile/write/schema/MeasurementSchema.java     |   7 +-
 .../write/schema/{FileSchema.java => Schema.java}  |  35 +-
 .../iotdb/tsfile/write/schema/SchemaBuilder.java   |  18 +-
 .../tsfile/write/writer/DefaultTsFileOutput.java   |  21 +-
 .../write/writer/ForceAppendTsFileWriter.java      |  86 ++++
 .../write/writer/RestorableTsFileIOWriter.java     |  13 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  | 131 ++++-
 .../tsfile/encoding/decoder/IntRleDecoderTest.java |  10 +-
 .../encoding/decoder/LongRleDecoderTest.java       |   6 +-
 .../file/metadata/ChunkGroupMetaDataTest.java      |   8 +-
 .../tsfile/file/metadata/ChunkMetaDataTest.java    |  11 +-
 .../metadata/statistics/BooleanStatisticsTest.java |  38 +-
 .../metadata/statistics/DoubleStatisticsTest.java  |  37 +-
 .../metadata/statistics/FloatStatisticsTest.java   |  23 +-
 .../metadata/statistics/IntegerStatisticsTest.java |   7 +-
 .../metadata/statistics/LongStatisticsTest.java    |  24 +-
 .../metadata/statistics/StringStatisticsTest.java  |  13 +-
 .../tsfile/file/metadata/utils/TestHelper.java     |  44 +-
 .../iotdb/tsfile/file/metadata/utils/Utils.java    |  46 +-
 .../iotdb/tsfile/read/ReadInPartitionTest.java     |   2 +-
 ...st.java => IMetadataQuerierByFileImplTest.java} |   2 +-
 .../iotdb/tsfile/read/filter/DigestFilterTest.java |  17 +-
 .../read/query/executor/QueryExecutorTest.java     |   4 +-
 .../query/timegenerator/TimeGeneratorTest.java     |   4 +-
 .../TsFileGeneratorForSeriesReaderByTimestamp.java |  11 +-
 .../iotdb/tsfile/read/reader/PageReaderTest.java   |   4 +-
 .../apache/iotdb/tsfile/utils/FileGenerator.java   |  11 +-
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |   4 +-
 .../apache/iotdb/tsfile/utils/RecordUtilsTest.java |  27 +-
 .../iotdb/tsfile/utils/TsFileGeneratorForTest.java |   6 +-
 .../org/apache/iotdb/tsfile/write/PerfTest.java    |  23 +-
 .../iotdb/tsfile/write/ReadPageInMemTest.java      |  23 +-
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |   8 +-
 .../iotdb/tsfile/write/TsFileReadWriteTest.java    |  10 +-
 .../org/apache/iotdb/tsfile/write/WriteTest.java   |   6 +-
 .../write/schema/converter/SchemaBuilderTest.java  |   8 +-
 .../iotdb/tsfile/write/series/PageWriterTest.java  |   6 +-
 335 files changed, 10845 insertions(+), 4978 deletions(-)

diff --cc server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java
index 4a258a5,23525f3..4340670
--- a/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/sync/sender/SingleClientSyncTest.java
@@@ -1,596 -1,559 +1,596 @@@
 -/**
 - * Licensed to the Apache Software Foundation (ASF) under one
 - * or more contributor license agreements.  See the NOTICE file
 - * distributed with this work for additional information
 - * regarding copyright ownership.  The ASF licenses this file
 - * to you under the Apache License, Version 2.0 (the
 - * "License"); you may not use this file except in compliance
 - * with the License.  You may obtain a copy of the License at
 - *
 - *     http://www.apache.org/licenses/LICENSE-2.0
 - *
 - * Unless required by applicable law or agreed to in writing,
 - * software distributed under the License is distributed on an
 - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 - * KIND, either express or implied.  See the License for the
 - * specific language governing permissions and limitations
 - * under the License.
 - */
 -package org.apache.iotdb.db.sync.sender;
 -
 -import static org.junit.Assert.fail;
 -
 -import java.io.File;
 -import java.io.IOException;
 -import java.sql.Connection;
 -import java.sql.DriverManager;
 -import java.sql.ResultSet;
 -import java.sql.SQLException;
 -import java.sql.Statement;
 -import java.util.HashSet;
 -import java.util.Set;
 -import org.apache.iotdb.db.conf.IoTDBConfig;
 -import org.apache.iotdb.db.conf.IoTDBDescriptor;
 -import org.apache.iotdb.db.exception.StartupException;
 -import org.apache.iotdb.db.exception.SyncConnectionException;
 -import org.apache.iotdb.db.integration.Constant;
 -import org.apache.iotdb.db.service.IoTDB;
 -import org.apache.iotdb.db.sync.conf.Constans;
 -import org.apache.iotdb.db.sync.conf.SyncSenderConfig;
 -import org.apache.iotdb.db.sync.conf.SyncSenderDescriptor;
 -import org.apache.iotdb.db.utils.EnvironmentUtils;
 -import org.apache.iotdb.jdbc.Config;
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
 -
 -/**
 - * The test is to run a complete sync function Before you run the test, make sure receiver has been
 - * cleaned up and inited.
 - */
 -public class SingleClientSyncTest {
 -
 -  SyncSenderImpl fileSenderImpl = SyncSenderImpl.getInstance();
 -  private IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig();
 -  private String serverIpTest = "192.168.130.7";
 -  private SyncSenderConfig config = SyncSenderDescriptor.getInstance().getConfig();
 -  private Set<String> dataSender = new HashSet<>();
 -  private Set<String> dataReceiver = new HashSet<>();
 -  private boolean success = true;
 -  private IoTDB deamon;
 -  private static final String[] sqls1 = new String[]{"SET STORAGE GROUP TO root.vehicle",
 -      "SET STORAGE GROUP TO root.test",
 -      "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.vehicle.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
 -      "CREATE TIMESERIES root.vehicle.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.test.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "CREATE TIMESERIES root.test.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.test.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "insert into root.vehicle.d0(timestamp,s0) values(10,100)",
 -      "insert into root.vehicle.d0(timestamp,s0,s1) values(12,101,'102')",
 -      "insert into root.vehicle.d0(timestamp,s1) values(19,'103')",
 -      "insert into root.vehicle.d1(timestamp,s2) values(11,104.0)",
 -      "insert into root.vehicle.d1(timestamp,s2,s3) values(15,105.0,true)",
 -      "insert into root.vehicle.d1(timestamp,s3) values(17,false)",
 -      "insert into root.vehicle.d0(timestamp,s0) values(20,1000)",
 -      "insert into root.vehicle.d0(timestamp,s0,s1) values(22,1001,'1002')",
 -      "insert into root.vehicle.d0(timestamp,s1) values(29,'1003')",
 -      "insert into root.vehicle.d1(timestamp,s2) values(21,1004.0)",
 -      "insert into root.vehicle.d1(timestamp,s2,s3) values(25,1005.0,true)",
 -      "insert into root.vehicle.d1(timestamp,s3) values(27,true)",
 -      "insert into root.test.d0(timestamp,s0) values(10,106)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(14,107,'108')",
 -      "insert into root.test.d0(timestamp,s1) values(16,'109')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(1,110)",
 -      "insert into root.test.d0(timestamp,s0) values(30,1006)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(34,1007,'1008')",
 -      "insert into root.test.d0(timestamp,s1) values(36,'1090')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(10,1100)", "merge", "flush",};
 -  private static final String[] sqls2 = new String[]{
 -      "insert into root.vehicle.d0(timestamp,s0) values(6,120)",
 -      "insert into root.vehicle.d0(timestamp,s0,s1) values(38,121,'122')",
 -      "insert into root.vehicle.d0(timestamp,s1) values(9,'123')",
 -      "insert into root.vehicle.d0(timestamp,s0) values(16,128)",
 -      "insert into root.vehicle.d0(timestamp,s0,s1) values(18,189,'198')",
 -      "insert into root.vehicle.d0(timestamp,s1) values(99,'1234')",
 -      "insert into root.vehicle.d1(timestamp,s2) values(14,1024.0)",
 -      "insert into root.vehicle.d1(timestamp,s2,s3) values(29,1205.0,true)",
 -      "insert into root.vehicle.d1(timestamp,s3) values(33,true)",
 -      "insert into root.test.d0(timestamp,s0) values(15,126)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(8,127,'128')",
 -      "insert into root.test.d0(timestamp,s1) values(20,'129')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(14,430)",
 -      "insert into root.test.d0(timestamp,s0) values(150,426)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(80,427,'528')",
 -      "insert into root.test.d0(timestamp,s1) values(2,'1209')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(4,330)", "merge", "flush",};
 -  private static final String[] sqls3 = new String[]{"SET STORAGE GROUP TO root.iotdb",
 -      "SET STORAGE GROUP TO root.flush",
 -      "CREATE TIMESERIES root.iotdb.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "CREATE TIMESERIES root.iotdb.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.iotdb.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
 -      "CREATE TIMESERIES root.iotdb.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.flush.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "CREATE TIMESERIES root.flush.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 -      "CREATE TIMESERIES root.flush.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 -      "insert into root.iotdb.d0(timestamp,s0) values(3,100)",
 -      "insert into root.iotdb.d0(timestamp,s0,s1) values(22,101,'102')",
 -      "insert into root.iotdb.d0(timestamp,s1) values(24,'103')",
 -      "insert into root.iotdb.d1(timestamp,s2) values(21,104.0)",
 -      "insert into root.iotdb.d1(timestamp,s2,s3) values(25,105.0,true)",
 -      "insert into root.iotdb.d1(timestamp,s3) values(27,false)",
 -      "insert into root.iotdb.d0(timestamp,s0) values(30,1000)",
 -      "insert into root.iotdb.d0(timestamp,s0,s1) values(202,101,'102')",
 -      "insert into root.iotdb.d0(timestamp,s1) values(44,'103')",
 -      "insert into root.iotdb.d1(timestamp,s2) values(1,404.0)",
 -      "insert into root.iotdb.d1(timestamp,s2,s3) values(250,10.0,true)",
 -      "insert into root.iotdb.d1(timestamp,s3) values(207,false)",
 -      "insert into root.flush.d0(timestamp,s0) values(20,106)",
 -      "insert into root.flush.d0(timestamp,s0,s1) values(14,107,'108')",
 -      "insert into root.flush.d1.g0(timestamp,s0) values(1,110)",
 -      "insert into root.flush.d0(timestamp,s0) values(200,1006)",
 -      "insert into root.flush.d0(timestamp,s0,s1) values(1004,1007,'1080')",
 -      "insert into root.flush.d1.g0(timestamp,s0) values(1000,910)",
 -      "insert into root.vehicle.d0(timestamp,s0) values(209,130)",
 -      "insert into root.vehicle.d0(timestamp,s0,s1) values(206,131,'132')",
 -      "insert into root.vehicle.d0(timestamp,s1) values(70,'33')",
 -      "insert into root.vehicle.d1(timestamp,s2) values(204,14.0)",
 -      "insert into root.vehicle.d1(timestamp,s2,s3) values(29,135.0,false)",
 -      "insert into root.vehicle.d1(timestamp,s3) values(14,false)",
 -      "insert into root.test.d0(timestamp,s0) values(19,136)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(7,137,'138')",
 -      "insert into root.test.d0(timestamp,s1) values(30,'139')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(4,150)",
 -      "insert into root.test.d0(timestamp,s0) values(1900,1316)",
 -      "insert into root.test.d0(timestamp,s0,s1) values(700,1307,'1038')",
 -      "insert into root.test.d0(timestamp,s1) values(3000,'1309')",
 -      "insert into root.test.d1.g0(timestamp,s0) values(400,1050)", "merge", "flush",};
 -  private boolean testFlag = Constant.testFlag;
 -  private static final String SYNC_CLIENT = Constans.SYNC_CLIENT;
 -  private static final Logger logger = LoggerFactory.getLogger(SingleClientSyncTest.class);
 -
 -  public static void main(String[] args) throws Exception {
 -    SingleClientSyncTest singleClientPostBackTest = new SingleClientSyncTest();
 -    singleClientPostBackTest.setUp();
 -    singleClientPostBackTest.testPostback();
 -    singleClientPostBackTest.tearDown();
 -    System.exit(0);
 -  }
 -
 -  public void setConfig() {
 -    config.setUuidPath(
 -        config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.UUID_FILE_NAME);
 -    config.setLastFileInfo(
 -        config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.LAST_LOCAL_FILE_NAME);
 -    String[] sequenceFileDirectory = config.getSeqFileDirectory();
 -    String[] snapshots = new String[config.getSeqFileDirectory().length];
 -    for (int i = 0; i < config.getSeqFileDirectory().length; i++) {
 -      sequenceFileDirectory[i] = new File(sequenceFileDirectory[i]).getAbsolutePath();
 -      if (!sequenceFileDirectory[i].endsWith(File.separator)) {
 -        sequenceFileDirectory[i] = sequenceFileDirectory[i] + File.separator;
 -      }
 -      snapshots[i] =
 -          sequenceFileDirectory[i] + SYNC_CLIENT + File.separator + Constans.DATA_SNAPSHOT_NAME
 -              + File.separator;
 -    }
 -    config.setSnapshotPaths(snapshots);
 -    config.setSeqFileDirectory(sequenceFileDirectory);
 -    config.setServerIp(serverIpTest);
 -    fileSenderImpl.setConfig(config);
 -  }
 -
 -  public void setUp() throws StartupException, IOException {
 -    if (testFlag) {
 -      EnvironmentUtils.closeStatMonitor();
 -      deamon = IoTDB.getInstance();
 -      deamon.active();
 -      EnvironmentUtils.envSetUp();
 -    }
 -    setConfig();
 -  }
 -
 -  public void tearDown() throws Exception {
 -    if (testFlag) {
 -      deamon.stop();
 -      EnvironmentUtils.cleanEnv();
 -    }
 -    if (success) {
 -      logger.debug("Test succeed!");
 -    } else {
 -      logger.debug("Test failed!");
 -    }
 -  }
 -
 -  public void testPostback() throws IOException, SyncConnectionException, ClassNotFoundException, SQLException, InterruptedException {
 -    if (testFlag) {
 -      // the first time to sync
 -      logger.debug("It's the first time to sync!");
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          for (String sql : sqls1) {
 -            statement.execute(sql);
 -          }
 -        }
 -      } catch (SQLException | ClassNotFoundException e) {
 -        fail(e.getMessage());
 -      }
 -
 -      fileSenderImpl.sync();
 -
 -      // Compare data of sender and receiver
 -      dataSender.clear();
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -
 -      dataReceiver.clear();
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -      logger.debug(String.valueOf(dataSender.size()));
 -      logger.debug(String.valueOf(dataReceiver.size()));
 -      logger.debug(dataSender.toString());
 -      logger.debug(dataReceiver.toString());
 -      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 -        success = false;
 -        return;
 -      }
 -
 -      // the second time to sync
 -      logger.debug("It's the second time to sync!");
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          for (String sql : sqls2) {
 -            statement.execute(sql);
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -
 -      fileSenderImpl.sync();
 -
 -      // Compare data of sender and receiver
 -      dataSender.clear();
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -
 -      dataReceiver.clear();
 -      {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 -                "root")) {
 -          Statement statement = connection.createStatement();
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -          statement.close();
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      }
 -      logger.debug(String.valueOf(dataSender.size()));
 -      logger.debug(String.valueOf(dataReceiver.size()));
 -      logger.debug(dataSender.toString());
 -      logger.debug(dataReceiver.toString());
 -      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 -        success = false;
 -        return;
 -      }
 -
 -      // the third time to sync
 -      logger.debug("It's the third time to sync!");
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          for (String sql : sqls3) {
 -            statement.execute(sql);
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -
 -      fileSenderImpl.sync();
 -
 -      // Compare data of sender and receiver
 -      dataSender.clear();
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 -                "root");
 -            Statement statement = connection.createStatement()) {
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.flush");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.flush.d0.s0")
 -                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0")
 -                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.iotdb");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataSender.add(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 -                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 -                  + res.getString("root.iotdb.d1.s3"));
 -              logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 -                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 -                  + res.getString("root.iotdb.d1.s3"));
 -            }
 -          }
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -
 -      dataReceiver.clear();
 -      try {
 -        Class.forName(Config.JDBC_DRIVER_NAME);
 -        try (Connection connection = DriverManager
 -            .getConnection("jdbc:iotdb://192.168.130.8:6667/", "root", "root")) {
 -          Statement statement = connection.createStatement();
 -          boolean hasResultSet = statement.execute("select * from root.vehicle");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 -                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 -                  + res.getString("root.vehicle.d1.s3"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.test");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 -                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.flush");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.flush.d0.s0")
 -                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 -              logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0")
 -                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 -            }
 -          }
 -          hasResultSet = statement.execute("select * from root.iotdb");
 -          if (hasResultSet) {
 -            ResultSet res = statement.getResultSet();
 -            while (res.next()) {
 -              dataReceiver.add(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 -                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 -                  + res.getString("root.iotdb.d1.s3"));
 -              logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 -                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 -                  + res.getString("root.iotdb.d1.s3"));
 -            }
 -          }
 -          statement.close();
 -        } catch (Exception e) {
 -          logger.error("", e);
 -        }
 -      } catch (ClassNotFoundException e) {
 -        fail(e.getMessage());
 -        Thread.currentThread().interrupt();
 -      }
 -      logger.debug(String.valueOf(dataSender.size()));
 -      logger.debug(String.valueOf(dataReceiver.size()));
 -      logger.debug(String.valueOf(dataSender));
 -      logger.debug(String.valueOf(dataReceiver));
 -      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 -        success = false;
 -      }
 -    }
 -  }
 -}
 +///**
 +// * Licensed to the Apache Software Foundation (ASF) under one
 +// * or more contributor license agreements.  See the NOTICE file
 +// * distributed with this work for additional information
 +// * regarding copyright ownership.  The ASF licenses this file
 +// * to you under the Apache License, Version 2.0 (the
 +// * "License"); you may not use this file except in compliance
 +// * with the License.  You may obtain a copy of the License at
 +// *
 +// *     http://www.apache.org/licenses/LICENSE-2.0
 +// *
 +// * Unless required by applicable law or agreed to in writing,
 +// * software distributed under the License is distributed on an
 +// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +// * KIND, either express or implied.  See the License for the
 +// * specific language governing permissions and limitations
 +// * under the License.
 +// */
 +//package org.apache.iotdb.db.sync.sender;
 +//
 +//import static org.junit.Assert.fail;
 +//
 +//import java.io.File;
 +//import java.io.IOException;
 +//import java.sql.Connection;
 +//import java.sql.DriverManager;
 +//import java.sql.ResultSet;
 +//import java.sql.SQLException;
 +//import java.sql.Statement;
 +//import java.util.HashSet;
 +//import java.util.Set;
 +//import org.apache.iotdb.db.conf.IoTDBConfig;
 +//import org.apache.iotdb.db.conf.IoTDBDescriptor;
 +//import org.apache.iotdb.db.exception.StartupException;
 +//import org.apache.iotdb.db.exception.SyncConnectionException;
 +//import org.apache.iotdb.db.integration.Constant;
 +//import org.apache.iotdb.db.service.IoTDB;
 +//import org.apache.iotdb.db.sync.sender.conf.Constans;
 +//import org.apache.iotdb.db.sync.sender.conf.SyncSenderConfig;
 +//import org.apache.iotdb.db.sync.sender.conf.SyncSenderDescriptor;
 +//import org.apache.iotdb.db.sync.sender.transfer.DataTransferManager;
 +//import org.apache.iotdb.db.utils.EnvironmentUtils;
 +//import org.apache.iotdb.jdbc.Config;
 +//import org.slf4j.Logger;
 +//import org.slf4j.LoggerFactory;
 +//
 +///**
 +// * The test is to run a complete sync function Before you run the test, make sure receiver has been
 +// * cleaned up and inited.
 +// */
 +//public class SingleClientSyncTest {
 +//
 +//  DataTransferManager fileSenderImpl = DataTransferManager.getInstance();
 +//  private IoTDBConfig conf = IoTDBDescriptor.getInstance().getConfig();
 +//  private String serverIpTest = "192.168.130.7";
 +//  private SyncSenderConfig config = SyncSenderDescriptor.getInstance().getConfig();
 +//  private Set<String> dataSender = new HashSet<>();
 +//  private Set<String> dataReceiver = new HashSet<>();
 +//  private boolean success = true;
 +//  private IoTDB deamon;
 +//  private static final String[] sqls1 = new String[]{"SET STORAGE GROUP TO root.vehicle",
 +//      "SET STORAGE GROUP TO root.test",
 +//      "CREATE TIMESERIES root.vehicle.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.vehicle.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.vehicle.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.vehicle.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.test.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.test.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.test.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "insert into root.vehicle.d0(timestamp,s0) values(10,100)",
 +//      "insert into root.vehicle.d0(timestamp,s0,s1) values(12,101,'102')",
 +//      "insert into root.vehicle.d0(timestamp,s1) values(19,'103')",
 +//      "insert into root.vehicle.d1(timestamp,s2) values(11,104.0)",
 +//      "insert into root.vehicle.d1(timestamp,s2,s3) values(15,105.0,true)",
 +//      "insert into root.vehicle.d1(timestamp,s3) values(17,false)",
 +//      "insert into root.vehicle.d0(timestamp,s0) values(20,1000)",
 +//      "insert into root.vehicle.d0(timestamp,s0,s1) values(22,1001,'1002')",
 +//      "insert into root.vehicle.d0(timestamp,s1) values(29,'1003')",
 +//      "insert into root.vehicle.d1(timestamp,s2) values(21,1004.0)",
 +//      "insert into root.vehicle.d1(timestamp,s2,s3) values(25,1005.0,true)",
 +//      "insert into root.vehicle.d1(timestamp,s3) values(27,true)",
 +//      "insert into root.test.d0(timestamp,s0) values(10,106)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(14,107,'108')",
 +//      "insert into root.test.d0(timestamp,s1) values(16,'109')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(1,110)",
 +//      "insert into root.test.d0(timestamp,s0) values(30,1006)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(34,1007,'1008')",
 +//      "insert into root.test.d0(timestamp,s1) values(36,'1090')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(10,1100)", "merge", "flush",};
 +//  private static final String[] sqls2 = new String[]{
 +//      "insert into root.vehicle.d0(timestamp,s0) values(6,120)",
 +//      "insert into root.vehicle.d0(timestamp,s0,s1) values(38,121,'122')",
 +//      "insert into root.vehicle.d0(timestamp,s1) values(9,'123')",
 +//      "insert into root.vehicle.d0(timestamp,s0) values(16,128)",
 +//      "insert into root.vehicle.d0(timestamp,s0,s1) values(18,189,'198')",
 +//      "insert into root.vehicle.d0(timestamp,s1) values(99,'1234')",
 +//      "insert into root.vehicle.d1(timestamp,s2) values(14,1024.0)",
 +//      "insert into root.vehicle.d1(timestamp,s2,s3) values(29,1205.0,true)",
 +//      "insert into root.vehicle.d1(timestamp,s3) values(33,true)",
 +//      "insert into root.test.d0(timestamp,s0) values(15,126)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(8,127,'128')",
 +//      "insert into root.test.d0(timestamp,s1) values(20,'129')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(14,430)",
 +//      "insert into root.test.d0(timestamp,s0) values(150,426)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(80,427,'528')",
 +//      "insert into root.test.d0(timestamp,s1) values(2,'1209')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(4,330)", "merge", "flush",};
 +//  private static final String[] sqls3 = new String[]{"SET STORAGE GROUP TO root.iotdb",
 +//      "SET STORAGE GROUP TO root.flush",
 +//      "CREATE TIMESERIES root.iotdb.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.iotdb.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.iotdb.d1.s2 WITH DATATYPE=FLOAT, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.iotdb.d1.s3 WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.flush.d0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "CREATE TIMESERIES root.flush.d0.s1 WITH DATATYPE=TEXT, ENCODING=PLAIN",
 +//      "CREATE TIMESERIES root.flush.d1.g0.s0 WITH DATATYPE=INT32, ENCODING=RLE",
 +//      "insert into root.iotdb.d0(timestamp,s0) values(3,100)",
 +//      "insert into root.iotdb.d0(timestamp,s0,s1) values(22,101,'102')",
 +//      "insert into root.iotdb.d0(timestamp,s1) values(24,'103')",
 +//      "insert into root.iotdb.d1(timestamp,s2) values(21,104.0)",
 +//      "insert into root.iotdb.d1(timestamp,s2,s3) values(25,105.0,true)",
 +//      "insert into root.iotdb.d1(timestamp,s3) values(27,false)",
 +//      "insert into root.iotdb.d0(timestamp,s0) values(30,1000)",
 +//      "insert into root.iotdb.d0(timestamp,s0,s1) values(202,101,'102')",
 +//      "insert into root.iotdb.d0(timestamp,s1) values(44,'103')",
 +//      "insert into root.iotdb.d1(timestamp,s2) values(1,404.0)",
 +//      "insert into root.iotdb.d1(timestamp,s2,s3) values(250,10.0,true)",
 +//      "insert into root.iotdb.d1(timestamp,s3) values(207,false)",
 +//      "insert into root.flush.d0(timestamp,s0) values(20,106)",
 +//      "insert into root.flush.d0(timestamp,s0,s1) values(14,107,'108')",
 +//      "insert into root.flush.d1.g0(timestamp,s0) values(1,110)",
 +//      "insert into root.flush.d0(timestamp,s0) values(200,1006)",
 +//      "insert into root.flush.d0(timestamp,s0,s1) values(1004,1007,'1080')",
 +//      "insert into root.flush.d1.g0(timestamp,s0) values(1000,910)",
 +//      "insert into root.vehicle.d0(timestamp,s0) values(209,130)",
 +//      "insert into root.vehicle.d0(timestamp,s0,s1) values(206,131,'132')",
 +//      "insert into root.vehicle.d0(timestamp,s1) values(70,'33')",
 +//      "insert into root.vehicle.d1(timestamp,s2) values(204,14.0)",
 +//      "insert into root.vehicle.d1(timestamp,s2,s3) values(29,135.0,false)",
 +//      "insert into root.vehicle.d1(timestamp,s3) values(14,false)",
 +//      "insert into root.test.d0(timestamp,s0) values(19,136)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(7,137,'138')",
 +//      "insert into root.test.d0(timestamp,s1) values(30,'139')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(4,150)",
 +//      "insert into root.test.d0(timestamp,s0) values(1900,1316)",
 +//      "insert into root.test.d0(timestamp,s0,s1) values(700,1307,'1038')",
 +//      "insert into root.test.d0(timestamp,s1) values(3000,'1309')",
 +//      "insert into root.test.d1.g0(timestamp,s0) values(400,1050)", "merge", "flush",};
 +//  private boolean testFlag = Constant.testFlag;
 +//  private static final String SYNC_CLIENT = Constans.SYNC_SENDER;
 +//  private static final Logger logger = LoggerFactory.getLogger(SingleClientSyncTest.class);
 +//
 +//  public static void main(String[] args) throws Exception {
 +//    SingleClientSyncTest singleClientPostBackTest = new SingleClientSyncTest();
 +//    singleClientPostBackTest.setUp();
 +//    singleClientPostBackTest.testPostback();
 +//    singleClientPostBackTest.tearDown();
 +//    System.exit(0);
 +//  }
 +//
 +//  public void setConfig() {
 +//    config.setSenderFolderPath(
 +//        config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.UUID_FILE_NAME);
 +//    config.setLastFileInfo(
 +//        config.getDataDirectory() + SYNC_CLIENT + File.separator + Constans.LAST_LOCAL_FILE_NAME);
 +//    String[] sequenceFileDirectory = config.getSeqFileDirectory();
 +//    String[] snapshots = new String[config.getSeqFileDirectory().length];
 +//    for (int i = 0; i < config.getSeqFileDirectory().length; i++) {
 +//      sequenceFileDirectory[i] = new File(sequenceFileDirectory[i]).getAbsolutePath();
 +//      if (!sequenceFileDirectory[i].endsWith(File.separator)) {
 +//        sequenceFileDirectory[i] = sequenceFileDirectory[i] + File.separator;
 +//      }
 +//      snapshots[i] =
 +//          sequenceFileDirectory[i] + SYNC_CLIENT + File.separator + Constans.DATA_SNAPSHOT_NAME
 +//              + File.separator;
 +//    }
 +//    config.setSnapshotPaths(snapshots);
 +//    config.setSeqFileDirectory(sequenceFileDirectory);
 +//    config.setServerIp(serverIpTest);
 +//    fileSenderImpl.setConfig(config);
 +//  }
 +//
 +//  public void setUp() throws StartupException, IOException {
 +//    if (testFlag) {
 +//      EnvironmentUtils.closeStatMonitor();
 +//      deamon = IoTDB.getInstance();
 +//      deamon.active();
 +//      EnvironmentUtils.envSetUp();
 +//    }
 +//    setConfig();
 +//  }
 +//
 +//  public void tearDown() throws Exception {
 +//    if (testFlag) {
 +//      deamon.stop();
 +//      EnvironmentUtils.cleanEnv();
 +//    }
 +//    if (success) {
 +//      logger.debug("Test succeed!");
 +//    } else {
 +//      logger.debug("Test failed!");
 +//    }
 +//  }
 +//
 +//  public void testPostback() throws IOException, SyncConnectionException, ClassNotFoundException, SQLException, InterruptedException {
 +//    if (testFlag) {
 +//      // the first time to sync
 +//      logger.debug("It's the first time to sync!");
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        try (Connection connection = DriverManager
 +//            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 +//                "root")) {
 +//          Statement statement = connection.createStatement();
 +//          for (String sql : sqls1) {
 +//            statement.execute(sql);
 +//          }
 +//          statement.close();
 +//        }
 +//      } catch (SQLException | ClassNotFoundException e) {
 +//        fail(e.getMessage());
 +//      }
 +//
 +//      fileSenderImpl.sync();
 +//
 +//      // Compare data of sender and receiver
 +//      dataSender.clear();
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        try (Connection connection = DriverManager
 +//            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 +//                "root")) {
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        }
 +//      } catch (ClassNotFoundException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//
 +//      dataReceiver.clear();
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        Connection connection = null;
 +//        try {
 +//          connection = DriverManager
 +//              .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 +//                  "root");
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        } finally {
 +//          if (connection != null) {
 +//            connection.close();
 +//          }
 +//        }
 +//      } catch (ClassNotFoundException | SQLException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//      logger.debug(String.valueOf(dataSender.size()));
 +//      logger.debug(String.valueOf(dataReceiver.size()));
 +//      logger.debug(dataSender.toString());
 +//      logger.debug(dataReceiver.toString());
 +//      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 +//        success = false;
 +//        return;
 +//      }
 +//
 +//      // the second time to sync
 +//      logger.debug("It's the second time to sync!");
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        Connection connection = null;
 +//        try {
 +//          connection = DriverManager
 +//              .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 +//                  "root");
 +//          Statement statement = connection.createStatement();
 +//          for (String sql : sqls2) {
 +//            statement.execute(sql);
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        } finally {
 +//          if (connection != null) {
 +//            connection.close();
 +//          }
 +//        }
 +//      } catch (ClassNotFoundException | SQLException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//
 +//      fileSenderImpl.sync();
 +//
 +//      // Compare data of sender and receiver
 +//      dataSender.clear();
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        Connection connection = null;
 +//        try {
 +//          connection = DriverManager
 +//              .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 +//                  "root");
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        } finally {
 +//          if (connection != null) {
 +//            connection.close();
 +//          }
 +//        }
 +//      } catch (ClassNotFoundException | SQLException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//
 +//      dataReceiver.clear();
 +//      {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        Connection connection = null;
 +//        try {
 +//          connection = DriverManager
 +//              .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 +//                  "root");
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        } finally {
 +//          if (connection != null) {
 +//            connection.close();
 +//          }
 +//        }
 +//      }
 +//      logger.debug(String.valueOf(dataSender.size()));
 +//      logger.debug(String.valueOf(dataReceiver.size()));
 +//      logger.debug(dataSender.toString());
 +//      logger.debug(dataReceiver.toString());
 +//      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 +//        success = false;
 +//        return;
 +//      }
 +//
 +//      // the third time to sync
 +//      logger.debug("It's the third time to sync!");
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        try (Connection connection = DriverManager
 +//            .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root",
 +//                "root")) {
 +//          Statement statement = connection.createStatement();
 +//          for (String sql : sqls3) {
 +//            statement.execute(sql);
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        }
 +//      } catch (ClassNotFoundException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//
 +//      fileSenderImpl.sync();
 +//
 +//      // Compare data of sender and receiver
 +//      dataSender.clear();
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        try (Connection connection = DriverManager
 +//            .getConnection(String.format("jdbc:iotdb://%s:6667/", serverIpTest), "root",
 +//                "root")) {
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.flush");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.flush.d0.s0")
 +//                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0")
 +//                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.iotdb");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataSender.add(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 +//                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 +//                  + res.getString("root.iotdb.d1.s3"));
 +//              logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 +//                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 +//                  + res.getString("root.iotdb.d1.s3"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        }
 +//      } catch (ClassNotFoundException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//
 +//      dataReceiver.clear();
 +//      try {
 +//        Class.forName(Config.JDBC_DRIVER_NAME);
 +//        Connection connection = null;
 +//        try {
 +//          connection = DriverManager
 +//              .getConnection("jdbc:iotdb://192.168.130.8:6667/", "root", "root");
 +//          Statement statement = connection.createStatement();
 +//          boolean hasResultSet = statement.execute("select * from root.vehicle");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.vehicle.d0.s0")
 +//                  + res.getString("root.vehicle.d0.s1") + res.getString("root.vehicle.d1.s2")
 +//                  + res.getString("root.vehicle.d1.s3"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.test");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.test.d0.s0")
 +//                  + res.getString("root.test.d0.s1") + res.getString("root.test.d1.g0.s0"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.flush");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.flush.d0.s0")
 +//                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 +//              logger.debug(res.getString("Time") + " | " + res.getString("root.flush.d0.s0")
 +//                  + res.getString("root.flush.d0.s1") + res.getString("root.flush.d1.g0.s0"));
 +//            }
 +//          }
 +//          hasResultSet = statement.execute("select * from root.iotdb");
 +//          if (hasResultSet) {
 +//            ResultSet res = statement.getResultSet();
 +//            while (res.next()) {
 +//              dataReceiver.add(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 +//                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 +//                  + res.getString("root.iotdb.d1.s3"));
 +//              logger.debug(res.getString("Time") + res.getString("root.iotdb.d0.s0")
 +//                  + res.getString("root.iotdb.d0.s1") + res.getString("root.iotdb.d1.s2")
 +//                  + res.getString("root.iotdb.d1.s3"));
 +//            }
 +//          }
 +//          statement.close();
 +//        } catch (Exception e) {
 +//          logger.error("", e);
 +//        } finally {
 +//          if (connection != null) {
 +//            connection.close();
 +//          }
 +//        }
 +//      } catch (ClassNotFoundException | SQLException e) {
 +//        fail(e.getMessage());
 +//        Thread.currentThread().interrupt();
 +//      }
 +//      logger.debug(String.valueOf(dataSender.size()));
 +//      logger.debug(String.valueOf(dataReceiver.size()));
 +//      logger.debug(String.valueOf(dataSender));
 +//      logger.debug(String.valueOf(dataReceiver));
 +//      if (!(dataSender.size() == dataReceiver.size() && dataSender.containsAll(dataReceiver))) {
 +//        success = false;
 +//      }
 +//    }
 +//  }
- //}
++//}