You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2021/12/01 02:57:44 UTC

[iotdb] branch expr updated (ba4355a -> 6dd6dbc)

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

jiangtian pushed a change to branch expr
in repository https://gitbox.apache.org/repos/asf/iotdb.git.


    from ba4355a  add RESPONSE_OUT_OF_WINDOW
     add f2382ef  [IOTDB-1877] Fix Sync recovery and reconnection bugs in both sender and receiver  (#4287)
     add 8eb939c  [IOTDB-1745] Metagroup snapshots support template (#4244)
     add 0013531  Update TSDB-Comparison.md (#4289)
     add 25a98ee  [IOTDB-1609] Print the actual size of plan when it exceeds the wal_buffer_size (#4279)
     add b05e21c  [ISSUE-4288] Fix CI issue caused by the invalid pentaho download url (#4299)
     add c48b118  [IOTDB-1914] fix information when start iotdb on windows  (#4300)
     add b89cf91  [IOTDB-1714] fix Could not find or load main class when start with jmx on win (#4306)
     add 0eeb0ce  [IOTDB-1604] Fix data increase when shut down iotdb in 0.12 and restart iotdb-0.13 (#4240)
     add af8b3dc  [ISSUE-4293] SessionPool: InterruptedException is not properly handled in synchronized wait() (#4295)
     add 2435127  [IOTDB-1886] Support Constant Expressions in Select Clauses (#4257)
     add bc47312  [IOTDB-1895] Cache leader optimization for batch write interfaces on multiple devices (#4286)
     add 5e1f780  [IOTDB-1775] CAST: data type conversion function (#4292)
     add 99e7bd7  fix the key of max_open_file_num_in_cross_space_compaction (#4324)
     add d35eab4  Add compaction version in cache key (#4298)
     add 0073a28  [ISSUE-4308] READ_TIMESERIES privilege granted to users and roles can not take effect when quering by UDFs (#4322)
     add e90cdfe  Bump gson from 2.8.6 to 2.8.8 (#4277)
     add 25fefb5  [IOTDB-1761] Add metric framework for IoTDB (#4194)
     add 959da45  [IOTDB-1760] Support other aggregations in group by fill (#4303)
     add f799e3c  [IoTDB-1913] Fix When exporting a amount of data, it will report network error or OOM (#4328)
     add 0c36f2d  [IOTDB-1613] Recover mods file if a delete write modification failed (#4334)
     add a1e84d0  [IOTDB-1958] Add storage group not ready exception (#4338)
     add 278fcf3  [IOTDB-1639] Refactoring the cluster class structure to make it consistent with the server module (#4079)
     add a3c38e3  [IOTDB-1883] Extension of schema template to tree-structured (#4326)
     add 206412a  [IOTDB-1726] Correct the calculation of TimeSeriesMetadataCacheKey and ChunkMetadata (#4340)
     add 7e718f0  [IOTDB-1975] OOM caused by that MaxQueryDeduplicatedPathNum doesn't take effect (#4345)
     add 04b45b8  remove the root node in Template by a Map(#4351)
     add 9762677  [IOTDB-1986] Support `select UDF as alisa` clauses (#4354)
     add 87dc695  [IOTDB-1924]Remove the operation of clearing the cache after the compaction is over (#4315)
     add 1f992b4  Bump spring-boot.version from 1.5.15.RELEASE to 1.5.22.RELEASE (#4274)
     add 3711553  Bump javassist from 3.24.0-GA to 3.24.1-GA (#4269)
     add 7f936db  Bump copy-rename-maven-plugin from 1.0 to 1.0.1 (#4270)
     add c4b9c2b  [IOTDB-1859] IoTDB REST Data Service: Framework (#4280)
     add c8513e6  [IOTDB-1983] Fix DescReadWriteBatchData serializing bug (#4357)
     add 7c398bb  [IOTDB-1859] CI fails on coveralls caused by openapi generated files (#4364)
     add e085250  [IOTDB-1990] Fix uncheck null result by calling IReaderByTimestamp.getValuesInTimestamps() (#4358)
     add 480c0f3  [ISSUE-4314] [docs] fix the Url of 'Get started quickly' in the file ContributeGuide.md (#4368)
     add 16fb554  [IOTDB-1859] CI fails on coveralls caused by openapi generated files (#4370)
     add 973157a  Adapt serialization/deserialization in CreateTemplatePlan with former template structure (#4355)
     add 4c80522  [IOTDB-2003] add overwrite method with @Override (#4374)
     add 4f615ea  [IoTDB-1865]【Cluster】Compaction is blocking when removing old files  (#4365)
     add 1e43fc7  [IOTDB-2001] Remove redundant StorageGroupNotReadyException (#4377)
     add 7138664  Fix bug of descending aggregation query (#4373)
     add 8a0562a  [IOTDB-2004] change initial assignment of Long to uppercase L (#4376)
     add 1056a23  [IOTDB-2005] use braces with if, else, for, do and while statements (#4378)
     add c81d6bb  [IOTDB-1923] Separate the request unpacking and execution processing logic of TSServiceImpl (#4316)
     add 3f35a7e  [IOTDB-2008] Fix null result bug of peekNextNotNullValue (#4384)
     add da2e788  [IOTDB-2009] fix incorrect previous filling (#4386)
     add 5a7abfb  [IOTDB-1950] Add Bloom Filter cache for query (#4350)
     add 3a4fb77  [IOTDB-1859][Minor Fix] Fixed REST config read bug in Session IT && Added REST service user doc into the API module (#4389)
     add c06ed22  [IOTDB-1859] CI fails on coveralls caused by openapi generated files (#4392)
     add b3d9b26  Update last cache while doing show latest timeseries query (#4393)
     add 05830a0  Fix iotdb-engine.properties doesn't take effect bug (#4405)
     add 47695ad  Make the cluster setup example doc clear (#4407)
     add 60e92f9  New architecture of aligned timeseries (#4382)
     add 3fe9cf8  Update csv user guide (#4401)
     add 36a2c85  [IOTDB-2018] Query dataset memory leak on server caused by python client (#4403)
     add 88f19d7  [IOTDB-2015] [metric] micrometer jvmGcMetrics cannot get gc pause time and counter (#4398)
     add 44fccdd  [IOTDB-2014] MicrometerPrometheusReporter#getReporterType return null (#4396)
     add 96df186  [IOTDB-1233] Support SQL of aligned timeseries and schema template (#4310)
     add dda533d  [IOTDB-2022] SessionDataSet implements AutoCloseable (#4411)
     add 4906ea7  [IOTDB-1851] Optimize iot-grafana code and fix some bugs (#4167)
     add 38740b7  Fix Bloom Filter Cache doesn't take effect bug (#4410)
     add 3a78a8f  [IOTDB-1902] Fix data abnormally increase after shutting down IoTDB, changing data dirs and restarting IoTDB  (#4408)
     add f3ff2db  implements contextor for SessionDataSet and update SessionExample (#4415)
     add 85888c7  [IoTDB-1936] Support other aggregations in group by fill with value filter (#4375)
     add 16e4e90  add tools (#4341)
     add 772838c  [IOTDB-2023] Fix serializing and deserializing bugs of Filters (#4414)
     add fedbb92  [IOTDB-2025] Fix count nodes and devices incorrectly in cluster (#4416)
     add d9f5d81  add v0.12.3 download links (#4421)
     add f61937c  Fix website build errors (#4427)
     add d63539b  Support RawQueryWithoutValueFilter in aligned timeseries (#4422)
     add aaadc5c  Fix exception when getting Statistics of aligned time series in memory (#4430)
     add 7ff968c  [IOTDB-2027] Rollback invalid entry after wal writing failure (#4424)
     add fc31d50  [IOTDB-1926]TsFile API supports query on aligned timeseries (#4390)
     add 9016d74  [IOTDB-1961] Cluster query memory leak  (#4343)
     add 1eb9e0e  Refactor the todf() function of client-py to improve performance (#4242)
     add 049c421  [IOTDB-1945] Support raw data query with value filter in new vector (#4433)
     add 05158d1  add javadoc for cluster (#4417)
     add d9d8733  [IOTDB-2036] RestApiServiceImpl accesses to BasicServiceProvider (#4434)
     add 441d6b7  [IOTDB-1931] Adapt tree structrued Template with MManager (#4391)
     add 8030147  [IOTDB-2006] avoid NPE while while calling the equals method of Object (#4439)
     add fd145d6  [IOTDB-2038] MqttService accesses to BasicServiceProvider (#4440)
     add 98be7dd  Bump nodeVersion in site deploy to v16.9.1 to support build website on ARM mac (#4442)
     add f8c18ac  [IOTDB-2030] Add IWritableMemChunkGroup Interface to unify the map in memtable  (#4412)
     add ab32867  [IOTDB-2016][metric] Fix ClassCastException when create new metric types (#4425)
     add 2f62994  Remind user to avoid frequently using flush command in client  (#4445)
     add c6744c5  [IOTDB-2047] Fix Partial insert NPE for aligned and non-aligned series (#4444)
     add 49e5b2f  [IOTDB-1951] Support aggregation query without value filter in new vector (#4441)
     add c4d73e8  [IOTDB-1974] Support Last Query for Aligned Timeseries (#4447)
     add bdebc92  Use statistics of time column in canUseCurrent*Statistics() method in AlignedSeriesAggregateReader (#4451)
     add 046ac2d  [IOTDB-2031] Fix incorrect result of descending query with multiple time_partitions (#4432)
     add 14505c1  [IOTDB-2031] Fix incorrect result of descending query with value filter in cluster (#4431)
     add 1f853f1  Use safer SQL query to guarantee column order
     add a3cd374  [IOTDB-2056] Fix totalPointsNumThreshold calculation error causes too many tsfile flushed (#4461)
     add e84ccff  [IOTDB-2027] Ignore too many WAL BufferOverflow log (#4467)
     add 2424f73  catch throwable in sub query threads (#4462)
     add 3c3c523  [IOTDB-1673] CLI refactor and upgrade to JLine3 (#4458)
     add 8a1674e  [IOTDB-2010] fix incomplete show timeseries result (#4388)
     add 241eb90  [IOTDB-2062] UDF Framework: Potential Memory Leak in `SingleInputColumnSingleReferenceIntermediateLayer` (#4472)
     add a8f467c  [IOTDB-2064] fix the NPE caused by map serde (#4473)
     add be43397  [IOTDB-2063] Fix MinTimeDescAggregationResult implementation (#4471)
     add 6487443  [IOTDB-2065] TsFileSequenceReader will be cached for 100s even no longer used (#4478)
     add f5a7b99  [IOTDB-1899] Fix stream closed exception during compaction (#4457)
     add 6c0289e  Upgrade lz4 from 1.3.0 to 1.8.0 due to CVE-2019-17543 (#4485)
     add c4f4eb9  [IOTDB-2068] GZIP compressor meets ArrayIndexOutOfBoundsException (#4488)
     add 38637f9  [IOTDB-2061] Read data in batches to limit max IO (#4490)
     add 6a88895  [IOTDB-2061] Add max cached buffer size and max concurrent sub query parameter (#4486)
     add 521f562  [IOTDB-2070] fix CLI doesn't accept statements with unclosed brackets (#4487)
     add 098093a  [IOTDB-2061] Add more comments to env.sh/bat (#4495)
     add 28a7895  [IOTDB-2060] NPE when using fill without a filter (#4465)
     add 3d48a88  [IOTDB-1935] Aligned timeseries support deleting (#4454)
     add 4f8015c  [IOTDB-1559] Refactor the IT framework (#4371)
     add cbb09d0  avoid double import in C++ client (#4500)
     add f43085e  [IOTDB-1940] Support aggregation query with value filter in new vector (#4470)
     new 6dd6dbc  Merge branch 'master' into expr

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


Summary of changes:
 .github/workflows/cluster.yml                      |   50 +
 .github/workflows/main-unix.yml                    |    2 +-
 .github/workflows/main-win.yml                     |    2 +-
 .gitignore                                         |    1 -
 LICENSE-binary                                     |    6 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlLexer.g4    |   27 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |   76 +-
 cli/pom.xml                                        |   16 +-
 cli/src/assembly/resources/sbin/start-cli.bat      |    2 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |    2 +-
 cli/src/main/java/org/apache/iotdb/cli/Cli.java    |   40 +-
 .../apache/iotdb/cli/IoTDBSyntaxHighlighter.java   |   76 +
 cli/src/main/java/org/apache/iotdb/cli/WinCli.java |  175 --
 .../org/apache/iotdb/cli/utils/JlineUtils.java     |   99 +
 .../org/apache/iotdb/tool/AbstractCsvTool.java     |    3 +-
 .../main/java/org/apache/iotdb/tool/ExportCsv.java |   97 +-
 .../main/java/org/apache/iotdb/tool/ImportCsv.java |   24 +-
 client-cpp/pom.xml                                 |    2 +-
 client-cpp/src/main/Session.h                      |    4 +
 client-py/SessionExample.py                        |   11 +-
 client-py/iotdb/Session.py                         |    1 +
 client-py/iotdb/utils/BitMap.py                    |    3 +-
 client-py/iotdb/utils/IoTDBConstants.py            |    1 +
 client-py/iotdb/utils/IoTDBRpcDataSet.py           |  140 +-
 client-py/iotdb/utils/SessionDataSet.py            |   34 +-
 client-py/iotdb/utils/Tablet.py                    |   10 +-
 client-py/tests/tablet_performance_comparison.py   |  129 +-
 client-py/tests/test_dataframe.py                  |   29 +-
 client-py/tests/test_todf.py                       |  216 ++
 cluster/pom.xml                                    |    4 +
 .../resources/conf/iotdb-cluster.properties        |    5 -
 cluster/src/assembly/resources/sbin/add-node.bat   |    2 +-
 cluster/src/assembly/resources/sbin/add-node.sh    |    2 +-
 .../src/assembly/resources/sbin/remove-node.bat    |    4 +-
 cluster/src/assembly/resources/sbin/remove-node.sh |    2 +-
 cluster/src/assembly/resources/sbin/start-node.bat |    4 +-
 cluster/src/assembly/resources/sbin/start-node.sh  |    2 +-
 cluster/src/assembly/resources/sbin/stop-node.bat  |    2 +-
 cluster/src/assembly/resources/sbin/stop-node.sh   |    2 +-
 .../java/org/apache/iotdb/cluster/ClientMain.java  |    3 +-
 .../org/apache/iotdb/cluster/ClusterIoTDB.java     |  693 +++++
 .../apache/iotdb/cluster/ClusterIoTDBMBean.java    |   36 +
 .../java/org/apache/iotdb/cluster/ClusterMain.java |  331 ---
 .../apache/iotdb/cluster/client/BaseFactory.java   |   54 +
 .../iotdb/cluster/client/ClientCategory.java       |   38 +
 .../apache/iotdb/cluster/client/ClientManager.java |  223 ++
 .../iotdb/cluster/client/ClientPoolFactory.java    |   98 +
 .../iotdb/cluster/client/DataClientProvider.java   |   95 -
 .../iotdb/cluster/client/IClientManager.java       |   35 +
 .../cluster/client/async/AsyncBaseFactory.java     |   68 +
 .../cluster/client/async/AsyncClientFactory.java   |   65 -
 .../cluster/client/async/AsyncClientPool.java      |  216 --
 .../cluster/client/async/AsyncDataClient.java      |  199 +-
 .../client/async/AsyncDataHeartbeatClient.java     |   81 -
 .../cluster/client/async/AsyncMetaClient.java      |  147 +-
 .../client/async/AsyncMetaHeartbeatClient.java     |   81 -
 .../cluster/client/sync/SyncClientAdaptor.java     |   60 +-
 .../cluster/client/sync/SyncClientFactory.java     |   40 -
 .../iotdb/cluster/client/sync/SyncClientPool.java  |  169 --
 .../iotdb/cluster/client/sync/SyncDataClient.java  |  114 +-
 .../client/sync/SyncDataHeartbeatClient.java       |   79 -
 .../iotdb/cluster/client/sync/SyncMetaClient.java  |  121 +-
 .../client/sync/SyncMetaHeartbeatClient.java       |   78 -
 .../apache/iotdb/cluster/config/ClusterConfig.java |    9 -
 .../iotdb/cluster/config/ClusterConstant.java      |   86 +
 .../iotdb/cluster/config/ClusterDescriptor.java    |   12 +-
 .../iotdb/cluster/coordinator/Coordinator.java     |  179 +-
 .../cluster/expr/ExprAppendNodeEntryHandler.java   |   24 -
 .../org/apache/iotdb/cluster/expr/ExprBench.java   |  123 -
 .../org/apache/iotdb/cluster/expr/ExprMember.java  |  305 ---
 .../org/apache/iotdb/cluster/expr/ExprServer.java  |  106 -
 .../apache/iotdb/cluster/expr/ExprVotingLog.java   |   59 -
 .../apache/iotdb/cluster/expr/SWRaftMember.java    |  206 ++
 .../apache/iotdb/cluster/expr/SequencerExpr.java   |  126 -
 .../apache/iotdb/cluster/expr/VotingLogList.java   |  111 -
 .../apache/iotdb/cluster/log/LogDispatcher.java    |   13 +-
 .../apache/iotdb/cluster/log/VotingLogList.java    |  104 +
 .../cluster/log/applier/AsyncDataLogApplier.java   |    4 +-
 .../iotdb/cluster/log/applier/BaseApplier.java     |   12 +-
 .../iotdb/cluster/log/applier/DataLogApplier.java  |   17 +-
 .../iotdb/cluster/log/catchup/LogCatchUpTask.java  |    5 +-
 .../manage/FilePartitionedSnapshotLogManager.java  |    4 +-
 .../log/manage/MetaSingleSnapshotLogManager.java   |   12 +-
 .../log/manage/PartitionedSnapshotLogManager.java  |    7 +-
 .../iotdb/cluster/log/manage/RaftLogManager.java   |   23 +-
 .../iotdb/cluster/log/snapshot/FileSnapshot.java   |   14 +-
 .../cluster/log/snapshot/MetaSimpleSnapshot.java   |   42 +-
 .../cluster/log/snapshot/PullSnapshotTask.java     |    5 +-
 .../log/snapshot/PullSnapshotTaskDescriptor.java   |    2 +-
 .../apache/iotdb/cluster/metadata/CMManager.java   |  430 ++--
 .../apache/iotdb/cluster/metadata/MetaPuller.java  |   79 +-
 .../cluster/partition/NodeAdditionResult.java      |    4 +-
 .../iotdb/cluster/partition/NodeRemovalResult.java |    4 +-
 .../iotdb/cluster/partition/PartitionGroup.java    |   36 +-
 .../iotdb/cluster/partition/PartitionTable.java    |    8 +-
 .../partition/balancer/DefaultSlotBalancer.java    |    6 +-
 .../cluster/partition/balancer/SlotBalancer.java   |    4 +-
 .../iotdb/cluster/partition/slot/SlotManager.java  |    2 +-
 .../partition/slot/SlotNodeAdditionResult.java     |    2 +-
 .../cluster/partition/slot/SlotPartitionTable.java |   48 +-
 .../iotdb/cluster/partition/slot/SlotStrategy.java |    2 +-
 .../partition/slot/SlotTimePartitionFilter.java    |    3 +-
 .../cluster/query/ClusterDataQueryExecutor.java    |    6 +-
 .../cluster/query/ClusterPhysicalGenerator.java    |   16 +-
 .../iotdb/cluster/query/ClusterPlanExecutor.java   |  388 ++-
 .../iotdb/cluster/query/ClusterPlanRouter.java     |   16 +-
 .../iotdb/cluster/query/ClusterQueryRouter.java    |   25 +-
 .../iotdb/cluster/query/LocalQueryExecutor.java    |   88 +-
 .../query/aggregate/ClusterAggregateExecutor.java  |    2 +-
 .../cluster/query/aggregate/ClusterAggregator.java |   38 +-
 .../cluster/query/fill/ClusterFillExecutor.java    |    7 +-
 .../cluster/query/fill/ClusterLinearFill.java      |   12 +-
 .../cluster/query/fill/ClusterPreviousFill.java    |   91 +-
 .../cluster/query/fill/PreviousFillArguments.java  |    2 +-
 .../ClusterGroupByFillNoVFilterDataSet.java        |   56 +
 .../groupby/ClusterGroupByFillVFilterDataSet.java  |   67 +
 .../groupby/ClusterGroupByNoVFilterDataSet.java    |    8 +-
 .../groupby/ClusterGroupByVFilterDataSet.java      |    6 +-
 .../query/groupby/MergeGroupByExecutor.java        |    2 +-
 .../query/groupby/RemoteGroupByExecutor.java       |   85 +-
 .../query/last/ClusterLastQueryExecutor.java       |   73 +-
 .../query/manage/ClusterSessionManager.java        |  137 +
 .../cluster/query/reader/ClusterReaderFactory.java |   87 +-
 .../cluster/query/reader/ClusterTimeGenerator.java |    2 +-
 .../iotdb/cluster/query/reader/DataSourceInfo.java |   83 +-
 .../reader/RemoteSeriesReaderByTimestamp.java      |   15 +-
 .../query/reader/RemoteSimpleSeriesReader.java     |   15 +-
 .../mult/AssignPathAscPriorityMergeReader.java     |   49 +
 .../mult/AssignPathDescPriorityMergeReader.java    |   49 +
 .../reader/mult/AssignPathManagedMergeReader.java  |   43 +-
 .../reader/mult/AssignPathPriorityMergeReader.java |   66 -
 .../mult/IAssignPathPriorityMergeReader.java       |   47 +
 .../query/reader/mult/MultDataSourceInfo.java      |   63 +-
 .../cluster/query/reader/mult/MultElement.java     |   49 +
 .../query/reader/mult/RemoteMultSeriesReader.java  |   41 +-
 .../apache/iotdb/cluster/server/ClientServer.java  |  311 ---
 .../iotdb/cluster/server/ClusterRPCService.java    |  109 +
 .../cluster/server/ClusterRPCServiceMBean.java     |   35 +
 .../iotdb/cluster/server/ClusterTSServiceImpl.java |   99 +
 .../iotdb/cluster/server/DataClusterServer.java    | 1139 ---------
 .../iotdb/cluster/server/MetaClusterServer.java    |  423 ----
 .../cluster/server/PullSnapshotHintService.java    |   20 +-
 .../apache/iotdb/cluster/server/RaftServer.java    |  285 ---
 .../org/apache/iotdb/cluster/server/Response.java  |    3 +
 .../iotdb/cluster/server/StoppedMemberManager.java |   11 +-
 .../server/clusterinfo/ClusterInfoServer.java      |    1 +
 .../handlers/caller/AppendNodeEntryHandler.java    |    7 +-
 .../server/handlers/caller/HeartbeatHandler.java   |    6 +-
 .../handlers/caller/PreviousFillHandler.java       |   26 +-
 .../handlers/caller/ShowTimeSeriesHandler.java     |  133 +
 .../server/heartbeat/DataHeartbeatServer.java      |   83 -
 .../cluster/server/heartbeat/HeartbeatServer.java  |  212 --
 .../cluster/server/heartbeat/HeartbeatThread.java  |   29 +-
 .../server/heartbeat/MetaHeartbeatServer.java      |   92 -
 .../server/heartbeat/MetaHeartbeatThread.java      |    7 +-
 .../cluster/server/member/DataGroupMember.java     |   97 +-
 .../server/member/DataGroupMemberMBean.java        |   25 +
 .../cluster/server/member/MetaGroupMember.java     |  501 ++--
 .../server/member/MetaGroupMemberMBean.java        |   35 +
 .../iotdb/cluster/server/member/RaftMember.java    |  306 ++-
 .../cluster/server/member/RaftMemberMBean.java     |   53 +
 .../server/raft/AbstractDataRaftService.java       |   54 +
 .../server/raft/AbstractMetaRaftService.java       |   52 +
 .../cluster/server/raft/AbstractRaftService.java   |   76 +
 .../server/raft/DataRaftHeartBeatService.java      |   68 +
 .../server/raft/DataRaftHeartBeatServiceMBean.java |   22 +
 .../iotdb/cluster/server/raft/DataRaftService.java |   65 +
 .../cluster/server/raft/DataRaftServiceMBean.java  |   22 +
 .../server/raft/MetaRaftHeartBeatService.java      |   68 +
 .../server/raft/MetaRaftHeartBeatServiceMBean.java |   22 +
 .../iotdb/cluster/server/raft/MetaRaftService.java |   65 +
 .../cluster/server/raft/MetaRaftServiceMBean.java  |   22 +
 .../cluster/server/raft/RaftServiceHandler.java    |   43 +
 .../cluster/server/service/DataGroupEngine.java    |  510 ++++
 .../server/service/DataGroupEngineMBean.java       |   31 +
 .../server/service/DataGroupServiceImpls.java      |  776 ++++++
 .../cluster/server/service/MetaAsyncService.java   |   42 +-
 .../cluster/server/service/MetaSyncService.java    |   50 +-
 .../apache/iotdb/cluster/utils/ClientUtils.java    |   64 +-
 .../iotdb/cluster/utils/ClusterQueryUtils.java     |   57 +-
 .../apache/iotdb/cluster/utils/ClusterUtils.java   |   53 +-
 .../apache/iotdb/cluster/utils/PartitionUtils.java |   12 +-
 .../cluster/utils/nodetool/ClusterMonitor.java     |   32 +-
 .../cluster/utils/nodetool/function/Slot.java      |    2 +-
 .../iotdb/cluster/client/BaseClientTest.java       |  156 ++
 .../iotdb/cluster/client/ClientManagerTest.java    |  212 ++
 .../cluster/client/ClientPoolFactoryTest.java      |  262 ++
 .../cluster/client/DataClientProviderTest.java     |  242 --
 .../iotdb/cluster/client/MockClientManager.java    |   47 +
 .../cluster/client/async/AsyncClientPoolTest.java  |  209 --
 .../cluster/client/async/AsyncDataClientTest.java  |  109 +-
 .../client/async/AsyncDataHeartbeatClientTest.java |   60 -
 .../cluster/client/async/AsyncMetaClientTest.java  |  108 +-
 .../client/async/AsyncMetaHeartbeatClientTest.java |   61 -
 .../cluster/client/sync/SyncClientAdaptorTest.java |   18 +-
 .../cluster/client/sync/SyncClientPoolTest.java    |  167 --
 .../cluster/client/sync/SyncDataClientTest.java    |  172 +-
 .../client/sync/SyncDataHeartbeatClientTest.java   |   66 -
 .../cluster/client/sync/SyncMetaClientTest.java    |  170 +-
 .../client/sync/SyncMetaHeartbeatClientTest.java   |   66 -
 .../org/apache/iotdb/cluster/common/IoTDBTest.java |   18 +-
 .../cluster/common/TestAsyncClientFactory.java     |   55 -
 .../iotdb/cluster/common/TestAsyncDataClient.java  |    3 +-
 .../iotdb/cluster/common/TestAsyncMetaClient.java  |    9 +-
 .../iotdb/cluster/common/TestLogApplier.java       |    2 +-
 .../apache/iotdb/cluster/common/TestSnapshot.java  |    6 +-
 .../cluster/common/TestSyncClientFactory.java      |   88 -
 .../org/apache/iotdb/cluster/common/TestUtils.java |   21 +-
 .../cluster/integration/BaseSingleNodeTest.java    |   16 +-
 .../iotdb/cluster/integration/SingleNodeTest.java  |    7 +-
 .../apache/iotdb/cluster/log/LogParserTest.java    |    8 +-
 .../log/applier/AsyncDataLogApplierTest.java       |    2 +-
 .../cluster/log/applier/DataLogApplierTest.java    |  182 +-
 .../cluster/log/applier/MetaLogApplierTest.java    |    6 +-
 .../iotdb/cluster/log/catchup/CatchUpTaskTest.java |    5 -
 .../cluster/log/catchup/LogCatchUpTaskTest.java    |    7 +-
 .../log/catchup/SnapshotCatchUpTaskTest.java       |    9 +-
 .../cluster/log/logtypes/SerializeLogTest.java     |    8 +-
 .../FilePartitionedSnapshotLogManagerTest.java     |    2 +-
 .../manage/MetaSingleSnapshotLogManagerTest.java   |    2 +-
 .../cluster/log/snapshot/DataSnapshotTest.java     |   12 +-
 .../cluster/log/snapshot/FileSnapshotTest.java     |    2 +-
 .../log/snapshot/MetaSimpleSnapshotTest.java       |   46 +-
 .../log/snapshot/PartitionedSnapshotTest.java      |    2 +-
 .../cluster/log/snapshot/PullSnapshotTaskTest.java |    7 +-
 .../iotdb/cluster/partition/MManagerWhiteBox.java  |    2 +-
 .../cluster/partition/SlotPartitionTableTest.java  |    6 +-
 .../apache/iotdb/cluster/query/BaseQueryTest.java  |    9 +-
 .../query/ClusterAggregateExecutorTest.java        |   49 +-
 .../query/ClusterDataQueryExecutorTest.java        |    7 +-
 .../query/ClusterPhysicalGeneratorTest.java        |    3 +-
 .../cluster/query/ClusterPlanExecutorTest.java     |    8 +-
 .../iotdb/cluster/query/ClusterPlannerTest.java    |    1 -
 .../cluster/query/ClusterQueryRouterTest.java      |   54 +-
 .../query/fill/ClusterFillExecutorTest.java        |   17 +-
 .../ClusterGroupByNoVFilterDataSetTest.java        |   11 +-
 .../groupby/ClusterGroupByVFilterDataSetTest.java  |   17 +-
 .../query/groupby/MergeGroupByExecutorTest.java    |    7 +-
 .../query/groupby/RemoteGroupByExecutorTest.java   |    7 +-
 .../cluster/query/manage/QueryCoordinatorTest.java |    8 +-
 .../query/reader/ClusterReaderFactoryTest.java     |   11 +-
 .../query/reader/ClusterTimeGeneratorTest.java     |    9 +-
 .../cluster/query/reader/DatasourceInfoTest.java   |   55 +-
 .../reader/RemoteSeriesReaderByTimestampTest.java  |  132 +-
 .../query/reader/RemoteSimpleSeriesReaderTest.java |  104 +-
 .../mult/AssignPathManagedMergeReaderTest.java     |  120 +-
 .../reader/mult/RemoteMultSeriesReaderTest.java    |  222 +-
 .../server/clusterinfo/ClusterInfoServerTest.java  |    5 +-
 .../clusterinfo/ClusterInfoServiceImplTest.java    |   28 +-
 .../caller/AppendGroupEntryHandlerTest.java        |    3 +-
 .../caller/AppendNodeEntryHandlerTest.java         |    3 +-
 .../handlers/caller/ElectionHandlerTest.java       |    3 +-
 .../handlers/caller/HeartbeatHandlerTest.java      |    3 +-
 .../handlers/caller/LogCatchUpHandlerTest.java     |    3 +-
 .../handlers/forwarder/ForwardPlanHandlerTest.java |    2 +-
 .../server/heartbeat/DataHeartbeatThreadTest.java  |    5 -
 .../server/heartbeat/HeartbeatThreadTest.java      |   23 +-
 .../server/heartbeat/MetaHeartbeatThreadTest.java  |    7 +-
 .../iotdb/cluster/server/member/BaseMember.java    |   66 +-
 .../cluster/server/member/DataGroupMemberTest.java |   69 +-
 .../cluster/server/member/MetaGroupMemberTest.java |  192 +-
 .../cluster/server/member/RaftMemberTest.java      |    4 +-
 .../cluster/utils/CreateTemplatePlanUtil.java      |   74 +
 .../iotdb/cluster/utils/SerializeUtilTest.java     |    2 +-
 .../resources/node1conf/iotdb-engine.properties    |   12 +-
 .../resources/node2conf/iotdb-engine.properties    |   12 +-
 .../resources/node3conf/iotdb-engine.properties    |   12 +-
 compile-tools/thrift/pom.xml                       |    2 +-
 distribution/src/assembly/all.xml                  |    4 +
 distribution/src/assembly/server.xml               |    4 +
 docs/Development/ContributeGuide.md                |    2 +-
 docs/Download/README.md                            |   34 +-
 docs/SystemDesign/DataQuery/AlignByDeviceQuery.md  |   12 +-
 docs/UserGuide/API/Programming-Java-Native-API.md  |  151 +-
 docs/UserGuide/Advanced-Features/Triggers.md       |    2 +-
 docs/UserGuide/Appendix/SQL-Reference.md           |   89 +-
 docs/UserGuide/Appendix/Status-Codes.md            |    1 +
 docs/UserGuide/Cluster/Cluster-Setup-Example.md    |   73 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |   34 +-
 .../UserGuide/Data-Concept/Measurement-Template.md |   84 -
 docs/UserGuide/Data-Concept/Schema-Template.md     |   84 +
 .../Integration-Test-refactoring-tutorial.md       |  161 ++
 .../DDL-Data-Definition-Language.md                |   75 +-
 .../DML-Data-Manipulation-Language.md              |   83 +-
 .../IoTDB-SQL-Language/Maintenance-Command.md      |    4 +
 .../IoTDB-SQL-Language/Syntax-Conventions.md       |   15 +-
 docs/UserGuide/System-Tools/CSV-Tool.md            |   10 +-
 docs/zh/Download/README.md                         |   34 +-
 .../SystemDesign/DataQuery/AlignByDeviceQuery.md   |   12 +-
 .../UserGuide/API/Programming-Java-Native-API.md   |  139 +-
 docs/zh/UserGuide/Advanced-Features/Triggers.md    |    2 +-
 docs/zh/UserGuide/Appendix/SQL-Reference.md        |   87 +-
 docs/zh/UserGuide/Appendix/Status-Codes.md         |    2 +
 docs/zh/UserGuide/Cluster/Cluster-Setup-Example.md |   72 +-
 .../Communication-Service-Protocol/RestService.md  |  268 ++
 docs/zh/UserGuide/Comparison/TSDB-Comparison.md    |    2 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |   33 +-
 .../UserGuide/Data-Concept/Measurement-Template.md |   81 -
 docs/zh/UserGuide/Data-Concept/Schema-Template.md  |   81 +
 .../Integration-Test-refactoring-tutorial.md       |  163 ++
 .../DDL-Data-Definition-Language.md                |   72 +-
 .../DML-Data-Manipulation-Language.md              |   84 +-
 .../IoTDB-SQL-Language/Maintenance-Command.md      |    3 +
 .../IoTDB-SQL-Language/Syntax-Conventions.md       |   15 +-
 docs/zh/UserGuide/System-Tools/CSV-Tool.md         |   69 +-
 example/client-cpp-example/pom.xml                 |    2 +-
 .../java/org/apache/iotdb/flink/TsFileUtils.java   |    4 +-
 .../iotdb/hadoop/tsfile/TSMRWriteExample.java      |    6 +-
 .../apache/iotdb/hadoop/tsfile/TsFileHelper.java   |    8 +-
 .../iotdb/hadoop/tsfile/TsFileWriteToHDFS.java     |    6 +-
 .../iotdb/AlignedTimeseriesSessionExample.java     |  222 +-
 .../iotdb/HybridTimeseriesSessionExample.java      |   11 +-
 .../org/apache/iotdb/SessionConcurrentExample.java |   46 +-
 .../main/java/org/apache/iotdb/SessionExample.java |  269 +-
 .../org/apache/iotdb/trigger/TriggerExample.java   |    2 +-
 .../iotdb/tsfile/TsFileForceAppendWrite.java       |   12 +-
 .../java/org/apache/iotdb/tsfile/TsFileRead.java   |    8 +-
 .../apache/iotdb/tsfile/TsFileSequenceRead.java    |   87 +-
 .../tsfile/TsFileWriteAlignedWithTSRecord.java     |   89 +
 .../iotdb/tsfile/TsFileWriteAlignedWithTablet.java |  141 ++
 .../iotdb/tsfile/TsFileWriteVectorWithTablet.java  |  118 -
 .../iotdb/tsfile/TsFileWriteWithTSRecord.java      |   66 +-
 .../apache/iotdb/tsfile/TsFileWriteWithTablet.java |  106 +-
 flink-iotdb-connector/pom.xml                      |    5 +
 .../iotdb/flink/tsfile/TsFileInputFormat.java      |    6 +-
 .../tsfile/RowTsFileOutputFormatTestBase.java      |    4 +-
 grafana/pom.xml                                    |    4 +-
 .../controller/DatabaseConnectController.java      |   63 +-
 .../iotdb/web/grafana/dao/impl/BasicDaoImpl.java   |   18 +-
 .../grafana/service/DatabaseConnectService.java    |    2 -
 .../service/impl/DatabaseConnectServiceImpl.java   |    5 -
 .../apache/iotdb/hadoop/fileSystem/HDFSInput.java  |    5 +
 .../iotdb/hadoop/tsfile/TSFRecordReader.java       |    4 +-
 .../apache/iotdb/hadoop/tsfile/TSFHadoopTest.java  |   49 +-
 .../iotdb/hadoop/tsfile/TsFileTestHelper.java      |    2 +-
 hive-connector/pom.xml                             |   16 -
 .../org/apache/iotdb/hive/TSFHiveRecordWriter.java |    3 +-
 .../apache/iotdb/hive/TSFHiveInputFormatTest.java  |   27 +-
 .../apache/iotdb/hive/TSFHiveRecordReaderTest.java |   28 +-
 .../org/apache/iotdb/hive/TsFileTestHelper.java    |    2 +-
 integration/README.md                              |  120 +
 integration/pic/Add_New_Configuration.png          |  Bin 0 -> 129654 bytes
 integration/pic/Cluster_Category.png               |  Bin 0 -> 175311 bytes
 integration/pic/Fork_mode.png                      |  Bin 0 -> 188976 bytes
 integration/pic/Run(Menu).png                      |  Bin 0 -> 99077 bytes
 integration/pic/Standalone_Category.png            |  Bin 0 -> 183256 bytes
 integration/pom.xml                                |  283 +++
 integration/src/assembly/cluster.xml               |   47 +
 .../iotdb/integration/env/ClusterEnvBase.java      |  245 ++
 .../iotdb/integration/env/ClusterEnvConfig.java    |  117 +
 .../apache/iotdb/integration/env/ClusterNode.java  |  166 ++
 .../iotdb/integration/env/ConfigFactory.java       |   52 +
 .../apache/iotdb/integration/env/EnvFactory.java   |   57 +
 .../iotdb/integration/env/FiveNodeCluster1Env.java |   64 +
 .../iotdb/integration/env/RemoteEnvConfig.java     |   23 +
 .../iotdb/integration/env/RemoteServerEnv.java     |   81 +
 .../apache/iotdb/itbase/category/ClusterTest.java  |   21 +
 .../iotdb/itbase/category/LocalStandaloneTest.java |   21 +
 .../apache/iotdb/itbase/category/RemoteTest.java   |   21 +
 .../org/apache/iotdb/itbase/env/BaseConfig.java    |   88 +
 .../java/org/apache/iotdb/itbase/env/BaseEnv.java  |   35 +
 .../db/engine/trigger/example/Accumulator.java     |    0
 .../iotdb/db/engine/trigger/example/Counter.java   |    0
 .../iotdb/db/integration/IOTDBGroupByIT.java       |  996 ++++++++
 .../integration/IOTDBGroupByInnerIntervalIT.java   |  335 +++
 .../db/integration/IOTDBInsertAlignedValuesIT.java |  222 ++
 .../apache/iotdb/db/integration/IOTDBInsertIT.java |  126 +
 .../apache/iotdb/db/integration/IoTDBAliasIT.java  |  364 +++
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java |  960 +++++++
 .../iotdb/db/integration/IoTDBArithmeticIT.java    |  287 +++
 .../org/apache/iotdb/db/integration/IoTDBAsIT.java |  564 +++++
 .../db/integration/IoTDBAutoCreateSchemaIT.java    |  209 ++
 .../iotdb/db/integration/IoTDBCheckConfigIT.java   |  145 ++
 .../iotdb/db/integration/IoTDBClearCacheIT.java    |  171 ++
 .../apache/iotdb/db/integration/IoTDBCloseIT.java  |  191 ++
 .../iotdb/db/integration/IoTDBCompleteIT.java      |  488 ++++
 .../iotdb/db/integration/IoTDBCompressTypeIT.java  |  101 +
 .../db/integration/IoTDBContinuousQueryIT.java     |  416 +++
 .../IoTDBCreateAlignedTimeseriesIT.java            |  109 +
 .../db/integration/IoTDBCreateSnapshotIT.java      |  180 ++
 .../db/integration/IoTDBCreateStorageGroupIT.java  |  131 +
 .../db/integration/IoTDBCreateTimeseriesIT.java    |  170 ++
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java |  446 ++++
 .../db/integration/IoTDBDeleteStorageGroupIT.java  |  160 ++
 .../db/integration/IoTDBDeleteTimeseriesIT.java    |  215 ++
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  500 ++++
 .../iotdb/db/integration/IoTDBDisableAlignIT.java  |  392 +++
 .../iotdb/db/integration/IoTDBEncodingIT.java      |  350 +++
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |  292 +++
 .../iotdb/db/integration/IoTDBExecuteBatchIT.java  |  194 ++
 .../iotdb/db/integration/IoTDBFilePathUtilsIT.java |   99 +
 .../apache/iotdb/db/integration/IoTDBFillIT.java   |  972 +++++++
 .../db/integration/IoTDBFloatPrecisionIT.java      |  170 ++
 .../db/integration/IoTDBFlushQueryMergeIT.java     |  203 ++
 .../iotdb/db/integration/IoTDBFuzzyQueryIT.java    |  295 +++
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   | 2647 ++++++++++++++++++++
 .../db/integration/IoTDBGroupByFillMixPathsIT.java |  489 ++++
 .../integration/IoTDBGroupByFillWithRangeIT.java   |  179 ++
 .../db/integration/IoTDBGroupByMonthFillIT.java    |  277 ++
 .../iotdb/db/integration/IoTDBGroupByMonthIT.java  |  273 ++
 .../iotdb/db/integration/IoTDBGroupByUnseqIT.java  |  185 ++
 .../org/apache/iotdb/db/integration/IoTDBInIT.java |  247 ++
 .../db/integration/IoTDBInsertMultiRowIT.java      |  128 +
 .../iotdb/db/integration/IoTDBInsertNaNIT.java     |  197 ++
 .../db/integration/IoTDBInsertWithQueryIT.java     |  468 ++++
 .../db/integration/IoTDBInsertWithoutTimeIT.java   |  132 +
 .../iotdb/db/integration/IoTDBKillQueryIT.java     |   80 +
 .../iotdb/db/integration/IoTDBLargeDataIT.java     |  373 +++
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |  599 +++++
 .../iotdb/db/integration/IoTDBLimitSlimitIT.java   |  204 ++
 ...IoTDBLoadExternalTsFileWithTimePartitionIT.java |  330 +++
 .../db/integration/IoTDBLoadExternalTsfileIT.java  |  825 ++++++
 .../integration/IoTDBManageTsFileResourceIT.java   |  295 +++
 .../apache/iotdb/db/integration/IoTDBMergeIT.java  |  332 +++
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |  603 +++++
 .../iotdb/db/integration/IoTDBMultiDeviceIT.java   |  292 +++
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        |  110 +
 .../db/integration/IoTDBMultiOverlappedPageIT.java |  166 ++
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |  471 ++++
 .../db/integration/IoTDBMultiStatementsIT.java     |  187 ++
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |  591 +++++
 .../db/integration/IoTDBNewTsFileCompactionIT.java | 1067 ++++++++
 .../iotdb/db/integration/IoTDBNumberPathIT.java    |  483 ++++
 .../db/integration/IoTDBOverlappedPageIT.java      |  194 ++
 .../db/integration/IoTDBPathNumOverLimitIT.java    |   75 +
 .../iotdb/db/integration/IoTDBQueryDemoIT.java     |  685 +++++
 .../db/integration/IoTDBQueryMemoryControlIT.java  |  277 ++
 .../iotdb/db/integration/IoTDBQueryTimeoutIT.java  |  156 ++
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  125 +
 .../iotdb/db/integration/IoTDBRecoverIT.java       |  438 ++++
 .../db/integration/IoTDBRecoverUnclosedIT.java     |  291 +++
 .../db/integration/IoTDBRemovePartitionIT.java     |  333 +++
 .../iotdb/db/integration/IoTDBRestartIT.java       |  462 ++++
 .../iotdb/db/integration/IoTDBResultSetIT.java     |  134 +
 .../db/integration/IoTDBRpcCompressionIT.java      |  140 ++
 .../IoTDBSameMeasurementsDifferentTypesIT.java     |  182 ++
 .../db/integration/IoTDBSchemaTemplateIT.java      |  180 ++
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    |  673 +++++
 .../iotdb/db/integration/IoTDBSensorUpdateIT.java  |   87 +
 .../db/integration/IoTDBSequenceDataQueryIT.java   |  329 +++
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  453 ++++
 .../db/integration/IoTDBSessionTimeoutIT.java      |   85 +
 .../IoTDBSetSystemReadOnlyWritableIT.java          |  256 ++
 .../apache/iotdb/db/integration/IoTDBSettleIT.java |   97 +
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 1286 ++++++++++
 .../integration/IoTDBSizeTieredCompactionIT.java   | 1344 ++++++++++
 .../integration/IoTDBSortedShowTimeseriesIT.java   |  326 +++
 .../iotdb/db/integration/IoTDBTagAlterIT.java      |  624 +++++
 .../apache/iotdb/db/integration/IoTDBTagIT.java    | 1114 ++++++++
 .../iotdb/db/integration/IoTDBTimePartitionIT.java |   92 +
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  158 ++
 .../iotdb/db/integration/IoTDBTracingIT.java       |   84 +
 .../db/integration/IoTDBTriggerExecutionIT.java    |  618 +++++
 .../db/integration/IoTDBTriggerManagementIT.java   |  503 ++++
 .../apache/iotdb/db/integration/IoTDBTtlIT.java    |  221 ++
 .../iotdb/db/integration/IoTDBUDFManagementIT.java |  396 +++
 .../db/integration/IoTDBUDFWindowQueryIT.java      |  632 +++++
 .../integration/IoTDBUDTFAlignByTimeQueryIT.java   |  823 ++++++
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java |  356 +++
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |  162 ++
 .../db/integration/IoTDBUDTFNonAlignQueryIT.java   |  341 +++
 .../iotdb/db/integration/IoTDBVersionIT.java       |   68 +
 .../db/integration/IoTDBWithoutAllNullIT.java      |  257 ++
 .../db/integration/IoTDBWithoutAnyNullIT.java      |  216 ++
 .../aggregation/IoTDBAggregationByLevelIT.java     |  537 ++++
 .../aggregation/IoTDBAggregationDeleteIT.java      |   94 +
 .../aggregation/IoTDBAggregationIT.java            | 1020 ++++++++
 .../aggregation/IoTDBAggregationLargeDataIT.java   | 1037 ++++++++
 .../aggregation/IoTDBAggregationSmallDataIT.java   |  808 ++++++
 .../db/integration/aligned/AlignedWriteUtil.java   |  142 ++
 .../IoTDBAggregationWithoutValueFilter2IT.java     |   66 +
 .../IoTDBAggregationWithoutValueFilterIT.java      |  447 ++++
 ...gregationWithoutValueFilterWithDeletion2IT.java |   83 +
 ...ggregationWithoutValueFilterWithDeletionIT.java |  447 ++++
 .../aligned/IoTDBDeleteTimeseriesIT.java           |  218 ++
 .../db/integration/aligned/IoTDBDeletionIT.java    |  522 ++++
 .../db/integration/aligned/IoTDBLastQuery2IT.java  |   66 +
 .../db/integration/aligned/IoTDBLastQueryIT.java   |  377 +++
 .../aligned/IoTDBLastQueryWithDeletion2IT.java     |   81 +
 .../aligned/IoTDBLastQueryWithDeletionIT.java      |  380 +++
 .../aligned/IoTDBLastQueryWithoutLastCache2IT.java |   69 +
 .../aligned/IoTDBLastQueryWithoutLastCacheIT.java  |  382 +++
 ...DBLastQueryWithoutLastCacheWithDeletion2IT.java |   86 +
 ...TDBLastQueryWithoutLastCacheWithDeletionIT.java |  384 +++
 .../aligned/IoTDBRawQueryWithValueFilter2IT.java   |   66 +
 .../aligned/IoTDBRawQueryWithValueFilterIT.java    |  764 ++++++
 ...oTDBRawQueryWithValueFilterWithDeletion2IT.java |   83 +
 ...IoTDBRawQueryWithValueFilterWithDeletionIT.java |  779 ++++++
 .../IoTDBRawQueryWithoutValueFilter2IT.java        |   67 +
 .../aligned/IoTDBRawQueryWithoutValueFilterIT.java |  634 +++++
 ...BRawQueryWithoutValueFilterWithDeletion2IT.java |   84 +
 ...DBRawQueryWithoutValueFilterWithDeletionIT.java |  612 +++++
 .../db/integration/auth/IoTDBAuthorizationIT.java  | 1181 +++++++++
 .../iotdb/db/integration/env/StandaloneEnv.java    |   80 +
 .../db/integration/env/StandaloneEnvConfig.java    |  109 +
 .../iotdb/db/query/udf/example/Accumulator.java    |  110 +
 .../apache/iotdb/db/query/udf/example/Adder.java   |    0
 .../apache/iotdb/db/query/udf/example/Counter.java |    0
 .../org/apache/iotdb/db/query/udf/example/Max.java |    0
 .../iotdb/db/query/udf/example/Multiplier.java     |    0
 .../SlidingSizeWindowConstructorTester0.java       |    0
 .../SlidingSizeWindowConstructorTester1.java       |    0
 .../SlidingTimeWindowConstructionTester.java       |    0
 .../db/query/udf/example/TerminateTester.java      |    0
 .../iotdb/db/query/udf/example/ValidateTester.java |    0
 .../iotdb/session/IoTDBSessionComplexIT.java       |  930 +++++++
 .../iotdb/session/IoTDBSessionIteratorIT.java      |  354 +++
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1487 +++++++++++
 .../src/test/resources/iotdb-engine.properties     |    0
 .../src/test/resources/logback.xml                 |    0
 jdbc/pom.xml                                       |    5 +
 .../iotdb/jdbc/AbstractIoTDBJDBCResultSet.java     |    4 +-
 .../org/apache/iotdb/jdbc/IoTDBConnection.java     |   10 +-
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |   20 +-
 .../org/apache/iotdb/jdbc/IoTDBResultMetadata.java |   58 +-
 .../java/org/apache/iotdb/jdbc/StringUtils.java    |   19 +-
 metrics/ReadMe.md                                  |  151 ++
 metrics/dropwizard-metrics/pom.xml                 |   54 +
 .../dropwizard/DropwizardMetricManager.java        |  410 +++
 .../iotdb/metrics/dropwizard/MetricName.java       |  134 +
 .../dropwizard/reporter/DropwizardJmxReporter.java |   75 +
 .../reporter/DropwizardPrometheusReporter.java     |   89 +
 .../prometheus/DropwizardMetricsExporter.java      |  197 ++
 .../dropwizard/reporter/prometheus/MetricType.java |   38 +
 .../reporter/prometheus/PrometheusReporter.java    |  233 ++
 .../reporter/prometheus/PrometheusSender.java      |   63 +
 .../reporter/prometheus/PrometheusTextWriter.java  |   79 +
 .../reporter/prometheus/PushGateway.java           |  150 ++
 .../dropwizard/reporter/prometheus/TextFormat.java |   27 +
 .../metrics/dropwizard/type/DropwizardCounter.java |   45 +
 .../metrics/dropwizard/type/DropwizardGauge.java   |   62 +
 .../dropwizard/type/DropwizardHistogram.java       |   47 +
 .../type/DropwizardHistogramSnapshot.java          |   73 +
 .../metrics/dropwizard/type/DropwizardRate.java    |   94 +
 .../metrics/dropwizard/type/DropwizardTimer.java   |   49 +
 .../org.apache.iotdb.metrics.MetricManager         |   18 +
 .../services/org.apache.iotdb.metrics.Reporter     |   19 +
 .../dropwizard/DropwizardMetricManagerTest.java    |  272 ++
 .../metrics/dropwizard/DropwizardMetricTest.java   |  181 ++
 .../dropwizard/DropwizardMetricTestPlan.java       |   62 +
 .../metrics/dropwizard/PrometheusRunTest.java      |   42 +
 .../src/test/resources/iotdb-metric.yml            |   42 +
 metrics/interface/pom.xml                          |   73 +
 metrics/interface/src/main/assembly/metric.xml     |   40 +
 .../main/assembly/resources/conf/iotdb-metric.yml  |   42 +
 .../apache/iotdb/metrics/CompositeReporter.java    |   81 +
 .../org/apache/iotdb/metrics/MetricManager.java    |  172 ++
 .../org/apache/iotdb/metrics/MetricService.java    |  156 ++
 .../java/org/apache/iotdb/metrics/Reporter.java    |   36 +
 .../apache/iotdb/metrics/config/MetricConfig.java  |  106 +
 .../metrics/config/MetricConfigDescriptor.java     |   88 +
 .../iotdb/metrics/config/MetricConstant.java       |   29 +
 .../iotdb/metrics/impl/DoNothingCounter.java       |   39 +
 .../apache/iotdb/metrics/impl/DoNothingGauge.java  |   34 +
 .../iotdb/metrics/impl/DoNothingHistogram.java     |   41 +
 .../metrics/impl/DoNothingHistogramSnapshot.java   |   66 +
 .../iotdb/metrics/impl/DoNothingMetricManager.java |  178 ++
 .../apache/iotdb/metrics/impl/DoNothingRate.java   |   59 +
 .../apache/iotdb/metrics/impl/DoNothingTimer.java  |   43 +
 .../org/apache/iotdb/metrics/type/Counter.java     |   31 +
 .../java/org/apache/iotdb/metrics/type/Gauge.java  |   28 +
 .../org/apache/iotdb/metrics/type/Histogram.java   |   31 +
 .../iotdb/metrics/type/HistogramSnapshot.java      |   54 +
 .../org/apache/iotdb/metrics/type/IMetric.java     |   22 +
 .../java/org/apache/iotdb/metrics/type/Rate.java   |   43 +
 .../java/org/apache/iotdb/metrics/type/Timer.java  |   53 +
 .../apache/iotdb/metrics/utils/MonitorType.java    |   55 +
 .../iotdb/metrics/utils/PredefinedMetric.java      |   24 +
 .../apache/iotdb/metrics/utils/ReporterType.java   |   33 +
 .../iotdb/metrics/config/MetricConfigTest.java     |   57 +
 .../src/main/test/resources/iotdb-metric.yml       |   43 +
 metrics/micrometer-metrics/pom.xml                 |   57 +
 .../iotdb/metrics/micrometer/MeterIdUtils.java     |   32 +
 .../micrometer/MicrometerMetricManager.java        |  492 ++++
 .../micrometer/reporter/MicrometerJmxReporter.java |   82 +
 .../reporter/MicrometerPrometheusReporter.java     |  102 +
 .../metrics/micrometer/type/MicrometerCounter.java |   45 +
 .../metrics/micrometer/type/MicrometerGauge.java   |   47 +
 .../micrometer/type/MicrometerHistogram.java       |   47 +
 .../type/MicrometerHistogramSnapshot.java          |   90 +
 .../metrics/micrometer/type/MicrometerRate.java    |   81 +
 .../metrics/micrometer/type/MicrometerTimer.java   |   54 +
 .../org.apache.iotdb.metrics.MetricManager         |   18 +
 .../services/org.apache.iotdb.metrics.Reporter     |   19 +
 .../micrometer/MicrometerMetricManagerTest.java    |   52 +
 .../metrics/micrometer/MicrometerMetricTest.java   |  181 ++
 .../micrometer/MicrometerMetricTestPlan.java       |   62 +
 .../src/test/resources/iotdb-metric.yml            |   42 +
 metrics/pom.xml                                    |   40 +
 openapi/pom.xml                                    |  124 +
 openapi/src/main/openapi3/iotdb-rest.yaml          |  167 ++
 pom.xml                                            |   49 +-
 server/pom.xml                                     |   11 +
 .../resources/conf/iotdb-engine.properties         |   13 +-
 server/src/assembly/resources/conf/iotdb-env.bat   |   28 +-
 server/src/assembly/resources/conf/iotdb-env.sh    |   11 +-
 .../assembly/resources/conf/iotdb-rest.properties  |   55 +
 server/src/assembly/server.xml                     |    4 +
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |    7 +-
 .../iotdb/db/auth/authorizer/OpenIdAuthorizer.java |    2 +-
 .../db/concurrent/IoTDBDaemonThreadFactory.java    |   37 +
 .../db/concurrent/IoTDBThreadPoolFactory.java      |  186 +-
 .../org/apache/iotdb/db/concurrent/ThreadName.java |   13 +-
 .../db/concurrent/threadpool/IThreadPoolMBean.java |   45 +
 .../WrappedScheduledExecutorService.java           |  193 ++
 .../WrappedScheduledExecutorServiceMBean.java      |   22 +
 .../WrappedSingleThreadExecutorService.java        |  119 +
 .../WrappedSingleThreadExecutorServiceMBean.java   |   22 +
 .../WrappedSingleThreadScheduledExecutor.java      |  141 ++
 .../WrappedSingleThreadScheduledExecutorMBean.java |   22 +
 .../threadpool/WrappedThreadPoolExecutor.java      |   82 +
 .../threadpool/WrappedThreadPoolExecutorMBean.java |   22 +
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |   39 +-
 .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java |   37 +-
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |    6 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |   23 +-
 .../iotdb/db/conf/rest/IoTDBRestServiceCheck.java  |   65 +
 .../iotdb/db/conf/rest/IoTDBRestServiceConfig.java |  143 ++
 .../db/conf/rest/IoTDBRestServiceDescriptor.java   |  162 ++
 .../org/apache/iotdb/db/constant/TestConstant.java |  143 ++
 .../apache/iotdb/db/cq/ContinuousQueryService.java |    4 +-
 .../apache/iotdb/db/cq/ContinuousQueryTask.java    |    2 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   34 +-
 .../iotdb/db/engine/cache/AccountableString.java   |   64 -
 .../iotdb/db/engine/cache/BloomFilterCache.java    |  188 ++
 .../db/engine/cache/CacheHitRatioMonitor.java      |   25 +
 .../engine/cache/CacheHitRatioMonitorMXBean.java   |   10 +
 .../db/engine/cache/TimeSeriesMetadataCache.java   |  203 +-
 .../db/engine/compaction/CompactionScheduler.java  |    3 +-
 .../engine/compaction/CompactionTaskManager.java   |   44 +-
 .../db/engine/compaction/TsFileIdentifier.java     |  184 ++
 .../AbstractCrossSpaceCompactionSelector.java      |    1 +
 .../compaction/cross/CrossCompactionStrategy.java  |    2 +-
 .../cross/inplace/InplaceCompactionTask.java       |    7 -
 .../inplace/manage/CrossSpaceMergeContext.java     |    2 +-
 .../inplace/manage/CrossSpaceMergeResource.java    |    7 +-
 .../cross/inplace/manage/MergeManager.java         |    4 +-
 .../recover/InplaceCompactionLogAnalyzer.java      |  353 +++
 .../inplace/recover/InplaceCompactionLogger.java   |  150 ++
 .../cross/inplace/recover/LogAnalyzer.java         |  328 ---
 .../cross/inplace/recover/MergeLogger.java         |  140 --
 .../cross/inplace/selector/IMergePathSelector.java |    2 +-
 .../cross/inplace/selector/NaivePathSelector.java  |    2 +-
 .../cross/inplace/task/CrossSpaceMergeTask.java    |   25 +-
 .../cross/inplace/task/MergeFileTask.java          |   28 +-
 .../cross/inplace/task/MergeMultiChunkTask.java    |   30 +-
 .../cross/inplace/task/RecoverCrossMergeTask.java  |   25 +-
 .../AbstractInnerSpaceCompactionSelector.java      |    1 +
 .../inner/AbstractInnerSpaceCompactionTask.java    |    2 +
 .../compaction/inner/InnerCompactionStrategy.java  |    2 +-
 .../SizeTieredCompactionRecoverTask.java           |   85 +-
 .../sizetiered/SizeTieredCompactionSelector.java   |    2 +-
 .../inner/sizetiered/SizeTieredCompactionTask.java |  121 +-
 .../inner/utils/InnerSpaceCompactionUtils.java     |   20 +-
 .../utils/SizeTieredCompactionLogAnalyzer.java     |   27 +-
 .../inner/utils/SizeTieredCompactionLogger.java    |   13 +-
 .../compaction/task/AbstractCompactionTask.java    |   10 +-
 .../compaction/task/CompactionRecoverTask.java     |    7 +-
 .../apache/iotdb/db/engine/flush/FlushManager.java |    3 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |  155 +-
 .../iotdb/db/engine/flush/NotifyFlushMemTable.java |    7 -
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  353 ++-
 .../engine/memtable/AlignedWritableMemChunk.java   |  363 +++
 .../memtable/AlignedWritableMemChunkGroup.java     |  108 +
 .../apache/iotdb/db/engine/memtable/IMemTable.java |   27 +-
 .../db/engine/memtable/IWritableMemChunk.java      |   37 +-
 .../db/engine/memtable/IWritableMemChunkGroup.java |   53 +
 .../db/engine/memtable/PrimitiveMemTable.java      |   18 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |  141 +-
 .../db/engine/memtable/WritableMemChunkGroup.java  |  137 +
 .../iotdb/db/engine/modification/Deletion.java     |    2 +-
 .../iotdb/db/engine/modification/Modification.java |    2 +-
 .../db/engine/modification/ModificationFile.java   |   10 +-
 .../io/LocalTextModificationAccessor.java          |   35 +-
 .../engine/modification/io/ModificationReader.java |    3 +-
 .../engine/modification/io/ModificationWriter.java |    4 +-
 .../modification/utils/TracedBufferedReader.java   |  462 ++++
 .../querycontext/AlignedReadOnlyMemChunk.java      |  165 ++
 .../db/engine/querycontext/ReadOnlyMemChunk.java   |  147 +-
 .../selectinto/InsertTabletPlanGenerator.java      |    2 +-
 .../selectinto/InsertTabletPlansIterator.java      |    2 +-
 .../engine/storagegroup/StorageGroupProcessor.java |  164 +-
 .../db/engine/storagegroup/TsFileProcessor.java    |  337 ++-
 .../db/engine/storagegroup/TsFileResource.java     |  127 +-
 .../virtualSg/HashVirtualPartitioner.java          |    2 +-
 .../storagegroup/virtualSg/VirtualPartitioner.java |    2 +-
 .../virtualSg/VirtualStorageGroupManager.java      |   10 +-
 .../service/TriggerRegistrationInformation.java    |    2 +-
 .../service/TriggerRegistrationService.java        |    2 +-
 .../sink/local/LocalIoTDBConfiguration.java        |    2 +-
 .../trigger/sink/local/LocalIoTDBHandler.java      |    6 +-
 .../trigger/sink/mqtt/MQTTConfiguration.java       |    2 +-
 .../iotdb/db/exception/ConfigurationException.java |   44 +
 .../exception/StorageGroupNotReadyException.java   |   27 +
 .../metadata/TemplateImcompatibeException.java     |   40 +
 .../exception/query/PathNumOverLimitException.java |    6 +-
 .../db/exception/query/QueryProcessException.java  |    4 +
 .../org/apache/iotdb/db/metadata/MManager.java     |  623 ++---
 .../org/apache/iotdb/db/metadata/PartialPath.java  |  361 ---
 .../iotdb/db/metadata/VectorPartialPath.java       |  122 -
 .../db/metadata/lastCache/LastCacheManager.java    |  136 +-
 .../lastCache/container/ILastCacheContainer.java   |   13 -
 .../lastCache/container/LastCacheContainer.java    |   52 +-
 .../lastCache/container/value/ILastCacheValue.java |   12 -
 .../lastCache/container/value/LastCacheValue.java  |   55 +
 .../container/value/UnaryLastCacheValue.java       |  106 -
 .../container/value/VectorLastCacheValue.java      |   86 -
 .../iotdb/db/metadata/logfile/MLogTxtWriter.java   |   80 +-
 .../iotdb/db/metadata/logfile/MLogUpgrader.java    |    2 +-
 .../iotdb/db/metadata/logfile/MLogWriter.java      |   28 +-
 .../db/metadata/logfile/MetadataOperationType.java |    2 +
 .../iotdb/db/metadata/mnode/EntityMNode.java       |   10 +-
 .../iotdb/db/metadata/mnode/IEntityMNode.java      |    5 +
 .../org/apache/iotdb/db/metadata/mnode/IMNode.java |    4 +-
 .../iotdb/db/metadata/mnode/IMeasurementMNode.java |   13 +-
 .../iotdb/db/metadata/mnode/InternalMNode.java     |   13 +
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |    2 +-
 .../iotdb/db/metadata/mnode/MeasurementMNode.java  |   72 +-
 .../db/metadata/mnode/MultiMeasurementMNode.java   |   65 -
 .../db/metadata/mnode/UnaryMeasurementMNode.java   |   63 -
 .../org/apache/iotdb/db/metadata/mtree/MTree.java  |  595 +++--
 .../mtree/traverser/PathGrouperByStorageGroup.java |  103 -
 .../db/metadata/mtree/traverser/Traverser.java     |  117 +-
 .../collector/BelongedEntityPathCollector.java     |   83 -
 .../traverser/collector/CollectorTraverser.java    |    8 +-
 .../mtree/traverser/collector/EntityCollector.java |   62 +
 .../traverser/collector/EntityPathCollector.java   |   66 -
 .../collector/FlatMeasurementCollector.java        |  138 -
 .../collector/FlatMeasurementPathCollector.java    |   60 -
 .../collector/FlatMeasurementSchemaCollector.java  |  117 -
 .../mtree/traverser/collector/MNodeCollector.java  |    2 +-
 .../traverser/collector/MeasurementCollector.java  |   52 +-
 .../traverser/collector/StorageGroupCollector.java |   60 +
 .../collector/StorageGroupPathCollector.java       |   65 -
 .../mtree/traverser/counter/CounterTraverser.java  |    2 +-
 .../mtree/traverser/counter/EntityCounter.java     |    2 +-
 .../traverser/counter/FlatMeasurementCounter.java  |   78 -
 .../mtree/traverser/counter/MNodeLevelCounter.java |    2 +-
 .../traverser/counter/MeasurementCounter.java      |    2 +-
 .../traverser/counter/StorageGroupCounter.java     |    2 +-
 .../apache/iotdb/db/metadata/path/AlignedPath.java |  470 ++++
 .../iotdb/db/metadata/path/MeasurementPath.java    |  329 +++
 .../apache/iotdb/db/metadata/path/PartialPath.java |  454 ++++
 .../apache/iotdb/db/metadata/tag/TagManager.java   |    2 +-
 .../iotdb/db/metadata/template/Template.java       |  583 ++++-
 .../db/metadata/template/TemplateManager.java      |   79 +-
 .../db/metadata/template/TemplateQueryType.java    |   27 +
 .../iotdb/db/metadata/utils/MetaFormatUtils.java   |    2 +-
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |   36 +-
 .../iotdb/db/metrics/server/ServerArgument.java    |    6 +-
 .../org/apache/iotdb/db/monitor/StatMonitor.java   |   32 +-
 .../org/apache/iotdb/db/mqtt/PublishHandler.java   |   86 +-
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |   12 +-
 .../apache/iotdb/db/qp/executor/IPlanExecutor.java |    2 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  101 +-
 .../org/apache/iotdb/db/qp/logical/Operator.java   |    8 +-
 .../qp/logical/crud/AggregationQueryOperator.java  |    2 +-
 .../db/qp/logical/crud/BasicFunctionOperator.java  |    6 +-
 .../db/qp/logical/crud/DeleteDataOperator.java     |    2 +-
 .../db/qp/logical/crud/FillQueryOperator.java      |   17 +-
 .../iotdb/db/qp/logical/crud/FilterOperator.java   |    7 +-
 .../iotdb/db/qp/logical/crud/FromComponent.java    |    2 +-
 .../iotdb/db/qp/logical/crud/FunctionOperator.java |    3 +-
 .../qp/logical/crud/GroupByFillQueryOperator.java  |   13 -
 .../iotdb/db/qp/logical/crud/InOperator.java       |   10 +-
 .../iotdb/db/qp/logical/crud/InsertOperator.java   |   23 +-
 .../iotdb/db/qp/logical/crud/LikeOperator.java     |   17 +-
 .../iotdb/db/qp/logical/crud/QueryOperator.java    |   91 +-
 .../iotdb/db/qp/logical/crud/RegexpOperator.java   |   17 +-
 .../iotdb/db/qp/logical/crud/SelectComponent.java  |    2 +-
 .../db/qp/logical/crud/SelectIntoOperator.java     |    2 +-
 .../qp/logical/sys/ActivateTemplateOperator.java   |   51 +
 .../db/qp/logical/sys/AlterTimeSeriesOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/AuthorOperator.java    |    2 +-
 .../iotdb/db/qp/logical/sys/CountOperator.java     |    2 +-
 .../sys/CreateAlignedTimeSeriesOperator.java       |  131 +
 .../logical/sys/CreateContinuousQueryOperator.java |    2 +-
 .../db/qp/logical/sys/CreateIndexOperator.java     |    2 +-
 .../db/qp/logical/sys/CreateTemplateOperator.java  |  122 +
 .../qp/logical/sys/CreateTimeSeriesOperator.java   |    2 +-
 .../db/qp/logical/sys/CreateTriggerOperator.java   |    2 +-
 .../db/qp/logical/sys/DeletePartitionOperator.java |    2 +-
 .../qp/logical/sys/DeleteStorageGroupOperator.java |    2 +-
 .../qp/logical/sys/DeleteTimeSeriesOperator.java   |    2 +-
 .../iotdb/db/qp/logical/sys/DropIndexOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/FlushOperator.java     |    2 +-
 .../db/qp/logical/sys/SetStorageGroupOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/SetTTLOperator.java    |    2 +-
 .../db/qp/logical/sys/SetTemplateOperator.java     |   60 +
 .../iotdb/db/qp/logical/sys/SettleOperator.java    |    2 +-
 .../db/qp/logical/sys/ShowChildNodesOperator.java  |    2 +-
 .../db/qp/logical/sys/ShowChildPathsOperator.java  |    2 +-
 .../db/qp/logical/sys/ShowDevicesOperator.java     |    2 +-
 .../db/qp/logical/sys/ShowLockInfoOperator.java    |    2 +-
 .../qp/logical/sys/ShowStorageGroupOperator.java   |    2 +-
 .../iotdb/db/qp/logical/sys/ShowTTLOperator.java   |    2 +-
 .../db/qp/logical/sys/ShowTimeSeriesOperator.java  |    2 +-
 .../iotdb/db/qp/logical/sys/UnSetTTLOperator.java  |    2 +-
 .../db/qp/logical/sys/UnsetTemplateOperator.java   |   60 +
 .../org/apache/iotdb/db/qp/physical/BatchPlan.java |    2 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |   82 +-
 .../iotdb/db/qp/physical/crud/AggregationPlan.java |    6 +-
 .../db/qp/physical/crud/AlignByDevicePlan.java     |   13 +-
 .../db/qp/physical/crud/CreateTemplatePlan.java    |  270 --
 .../db/qp/physical/crud/DeletePartitionPlan.java   |    2 +-
 .../iotdb/db/qp/physical/crud/DeletePlan.java      |    4 +-
 .../db/qp/physical/crud/InsertMultiTabletPlan.java |   10 +-
 .../iotdb/db/qp/physical/crud/InsertPlan.java      |   55 +-
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |   55 +-
 .../physical/crud/InsertRowsOfOneDevicePlan.java   |   23 +-
 .../iotdb/db/qp/physical/crud/InsertRowsPlan.java  |    9 +-
 .../db/qp/physical/crud/InsertTabletPlan.java      |   32 +-
 .../iotdb/db/qp/physical/crud/LastQueryPlan.java   |    1 -
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |   32 +-
 .../db/qp/physical/crud/RawDataQueryPlan.java      |   59 +-
 .../iotdb/db/qp/physical/crud/SelectIntoPlan.java  |    7 +-
 .../db/qp/physical/crud/SetSchemaTemplatePlan.java |   94 -
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |   31 +-
 .../qp/physical/crud/UnsetSchemaTemplatePlan.java  |   96 -
 .../db/qp/physical/sys/ActivateTemplatePlan.java   |   83 +
 .../db/qp/physical/sys/AlterTimeSeriesPlan.java    |    2 +-
 .../db/qp/physical/sys/AppendTemplatePlan.java     |  218 ++
 .../iotdb/db/qp/physical/sys/AuthorPlan.java       |    4 +-
 .../qp/physical/sys/AutoCreateDeviceMNodePlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/ChangeAliasPlan.java  |    4 +-
 .../db/qp/physical/sys/ChangeTagOffsetPlan.java    |    4 +-
 .../iotdb/db/qp/physical/sys/ClearCachePlan.java   |    4 +-
 .../apache/iotdb/db/qp/physical/sys/CountPlan.java |    2 +-
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  |   39 +-
 .../qp/physical/sys/CreateContinuousQueryPlan.java |    4 +-
 .../db/qp/physical/sys/CreateFunctionPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/CreateIndexPlan.java  |    4 +-
 .../qp/physical/sys/CreateMultiTimeSeriesPlan.java |    5 +-
 .../db/qp/physical/sys/CreateSnapshotPlan.java     |    4 +-
 .../db/qp/physical/sys/CreateTemplatePlan.java     |  515 ++++
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   |    4 +-
 .../db/qp/physical/sys/CreateTriggerPlan.java      |    4 +-
 .../iotdb/db/qp/physical/sys/DataAuthPlan.java     |    4 +-
 .../db/qp/physical/sys/DeleteStorageGroupPlan.java |    4 +-
 .../db/qp/physical/sys/DeleteTimeSeriesPlan.java   |    4 +-
 .../qp/physical/sys/DropContinuousQueryPlan.java   |    4 +-
 .../iotdb/db/qp/physical/sys/DropFunctionPlan.java |    2 +-
 .../iotdb/db/qp/physical/sys/DropIndexPlan.java    |    4 +-
 .../iotdb/db/qp/physical/sys/DropTriggerPlan.java  |    4 +-
 .../apache/iotdb/db/qp/physical/sys/DummyPlan.java |    5 +-
 .../apache/iotdb/db/qp/physical/sys/FlushPlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/KillQueryPlan.java    |    2 +-
 .../db/qp/physical/sys/LoadConfigurationPlan.java  |    2 +-
 .../iotdb/db/qp/physical/sys/LoadDataPlan.java     |    2 +-
 .../apache/iotdb/db/qp/physical/sys/LogPlan.java   |    2 +-
 .../apache/iotdb/db/qp/physical/sys/MNodePlan.java |    4 +-
 .../db/qp/physical/sys/MeasurementMNodePlan.java   |    4 +-
 .../apache/iotdb/db/qp/physical/sys/MergePlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/OperateFilePlan.java  |    2 +-
 .../db/qp/physical/sys/PruneTemplatePlan.java      |  107 +
 .../db/qp/physical/sys/SetStorageGroupPlan.java    |    4 +-
 .../db/qp/physical/sys/SetSystemModePlan.java      |    4 +-
 .../iotdb/db/qp/physical/sys/SetTTLPlan.java       |    4 +-
 .../iotdb/db/qp/physical/sys/SetTemplatePlan.java  |   94 +
 .../physical/sys/SetUsingSchemaTemplatePlan.java   |   83 -
 .../iotdb/db/qp/physical/sys/SettlePlan.java       |    2 +-
 .../db/qp/physical/sys/ShowChildNodesPlan.java     |    2 +-
 .../db/qp/physical/sys/ShowChildPathsPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/ShowDevicesPlan.java  |    2 +-
 .../iotdb/db/qp/physical/sys/ShowLockInfoPlan.java |    2 +-
 .../apache/iotdb/db/qp/physical/sys/ShowPlan.java  |    2 +-
 .../db/qp/physical/sys/ShowStorageGroupPlan.java   |    2 +-
 .../iotdb/db/qp/physical/sys/ShowTTLPlan.java      |    2 +-
 .../db/qp/physical/sys/ShowTimeSeriesPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/StartTriggerPlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/StopTriggerPlan.java  |    4 +-
 .../db/qp/physical/sys/StorageGroupMNodePlan.java  |    4 +-
 .../iotdb/db/qp/physical/sys/TracingPlan.java      |    2 +-
 .../db/qp/physical/sys/UnsetTemplatePlan.java      |   96 +
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    |  376 ++-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |    2 +-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   12 +-
 .../qp/strategy/optimizer/ConcatPathOptimizer.java |   21 +-
 .../optimizer/MergeSingleFilterOptimizer.java      |    2 +-
 .../qp/strategy/optimizer/RemoveNotOptimizer.java  |    2 +-
 .../apache/iotdb/db/qp/utils/DatetimeUtils.java    |   12 +-
 .../iotdb/db/qp/utils/EmptyOutputStream.java       |   35 +
 .../iotdb/db/qp/utils/GroupByLevelController.java  |    4 +-
 .../apache/iotdb/db/qp/utils/WildcardsRemover.java |   27 +-
 .../db/query/aggregation/AggregateResult.java      |   14 +-
 .../db/query/aggregation/impl/AvgAggrResult.java   |    9 +-
 .../db/query/aggregation/impl/CountAggrResult.java |   10 +-
 .../query/aggregation/impl/ExtremeAggrResult.java  |    7 +-
 .../aggregation/impl/FirstValueAggrResult.java     |   19 +-
 .../aggregation/impl/FirstValueDescAggrResult.java |   12 +-
 .../aggregation/impl/LastValueAggrResult.java      |    7 +-
 .../aggregation/impl/LastValueDescAggrResult.java  |   12 +-
 .../query/aggregation/impl/MaxTimeAggrResult.java  |    5 +-
 .../aggregation/impl/MaxTimeDescAggrResult.java    |   10 +-
 .../query/aggregation/impl/MaxValueAggrResult.java |   10 +-
 .../query/aggregation/impl/MinTimeAggrResult.java  |   10 +-
 .../aggregation/impl/MinTimeDescAggrResult.java    |   10 +-
 .../query/aggregation/impl/MinValueAggrResult.java |   10 +-
 .../db/query/aggregation/impl/SumAggrResult.java   |    9 +-
 .../iotdb/db/query/context/QueryContext.java       |   21 +-
 .../iotdb/db/query/control/FileReaderManager.java  |  110 +-
 .../iotdb/db/query/control/QueryFileManager.java   |   38 +-
 .../db/query/control/QueryResourceManager.java     |   11 +-
 .../iotdb/db/query/control/SessionManager.java     |    2 +-
 .../db/query/control/SessionTimeoutManager.java    |   17 +-
 .../db/query/dataset/AlignByDeviceDataSet.java     |   71 +-
 .../apache/iotdb/db/query/dataset/ListDataSet.java |    2 +-
 .../db/query/dataset/NonAlignEngineDataSet.java    |    2 +-
 .../dataset/RawQueryDataSetWithValueFilter.java    |   19 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java |   42 +-
 .../query/dataset/ShowContinuousQueriesResult.java |    2 +-
 .../iotdb/db/query/dataset/ShowDevicesDataSet.java |    2 +-
 .../db/query/dataset/ShowTimeseriesDataSet.java    |    2 +-
 .../iotdb/db/query/dataset/SingleDataSet.java      |    6 +-
 .../db/query/dataset/UDTFAlignByTimeDataSet.java   |    2 +
 .../apache/iotdb/db/query/dataset/UDTFDataSet.java |    2 +-
 .../dataset/groupby/GroupByEngineDataSet.java      |  159 +-
 .../query/dataset/groupby/GroupByFillDataSet.java  |  220 --
 .../dataset/groupby/GroupByFillEngineDataSet.java  |  412 +++
 .../groupby/GroupByFillWithValueFilterDataSet.java |  438 ++++
 .../GroupByFillWithoutValueFilterDataSet.java      |  258 ++
 .../query/dataset/groupby/GroupByLevelDataSet.java |    6 +-
 .../groupby/GroupByWithValueFilterDataSet.java     |   16 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   11 +-
 .../dataset/groupby/LocalGroupByExecutor.java      |    2 +-
 .../db/query/executor/AggregationExecutor.java     |  155 +-
 .../iotdb/db/query/executor/FillQueryExecutor.java |    5 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java |   61 +-
 .../iotdb/db/query/executor/QueryRouter.java       |   82 +-
 .../db/query/executor/RawDataQueryExecutor.java    |    8 +-
 .../executor/fill/AlignedLastPointReader.java      |   58 +
 .../apache/iotdb/db/query/executor/fill/IFill.java |   88 +-
 .../db/query/executor/fill/LastPointReader.java    |   56 +-
 .../iotdb/db/query/executor/fill/LinearFill.java   |   83 +-
 .../iotdb/db/query/executor/fill/PreviousFill.java |   45 +-
 .../iotdb/db/query/executor/fill/ValueFill.java    |    6 +-
 .../iotdb/db/query/expression/Expression.java      |   50 +-
 .../iotdb/db/query/expression/ResultColumn.java    |   15 +-
 .../query/expression/binary/BinaryExpression.java  |   30 +-
 .../db/query/expression/unary/ConstantOperand.java |  111 +
 .../query/expression/unary/FunctionExpression.java |   14 +-
 .../query/expression/unary/NegationExpression.java |   14 +-
 .../query/expression/unary/TimeSeriesOperand.java  |   14 +-
 .../iotdb/db/query/pool/QueryTaskPoolManager.java  |   10 +-
 .../query/reader/chunk/DiskAlignedChunkLoader.java |   67 +
 .../db/query/reader/chunk/DiskChunkLoader.java     |   12 +
 .../query/reader/chunk/MemAlignedChunkLoader.java  |   52 +
 .../query/reader/chunk/MemAlignedChunkReader.java  |  110 +
 .../query/reader/chunk/MemAlignedPageReader.java   |  109 +
 .../db/query/reader/chunk/MemChunkLoader.java      |    8 +-
 .../iotdb/db/query/reader/chunk/MemPageReader.java |   10 +-
 .../metadata/DiskAlignedChunkMetadataLoader.java   |  109 +
 .../chunk/metadata/DiskChunkMetadataLoader.java    |   68 +-
 .../metadata/MemAlignedChunkMetadataLoader.java    |   89 +
 .../chunk/metadata/MemChunkMetadataLoader.java     |   31 +-
 .../series/AlignedSeriesAggregateReader.java       |  201 ++
 .../query/reader/series/AlignedSeriesReader.java   |  109 +
 .../query/reader/series/SeriesAggregateReader.java |    5 +-
 .../reader/series/SeriesRawDataBatchReader.java    |    8 +-
 .../iotdb/db/query/reader/series/SeriesReader.java |  118 +-
 .../reader/series/SeriesReaderByTimestamp.java     |   23 +-
 .../reader/series/VectorSeriesAggregateReader.java |  177 --
 .../universal/AlignedDescPriorityMergeReader.java  |   39 +
 .../universal/AlignedPriorityMergeReader.java      |   51 +
 .../reader/universal/PriorityMergeReader.java      |   20 +-
 .../query/timegenerator/ServerTimeGenerator.java   |   29 +-
 .../api/customizer/parameter/UDFParameters.java    |    2 +-
 .../db/query/udf/builtin/BuiltinFunction.java      |    1 +
 .../iotdb/db/query/udf/builtin/UDTFCast.java       |  259 ++
 .../db/query/udf/core/executor/UDTFExecutor.java   |    6 +
 .../udf/core/layer/ConstantIntermediateLayer.java  |   66 +
 .../layer/MultiInputColumnIntermediateLayer.java   |    8 +-
 .../query/udf/core/layer/RawQueryInputLayer.java   |    7 +-
 ...InputColumnMultiReferenceIntermediateLayer.java |    5 +
 ...nputColumnSingleReferenceIntermediateLayer.java |    4 +
 .../udf/core/reader/ConstantLayerPointReader.java  |  132 +
 .../db/query/udf/core/reader/LayerPointReader.java |    2 +
 .../transformer/ArithmeticBinaryTransformer.java   |   17 +
 .../transformer/ArithmeticNegationTransformer.java |    5 +
 .../udf/core/transformer/UDFQueryTransformer.java  |    5 +
 .../tv/ElasticSerializableTVList.java              |    5 +
 .../iotdb/db/rescon/AbstractPoolManager.java       |   11 +
 .../apache/iotdb/db/rescon/TVListAllocator.java    |   19 +-
 .../java/org/apache/iotdb/db/rest/RestService.java |  156 ++
 .../iotdb/db/rest/filter/ApiOriginFilter.java      |   45 +
 .../iotdb/db/rest/filter/AuthorizationFilter.java  |  125 +
 .../iotdb/db/rest/filter/BasicSecurityContext.java |   56 +
 .../java/org/apache/iotdb/db/rest/filter/User.java |   38 +
 .../org/apache/iotdb/db/rest/filter/UserCache.java |   56 +
 .../db/rest/handler/AuthorizationHandler.java      |   56 +
 .../iotdb/db/rest/handler/ExceptionHandler.java    |   69 +
 .../handler/PhysicalPlanConstructionHandler.java   |  156 ++
 .../iotdb/db/rest/handler/QueryDataSetHandler.java |   95 +
 .../db/rest/handler/RequestValidationHandler.java  |   39 +
 .../iotdb/db/rest/impl/PingApiServiceImpl.java     |   37 +
 .../iotdb/db/rest/impl/RestApiServiceImpl.java     |  149 ++
 .../java/org/apache/iotdb/db/service/IoTDB.java    |   17 +-
 .../apache/iotdb/db/service/MetricsService.java    |    4 +-
 .../org/apache/iotdb/db/service/RPCService.java    |   14 +-
 .../iotdb/db/service/RPCServiceThriftHandler.java  |    2 +-
 .../org/apache/iotdb/db/service/ServiceType.java   |   11 +-
 .../org/apache/iotdb/db/service/SettleService.java |    2 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  564 ++---
 .../org/apache/iotdb/db/service/UpgradeSevice.java |    9 +-
 .../db/service/basic/BasicOpenSessionResp.java     |   34 +
 .../db/service/basic/BasicServiceProvider.java     |  263 ++
 .../db/service/basic/QueryFrequencyRecorder.java   |   54 +
 .../iotdb/db/service/thrift/ThriftService.java     |   22 +-
 .../db/service/thrift/ThriftServiceThread.java     |  213 +-
 .../iotdb/db/sync/receiver/SyncServerManager.java  |    6 +
 .../db/sync/receiver/transfer/SyncServiceImpl.java |   14 +-
 .../iotdb/db/sync/sender/transfer/SyncClient.java  |   23 +-
 .../apache/iotdb/db/tools/IoTDBDataDirViewer.java  |    4 +-
 .../apache/iotdb/db/tools/TsFileRewriteTool.java   |   14 +-
 .../org/apache/iotdb/db/tools/mlog/MLogParser.java |   25 +-
 .../db/tools/settle/TsFileAndModSettleTool.java    |    6 +-
 .../db/tools/virtualsg/DeviceMappingViewer.java    |    2 +-
 .../iotdb/db/tools/vis/TsFileExtractVisdata.java   |    2 +-
 .../db/tools/watermark/WatermarkDetector.java      |    4 +-
 .../iotdb/db/utils/AlignedValueIterator.java       |   58 +
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  347 +++
 .../apache/iotdb/db/utils/ErrorHandlingUtils.java  |  152 ++
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |  157 +-
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |   72 +-
 .../java/org/apache/iotdb/db/utils/MergeUtils.java |   37 +-
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   |    3 +-
 .../java/org/apache/iotdb/db/utils/QueryUtils.java |   72 +-
 .../org/apache/iotdb/db/utils/SchemaTestUtils.java |   39 +
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |   16 +-
 .../org/apache/iotdb/db/utils/SerializeUtils.java  |   77 +-
 .../org/apache/iotdb/db/utils/ValueIterator.java   |   56 +
 .../db/utils/datastructure/AlignedTVList.java      |  989 ++++++++
 .../iotdb/db/utils/datastructure/TVList.java       |   82 +-
 .../iotdb/db/utils/datastructure/VectorTVList.java |  718 ------
 .../writelog/manager/MultiFileLogNodeManager.java  |    5 +-
 .../db/writelog/node/ExclusiveWriteLogNode.java    |   21 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |   50 +-
 .../apache/iotdb/db/auth/AuthorityCheckerTest.java |    2 +-
 .../org/apache/iotdb/db/constant/TestConstant.java |  140 --
 .../iotdb/db/engine/MetadataManagerHelper.java     |    2 +-
 .../db/engine/cache/BloomFilterCacheTest.java      |  208 ++
 .../iotdb/db/engine/cache/ChunkCacheTest.java      |   12 +-
 .../engine/compaction/CompactionSchedulerTest.java |   20 +-
 .../compaction/CompactionTaskManagerTest.java      |  252 ++
 .../db/engine/compaction/TsFileIdentifierUT.java   |  194 ++
 .../compaction/cross/CrossSpaceCompactionTest.java |    2 +-
 .../engine/compaction/cross/MergeOverLapTest.java  |   12 +-
 .../db/engine/compaction/cross/MergeTaskTest.java  |   40 +-
 .../db/engine/compaction/cross/MergeTest.java      |    6 +-
 .../engine/compaction/cross/MergeUpgradeTest.java  |    3 +-
 .../compaction/inner/InnerCompactionCacheTest.java |  148 --
 .../compaction/inner/InnerCompactionChunkTest.java |    4 +-
 .../compaction/inner/InnerCompactionLogTest.java   |    4 +-
 .../inner/InnerCompactionMoreDataTest.java         |   16 +-
 .../inner/InnerCompactionSchedulerTest.java        |    4 +-
 .../compaction/inner/InnerCompactionTest.java      |   14 +-
 .../compaction/inner/InnerSeqCompactionTest.java   |   23 +-
 .../inner/InnerSpaceCompactionUtilsTest.java       |   21 +-
 .../compaction/inner/InnerUnseqCompactionTest.java |    9 +-
 .../SizeTieredCompactionRecoverTest.java           |  376 ++-
 .../inner/sizetiered/SizeTieredCompactionTest.java |    3 +-
 .../recover/SizeTieredCompactionRecoverTest.java   |  732 ++++++
 .../task/FakedInnerSpaceCompactionTask.java        |   44 +-
 .../compaction/utils/CompactionCheckerUtils.java   |    2 +-
 .../compaction/utils/CompactionClearUtils.java     |    1 -
 .../utils/CompactionFileGeneratorUtils.java        |   11 +-
 .../db/engine/memtable/MemTableFlushTaskTest.java  |   22 +-
 .../db/engine/memtable/MemTableTestUtils.java      |   24 +-
 .../db/engine/memtable/MemtableBenchmark.java      |    7 +-
 .../db/engine/memtable/PrimitiveMemTableTest.java  |  291 ++-
 .../engine/modification/DeletionFileNodeTest.java  |   17 +-
 .../db/engine/modification/DeletionQueryTest.java  |  101 +-
 .../engine/modification/ModificationFileTest.java  |    2 +-
 .../io/LocalTextModificationAccessorTest.java      |   51 +-
 .../engine/storagegroup/FakedTsFileResource.java   |   11 +
 .../storagegroup/FileNodeManagerBenchmark.java     |    2 +-
 .../storagegroup/StorageGroupProcessorTest.java    |   29 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |   18 +-
 .../engine/storagegroup/TsFileProcessorTest.java   |  123 +-
 .../virtualSg/HashVirtualPartitionerTest.java      |    2 +-
 .../iotdb/db/integration/IOTDBGroupByIT.java       | 1007 --------
 .../integration/IOTDBGroupByInnerIntervalIT.java   |  341 ---
 .../db/integration/IOTDBInsertAlignedValuesIT.java |  219 --
 .../apache/iotdb/db/integration/IOTDBInsertIT.java |  126 -
 .../apache/iotdb/db/integration/IoTDBAliasIT.java  |  338 ---
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java | 1307 ----------
 .../iotdb/db/integration/IoTDBArithmeticIT.java    |  284 ---
 .../org/apache/iotdb/db/integration/IoTDBAsIT.java |  610 -----
 .../db/integration/IoTDBAutoCreateSchemaIT.java    |  206 --
 .../iotdb/db/integration/IoTDBCheckConfigIT.java   |  161 --
 .../iotdb/db/integration/IoTDBClearCacheIT.java    |  175 --
 .../apache/iotdb/db/integration/IoTDBCloseIT.java  |  197 --
 .../iotdb/db/integration/IoTDBCompleteIT.java      |  488 ----
 .../iotdb/db/integration/IoTDBCompressTypeIT.java  |  104 -
 .../db/integration/IoTDBContinuousQueryIT.java     |  413 ---
 .../db/integration/IoTDBCreateSnapshotIT.java      |  187 --
 .../db/integration/IoTDBCreateStorageGroupIT.java  |  130 -
 .../db/integration/IoTDBCreateTimeseriesIT.java    |  167 --
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java |  470 ----
 .../db/integration/IoTDBDeleteStorageGroupIT.java  |  169 --
 .../db/integration/IoTDBDeleteTimeseriesIT.java    |  221 --
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  516 ----
 .../iotdb/db/integration/IoTDBDisableAlignIT.java  |  414 ---
 .../iotdb/db/integration/IoTDBEncodingIT.java      |  347 ---
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |  283 ---
 .../iotdb/db/integration/IoTDBExecuteBatchIT.java  |  197 --
 .../iotdb/db/integration/IoTDBFilePathUtilsIT.java |  112 -
 .../apache/iotdb/db/integration/IoTDBFillIT.java   |  940 -------
 .../db/integration/IoTDBFloatPrecisionIT.java      |  174 --
 .../db/integration/IoTDBFlushQueryMergeIT.java     |  216 --
 .../iotdb/db/integration/IoTDBFuzzyQueryIT.java    |  292 ---
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   |  825 ------
 .../integration/IoTDBGroupByFillWithRangeIT.java   |  182 --
 .../iotdb/db/integration/IoTDBGroupByMonthIT.java  |  279 ---
 .../iotdb/db/integration/IoTDBGroupByUnseqIT.java  |  185 --
 .../org/apache/iotdb/db/integration/IoTDBInIT.java |  255 --
 .../db/integration/IoTDBInsertMultiRowIT.java      |  125 -
 .../iotdb/db/integration/IoTDBInsertNaNIT.java     |  203 --
 .../db/integration/IoTDBInsertWithQueryIT.java     |  532 ----
 .../db/integration/IoTDBInsertWithoutTimeIT.java   |  129 -
 .../iotdb/db/integration/IoTDBKillQueryIT.java     |   81 -
 .../iotdb/db/integration/IoTDBLargeDataIT.java     |  388 ---
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |  584 -----
 .../iotdb/db/integration/IoTDBLimitSlimitIT.java   |  208 --
 ...IoTDBLoadExternalTsFileWithTimePartitionIT.java |  327 ---
 .../db/integration/IoTDBLoadExternalTsfileIT.java  |  822 ------
 .../integration/IoTDBManageTsFileResourceIT.java   |  292 ---
 .../apache/iotdb/db/integration/IoTDBMergeIT.java  |  339 ---
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |  631 -----
 .../iotdb/db/integration/IoTDBMultiDeviceIT.java   |  299 ---
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        |  115 -
 .../db/integration/IoTDBMultiOverlappedPageIT.java |  173 --
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |  504 ----
 .../db/integration/IoTDBMultiStatementsIT.java     |  194 --
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |  410 ---
 .../db/integration/IoTDBNewTsFileCompactionIT.java | 1064 --------
 .../iotdb/db/integration/IoTDBNumberPathIT.java    |  484 ----
 .../db/integration/IoTDBOverlappedPageIT.java      |  203 --
 .../iotdb/db/integration/IoTDBQueryDemoIT.java     |  707 ------
 .../db/integration/IoTDBQueryMemoryControlIT.java  |  294 ---
 .../iotdb/db/integration/IoTDBQueryTimeoutIT.java  |  153 --
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  146 --
 .../iotdb/db/integration/IoTDBRecoverIT.java       |  435 ----
 .../db/integration/IoTDBRecoverUnclosedIT.java     |  288 ---
 .../db/integration/IoTDBRemovePartitionIT.java     |  330 ---
 .../iotdb/db/integration/IoTDBRestartIT.java       |  459 ----
 .../iotdb/db/integration/IoTDBResultSetIT.java     |  126 -
 .../db/integration/IoTDBRpcCompressionIT.java      |  151 --
 .../IoTDBSameMeasurementsDifferentTypesIT.java     |  186 --
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    |  670 -----
 .../iotdb/db/integration/IoTDBSensorUpdateIT.java  |   85 -
 .../db/integration/IoTDBSequenceDataQueryIT.java   |  335 ---
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  457 ----
 .../db/integration/IoTDBSessionTimeoutIT.java      |   82 -
 .../IoTDBSetSystemReadOnlyWritableIT.java          |  266 --
 .../apache/iotdb/db/integration/IoTDBSettleIT.java |   94 -
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 1361 ----------
 .../integration/IoTDBSizeTieredCompactionIT.java   | 1386 ----------
 .../integration/IoTDBSortedShowTimeseriesIT.java   |  335 ---
 .../iotdb/db/integration/IoTDBTagAlterIT.java      |  640 -----
 .../apache/iotdb/db/integration/IoTDBTagIT.java    | 1166 ---------
 .../iotdb/db/integration/IoTDBTimePartitionIT.java |   92 -
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  163 --
 .../iotdb/db/integration/IoTDBTracingIT.java       |   88 -
 .../db/integration/IoTDBTriggerExecutionIT.java    |  614 -----
 .../db/integration/IoTDBTriggerManagementIT.java   |  500 ----
 .../apache/iotdb/db/integration/IoTDBTtlIT.java    |  230 --
 .../iotdb/db/integration/IoTDBUDFManagementIT.java |  393 ---
 .../db/integration/IoTDBUDFWindowQueryIT.java      |  562 -----
 .../integration/IoTDBUDTFAlignByTimeQueryIT.java   |  867 -------
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java |  367 ---
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |  184 --
 .../db/integration/IoTDBUDTFNonAlignQueryIT.java   |  374 ---
 .../iotdb/db/integration/IoTDBVersionIT.java       |   70 -
 .../db/integration/IoTDBWithoutAllNullIT.java      |  264 --
 .../db/integration/IoTDBWithoutAnyNullIT.java      |  221 --
 .../aggregation/IoTDBAggregationByLevelIT.java     |  534 ----
 .../aggregation/IoTDBAggregationDeleteIT.java      |   91 -
 .../aggregation/IoTDBAggregationIT.java            | 1083 --------
 .../aggregation/IoTDBAggregationLargeDataIT.java   | 1048 --------
 .../aggregation/IoTDBAggregationSmallDataIT.java   |  855 -------
 .../db/integration/auth/IoTDBAuthorizationIT.java  | 1151 ---------
 .../iotdb/db/metadata/MManagerAdvancedTest.java    |   30 +-
 .../iotdb/db/metadata/MManagerBasicTest.java       |  504 ++--
 .../iotdb/db/metadata/MManagerImproveTest.java     |    1 +
 .../org/apache/iotdb/db/metadata/MTreeTest.java    |   24 +-
 .../apache/iotdb/db/metadata/MetaUtilsTest.java    |   31 +
 .../apache/iotdb/db/metadata/PartialPathTest.java  |    1 +
 .../org/apache/iotdb/db/metadata/TemplateTest.java |  252 ++
 .../iotdb/db/metadata/mlog/MLogUpgraderTest.java   |   74 +-
 .../apache/iotdb/db/mqtt/PublishHandlerTest.java   |   75 +-
 .../java/org/apache/iotdb/db/qp/PlannerTest.java   |    4 +-
 .../iotdb/db/qp/logical/LogicalPlanSmallTest.java  |    2 +-
 .../iotdb/db/qp/other/TSPlanContextAuthorTest.java |    2 +-
 .../iotdb/db/qp/physical/ConcatOptimizerTest.java  |    2 +-
 .../iotdb/db/qp/physical/InsertRowPlanTest.java    |  200 +-
 .../qp/physical/InsertRowsOfOneDevicePlanTest.java |    2 +-
 .../db/qp/physical/InsertTabletMultiPlanTest.java  |    2 +-
 .../iotdb/db/qp/physical/InsertTabletPlanTest.java |  228 +-
 .../db/qp/physical/PhysicalPlanSerializeTest.java  |    4 +-
 .../iotdb/db/qp/physical/PhysicalPlanTest.java     |  150 +-
 .../iotdb/db/qp/physical/SerializationTest.java    |    2 +-
 .../query/aggregation/DescAggregateResultTest.java |   63 +
 .../db/query/control/FileReaderManagerTest.java    |   19 +-
 .../query/dataset/UDTFAlignByTimeDataSetTest.java  |    2 +-
 .../dataset/groupby/GroupByFillDataSetTest.java    |    2 +-
 .../reader/series/SeriesAggregateReaderTest.java   |    9 +-
 .../reader/series/SeriesReaderByTimestampTest.java |    7 +-
 .../db/query/reader/series/SeriesReaderTest.java   |    2 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |    8 +-
 .../universal/AlignedPriorityMergeReaderTest.java  |   91 +
 .../iotdb/db/query/udf/example/Accumulator.java    |  103 -
 .../iotdb/db/rescon/ResourceManagerTest.java       |    6 +-
 .../apache/iotdb/db/rest/IoTDBRestServiceIT.java   |  280 +++
 .../org/apache/iotdb/db/sink/MQTTSinkTest.java     |    2 +-
 .../db/sync/receiver/load/FileLoaderTest.java      |    2 +-
 .../recover/SyncReceiverLogAnalyzerTest.java       |    2 +-
 .../db/sync/sender/manage/SyncFileManagerTest.java |    2 +-
 .../sender/recover/SyncSenderLogAnalyzerTest.java  |    2 +-
 .../org/apache/iotdb/db/tools/MLogParserTest.java  |   33 +-
 .../iotdb/db/tools/TsFileAndModSettleToolTest.java |    4 +-
 .../iotdb/db/tools/TsFileSketchToolTest.java       |   17 +-
 .../org/apache/iotdb/db/tools/WalCheckerTest.java  |    2 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  345 ---
 .../org/apache/iotdb/db/utils/MemUtilsTest.java    |   12 +-
 .../org/apache/iotdb/db/utils/SchemaUtilsTest.java |    2 +-
 .../apache/iotdb/db/utils/SerializeUtilsTest.java  |  743 ++++++
 .../iotdb/db/utils/TsFileRewriteToolTest.java      |   15 +-
 .../db/utils/datastructure/VectorTVListTest.java   |   65 +-
 .../apache/iotdb/db/writelog/PerformanceTest.java  |    2 +-
 .../iotdb/db/writelog/WriteLogNodeManagerTest.java |    2 +-
 .../apache/iotdb/db/writelog/WriteLogNodeTest.java |  103 +-
 .../iotdb/db/writelog/io/LogWriterReaderTest.java  |    2 +-
 .../db/writelog/io/MultiFileLogReaderTest.java     |    2 +-
 .../db/writelog/recover/DeviceStringTest.java      |    8 +-
 .../iotdb/db/writelog/recover/LogReplayerTest.java |   27 +-
 .../recover/RecoverResourceFromReaderTest.java     |   10 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |   32 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |   10 +-
 server/src/test/resources/iotdb-rest.properties    |   55 +
 .../org/apache/iotdb/rpc/RpcTransportFactory.java  |   36 +-
 .../main/java/org/apache/iotdb/rpc/RpcUtils.java   |    7 +-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |    6 +-
 .../java/org/apache/iotdb/session/Session.java     |  366 ++-
 .../apache/iotdb/session/SessionConnection.java    |   72 +-
 .../org/apache/iotdb/session/SessionDataSet.java   |    7 +-
 .../org/apache/iotdb/session/pool/SessionPool.java |  301 ++-
 .../iotdb/session/template/InternalNode.java       |   59 +
 .../iotdb/session/template/MeasurementNode.java    |   67 +
 .../apache/iotdb/session/template/Template.java    |  126 +
 .../iotdb/session/template/TemplateNode.java       |   55 +
 .../iotdb/session/template/TemplateQueryType.java  |   27 +
 .../iotdb/session/IoTDBSessionComplexIT.java       |  927 -------
 .../session/IoTDBSessionDisableMemControlIT.java   |  205 ++
 .../iotdb/session/IoTDBSessionIteratorIT.java      |  351 ---
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1149 ---------
 .../session/IoTDBSessionVectorABDeviceIT.java      |   78 +-
 .../session/IoTDBSessionVectorAggregationIT.java   |   15 +-
 .../IoTDBSessionVectorAggregationWithUnSeqIT.java  |    4 +-
 .../iotdb/session/IoTDBSessionVectorInsertIT.java  |   93 +-
 .../java/org/apache/iotdb/session/SessionTest.java |  229 +-
 .../apache/iotdb/session/template/TemplateUT.java  |  103 +
 session/src/test/resources/iotdb-rest.properties   |   55 +
 site/pom.xml                                       |  158 +-
 site/src/main/.vuepress/config.js                  |    6 +-
 .../apache/iotdb/spark/db/EnvironmentUtils.java    |    2 +
 .../org/apache/iotdb/spark/tsfile/qp/Executor.java |    4 +-
 .../apache/iotdb/spark/tsfile/DefaultSource.scala  |    6 +-
 .../iotdb/spark/tsfile/NarrowConverter.scala       |    2 +-
 .../apache/iotdb/spark/tsfile/WideConverter.scala  |    2 +-
 .../org/apache/iotdb/spark/tool/TsFileExample.java |   29 +-
 .../apache/iotdb/spark/tool/TsFileWriteTool.java   |   87 +-
 .../test/java/org/apache/iotdb/db/sql/Cases.java   |   76 +-
 testcontainer/src/tool/README.md                   |   33 +
 testcontainer/src/tool/parser.py                   |   79 +
 thrift-cluster/src/main/thrift/cluster.thrift      |   15 +-
 thrift/rpc-changelist.md                           |   16 +-
 thrift/src/main/thrift/rpc.thrift                  |   43 +-
 tsfile/pom.xml                                     |    6 +-
 .../iotdb/tsfile/common/cache/Accountable.java     |   26 -
 .../apache/iotdb/tsfile/compress/ICompressor.java  |   58 +-
 .../compress/GZIPCompressOverflowException.java    |   26 +
 .../iotdb/tsfile/file/header/PageHeader.java       |   12 +
 .../tsfile/file/metadata/AlignedChunkMetadata.java |  198 ++
 .../file/metadata/AlignedTimeSeriesMetadata.java   |  142 ++
 .../iotdb/tsfile/file/metadata/ChunkMetadata.java  |   42 +-
 .../iotdb/tsfile/file/metadata/IChunkMetadata.java |    4 -
 .../tsfile/file/metadata/ITimeSeriesMetadata.java  |    3 +-
 .../file/metadata/MetadataIndexConstructor.java    |    6 +-
 .../tsfile/file/metadata/TimeseriesMetadata.java   |   24 +-
 .../tsfile/file/metadata/VectorChunkMetadata.java  |  208 --
 .../file/metadata/VectorTimeSeriesMetadata.java    |  131 -
 .../fileOutputFactory/LocalFSOutputFactory.java    |    7 +-
 .../apache/iotdb/tsfile/read/ReadOnlyTsFile.java   |   60 -
 .../org/apache/iotdb/tsfile/read/TsFileReader.java |   60 +
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  222 +-
 .../apache/iotdb/tsfile/read/common/BatchData.java |  123 +-
 .../org/apache/iotdb/tsfile/read/common/Chunk.java |   13 +-
 .../tsfile/read/common/DescReadWriteBatchData.java |   89 +
 .../tsfile/read/common/ExceptionBatchData.java     |   10 +-
 .../org/apache/iotdb/tsfile/read/common/Field.java |   26 +
 .../org/apache/iotdb/tsfile/read/common/Path.java  |    7 +-
 .../apache/iotdb/tsfile/read/common/RowRecord.java |    6 +-
 .../read/controller/CachedChunkLoaderImpl.java     |   18 +
 .../iotdb/tsfile/read/controller/IChunkLoader.java |    5 +
 .../read/controller/IChunkMetadataLoader.java      |    4 +-
 .../read/controller/MetadataQuerierByFileImpl.java |   87 +-
 .../iotdb/tsfile/read/filter/GroupByFilter.java    |   20 +-
 .../tsfile/read/filter/GroupByMonthFilter.java     |  114 +-
 .../iotdb/tsfile/read/filter/TimeFilter.java       |   11 +
 .../tsfile/read/filter/basic/BinaryFilter.java     |    8 +
 .../tsfile/read/filter/factory/FilterFactory.java  |    8 +
 .../read/filter/factory/FilterSerializeId.java     |    1 +
 .../iotdb/tsfile/read/filter/operator/In.java      |   15 +-
 .../iotdb/tsfile/read/filter/operator/Like.java    |   12 +-
 .../query/dataset/DataSetWithTimeGenerator.java    |   15 +-
 .../query/dataset/DataSetWithoutTimeGenerator.java |   24 +-
 .../tsfile/read/query/dataset/QueryDataSet.java    |   12 +
 .../tsfile/read/reader/IAlignedPageReader.java     |   28 +
 .../iotdb/tsfile/read/reader/LocalTsFileInput.java |    5 +
 .../iotdb/tsfile/read/reader/TsFileInput.java      |    2 +
 .../read/reader/chunk/AlignedChunkReader.java      |  309 +++
 .../chunk/AlignedChunkReaderByTimestamp.java       |   47 +
 .../read/reader/chunk/VectorChunkReader.java       |  278 --
 .../tsfile/read/reader/page/AlignedPageReader.java |  152 ++
 .../iotdb/tsfile/read/reader/page/PageReader.java  |    1 -
 .../tsfile/read/reader/page/TimePageReader.java    |   17 +
 .../tsfile/read/reader/page/ValuePageReader.java   |    3 +
 .../tsfile/read/reader/page/VectorPageReader.java  |  133 -
 .../reader/series/AbstractFileSeriesReader.java    |    4 +-
 .../read/reader/series/FileSeriesReader.java       |   18 +-
 .../reader/series/FileSeriesReaderByTimestamp.java |   28 +-
 .../org/apache/iotdb/tsfile/utils/BloomFilter.java |   39 +
 .../apache/iotdb/tsfile/utils/FilePathUtils.java   |   41 +-
 .../iotdb/tsfile/utils/MeasurementGroup.java       |   65 +
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |   15 +-
 .../apache/iotdb/tsfile/utils/StringContainer.java |    8 +-
 .../tsfile/v2/read/TsFileSequenceReaderForV2.java  |   21 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |  415 ++-
 .../write/chunk/AlignedChunkGroupWriterImpl.java   |  301 +++
 .../tsfile/write/chunk/AlignedChunkWriterImpl.java |  189 ++
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |  241 --
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |   41 +-
 .../tsfile/write/chunk/IChunkGroupWriter.java      |   17 +-
 .../iotdb/tsfile/write/chunk/IChunkWriter.java     |   45 -
 .../chunk/NonAlignedChunkGroupWriterImpl.java      |  188 ++
 .../iotdb/tsfile/write/chunk/TimeChunkWriter.java  |    4 +
 .../iotdb/tsfile/write/chunk/ValueChunkWriter.java |   67 +-
 .../tsfile/write/chunk/VectorChunkWriterImpl.java  |  204 --
 .../apache/iotdb/tsfile/write/page/PageWriter.java |    4 +
 .../iotdb/tsfile/write/page/TimePageWriter.java    |    4 +
 .../iotdb/tsfile/write/page/ValuePageWriter.java   |    8 +
 .../apache/iotdb/tsfile/write/record/Tablet.java   |   55 +-
 .../write/record/datapoint/BooleanDataPoint.java   |    6 +-
 .../tsfile/write/record/datapoint/DataPoint.java   |    9 +-
 .../write/record/datapoint/DoubleDataPoint.java    |    6 +-
 .../write/record/datapoint/FloatDataPoint.java     |    6 +-
 .../write/record/datapoint/IntDataPoint.java       |    6 +-
 .../write/record/datapoint/LongDataPoint.java      |    6 +-
 .../write/record/datapoint/StringDataPoint.java    |    6 +-
 .../tsfile/write/schema/IMeasurementSchema.java    |    2 +
 .../apache/iotdb/tsfile/write/schema/Schema.java   |   69 +-
 .../write/schema/UnaryMeasurementSchema.java       |    5 +
 .../write/schema/VectorMeasurementSchema.java      |   92 +-
 .../write/writer/RestorableTsFileIOWriter.java     |    6 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   77 +-
 .../org/apache/iotdb/tsfile/compress/GZIPTest.java |   17 +-
 .../org/apache/iotdb/tsfile/compress/LZ4Test.java  |   17 +-
 .../apache/iotdb/tsfile/compress/SnappyTest.java   |   17 +-
 .../file/metadata/TimeSeriesMetadataTest.java      |  110 -
 .../file/metadata/TimeseriesMetadataTest.java      |  110 +
 .../iotdb/tsfile/read/ReadInPartitionTest.java     |    4 +-
 .../iotdb/tsfile/read/ReadOnlyTsFileTest.java      |  241 --
 .../org/apache/iotdb/tsfile/read/ReadTest.java     |    4 +-
 .../iotdb/tsfile/read/TimePlainEncodeReadTest.java |    4 +-
 .../tsfile/read/TimeSeriesMetadataReadTest.java    |    7 +-
 .../apache/iotdb/tsfile/read/TsFileReaderTest.java |  477 ++++
 .../tsfile/read/TsFileSequenceReaderTest.java      |    4 +-
 .../tsfile/read/filter/FilterSerializeTest.java    |   25 +-
 .../read/query/timegenerator/ReadWriteTest.java    |    6 +-
 .../timegenerator/TimeGeneratorReadEmptyTest.java  |    6 +-
 .../timegenerator/TimeGeneratorReadWriteTest.java  |    6 +-
 .../TsFileGeneratorForSeriesReaderByTimestamp.java |   23 +-
 .../apache/iotdb/tsfile/utils/FileGenerator.java   |   45 +-
 .../iotdb/tsfile/utils/ReadWriteIOUtilsTest.java   |   30 +-
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |   17 +-
 .../apache/iotdb/tsfile/utils/RecordUtilsTest.java |   13 +-
 .../iotdb/tsfile/utils/TsFileGeneratorForTest.java |  147 +-
 .../tsfile/write/DefaultSchemaTemplateTest.java    |    8 +-
 .../tsfile/write/MetadataIndexConstructorTest.java |   73 +-
 .../org/apache/iotdb/tsfile/write/PerfTest.java    |   16 +-
 .../iotdb/tsfile/write/ReadPageInMemTest.java      |   16 +-
 ...SameMeasurementsWithDifferentDataTypesTest.java |    6 +-
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |   91 +-
 .../iotdb/tsfile/write/TsFileReadWriteTest.java    |   13 +-
 .../iotdb/tsfile/write/TsFileWriteApiTest.java     |  331 +++
 .../iotdb/tsfile/write/TsFileWriterTest.java       |  111 +-
 .../org/apache/iotdb/tsfile/write/WriteTest.java   |   10 +-
 .../write/schema/converter/SchemaBuilderTest.java  |   45 +-
 .../write/writer/AlignedChunkWriterImplTest.java   |  182 ++
 .../write/writer/ForceAppendTsFileWriterTest.java  |   16 +-
 .../write/writer/RestorableTsFileIOWriterTest.java |   63 +-
 .../write/writer/VectorChunkWriterImplTest.java    |  180 --
 .../write/writer/VectorMeasurementSchemaStub.java  |    6 +-
 .../zeppelin/iotdb/IoTDBInterpreterTest.java       |    9 +-
 1405 files changed, 102074 insertions(+), 66757 deletions(-)
 create mode 100644 .github/workflows/cluster.yml
 create mode 100644 cli/src/main/java/org/apache/iotdb/cli/IoTDBSyntaxHighlighter.java
 delete mode 100644 cli/src/main/java/org/apache/iotdb/cli/WinCli.java
 create mode 100644 cli/src/main/java/org/apache/iotdb/cli/utils/JlineUtils.java
 create mode 100644 client-py/tests/test_todf.py
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDBMBean.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/BaseFactory.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/ClientCategory.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/ClientManager.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/ClientPoolFactory.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/DataClientProvider.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/IClientManager.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncBaseFactory.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncClientFactory.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncClientPool.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncDataHeartbeatClient.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/async/AsyncMetaHeartbeatClient.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncClientFactory.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncClientPool.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncDataHeartbeatClient.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/client/sync/SyncMetaHeartbeatClient.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/ExprAppendNodeEntryHandler.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/ExprBench.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/ExprMember.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/ExprServer.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/ExprVotingLog.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/SWRaftMember.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/SequencerExpr.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/expr/VotingLogList.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByFillNoVFilterDataSet.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/groupby/ClusterGroupByFillVFilterDataSet.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/manage/ClusterSessionManager.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathAscPriorityMergeReader.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathDescPriorityMergeReader.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/reader/mult/AssignPathPriorityMergeReader.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/reader/mult/IAssignPathPriorityMergeReader.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/query/reader/mult/MultElement.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/ClientServer.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/ClusterRPCService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/ClusterRPCServiceMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/ClusterTSServiceImpl.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/DataClusterServer.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/MetaClusterServer.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/RaftServer.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/ShowTimeSeriesHandler.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/DataHeartbeatServer.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatServer.java
 delete mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatServer.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMemberMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMemberMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/AbstractDataRaftService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/AbstractMetaRaftService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/AbstractRaftService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/DataRaftHeartBeatService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/DataRaftHeartBeatServiceMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/DataRaftService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/DataRaftServiceMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/MetaRaftHeartBeatService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/MetaRaftHeartBeatServiceMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/MetaRaftService.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/MetaRaftServiceMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/raft/RaftServiceHandler.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngine.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupEngineMBean.java
 create mode 100644 cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupServiceImpls.java
 create mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/BaseClientTest.java
 create mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/ClientManagerTest.java
 create mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/ClientPoolFactoryTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/DataClientProviderTest.java
 create mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/MockClientManager.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncClientPoolTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncDataHeartbeatClientTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/async/AsyncMetaHeartbeatClientTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncClientPoolTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncDataHeartbeatClientTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/client/sync/SyncMetaHeartbeatClientTest.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncClientFactory.java
 delete mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/common/TestSyncClientFactory.java
 create mode 100644 cluster/src/test/java/org/apache/iotdb/cluster/utils/CreateTemplatePlanUtil.java
 delete mode 100644 docs/UserGuide/Data-Concept/Measurement-Template.md
 create mode 100644 docs/UserGuide/Data-Concept/Schema-Template.md
 create mode 100644 docs/UserGuide/Integration-Test/Integration-Test-refactoring-tutorial.md
 create mode 100644 docs/zh/UserGuide/Communication-Service-Protocol/RestService.md
 delete mode 100644 docs/zh/UserGuide/Data-Concept/Measurement-Template.md
 create mode 100644 docs/zh/UserGuide/Data-Concept/Schema-Template.md
 create mode 100644 docs/zh/UserGuide/Integration-Test/Integration-Test-refactoring-tutorial.md
 create mode 100644 example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteAlignedWithTSRecord.java
 create mode 100644 example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteAlignedWithTablet.java
 delete mode 100644 example/tsfile/src/main/java/org/apache/iotdb/tsfile/TsFileWriteVectorWithTablet.java
 create mode 100644 integration/README.md
 create mode 100644 integration/pic/Add_New_Configuration.png
 create mode 100644 integration/pic/Cluster_Category.png
 create mode 100644 integration/pic/Fork_mode.png
 create mode 100644 integration/pic/Run(Menu).png
 create mode 100644 integration/pic/Standalone_Category.png
 create mode 100644 integration/pom.xml
 create mode 100644 integration/src/assembly/cluster.xml
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/ClusterEnvBase.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/ClusterEnvConfig.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/ClusterNode.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/ConfigFactory.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/EnvFactory.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/FiveNodeCluster1Env.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/RemoteEnvConfig.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/integration/env/RemoteServerEnv.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/itbase/category/ClusterTest.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/itbase/category/LocalStandaloneTest.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/itbase/category/RemoteTest.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
 create mode 100644 integration/src/main/java/org/apache/iotdb/itbase/env/BaseEnv.java
 rename {server => integration}/src/test/java/org/apache/iotdb/db/engine/trigger/example/Accumulator.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/engine/trigger/example/Counter.java (100%)
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByInnerIntervalIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertAlignedValuesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBAliasIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBArithmeticIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBAsIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBAutoCreateSchemaIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBClearCacheIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCloseIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCompressTypeIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBContinuousQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateAlignedTimeseriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateSnapshotIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateStorageGroupIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateTimeseriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBDisableAlignIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBEncodingIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBExecuteBatchIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFilePathUtilsIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFillIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFloatPrecisionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillMixPathsIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByMonthFillIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByMonthIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByUnseqIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertMultiRowIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNaNIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertWithQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertWithoutTimeIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBKillQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBLastIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBLimitSlimitIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBLoadExternalTsFileWithTimePartitionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBLoadExternalTsfileIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBManageTsFileResourceIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiDeviceIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiStatementsIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNewTsFileCompactionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBNumberPathIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBOverlappedPageIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBPathNumOverLimitIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryTimeoutIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverUnclosedIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRemovePartitionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBResultSetIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBRpcCompressionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSameMeasurementsDifferentTypesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSchemaTemplateIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSensorUpdateIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSeriesReaderIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSessionTimeoutIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSetSystemReadOnlyWritableIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSettleIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSortedShowTimeseriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTagAlterIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTagIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTimePartitionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTracingIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerManagementIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBTtlIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFWindowQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFAlignByTimeQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFBuiltinFunctionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFNonAlignQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAnyNullIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationDeleteIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationSmallDataIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/AlignedWriteUtil.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilter2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterWithDeletion2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBAggregationWithoutValueFilterWithDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeleteTimeseriesIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQuery2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithDeletion2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithoutLastCache2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithoutLastCacheIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithoutLastCacheWithDeletion2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBLastQueryWithoutLastCacheWithDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilter2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletion2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithValueFilterWithDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilter2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletion2IT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/aligned/IoTDBRawQueryWithoutValueFilterWithDeletionIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/auth/IoTDBAuthorizationIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/env/StandaloneEnv.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/integration/env/StandaloneEnvConfig.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java
 copy {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/Adder.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/Counter.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/Max.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/Multiplier.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester0.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingSizeWindowConstructorTester1.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/SlidingTimeWindowConstructionTester.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/TerminateTester.java (100%)
 rename {server => integration}/src/test/java/org/apache/iotdb/db/query/udf/example/ValidateTester.java (100%)
 create mode 100644 integration/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java
 create mode 100644 integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
 copy {session => integration}/src/test/resources/iotdb-engine.properties (100%)
 copy {server => integration}/src/test/resources/logback.xml (100%)
 create mode 100644 metrics/ReadMe.md
 create mode 100644 metrics/dropwizard-metrics/pom.xml
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManager.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/MetricName.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardJmxReporter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/DropwizardPrometheusReporter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/DropwizardMetricsExporter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/MetricType.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/PrometheusReporter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/PrometheusSender.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/PrometheusTextWriter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/PushGateway.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/reporter/prometheus/TextFormat.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardCounter.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardGauge.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogram.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardHistogramSnapshot.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardRate.java
 create mode 100644 metrics/dropwizard-metrics/src/main/java/org/apache/iotdb/metrics/dropwizard/type/DropwizardTimer.java
 create mode 100644 metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.MetricManager
 create mode 100644 metrics/dropwizard-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.Reporter
 create mode 100644 metrics/dropwizard-metrics/src/test/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricManagerTest.java
 create mode 100644 metrics/dropwizard-metrics/src/test/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricTest.java
 create mode 100644 metrics/dropwizard-metrics/src/test/java/org/apache/iotdb/metrics/dropwizard/DropwizardMetricTestPlan.java
 create mode 100644 metrics/dropwizard-metrics/src/test/java/org/apache/iotdb/metrics/dropwizard/PrometheusRunTest.java
 create mode 100644 metrics/dropwizard-metrics/src/test/resources/iotdb-metric.yml
 create mode 100644 metrics/interface/pom.xml
 create mode 100644 metrics/interface/src/main/assembly/metric.xml
 create mode 100644 metrics/interface/src/main/assembly/resources/conf/iotdb-metric.yml
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/CompositeReporter.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricManager.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/MetricService.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/Reporter.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfig.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConfigDescriptor.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/config/MetricConstant.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingCounter.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingGauge.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogram.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingHistogramSnapshot.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingMetricManager.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingRate.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/impl/DoNothingTimer.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/Counter.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/Gauge.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/Histogram.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/HistogramSnapshot.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/IMetric.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/Rate.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/type/Timer.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/MonitorType.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/PredefinedMetric.java
 create mode 100644 metrics/interface/src/main/java/org/apache/iotdb/metrics/utils/ReporterType.java
 create mode 100644 metrics/interface/src/main/test/org/apache/iotdb/metrics/config/MetricConfigTest.java
 create mode 100644 metrics/interface/src/main/test/resources/iotdb-metric.yml
 create mode 100644 metrics/micrometer-metrics/pom.xml
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MeterIdUtils.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManager.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerJmxReporter.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/reporter/MicrometerPrometheusReporter.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerCounter.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerGauge.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogram.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerHistogramSnapshot.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerRate.java
 create mode 100644 metrics/micrometer-metrics/src/main/java/org/apache/iotdb/metrics/micrometer/type/MicrometerTimer.java
 create mode 100644 metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.MetricManager
 create mode 100644 metrics/micrometer-metrics/src/main/resources/META-INF/services/org.apache.iotdb.metrics.Reporter
 create mode 100644 metrics/micrometer-metrics/src/test/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricManagerTest.java
 create mode 100644 metrics/micrometer-metrics/src/test/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricTest.java
 create mode 100644 metrics/micrometer-metrics/src/test/java/org/apache/iotdb/metrics/micrometer/MicrometerMetricTestPlan.java
 create mode 100644 metrics/micrometer-metrics/src/test/resources/iotdb-metric.yml
 create mode 100644 metrics/pom.xml
 create mode 100644 openapi/pom.xml
 create mode 100644 openapi/src/main/openapi3/iotdb-rest.yaml
 create mode 100644 server/src/assembly/resources/conf/iotdb-rest.properties
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/IoTDBDaemonThreadFactory.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/IThreadPoolMBean.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedScheduledExecutorService.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedScheduledExecutorServiceMBean.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedSingleThreadExecutorService.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedSingleThreadExecutorServiceMBean.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedSingleThreadScheduledExecutor.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedSingleThreadScheduledExecutorMBean.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedThreadPoolExecutor.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/concurrent/threadpool/WrappedThreadPoolExecutorMBean.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceCheck.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceConfig.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/conf/rest/IoTDBRestServiceDescriptor.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/constant/TestConstant.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/engine/cache/AccountableString.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/cache/BloomFilterCache.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/TsFileIdentifier.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/InplaceCompactionLogAnalyzer.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/InplaceCompactionLogger.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/LogAnalyzer.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/engine/compaction/cross/inplace/recover/MergeLogger.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunkGroup.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunkGroup.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunkGroup.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/modification/utils/TracedBufferedReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/engine/querycontext/AlignedReadOnlyMemChunk.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/exception/ConfigurationException.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/exception/StorageGroupNotReadyException.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/exception/metadata/TemplateImcompatibeException.java
 delete mode 100755 server/src/main/java/org/apache/iotdb/db/metadata/PartialPath.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/VectorPartialPath.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/lastCache/container/value/LastCacheValue.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/lastCache/container/value/UnaryLastCacheValue.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/lastCache/container/value/VectorLastCacheValue.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/MultiMeasurementMNode.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mnode/UnaryMeasurementMNode.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/PathGrouperByStorageGroup.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/BelongedEntityPathCollector.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/EntityPathCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/FlatMeasurementCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/FlatMeasurementPathCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/FlatMeasurementSchemaCollector.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/StorageGroupCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/collector/StorageGroupPathCollector.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/mtree/traverser/counter/FlatMeasurementCounter.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/path/AlignedPath.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/path/MeasurementPath.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/path/PartialPath.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/metadata/template/TemplateQueryType.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/logical/sys/ActivateTemplateOperator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateAlignedTimeSeriesOperator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/logical/sys/CreateTemplateOperator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/logical/sys/SetTemplateOperator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/logical/sys/UnsetTemplateOperator.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/crud/CreateTemplatePlan.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/crud/SetSchemaTemplatePlan.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/crud/UnsetSchemaTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/ActivateTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/AppendTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/CreateTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/PruneTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetTemplatePlan.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetUsingSchemaTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/physical/sys/UnsetTemplatePlan.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/qp/utils/EmptyOutputStream.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillDataSet.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillEngineDataSet.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillWithValueFilterDataSet.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/GroupByFillWithoutValueFilterDataSet.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/executor/fill/AlignedLastPointReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/DiskAlignedChunkLoader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedChunkLoader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedChunkReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedPageReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/chunk/metadata/MemAlignedChunkMetadataLoader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesAggregateReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/series/AlignedSeriesReader.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/series/VectorSeriesAggregateReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/universal/AlignedDescPriorityMergeReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/reader/universal/AlignedPriorityMergeReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/udf/builtin/UDTFCast.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/ConstantIntermediateLayer.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/query/udf/core/reader/ConstantLayerPointReader.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/RestService.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/filter/ApiOriginFilter.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/filter/AuthorizationFilter.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/filter/BasicSecurityContext.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/filter/User.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/filter/UserCache.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/handler/AuthorizationHandler.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/handler/ExceptionHandler.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/handler/PhysicalPlanConstructionHandler.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/handler/QueryDataSetHandler.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/handler/RequestValidationHandler.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/impl/PingApiServiceImpl.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/rest/impl/RestApiServiceImpl.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/service/basic/BasicOpenSessionResp.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/service/basic/BasicServiceProvider.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/service/basic/QueryFrequencyRecorder.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/AlignedValueIterator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/SchemaTestUtils.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/ValueIterator.java
 create mode 100644 server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
 delete mode 100644 server/src/main/java/org/apache/iotdb/db/utils/datastructure/VectorTVList.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/constant/TestConstant.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/engine/cache/BloomFilterCacheTest.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/engine/compaction/CompactionTaskManagerTest.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/engine/compaction/TsFileIdentifierUT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/engine/compaction/inner/InnerCompactionCacheTest.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/engine/compaction/recover/SizeTieredCompactionRecoverTest.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IOTDBGroupByInnerIntervalIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertAlignedValuesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IOTDBInsertIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBAliasIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBAlignByDeviceIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBArithmeticIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBAsIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBAutoCreateSchemaIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBClearCacheIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCloseIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCompleteIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCompressTypeIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBContinuousQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateSnapshotIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateStorageGroupIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBCreateTimeseriesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBDaemonIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteStorageGroupIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeleteTimeseriesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBDeletionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBDisableAlignIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBEncodingIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBEngineTimeGeneratorIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBExecuteBatchIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBFilePathUtilsIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBFillIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBFloatPrecisionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBFlushQueryMergeIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBFuzzyQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByFillWithRangeIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByMonthIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBGroupByUnseqIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBInIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertMultiRowIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertNaNIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertWithQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBInsertWithoutTimeIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBKillQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBLargeDataIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBLastIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBLimitSlimitIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBLoadExternalTsFileWithTimePartitionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBLoadExternalTsfileIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBManageTsFileResourceIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMergeIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMetadataFetchIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiDeviceIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiSeriesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiStatementsIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBNestedQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBNewTsFileCompactionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBNumberPathIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBOverlappedPageIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryDemoIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryMemoryControlIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBQueryTimeoutIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBQuotedPathIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBRecoverUnclosedIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBRemovePartitionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBRestartIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBResultSetIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBRpcCompressionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSameMeasurementsDifferentTypesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectIntoIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSensorUpdateIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSequenceDataQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSeriesReaderIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSessionTimeoutIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSetSystemReadOnlyWritableIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSettleIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSimpleQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSizeTieredCompactionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBSortedShowTimeseriesIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTagAlterIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTagIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimePartitionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTimeZoneIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTracingIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerExecutionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTriggerManagementIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBTtlIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFManagementIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDFWindowQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFAlignByTimeQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFBuiltinFunctionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFHybridQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBUDTFNonAlignQueryIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBVersionIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAllNullIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/IoTDBWithoutAnyNullIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationByLevelIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationDeleteIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationLargeDataIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/aggregation/IoTDBAggregationSmallDataIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/integration/auth/IoTDBAuthorizationIT.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/metadata/TemplateTest.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/query/reader/universal/AlignedPriorityMergeReaderTest.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/query/udf/example/Accumulator.java
 create mode 100644 server/src/test/java/org/apache/iotdb/db/rest/IoTDBRestServiceIT.java
 delete mode 100644 server/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
 create mode 100644 server/src/test/resources/iotdb-rest.properties
 create mode 100644 session/src/main/java/org/apache/iotdb/session/template/InternalNode.java
 create mode 100644 session/src/main/java/org/apache/iotdb/session/template/MeasurementNode.java
 create mode 100644 session/src/main/java/org/apache/iotdb/session/template/Template.java
 create mode 100644 session/src/main/java/org/apache/iotdb/session/template/TemplateNode.java
 create mode 100644 session/src/main/java/org/apache/iotdb/session/template/TemplateQueryType.java
 delete mode 100644 session/src/test/java/org/apache/iotdb/session/IoTDBSessionComplexIT.java
 create mode 100644 session/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
 delete mode 100644 session/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java
 delete mode 100644 session/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
 create mode 100644 session/src/test/java/org/apache/iotdb/session/template/TemplateUT.java
 create mode 100644 session/src/test/resources/iotdb-rest.properties
 create mode 100644 testcontainer/src/tool/README.md
 create mode 100644 testcontainer/src/tool/parser.py
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/common/cache/Accountable.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/exception/compress/GZIPCompressOverflowException.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedChunkMetadata.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorChunkMetadata.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/VectorTimeSeriesMetadata.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/ReadOnlyTsFile.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/TsFileReader.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IAlignedPageReader.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReaderByTimestamp.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/VectorChunkReader.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/VectorPageReader.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/utils/MeasurementGroup.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkGroupWriterImpl.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/AlignedChunkWriterImpl.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/ChunkGroupWriterImpl.java
 create mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/NonAlignedChunkGroupWriterImpl.java
 delete mode 100644 tsfile/src/main/java/org/apache/iotdb/tsfile/write/chunk/VectorChunkWriterImpl.java
 delete mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeSeriesMetadataTest.java
 create mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadataTest.java
 delete mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/read/ReadOnlyTsFileTest.java
 create mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/read/TsFileReaderTest.java
 create mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/write/TsFileWriteApiTest.java
 create mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/AlignedChunkWriterImplTest.java
 delete mode 100644 tsfile/src/test/java/org/apache/iotdb/tsfile/write/writer/VectorChunkWriterImplTest.java

[iotdb] 01/01: Merge branch 'master' into expr

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

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

commit 6dd6dbccb2404997edea52826f000e5fb46e57d0
Merge: ba4355a f43085e
Author: jt <jt...@163.com>
AuthorDate: Wed Dec 1 10:56:46 2021 +0800

    Merge branch 'master' into expr
    
    # Conflicts:
    #	cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/DataClusterServer.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/MetaClusterServer.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/RaftServer.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThread.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatServer.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThread.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
    #	cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaSyncService.java

 .github/workflows/cluster.yml                      |   50 +
 .github/workflows/main-unix.yml                    |    2 +-
 .github/workflows/main-win.yml                     |    2 +-
 .gitignore                                         |    1 -
 LICENSE-binary                                     |    6 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlLexer.g4    |   27 +-
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |   76 +-
 cli/pom.xml                                        |   16 +-
 cli/src/assembly/resources/sbin/start-cli.bat      |    2 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |    2 +-
 cli/src/main/java/org/apache/iotdb/cli/Cli.java    |   40 +-
 .../apache/iotdb/cli/IoTDBSyntaxHighlighter.java   |   76 +
 cli/src/main/java/org/apache/iotdb/cli/WinCli.java |  175 --
 .../org/apache/iotdb/cli/utils/JlineUtils.java     |   99 +
 .../org/apache/iotdb/tool/AbstractCsvTool.java     |    3 +-
 .../main/java/org/apache/iotdb/tool/ExportCsv.java |   97 +-
 .../main/java/org/apache/iotdb/tool/ImportCsv.java |   24 +-
 client-cpp/pom.xml                                 |    2 +-
 client-cpp/src/main/Session.h                      |    4 +
 client-py/SessionExample.py                        |   11 +-
 client-py/iotdb/Session.py                         |    1 +
 client-py/iotdb/utils/BitMap.py                    |    3 +-
 client-py/iotdb/utils/IoTDBConstants.py            |    1 +
 client-py/iotdb/utils/IoTDBRpcDataSet.py           |  140 +-
 client-py/iotdb/utils/SessionDataSet.py            |   34 +-
 client-py/iotdb/utils/Tablet.py                    |   10 +-
 client-py/tests/tablet_performance_comparison.py   |  129 +-
 client-py/tests/test_dataframe.py                  |   29 +-
 client-py/tests/test_todf.py                       |  216 ++
 cluster/pom.xml                                    |    4 +
 .../resources/conf/iotdb-cluster.properties        |    5 -
 cluster/src/assembly/resources/sbin/add-node.bat   |    2 +-
 cluster/src/assembly/resources/sbin/add-node.sh    |    2 +-
 .../src/assembly/resources/sbin/remove-node.bat    |    4 +-
 cluster/src/assembly/resources/sbin/remove-node.sh |    2 +-
 cluster/src/assembly/resources/sbin/start-node.bat |    4 +-
 cluster/src/assembly/resources/sbin/start-node.sh  |    2 +-
 cluster/src/assembly/resources/sbin/stop-node.bat  |    2 +-
 cluster/src/assembly/resources/sbin/stop-node.sh   |    2 +-
 .../java/org/apache/iotdb/cluster/ClientMain.java  |    3 +-
 .../org/apache/iotdb/cluster/ClusterIoTDB.java     |  693 +++++
 .../apache/iotdb/cluster/ClusterIoTDBMBean.java    |   36 +
 .../java/org/apache/iotdb/cluster/ClusterMain.java |  331 ---
 .../apache/iotdb/cluster/client/BaseFactory.java   |   54 +
 .../iotdb/cluster/client/ClientCategory.java       |   38 +
 .../apache/iotdb/cluster/client/ClientManager.java |  223 ++
 .../iotdb/cluster/client/ClientPoolFactory.java    |   98 +
 .../iotdb/cluster/client/DataClientProvider.java   |   95 -
 .../iotdb/cluster/client/IClientManager.java       |   35 +
 .../cluster/client/async/AsyncBaseFactory.java     |   68 +
 .../cluster/client/async/AsyncClientFactory.java   |   65 -
 .../cluster/client/async/AsyncClientPool.java      |  216 --
 .../cluster/client/async/AsyncDataClient.java      |  199 +-
 .../client/async/AsyncDataHeartbeatClient.java     |   81 -
 .../cluster/client/async/AsyncMetaClient.java      |  147 +-
 .../client/async/AsyncMetaHeartbeatClient.java     |   81 -
 .../cluster/client/sync/SyncClientAdaptor.java     |   60 +-
 .../cluster/client/sync/SyncClientFactory.java     |   40 -
 .../iotdb/cluster/client/sync/SyncClientPool.java  |  169 --
 .../iotdb/cluster/client/sync/SyncDataClient.java  |  114 +-
 .../client/sync/SyncDataHeartbeatClient.java       |   79 -
 .../iotdb/cluster/client/sync/SyncMetaClient.java  |  121 +-
 .../client/sync/SyncMetaHeartbeatClient.java       |   78 -
 .../apache/iotdb/cluster/config/ClusterConfig.java |    9 -
 .../iotdb/cluster/config/ClusterConstant.java      |   86 +
 .../iotdb/cluster/config/ClusterDescriptor.java    |   12 +-
 .../iotdb/cluster/coordinator/Coordinator.java     |  179 +-
 .../cluster/expr/ExprAppendNodeEntryHandler.java   |   24 -
 .../org/apache/iotdb/cluster/expr/ExprBench.java   |  123 -
 .../org/apache/iotdb/cluster/expr/ExprMember.java  |  305 ---
 .../org/apache/iotdb/cluster/expr/ExprServer.java  |  106 -
 .../apache/iotdb/cluster/expr/ExprVotingLog.java   |   59 -
 .../apache/iotdb/cluster/expr/SWRaftMember.java    |  206 ++
 .../apache/iotdb/cluster/expr/SequencerExpr.java   |  126 -
 .../apache/iotdb/cluster/expr/VotingLogList.java   |  111 -
 .../apache/iotdb/cluster/log/LogDispatcher.java    |   13 +-
 .../apache/iotdb/cluster/log/VotingLogList.java    |  104 +
 .../cluster/log/applier/AsyncDataLogApplier.java   |    4 +-
 .../iotdb/cluster/log/applier/BaseApplier.java     |   12 +-
 .../iotdb/cluster/log/applier/DataLogApplier.java  |   17 +-
 .../iotdb/cluster/log/catchup/LogCatchUpTask.java  |    5 +-
 .../manage/FilePartitionedSnapshotLogManager.java  |    4 +-
 .../log/manage/MetaSingleSnapshotLogManager.java   |   12 +-
 .../log/manage/PartitionedSnapshotLogManager.java  |    7 +-
 .../iotdb/cluster/log/manage/RaftLogManager.java   |   23 +-
 .../iotdb/cluster/log/snapshot/FileSnapshot.java   |   14 +-
 .../cluster/log/snapshot/MetaSimpleSnapshot.java   |   42 +-
 .../cluster/log/snapshot/PullSnapshotTask.java     |    5 +-
 .../log/snapshot/PullSnapshotTaskDescriptor.java   |    2 +-
 .../apache/iotdb/cluster/metadata/CMManager.java   |  430 ++--
 .../apache/iotdb/cluster/metadata/MetaPuller.java  |   79 +-
 .../cluster/partition/NodeAdditionResult.java      |    4 +-
 .../iotdb/cluster/partition/NodeRemovalResult.java |    4 +-
 .../iotdb/cluster/partition/PartitionGroup.java    |   36 +-
 .../iotdb/cluster/partition/PartitionTable.java    |    8 +-
 .../partition/balancer/DefaultSlotBalancer.java    |    6 +-
 .../cluster/partition/balancer/SlotBalancer.java   |    4 +-
 .../iotdb/cluster/partition/slot/SlotManager.java  |    2 +-
 .../partition/slot/SlotNodeAdditionResult.java     |    2 +-
 .../cluster/partition/slot/SlotPartitionTable.java |   48 +-
 .../iotdb/cluster/partition/slot/SlotStrategy.java |    2 +-
 .../partition/slot/SlotTimePartitionFilter.java    |    3 +-
 .../cluster/query/ClusterDataQueryExecutor.java    |    6 +-
 .../cluster/query/ClusterPhysicalGenerator.java    |   16 +-
 .../iotdb/cluster/query/ClusterPlanExecutor.java   |  388 ++-
 .../iotdb/cluster/query/ClusterPlanRouter.java     |   16 +-
 .../iotdb/cluster/query/ClusterQueryRouter.java    |   25 +-
 .../iotdb/cluster/query/LocalQueryExecutor.java    |   88 +-
 .../query/aggregate/ClusterAggregateExecutor.java  |    2 +-
 .../cluster/query/aggregate/ClusterAggregator.java |   38 +-
 .../cluster/query/fill/ClusterFillExecutor.java    |    7 +-
 .../cluster/query/fill/ClusterLinearFill.java      |   12 +-
 .../cluster/query/fill/ClusterPreviousFill.java    |   91 +-
 .../cluster/query/fill/PreviousFillArguments.java  |    2 +-
 .../ClusterGroupByFillNoVFilterDataSet.java        |   56 +
 .../groupby/ClusterGroupByFillVFilterDataSet.java  |   67 +
 .../groupby/ClusterGroupByNoVFilterDataSet.java    |    8 +-
 .../groupby/ClusterGroupByVFilterDataSet.java      |    6 +-
 .../query/groupby/MergeGroupByExecutor.java        |    2 +-
 .../query/groupby/RemoteGroupByExecutor.java       |   85 +-
 .../query/last/ClusterLastQueryExecutor.java       |   73 +-
 .../query/manage/ClusterSessionManager.java        |  137 +
 .../cluster/query/reader/ClusterReaderFactory.java |   87 +-
 .../cluster/query/reader/ClusterTimeGenerator.java |    2 +-
 .../iotdb/cluster/query/reader/DataSourceInfo.java |   83 +-
 .../reader/RemoteSeriesReaderByTimestamp.java      |   15 +-
 .../query/reader/RemoteSimpleSeriesReader.java     |   15 +-
 .../mult/AssignPathAscPriorityMergeReader.java     |   49 +
 .../mult/AssignPathDescPriorityMergeReader.java    |   49 +
 .../reader/mult/AssignPathManagedMergeReader.java  |   43 +-
 .../reader/mult/AssignPathPriorityMergeReader.java |   66 -
 .../mult/IAssignPathPriorityMergeReader.java       |   47 +
 .../query/reader/mult/MultDataSourceInfo.java      |   63 +-
 .../cluster/query/reader/mult/MultElement.java     |   49 +
 .../query/reader/mult/RemoteMultSeriesReader.java  |   41 +-
 .../apache/iotdb/cluster/server/ClientServer.java  |  311 ---
 .../iotdb/cluster/server/ClusterRPCService.java    |  109 +
 .../cluster/server/ClusterRPCServiceMBean.java     |   35 +
 .../iotdb/cluster/server/ClusterTSServiceImpl.java |   99 +
 .../iotdb/cluster/server/DataClusterServer.java    | 1139 ---------
 .../iotdb/cluster/server/MetaClusterServer.java    |  423 ----
 .../cluster/server/PullSnapshotHintService.java    |   20 +-
 .../apache/iotdb/cluster/server/RaftServer.java    |  285 ---
 .../org/apache/iotdb/cluster/server/Response.java  |    3 +
 .../iotdb/cluster/server/StoppedMemberManager.java |   11 +-
 .../server/clusterinfo/ClusterInfoServer.java      |    1 +
 .../handlers/caller/AppendNodeEntryHandler.java    |    7 +-
 .../server/handlers/caller/HeartbeatHandler.java   |    6 +-
 .../handlers/caller/PreviousFillHandler.java       |   26 +-
 .../handlers/caller/ShowTimeSeriesHandler.java     |  133 +
 .../server/heartbeat/DataHeartbeatServer.java      |   83 -
 .../cluster/server/heartbeat/HeartbeatServer.java  |  212 --
 .../cluster/server/heartbeat/HeartbeatThread.java  |   29 +-
 .../server/heartbeat/MetaHeartbeatServer.java      |   92 -
 .../server/heartbeat/MetaHeartbeatThread.java      |    7 +-
 .../cluster/server/member/DataGroupMember.java     |   97 +-
 .../server/member/DataGroupMemberMBean.java        |   25 +
 .../cluster/server/member/MetaGroupMember.java     |  501 ++--
 .../server/member/MetaGroupMemberMBean.java        |   35 +
 .../iotdb/cluster/server/member/RaftMember.java    |  306 ++-
 .../cluster/server/member/RaftMemberMBean.java     |   53 +
 .../server/raft/AbstractDataRaftService.java       |   54 +
 .../server/raft/AbstractMetaRaftService.java       |   52 +
 .../cluster/server/raft/AbstractRaftService.java   |   76 +
 .../server/raft/DataRaftHeartBeatService.java      |   68 +
 .../server/raft/DataRaftHeartBeatServiceMBean.java |   22 +
 .../iotdb/cluster/server/raft/DataRaftService.java |   65 +
 .../cluster/server/raft/DataRaftServiceMBean.java  |   22 +
 .../server/raft/MetaRaftHeartBeatService.java      |   68 +
 .../server/raft/MetaRaftHeartBeatServiceMBean.java |   22 +
 .../iotdb/cluster/server/raft/MetaRaftService.java |   65 +
 .../cluster/server/raft/MetaRaftServiceMBean.java  |   22 +
 .../cluster/server/raft/RaftServiceHandler.java    |   43 +
 .../cluster/server/service/DataGroupEngine.java    |  510 ++++
 .../server/service/DataGroupEngineMBean.java       |   31 +
 .../server/service/DataGroupServiceImpls.java      |  776 ++++++
 .../cluster/server/service/MetaAsyncService.java   |   42 +-
 .../cluster/server/service/MetaSyncService.java    |   50 +-
 .../apache/iotdb/cluster/utils/ClientUtils.java    |   64 +-
 .../iotdb/cluster/utils/ClusterQueryUtils.java     |   57 +-
 .../apache/iotdb/cluster/utils/ClusterUtils.java   |   53 +-
 .../apache/iotdb/cluster/utils/PartitionUtils.java |   12 +-
 .../cluster/utils/nodetool/ClusterMonitor.java     |   32 +-
 .../cluster/utils/nodetool/function/Slot.java      |    2 +-
 .../iotdb/cluster/client/BaseClientTest.java       |  156 ++
 .../iotdb/cluster/client/ClientManagerTest.java    |  212 ++
 .../cluster/client/ClientPoolFactoryTest.java      |  262 ++
 .../cluster/client/DataClientProviderTest.java     |  242 --
 .../iotdb/cluster/client/MockClientManager.java    |   47 +
 .../cluster/client/async/AsyncClientPoolTest.java  |  209 --
 .../cluster/client/async/AsyncDataClientTest.java  |  109 +-
 .../client/async/AsyncDataHeartbeatClientTest.java |   60 -
 .../cluster/client/async/AsyncMetaClientTest.java  |  108 +-
 .../client/async/AsyncMetaHeartbeatClientTest.java |   61 -
 .../cluster/client/sync/SyncClientAdaptorTest.java |   18 +-
 .../cluster/client/sync/SyncClientPoolTest.java    |  167 --
 .../cluster/client/sync/SyncDataClientTest.java    |  172 +-
 .../client/sync/SyncDataHeartbeatClientTest.java   |   66 -
 .../cluster/client/sync/SyncMetaClientTest.java    |  170 +-
 .../client/sync/SyncMetaHeartbeatClientTest.java   |   66 -
 .../org/apache/iotdb/cluster/common/IoTDBTest.java |   18 +-
 .../cluster/common/TestAsyncClientFactory.java     |   55 -
 .../iotdb/cluster/common/TestAsyncDataClient.java  |    3 +-
 .../iotdb/cluster/common/TestAsyncMetaClient.java  |    9 +-
 .../iotdb/cluster/common/TestLogApplier.java       |    2 +-
 .../apache/iotdb/cluster/common/TestSnapshot.java  |    6 +-
 .../cluster/common/TestSyncClientFactory.java      |   88 -
 .../org/apache/iotdb/cluster/common/TestUtils.java |   21 +-
 .../cluster/integration/BaseSingleNodeTest.java    |   16 +-
 .../iotdb/cluster/integration/SingleNodeTest.java  |    7 +-
 .../apache/iotdb/cluster/log/LogParserTest.java    |    8 +-
 .../log/applier/AsyncDataLogApplierTest.java       |    2 +-
 .../cluster/log/applier/DataLogApplierTest.java    |  182 +-
 .../cluster/log/applier/MetaLogApplierTest.java    |    6 +-
 .../iotdb/cluster/log/catchup/CatchUpTaskTest.java |    5 -
 .../cluster/log/catchup/LogCatchUpTaskTest.java    |    7 +-
 .../log/catchup/SnapshotCatchUpTaskTest.java       |    9 +-
 .../cluster/log/logtypes/SerializeLogTest.java     |    8 +-
 .../FilePartitionedSnapshotLogManagerTest.java     |    2 +-
 .../manage/MetaSingleSnapshotLogManagerTest.java   |    2 +-
 .../cluster/log/snapshot/DataSnapshotTest.java     |   12 +-
 .../cluster/log/snapshot/FileSnapshotTest.java     |    2 +-
 .../log/snapshot/MetaSimpleSnapshotTest.java       |   46 +-
 .../log/snapshot/PartitionedSnapshotTest.java      |    2 +-
 .../cluster/log/snapshot/PullSnapshotTaskTest.java |    7 +-
 .../iotdb/cluster/partition/MManagerWhiteBox.java  |    2 +-
 .../cluster/partition/SlotPartitionTableTest.java  |    6 +-
 .../apache/iotdb/cluster/query/BaseQueryTest.java  |    9 +-
 .../query/ClusterAggregateExecutorTest.java        |   49 +-
 .../query/ClusterDataQueryExecutorTest.java        |    7 +-
 .../query/ClusterPhysicalGeneratorTest.java        |    3 +-
 .../cluster/query/ClusterPlanExecutorTest.java     |    8 +-
 .../iotdb/cluster/query/ClusterPlannerTest.java    |    1 -
 .../cluster/query/ClusterQueryRouterTest.java      |   54 +-
 .../query/fill/ClusterFillExecutorTest.java        |   17 +-
 .../ClusterGroupByNoVFilterDataSetTest.java        |   11 +-
 .../groupby/ClusterGroupByVFilterDataSetTest.java  |   17 +-
 .../query/groupby/MergeGroupByExecutorTest.java    |    7 +-
 .../query/groupby/RemoteGroupByExecutorTest.java   |    7 +-
 .../cluster/query/manage/QueryCoordinatorTest.java |    8 +-
 .../query/reader/ClusterReaderFactoryTest.java     |   11 +-
 .../query/reader/ClusterTimeGeneratorTest.java     |    9 +-
 .../cluster/query/reader/DatasourceInfoTest.java   |   55 +-
 .../reader/RemoteSeriesReaderByTimestampTest.java  |  132 +-
 .../query/reader/RemoteSimpleSeriesReaderTest.java |  104 +-
 .../mult/AssignPathManagedMergeReaderTest.java     |  120 +-
 .../reader/mult/RemoteMultSeriesReaderTest.java    |  222 +-
 .../server/clusterinfo/ClusterInfoServerTest.java  |    5 +-
 .../clusterinfo/ClusterInfoServiceImplTest.java    |   28 +-
 .../caller/AppendGroupEntryHandlerTest.java        |    3 +-
 .../caller/AppendNodeEntryHandlerTest.java         |    3 +-
 .../handlers/caller/ElectionHandlerTest.java       |    3 +-
 .../handlers/caller/HeartbeatHandlerTest.java      |    3 +-
 .../handlers/caller/LogCatchUpHandlerTest.java     |    3 +-
 .../handlers/forwarder/ForwardPlanHandlerTest.java |    2 +-
 .../server/heartbeat/DataHeartbeatThreadTest.java  |    5 -
 .../server/heartbeat/HeartbeatThreadTest.java      |   23 +-
 .../server/heartbeat/MetaHeartbeatThreadTest.java  |    7 +-
 .../iotdb/cluster/server/member/BaseMember.java    |   66 +-
 .../cluster/server/member/DataGroupMemberTest.java |   69 +-
 .../cluster/server/member/MetaGroupMemberTest.java |  192 +-
 .../cluster/server/member/RaftMemberTest.java      |    4 +-
 .../cluster/utils/CreateTemplatePlanUtil.java      |   74 +
 .../iotdb/cluster/utils/SerializeUtilTest.java     |    2 +-
 .../resources/node1conf/iotdb-engine.properties    |   12 +-
 .../resources/node2conf/iotdb-engine.properties    |   12 +-
 .../resources/node3conf/iotdb-engine.properties    |   12 +-
 compile-tools/thrift/pom.xml                       |    2 +-
 distribution/src/assembly/all.xml                  |    4 +
 distribution/src/assembly/server.xml               |    4 +
 docs/Development/ContributeGuide.md                |    2 +-
 docs/Download/README.md                            |   34 +-
 docs/SystemDesign/DataQuery/AlignByDeviceQuery.md  |   12 +-
 docs/UserGuide/API/Programming-Java-Native-API.md  |  151 +-
 docs/UserGuide/Advanced-Features/Triggers.md       |    2 +-
 docs/UserGuide/Appendix/SQL-Reference.md           |   89 +-
 docs/UserGuide/Appendix/Status-Codes.md            |    1 +
 docs/UserGuide/Cluster/Cluster-Setup-Example.md    |   73 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |   34 +-
 .../UserGuide/Data-Concept/Measurement-Template.md |   84 -
 docs/UserGuide/Data-Concept/Schema-Template.md     |   84 +
 .../Integration-Test-refactoring-tutorial.md       |  161 ++
 .../DDL-Data-Definition-Language.md                |   75 +-
 .../DML-Data-Manipulation-Language.md              |   83 +-
 .../IoTDB-SQL-Language/Maintenance-Command.md      |    4 +
 .../IoTDB-SQL-Language/Syntax-Conventions.md       |   15 +-
 docs/UserGuide/System-Tools/CSV-Tool.md            |   10 +-
 docs/zh/Download/README.md                         |   34 +-
 .../SystemDesign/DataQuery/AlignByDeviceQuery.md   |   12 +-
 .../UserGuide/API/Programming-Java-Native-API.md   |  139 +-
 docs/zh/UserGuide/Advanced-Features/Triggers.md    |    2 +-
 docs/zh/UserGuide/Appendix/SQL-Reference.md        |   87 +-
 docs/zh/UserGuide/Appendix/Status-Codes.md         |    2 +
 docs/zh/UserGuide/Cluster/Cluster-Setup-Example.md |   72 +-
 .../Communication-Service-Protocol/RestService.md  |  268 ++
 docs/zh/UserGuide/Comparison/TSDB-Comparison.md    |    2 +-
 .../Data-Concept/Data-Model-and-Terminology.md     |   33 +-
 .../UserGuide/Data-Concept/Measurement-Template.md |   81 -
 docs/zh/UserGuide/Data-Concept/Schema-Template.md  |   81 +
 .../Integration-Test-refactoring-tutorial.md       |  163 ++
 .../DDL-Data-Definition-Language.md                |   72 +-
 .../DML-Data-Manipulation-Language.md              |   84 +-
 .../IoTDB-SQL-Language/Maintenance-Command.md      |    3 +
 .../IoTDB-SQL-Language/Syntax-Conventions.md       |   15 +-
 docs/zh/UserGuide/System-Tools/CSV-Tool.md         |   69 +-
 example/client-cpp-example/pom.xml                 |    2 +-
 .../java/org/apache/iotdb/flink/TsFileUtils.java   |    4 +-
 .../iotdb/hadoop/tsfile/TSMRWriteExample.java      |    6 +-
 .../apache/iotdb/hadoop/tsfile/TsFileHelper.java   |    8 +-
 .../iotdb/hadoop/tsfile/TsFileWriteToHDFS.java     |    6 +-
 .../iotdb/AlignedTimeseriesSessionExample.java     |  222 +-
 .../iotdb/HybridTimeseriesSessionExample.java      |   11 +-
 .../org/apache/iotdb/SessionConcurrentExample.java |   46 +-
 .../main/java/org/apache/iotdb/SessionExample.java |  269 +-
 .../org/apache/iotdb/trigger/TriggerExample.java   |    2 +-
 .../iotdb/tsfile/TsFileForceAppendWrite.java       |   12 +-
 .../java/org/apache/iotdb/tsfile/TsFileRead.java   |    8 +-
 .../apache/iotdb/tsfile/TsFileSequenceRead.java    |   87 +-
 .../tsfile/TsFileWriteAlignedWithTSRecord.java     |   89 +
 .../iotdb/tsfile/TsFileWriteAlignedWithTablet.java |  141 ++
 .../iotdb/tsfile/TsFileWriteVectorWithTablet.java  |  118 -
 .../iotdb/tsfile/TsFileWriteWithTSRecord.java      |   66 +-
 .../apache/iotdb/tsfile/TsFileWriteWithTablet.java |  106 +-
 flink-iotdb-connector/pom.xml                      |    5 +
 .../iotdb/flink/tsfile/TsFileInputFormat.java      |    6 +-
 .../tsfile/RowTsFileOutputFormatTestBase.java      |    4 +-
 grafana/pom.xml                                    |    4 +-
 .../controller/DatabaseConnectController.java      |   63 +-
 .../iotdb/web/grafana/dao/impl/BasicDaoImpl.java   |   18 +-
 .../grafana/service/DatabaseConnectService.java    |    2 -
 .../service/impl/DatabaseConnectServiceImpl.java   |    5 -
 .../apache/iotdb/hadoop/fileSystem/HDFSInput.java  |    5 +
 .../iotdb/hadoop/tsfile/TSFRecordReader.java       |    4 +-
 .../apache/iotdb/hadoop/tsfile/TSFHadoopTest.java  |   49 +-
 .../iotdb/hadoop/tsfile/TsFileTestHelper.java      |    2 +-
 hive-connector/pom.xml                             |   16 -
 .../org/apache/iotdb/hive/TSFHiveRecordWriter.java |    3 +-
 .../apache/iotdb/hive/TSFHiveInputFormatTest.java  |   27 +-
 .../apache/iotdb/hive/TSFHiveRecordReaderTest.java |   28 +-
 .../org/apache/iotdb/hive/TsFileTestHelper.java    |    2 +-
 integration/README.md                              |  120 +
 integration/pic/Add_New_Configuration.png          |  Bin 0 -> 129654 bytes
 integration/pic/Cluster_Category.png               |  Bin 0 -> 175311 bytes
 integration/pic/Fork_mode.png                      |  Bin 0 -> 188976 bytes
 integration/pic/Run(Menu).png                      |  Bin 0 -> 99077 bytes
 integration/pic/Standalone_Category.png            |  Bin 0 -> 183256 bytes
 integration/pom.xml                                |  283 +++
 integration/src/assembly/cluster.xml               |   47 +
 .../iotdb/integration/env/ClusterEnvBase.java      |  245 ++
 .../iotdb/integration/env/ClusterEnvConfig.java    |  117 +
 .../apache/iotdb/integration/env/ClusterNode.java  |  166 ++
 .../iotdb/integration/env/ConfigFactory.java       |   52 +
 .../apache/iotdb/integration/env/EnvFactory.java   |   57 +
 .../iotdb/integration/env/FiveNodeCluster1Env.java |   64 +
 .../iotdb/integration/env/RemoteEnvConfig.java     |   23 +
 .../iotdb/integration/env/RemoteServerEnv.java     |   81 +
 .../apache/iotdb/itbase/category/ClusterTest.java  |   21 +
 .../iotdb/itbase/category/LocalStandaloneTest.java |   21 +
 .../apache/iotdb/itbase/category/RemoteTest.java   |   21 +
 .../org/apache/iotdb/itbase/env/BaseConfig.java    |   88 +
 .../java/org/apache/iotdb/itbase/env/BaseEnv.java  |   35 +
 .../db/engine/trigger/example/Accumulator.java     |    0
 .../iotdb/db/engine/trigger/example/Counter.java   |    0
 .../iotdb/db/integration/IOTDBGroupByIT.java       |  996 ++++++++
 .../integration/IOTDBGroupByInnerIntervalIT.java   |  335 +++
 .../db/integration/IOTDBInsertAlignedValuesIT.java |  222 ++
 .../apache/iotdb/db/integration/IOTDBInsertIT.java |  126 +
 .../apache/iotdb/db/integration/IoTDBAliasIT.java  |  364 +++
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java |  960 +++++++
 .../iotdb/db/integration/IoTDBArithmeticIT.java    |  287 +++
 .../org/apache/iotdb/db/integration/IoTDBAsIT.java |  564 +++++
 .../db/integration/IoTDBAutoCreateSchemaIT.java    |  209 ++
 .../iotdb/db/integration/IoTDBCheckConfigIT.java   |  145 ++
 .../iotdb/db/integration/IoTDBClearCacheIT.java    |  171 ++
 .../apache/iotdb/db/integration/IoTDBCloseIT.java  |  191 ++
 .../iotdb/db/integration/IoTDBCompleteIT.java      |  488 ++++
 .../iotdb/db/integration/IoTDBCompressTypeIT.java  |  101 +
 .../db/integration/IoTDBContinuousQueryIT.java     |  416 +++
 .../IoTDBCreateAlignedTimeseriesIT.java            |  109 +
 .../db/integration/IoTDBCreateSnapshotIT.java      |  180 ++
 .../db/integration/IoTDBCreateStorageGroupIT.java  |  131 +
 .../db/integration/IoTDBCreateTimeseriesIT.java    |  170 ++
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java |  446 ++++
 .../db/integration/IoTDBDeleteStorageGroupIT.java  |  160 ++
 .../db/integration/IoTDBDeleteTimeseriesIT.java    |  215 ++
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  500 ++++
 .../iotdb/db/integration/IoTDBDisableAlignIT.java  |  392 +++
 .../iotdb/db/integration/IoTDBEncodingIT.java      |  350 +++
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |  292 +++
 .../iotdb/db/integration/IoTDBExecuteBatchIT.java  |  194 ++
 .../iotdb/db/integration/IoTDBFilePathUtilsIT.java |   99 +
 .../apache/iotdb/db/integration/IoTDBFillIT.java   |  972 +++++++
 .../db/integration/IoTDBFloatPrecisionIT.java      |  170 ++
 .../db/integration/IoTDBFlushQueryMergeIT.java     |  203 ++
 .../iotdb/db/integration/IoTDBFuzzyQueryIT.java    |  295 +++
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   | 2647 ++++++++++++++++++++
 .../db/integration/IoTDBGroupByFillMixPathsIT.java |  489 ++++
 .../integration/IoTDBGroupByFillWithRangeIT.java   |  179 ++
 .../db/integration/IoTDBGroupByMonthFillIT.java    |  277 ++
 .../iotdb/db/integration/IoTDBGroupByMonthIT.java  |  273 ++
 .../iotdb/db/integration/IoTDBGroupByUnseqIT.java  |  185 ++
 .../org/apache/iotdb/db/integration/IoTDBInIT.java |  247 ++
 .../db/integration/IoTDBInsertMultiRowIT.java      |  128 +
 .../iotdb/db/integration/IoTDBInsertNaNIT.java     |  197 ++
 .../db/integration/IoTDBInsertWithQueryIT.java     |  468 ++++
 .../db/integration/IoTDBInsertWithoutTimeIT.java   |  132 +
 .../iotdb/db/integration/IoTDBKillQueryIT.java     |   80 +
 .../iotdb/db/integration/IoTDBLargeDataIT.java     |  373 +++
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |  599 +++++
 .../iotdb/db/integration/IoTDBLimitSlimitIT.java   |  204 ++
 ...IoTDBLoadExternalTsFileWithTimePartitionIT.java |  330 +++
 .../db/integration/IoTDBLoadExternalTsfileIT.java  |  825 ++++++
 .../integration/IoTDBManageTsFileResourceIT.java   |  295 +++
 .../apache/iotdb/db/integration/IoTDBMergeIT.java  |  332 +++
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |  603 +++++
 .../iotdb/db/integration/IoTDBMultiDeviceIT.java   |  292 +++
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        |  110 +
 .../db/integration/IoTDBMultiOverlappedPageIT.java |  166 ++
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |  471 ++++
 .../db/integration/IoTDBMultiStatementsIT.java     |  187 ++
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |  591 +++++
 .../db/integration/IoTDBNewTsFileCompactionIT.java | 1067 ++++++++
 .../iotdb/db/integration/IoTDBNumberPathIT.java    |  483 ++++
 .../db/integration/IoTDBOverlappedPageIT.java      |  194 ++
 .../db/integration/IoTDBPathNumOverLimitIT.java    |   75 +
 .../iotdb/db/integration/IoTDBQueryDemoIT.java     |  685 +++++
 .../db/integration/IoTDBQueryMemoryControlIT.java  |  277 ++
 .../iotdb/db/integration/IoTDBQueryTimeoutIT.java  |  156 ++
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  125 +
 .../iotdb/db/integration/IoTDBRecoverIT.java       |  438 ++++
 .../db/integration/IoTDBRecoverUnclosedIT.java     |  291 +++
 .../db/integration/IoTDBRemovePartitionIT.java     |  333 +++
 .../iotdb/db/integration/IoTDBRestartIT.java       |  462 ++++
 .../iotdb/db/integration/IoTDBResultSetIT.java     |  134 +
 .../db/integration/IoTDBRpcCompressionIT.java      |  140 ++
 .../IoTDBSameMeasurementsDifferentTypesIT.java     |  182 ++
 .../db/integration/IoTDBSchemaTemplateIT.java      |  180 ++
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    |  673 +++++
 .../iotdb/db/integration/IoTDBSensorUpdateIT.java  |   87 +
 .../db/integration/IoTDBSequenceDataQueryIT.java   |  329 +++
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  453 ++++
 .../db/integration/IoTDBSessionTimeoutIT.java      |   85 +
 .../IoTDBSetSystemReadOnlyWritableIT.java          |  256 ++
 .../apache/iotdb/db/integration/IoTDBSettleIT.java |   97 +
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 1286 ++++++++++
 .../integration/IoTDBSizeTieredCompactionIT.java   | 1344 ++++++++++
 .../integration/IoTDBSortedShowTimeseriesIT.java   |  326 +++
 .../iotdb/db/integration/IoTDBTagAlterIT.java      |  624 +++++
 .../apache/iotdb/db/integration/IoTDBTagIT.java    | 1114 ++++++++
 .../iotdb/db/integration/IoTDBTimePartitionIT.java |   92 +
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  158 ++
 .../iotdb/db/integration/IoTDBTracingIT.java       |   84 +
 .../db/integration/IoTDBTriggerExecutionIT.java    |  618 +++++
 .../db/integration/IoTDBTriggerManagementIT.java   |  503 ++++
 .../apache/iotdb/db/integration/IoTDBTtlIT.java    |  221 ++
 .../iotdb/db/integration/IoTDBUDFManagementIT.java |  396 +++
 .../db/integration/IoTDBUDFWindowQueryIT.java      |  632 +++++
 .../integration/IoTDBUDTFAlignByTimeQueryIT.java   |  823 ++++++
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java |  356 +++
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |  162 ++
 .../db/integration/IoTDBUDTFNonAlignQueryIT.java   |  341 +++
 .../iotdb/db/integration/IoTDBVersionIT.java       |   68 +
 .../db/integration/IoTDBWithoutAllNullIT.java      |  257 ++
 .../db/integration/IoTDBWithoutAnyNullIT.java      |  216 ++
 .../aggregation/IoTDBAggregationByLevelIT.java     |  537 ++++
 .../aggregation/IoTDBAggregationDeleteIT.java      |   94 +
 .../aggregation/IoTDBAggregationIT.java            | 1020 ++++++++
 .../aggregation/IoTDBAggregationLargeDataIT.java   | 1037 ++++++++
 .../aggregation/IoTDBAggregationSmallDataIT.java   |  808 ++++++
 .../db/integration/aligned/AlignedWriteUtil.java   |  142 ++
 .../IoTDBAggregationWithoutValueFilter2IT.java     |   66 +
 .../IoTDBAggregationWithoutValueFilterIT.java      |  447 ++++
 ...gregationWithoutValueFilterWithDeletion2IT.java |   83 +
 ...ggregationWithoutValueFilterWithDeletionIT.java |  447 ++++
 .../aligned/IoTDBDeleteTimeseriesIT.java           |  218 ++
 .../db/integration/aligned/IoTDBDeletionIT.java    |  522 ++++
 .../db/integration/aligned/IoTDBLastQuery2IT.java  |   66 +
 .../db/integration/aligned/IoTDBLastQueryIT.java   |  377 +++
 .../aligned/IoTDBLastQueryWithDeletion2IT.java     |   81 +
 .../aligned/IoTDBLastQueryWithDeletionIT.java      |  380 +++
 .../aligned/IoTDBLastQueryWithoutLastCache2IT.java |   69 +
 .../aligned/IoTDBLastQueryWithoutLastCacheIT.java  |  382 +++
 ...DBLastQueryWithoutLastCacheWithDeletion2IT.java |   86 +
 ...TDBLastQueryWithoutLastCacheWithDeletionIT.java |  384 +++
 .../aligned/IoTDBRawQueryWithValueFilter2IT.java   |   66 +
 .../aligned/IoTDBRawQueryWithValueFilterIT.java    |  764 ++++++
 ...oTDBRawQueryWithValueFilterWithDeletion2IT.java |   83 +
 ...IoTDBRawQueryWithValueFilterWithDeletionIT.java |  779 ++++++
 .../IoTDBRawQueryWithoutValueFilter2IT.java        |   67 +
 .../aligned/IoTDBRawQueryWithoutValueFilterIT.java |  634 +++++
 ...BRawQueryWithoutValueFilterWithDeletion2IT.java |   84 +
 ...DBRawQueryWithoutValueFilterWithDeletionIT.java |  612 +++++
 .../db/integration/auth/IoTDBAuthorizationIT.java  | 1181 +++++++++
 .../iotdb/db/integration/env/StandaloneEnv.java    |   80 +
 .../db/integration/env/StandaloneEnvConfig.java    |  109 +
 .../iotdb/db/query/udf/example/Accumulator.java    |  110 +
 .../apache/iotdb/db/query/udf/example/Adder.java   |   96 +
 .../apache/iotdb/db/query/udf/example/Counter.java |    0
 .../org/apache/iotdb/db/query/udf/example/Max.java |    0
 .../iotdb/db/query/udf/example/Multiplier.java     |    0
 .../SlidingSizeWindowConstructorTester0.java       |    0
 .../SlidingSizeWindowConstructorTester1.java       |    0
 .../SlidingTimeWindowConstructionTester.java       |    0
 .../db/query/udf/example/TerminateTester.java      |    0
 .../iotdb/db/query/udf/example/ValidateTester.java |    0
 .../iotdb/session/IoTDBSessionComplexIT.java       |  930 +++++++
 .../iotdb/session/IoTDBSessionIteratorIT.java      |  354 +++
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1487 +++++++++++
 .../src/test/resources/iotdb-engine.properties     |   20 +
 integration/src/test/resources/logback.xml         |   58 +
 jdbc/pom.xml                                       |    5 +
 .../iotdb/jdbc/AbstractIoTDBJDBCResultSet.java     |    4 +-
 .../org/apache/iotdb/jdbc/IoTDBConnection.java     |   10 +-
 .../apache/iotdb/jdbc/IoTDBDatabaseMetadata.java   |   20 +-
 .../org/apache/iotdb/jdbc/IoTDBResultMetadata.java |   58 +-
 .../java/org/apache/iotdb/jdbc/StringUtils.java    |   19 +-
 metrics/ReadMe.md                                  |  151 ++
 metrics/dropwizard-metrics/pom.xml                 |   54 +
 .../dropwizard/DropwizardMetricManager.java        |  410 +++
 .../iotdb/metrics/dropwizard/MetricName.java       |  134 +
 .../dropwizard/reporter/DropwizardJmxReporter.java |   75 +
 .../reporter/DropwizardPrometheusReporter.java     |   89 +
 .../prometheus/DropwizardMetricsExporter.java      |  197 ++
 .../dropwizard/reporter/prometheus/MetricType.java |   38 +
 .../reporter/prometheus/PrometheusReporter.java    |  233 ++
 .../reporter/prometheus/PrometheusSender.java      |   63 +
 .../reporter/prometheus/PrometheusTextWriter.java  |   79 +
 .../reporter/prometheus/PushGateway.java           |  150 ++
 .../dropwizard/reporter/prometheus/TextFormat.java |   27 +
 .../metrics/dropwizard/type/DropwizardCounter.java |   45 +
 .../metrics/dropwizard/type/DropwizardGauge.java   |   62 +
 .../dropwizard/type/DropwizardHistogram.java       |   47 +
 .../type/DropwizardHistogramSnapshot.java          |   73 +
 .../metrics/dropwizard/type/DropwizardRate.java    |   94 +
 .../metrics/dropwizard/type/DropwizardTimer.java   |   49 +
 .../org.apache.iotdb.metrics.MetricManager         |   18 +
 .../services/org.apache.iotdb.metrics.Reporter     |   19 +
 .../dropwizard/DropwizardMetricManagerTest.java    |  272 ++
 .../metrics/dropwizard/DropwizardMetricTest.java   |  181 ++
 .../dropwizard/DropwizardMetricTestPlan.java       |   62 +
 .../metrics/dropwizard/PrometheusRunTest.java      |   42 +
 .../src/test/resources/iotdb-metric.yml            |   42 +
 metrics/interface/pom.xml                          |   73 +
 metrics/interface/src/main/assembly/metric.xml     |   40 +
 .../main/assembly/resources/conf/iotdb-metric.yml  |   42 +
 .../apache/iotdb/metrics/CompositeReporter.java    |   81 +
 .../org/apache/iotdb/metrics/MetricManager.java    |  172 ++
 .../org/apache/iotdb/metrics/MetricService.java    |  156 ++
 .../java/org/apache/iotdb/metrics/Reporter.java    |   36 +
 .../apache/iotdb/metrics/config/MetricConfig.java  |  106 +
 .../metrics/config/MetricConfigDescriptor.java     |   88 +
 .../iotdb/metrics/config/MetricConstant.java       |   29 +
 .../iotdb/metrics/impl/DoNothingCounter.java       |   39 +
 .../apache/iotdb/metrics/impl/DoNothingGauge.java  |   34 +
 .../iotdb/metrics/impl/DoNothingHistogram.java     |   41 +
 .../metrics/impl/DoNothingHistogramSnapshot.java   |   66 +
 .../iotdb/metrics/impl/DoNothingMetricManager.java |  178 ++
 .../apache/iotdb/metrics/impl/DoNothingRate.java   |   59 +
 .../apache/iotdb/metrics/impl/DoNothingTimer.java  |   43 +
 .../org/apache/iotdb/metrics/type/Counter.java     |   31 +
 .../java/org/apache/iotdb/metrics/type/Gauge.java  |   28 +
 .../org/apache/iotdb/metrics/type/Histogram.java   |   31 +
 .../iotdb/metrics/type/HistogramSnapshot.java      |   54 +
 .../org/apache/iotdb/metrics/type/IMetric.java     |   22 +
 .../java/org/apache/iotdb/metrics/type/Rate.java   |   43 +
 .../java/org/apache/iotdb/metrics/type/Timer.java  |   53 +
 .../apache/iotdb/metrics/utils/MonitorType.java    |   55 +
 .../iotdb/metrics/utils/PredefinedMetric.java      |   24 +
 .../apache/iotdb/metrics/utils/ReporterType.java   |   33 +
 .../iotdb/metrics/config/MetricConfigTest.java     |   57 +
 .../src/main/test/resources/iotdb-metric.yml       |   43 +
 metrics/micrometer-metrics/pom.xml                 |   57 +
 .../iotdb/metrics/micrometer/MeterIdUtils.java     |   32 +
 .../micrometer/MicrometerMetricManager.java        |  492 ++++
 .../micrometer/reporter/MicrometerJmxReporter.java |   82 +
 .../reporter/MicrometerPrometheusReporter.java     |  102 +
 .../metrics/micrometer/type/MicrometerCounter.java |   45 +
 .../metrics/micrometer/type/MicrometerGauge.java   |   47 +
 .../micrometer/type/MicrometerHistogram.java       |   47 +
 .../type/MicrometerHistogramSnapshot.java          |   90 +
 .../metrics/micrometer/type/MicrometerRate.java    |   81 +
 .../metrics/micrometer/type/MicrometerTimer.java   |   54 +
 .../org.apache.iotdb.metrics.MetricManager         |   18 +
 .../services/org.apache.iotdb.metrics.Reporter     |   19 +
 .../micrometer/MicrometerMetricManagerTest.java    |   52 +
 .../metrics/micrometer/MicrometerMetricTest.java   |  181 ++
 .../micrometer/MicrometerMetricTestPlan.java       |   62 +
 .../src/test/resources/iotdb-metric.yml            |   42 +
 metrics/pom.xml                                    |   40 +
 openapi/pom.xml                                    |  124 +
 openapi/src/main/openapi3/iotdb-rest.yaml          |  167 ++
 pom.xml                                            |   49 +-
 server/pom.xml                                     |   11 +
 .../resources/conf/iotdb-engine.properties         |   13 +-
 server/src/assembly/resources/conf/iotdb-env.bat   |   28 +-
 server/src/assembly/resources/conf/iotdb-env.sh    |   11 +-
 .../assembly/resources/conf/iotdb-rest.properties  |   55 +
 server/src/assembly/server.xml                     |    4 +
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |    7 +-
 .../iotdb/db/auth/authorizer/OpenIdAuthorizer.java |    2 +-
 .../db/concurrent/IoTDBDaemonThreadFactory.java    |   37 +
 .../db/concurrent/IoTDBThreadPoolFactory.java      |  186 +-
 .../org/apache/iotdb/db/concurrent/ThreadName.java |   13 +-
 .../db/concurrent/threadpool/IThreadPoolMBean.java |   45 +
 .../WrappedScheduledExecutorService.java           |  193 ++
 .../WrappedScheduledExecutorServiceMBean.java      |   22 +
 .../WrappedSingleThreadExecutorService.java        |  119 +
 .../WrappedSingleThreadExecutorServiceMBean.java   |   22 +
 .../WrappedSingleThreadScheduledExecutor.java      |  141 ++
 .../WrappedSingleThreadScheduledExecutorMBean.java |   22 +
 .../threadpool/WrappedThreadPoolExecutor.java      |   82 +
 .../threadpool/WrappedThreadPoolExecutorMBean.java |   22 +
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |   39 +-
 .../org/apache/iotdb/db/conf/IoTDBConfigCheck.java |   37 +-
 .../org/apache/iotdb/db/conf/IoTDBConstant.java    |    6 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |   23 +-
 .../iotdb/db/conf/rest/IoTDBRestServiceCheck.java  |   65 +
 .../iotdb/db/conf/rest/IoTDBRestServiceConfig.java |  143 ++
 .../db/conf/rest/IoTDBRestServiceDescriptor.java   |  162 ++
 .../org/apache/iotdb/db/constant/TestConstant.java |  143 ++
 .../apache/iotdb/db/cq/ContinuousQueryService.java |    4 +-
 .../apache/iotdb/db/cq/ContinuousQueryTask.java    |    2 +-
 .../org/apache/iotdb/db/engine/StorageEngine.java  |   34 +-
 .../iotdb/db/engine/cache/AccountableString.java   |   64 -
 .../iotdb/db/engine/cache/BloomFilterCache.java    |  188 ++
 .../db/engine/cache/CacheHitRatioMonitor.java      |   25 +
 .../engine/cache/CacheHitRatioMonitorMXBean.java   |   10 +
 .../db/engine/cache/TimeSeriesMetadataCache.java   |  203 +-
 .../db/engine/compaction/CompactionScheduler.java  |    3 +-
 .../engine/compaction/CompactionTaskManager.java   |   44 +-
 .../db/engine/compaction/TsFileIdentifier.java     |  184 ++
 .../AbstractCrossSpaceCompactionSelector.java      |    1 +
 .../compaction/cross/CrossCompactionStrategy.java  |    2 +-
 .../cross/inplace/InplaceCompactionTask.java       |    7 -
 .../inplace/manage/CrossSpaceMergeContext.java     |    2 +-
 .../inplace/manage/CrossSpaceMergeResource.java    |    7 +-
 .../cross/inplace/manage/MergeManager.java         |    4 +-
 .../recover/InplaceCompactionLogAnalyzer.java      |  353 +++
 .../inplace/recover/InplaceCompactionLogger.java   |  150 ++
 .../cross/inplace/recover/LogAnalyzer.java         |  328 ---
 .../cross/inplace/recover/MergeLogger.java         |  140 --
 .../cross/inplace/selector/IMergePathSelector.java |    2 +-
 .../cross/inplace/selector/NaivePathSelector.java  |    2 +-
 .../cross/inplace/task/CrossSpaceMergeTask.java    |   25 +-
 .../cross/inplace/task/MergeFileTask.java          |   28 +-
 .../cross/inplace/task/MergeMultiChunkTask.java    |   30 +-
 .../cross/inplace/task/RecoverCrossMergeTask.java  |   25 +-
 .../AbstractInnerSpaceCompactionSelector.java      |    1 +
 .../inner/AbstractInnerSpaceCompactionTask.java    |    2 +
 .../compaction/inner/InnerCompactionStrategy.java  |    2 +-
 .../SizeTieredCompactionRecoverTask.java           |   85 +-
 .../sizetiered/SizeTieredCompactionSelector.java   |    2 +-
 .../inner/sizetiered/SizeTieredCompactionTask.java |  121 +-
 .../inner/utils/InnerSpaceCompactionUtils.java     |   20 +-
 .../utils/SizeTieredCompactionLogAnalyzer.java     |   27 +-
 .../inner/utils/SizeTieredCompactionLogger.java    |   13 +-
 .../compaction/task/AbstractCompactionTask.java    |   10 +-
 .../compaction/task/CompactionRecoverTask.java     |    7 +-
 .../apache/iotdb/db/engine/flush/FlushManager.java |    3 +-
 .../iotdb/db/engine/flush/MemTableFlushTask.java   |  155 +-
 .../iotdb/db/engine/flush/NotifyFlushMemTable.java |    7 -
 .../iotdb/db/engine/memtable/AbstractMemTable.java |  353 ++-
 .../engine/memtable/AlignedWritableMemChunk.java   |  363 +++
 .../memtable/AlignedWritableMemChunkGroup.java     |  108 +
 .../apache/iotdb/db/engine/memtable/IMemTable.java |   27 +-
 .../db/engine/memtable/IWritableMemChunk.java      |   37 +-
 .../db/engine/memtable/IWritableMemChunkGroup.java |   53 +
 .../db/engine/memtable/PrimitiveMemTable.java      |   18 +-
 .../iotdb/db/engine/memtable/WritableMemChunk.java |  141 +-
 .../db/engine/memtable/WritableMemChunkGroup.java  |  137 +
 .../iotdb/db/engine/modification/Deletion.java     |    2 +-
 .../iotdb/db/engine/modification/Modification.java |    2 +-
 .../db/engine/modification/ModificationFile.java   |   10 +-
 .../io/LocalTextModificationAccessor.java          |   35 +-
 .../engine/modification/io/ModificationReader.java |    3 +-
 .../engine/modification/io/ModificationWriter.java |    4 +-
 .../modification/utils/TracedBufferedReader.java   |  462 ++++
 .../querycontext/AlignedReadOnlyMemChunk.java      |  165 ++
 .../db/engine/querycontext/ReadOnlyMemChunk.java   |  147 +-
 .../selectinto/InsertTabletPlanGenerator.java      |    2 +-
 .../selectinto/InsertTabletPlansIterator.java      |    2 +-
 .../engine/storagegroup/StorageGroupProcessor.java |  164 +-
 .../db/engine/storagegroup/TsFileProcessor.java    |  337 ++-
 .../db/engine/storagegroup/TsFileResource.java     |  127 +-
 .../virtualSg/HashVirtualPartitioner.java          |    2 +-
 .../storagegroup/virtualSg/VirtualPartitioner.java |    2 +-
 .../virtualSg/VirtualStorageGroupManager.java      |   10 +-
 .../service/TriggerRegistrationInformation.java    |    2 +-
 .../service/TriggerRegistrationService.java        |    2 +-
 .../sink/local/LocalIoTDBConfiguration.java        |    2 +-
 .../trigger/sink/local/LocalIoTDBHandler.java      |    6 +-
 .../trigger/sink/mqtt/MQTTConfiguration.java       |    2 +-
 .../iotdb/db/exception/ConfigurationException.java |   44 +
 .../exception/StorageGroupNotReadyException.java   |   27 +
 .../metadata/TemplateImcompatibeException.java     |   40 +
 .../exception/query/PathNumOverLimitException.java |    6 +-
 .../db/exception/query/QueryProcessException.java  |    4 +
 .../org/apache/iotdb/db/metadata/MManager.java     |  623 ++---
 .../org/apache/iotdb/db/metadata/PartialPath.java  |  361 ---
 .../iotdb/db/metadata/VectorPartialPath.java       |  122 -
 .../db/metadata/lastCache/LastCacheManager.java    |  136 +-
 .../lastCache/container/ILastCacheContainer.java   |   13 -
 .../lastCache/container/LastCacheContainer.java    |   52 +-
 .../lastCache/container/value/ILastCacheValue.java |   12 -
 .../lastCache/container/value/LastCacheValue.java  |   55 +
 .../container/value/UnaryLastCacheValue.java       |  106 -
 .../container/value/VectorLastCacheValue.java      |   86 -
 .../iotdb/db/metadata/logfile/MLogTxtWriter.java   |   80 +-
 .../iotdb/db/metadata/logfile/MLogUpgrader.java    |    2 +-
 .../iotdb/db/metadata/logfile/MLogWriter.java      |   28 +-
 .../db/metadata/logfile/MetadataOperationType.java |    2 +
 .../iotdb/db/metadata/mnode/EntityMNode.java       |   10 +-
 .../iotdb/db/metadata/mnode/IEntityMNode.java      |    5 +
 .../org/apache/iotdb/db/metadata/mnode/IMNode.java |    4 +-
 .../iotdb/db/metadata/mnode/IMeasurementMNode.java |   13 +-
 .../iotdb/db/metadata/mnode/InternalMNode.java     |   13 +
 .../org/apache/iotdb/db/metadata/mnode/MNode.java  |    2 +-
 .../iotdb/db/metadata/mnode/MeasurementMNode.java  |   72 +-
 .../db/metadata/mnode/MultiMeasurementMNode.java   |   65 -
 .../db/metadata/mnode/UnaryMeasurementMNode.java   |   63 -
 .../org/apache/iotdb/db/metadata/mtree/MTree.java  |  595 +++--
 .../mtree/traverser/PathGrouperByStorageGroup.java |  103 -
 .../db/metadata/mtree/traverser/Traverser.java     |  117 +-
 .../collector/BelongedEntityPathCollector.java     |   83 -
 .../traverser/collector/CollectorTraverser.java    |    8 +-
 .../mtree/traverser/collector/EntityCollector.java |   62 +
 .../traverser/collector/EntityPathCollector.java   |   66 -
 .../collector/FlatMeasurementCollector.java        |  138 -
 .../collector/FlatMeasurementPathCollector.java    |   60 -
 .../collector/FlatMeasurementSchemaCollector.java  |  117 -
 .../mtree/traverser/collector/MNodeCollector.java  |    2 +-
 .../traverser/collector/MeasurementCollector.java  |   52 +-
 .../traverser/collector/StorageGroupCollector.java |   60 +
 .../collector/StorageGroupPathCollector.java       |   65 -
 .../mtree/traverser/counter/CounterTraverser.java  |    2 +-
 .../mtree/traverser/counter/EntityCounter.java     |    2 +-
 .../traverser/counter/FlatMeasurementCounter.java  |   78 -
 .../mtree/traverser/counter/MNodeLevelCounter.java |    2 +-
 .../traverser/counter/MeasurementCounter.java      |    2 +-
 .../traverser/counter/StorageGroupCounter.java     |    2 +-
 .../apache/iotdb/db/metadata/path/AlignedPath.java |  470 ++++
 .../iotdb/db/metadata/path/MeasurementPath.java    |  329 +++
 .../apache/iotdb/db/metadata/path/PartialPath.java |  454 ++++
 .../apache/iotdb/db/metadata/tag/TagManager.java   |    2 +-
 .../iotdb/db/metadata/template/Template.java       |  583 ++++-
 .../db/metadata/template/TemplateManager.java      |   79 +-
 .../db/metadata/template/TemplateQueryType.java    |   27 +
 .../iotdb/db/metadata/utils/MetaFormatUtils.java   |    2 +-
 .../apache/iotdb/db/metadata/utils/MetaUtils.java  |   36 +-
 .../iotdb/db/metrics/server/ServerArgument.java    |    6 +-
 .../org/apache/iotdb/db/monitor/StatMonitor.java   |   32 +-
 .../org/apache/iotdb/db/mqtt/PublishHandler.java   |   86 +-
 .../apache/iotdb/db/qp/constant/SQLConstant.java   |   12 +-
 .../apache/iotdb/db/qp/executor/IPlanExecutor.java |    2 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  101 +-
 .../org/apache/iotdb/db/qp/logical/Operator.java   |    8 +-
 .../qp/logical/crud/AggregationQueryOperator.java  |    2 +-
 .../db/qp/logical/crud/BasicFunctionOperator.java  |    6 +-
 .../db/qp/logical/crud/DeleteDataOperator.java     |    2 +-
 .../db/qp/logical/crud/FillQueryOperator.java      |   17 +-
 .../iotdb/db/qp/logical/crud/FilterOperator.java   |    7 +-
 .../iotdb/db/qp/logical/crud/FromComponent.java    |    2 +-
 .../iotdb/db/qp/logical/crud/FunctionOperator.java |    3 +-
 .../qp/logical/crud/GroupByFillQueryOperator.java  |   13 -
 .../iotdb/db/qp/logical/crud/InOperator.java       |   10 +-
 .../iotdb/db/qp/logical/crud/InsertOperator.java   |   23 +-
 .../iotdb/db/qp/logical/crud/LikeOperator.java     |   17 +-
 .../iotdb/db/qp/logical/crud/QueryOperator.java    |   91 +-
 .../iotdb/db/qp/logical/crud/RegexpOperator.java   |   17 +-
 .../iotdb/db/qp/logical/crud/SelectComponent.java  |    2 +-
 .../db/qp/logical/crud/SelectIntoOperator.java     |    2 +-
 .../qp/logical/sys/ActivateTemplateOperator.java   |   51 +
 .../db/qp/logical/sys/AlterTimeSeriesOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/AuthorOperator.java    |    2 +-
 .../iotdb/db/qp/logical/sys/CountOperator.java     |    2 +-
 .../sys/CreateAlignedTimeSeriesOperator.java       |  131 +
 .../logical/sys/CreateContinuousQueryOperator.java |    2 +-
 .../db/qp/logical/sys/CreateIndexOperator.java     |    2 +-
 .../db/qp/logical/sys/CreateTemplateOperator.java  |  122 +
 .../qp/logical/sys/CreateTimeSeriesOperator.java   |    2 +-
 .../db/qp/logical/sys/CreateTriggerOperator.java   |    2 +-
 .../db/qp/logical/sys/DeletePartitionOperator.java |    2 +-
 .../qp/logical/sys/DeleteStorageGroupOperator.java |    2 +-
 .../qp/logical/sys/DeleteTimeSeriesOperator.java   |    2 +-
 .../iotdb/db/qp/logical/sys/DropIndexOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/FlushOperator.java     |    2 +-
 .../db/qp/logical/sys/SetStorageGroupOperator.java |    2 +-
 .../iotdb/db/qp/logical/sys/SetTTLOperator.java    |    2 +-
 .../db/qp/logical/sys/SetTemplateOperator.java     |   60 +
 .../iotdb/db/qp/logical/sys/SettleOperator.java    |    2 +-
 .../db/qp/logical/sys/ShowChildNodesOperator.java  |    2 +-
 .../db/qp/logical/sys/ShowChildPathsOperator.java  |    2 +-
 .../db/qp/logical/sys/ShowDevicesOperator.java     |    2 +-
 .../db/qp/logical/sys/ShowLockInfoOperator.java    |    2 +-
 .../qp/logical/sys/ShowStorageGroupOperator.java   |    2 +-
 .../iotdb/db/qp/logical/sys/ShowTTLOperator.java   |    2 +-
 .../db/qp/logical/sys/ShowTimeSeriesOperator.java  |    2 +-
 .../iotdb/db/qp/logical/sys/UnSetTTLOperator.java  |    2 +-
 .../db/qp/logical/sys/UnsetTemplateOperator.java   |   60 +
 .../org/apache/iotdb/db/qp/physical/BatchPlan.java |    2 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |   82 +-
 .../iotdb/db/qp/physical/crud/AggregationPlan.java |    6 +-
 .../db/qp/physical/crud/AlignByDevicePlan.java     |   13 +-
 .../db/qp/physical/crud/CreateTemplatePlan.java    |  270 --
 .../db/qp/physical/crud/DeletePartitionPlan.java   |    2 +-
 .../iotdb/db/qp/physical/crud/DeletePlan.java      |    4 +-
 .../db/qp/physical/crud/InsertMultiTabletPlan.java |   10 +-
 .../iotdb/db/qp/physical/crud/InsertPlan.java      |   55 +-
 .../iotdb/db/qp/physical/crud/InsertRowPlan.java   |   55 +-
 .../physical/crud/InsertRowsOfOneDevicePlan.java   |   23 +-
 .../iotdb/db/qp/physical/crud/InsertRowsPlan.java  |    9 +-
 .../db/qp/physical/crud/InsertTabletPlan.java      |   32 +-
 .../iotdb/db/qp/physical/crud/LastQueryPlan.java   |    1 -
 .../iotdb/db/qp/physical/crud/QueryPlan.java       |   32 +-
 .../db/qp/physical/crud/RawDataQueryPlan.java      |   59 +-
 .../iotdb/db/qp/physical/crud/SelectIntoPlan.java  |    7 +-
 .../db/qp/physical/crud/SetSchemaTemplatePlan.java |   94 -
 .../apache/iotdb/db/qp/physical/crud/UDTFPlan.java |   31 +-
 .../qp/physical/crud/UnsetSchemaTemplatePlan.java  |   96 -
 .../db/qp/physical/sys/ActivateTemplatePlan.java   |   83 +
 .../db/qp/physical/sys/AlterTimeSeriesPlan.java    |    2 +-
 .../db/qp/physical/sys/AppendTemplatePlan.java     |  218 ++
 .../iotdb/db/qp/physical/sys/AuthorPlan.java       |    4 +-
 .../qp/physical/sys/AutoCreateDeviceMNodePlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/ChangeAliasPlan.java  |    4 +-
 .../db/qp/physical/sys/ChangeTagOffsetPlan.java    |    4 +-
 .../iotdb/db/qp/physical/sys/ClearCachePlan.java   |    4 +-
 .../apache/iotdb/db/qp/physical/sys/CountPlan.java |    2 +-
 .../physical/sys/CreateAlignedTimeSeriesPlan.java  |   39 +-
 .../qp/physical/sys/CreateContinuousQueryPlan.java |    4 +-
 .../db/qp/physical/sys/CreateFunctionPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/CreateIndexPlan.java  |    4 +-
 .../qp/physical/sys/CreateMultiTimeSeriesPlan.java |    5 +-
 .../db/qp/physical/sys/CreateSnapshotPlan.java     |    4 +-
 .../db/qp/physical/sys/CreateTemplatePlan.java     |  515 ++++
 .../db/qp/physical/sys/CreateTimeSeriesPlan.java   |    4 +-
 .../db/qp/physical/sys/CreateTriggerPlan.java      |    4 +-
 .../iotdb/db/qp/physical/sys/DataAuthPlan.java     |    4 +-
 .../db/qp/physical/sys/DeleteStorageGroupPlan.java |    4 +-
 .../db/qp/physical/sys/DeleteTimeSeriesPlan.java   |    4 +-
 .../qp/physical/sys/DropContinuousQueryPlan.java   |    4 +-
 .../iotdb/db/qp/physical/sys/DropFunctionPlan.java |    2 +-
 .../iotdb/db/qp/physical/sys/DropIndexPlan.java    |    4 +-
 .../iotdb/db/qp/physical/sys/DropTriggerPlan.java  |    4 +-
 .../apache/iotdb/db/qp/physical/sys/DummyPlan.java |    5 +-
 .../apache/iotdb/db/qp/physical/sys/FlushPlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/KillQueryPlan.java    |    2 +-
 .../db/qp/physical/sys/LoadConfigurationPlan.java  |    2 +-
 .../iotdb/db/qp/physical/sys/LoadDataPlan.java     |    2 +-
 .../apache/iotdb/db/qp/physical/sys/LogPlan.java   |    2 +-
 .../apache/iotdb/db/qp/physical/sys/MNodePlan.java |    4 +-
 .../db/qp/physical/sys/MeasurementMNodePlan.java   |    4 +-
 .../apache/iotdb/db/qp/physical/sys/MergePlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/OperateFilePlan.java  |    2 +-
 .../db/qp/physical/sys/PruneTemplatePlan.java      |  107 +
 .../db/qp/physical/sys/SetStorageGroupPlan.java    |    4 +-
 .../db/qp/physical/sys/SetSystemModePlan.java      |    4 +-
 .../iotdb/db/qp/physical/sys/SetTTLPlan.java       |    4 +-
 .../iotdb/db/qp/physical/sys/SetTemplatePlan.java  |   94 +
 .../physical/sys/SetUsingSchemaTemplatePlan.java   |   83 -
 .../iotdb/db/qp/physical/sys/SettlePlan.java       |    2 +-
 .../db/qp/physical/sys/ShowChildNodesPlan.java     |    2 +-
 .../db/qp/physical/sys/ShowChildPathsPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/ShowDevicesPlan.java  |    2 +-
 .../iotdb/db/qp/physical/sys/ShowLockInfoPlan.java |    2 +-
 .../apache/iotdb/db/qp/physical/sys/ShowPlan.java  |    2 +-
 .../db/qp/physical/sys/ShowStorageGroupPlan.java   |    2 +-
 .../iotdb/db/qp/physical/sys/ShowTTLPlan.java      |    2 +-
 .../db/qp/physical/sys/ShowTimeSeriesPlan.java     |    2 +-
 .../iotdb/db/qp/physical/sys/StartTriggerPlan.java |    4 +-
 .../iotdb/db/qp/physical/sys/StopTriggerPlan.java  |    4 +-
 .../db/qp/physical/sys/StorageGroupMNodePlan.java  |    4 +-
 .../iotdb/db/qp/physical/sys/TracingPlan.java      |    2 +-
 .../db/qp/physical/sys/UnsetTemplatePlan.java      |   96 +
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    |  376 ++-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |    2 +-
 .../iotdb/db/qp/strategy/PhysicalGenerator.java    |   12 +-
 .../qp/strategy/optimizer/ConcatPathOptimizer.java |   21 +-
 .../optimizer/MergeSingleFilterOptimizer.java      |    2 +-
 .../qp/strategy/optimizer/RemoveNotOptimizer.java  |    2 +-
 .../apache/iotdb/db/qp/utils/DatetimeUtils.java    |   12 +-
 .../iotdb/db/qp/utils/EmptyOutputStream.java       |   35 +
 .../iotdb/db/qp/utils/GroupByLevelController.java  |    4 +-
 .../apache/iotdb/db/qp/utils/WildcardsRemover.java |   27 +-
 .../db/query/aggregation/AggregateResult.java      |   14 +-
 .../db/query/aggregation/impl/AvgAggrResult.java   |    9 +-
 .../db/query/aggregation/impl/CountAggrResult.java |   10 +-
 .../query/aggregation/impl/ExtremeAggrResult.java  |    7 +-
 .../aggregation/impl/FirstValueAggrResult.java     |   19 +-
 .../aggregation/impl/FirstValueDescAggrResult.java |   12 +-
 .../aggregation/impl/LastValueAggrResult.java      |    7 +-
 .../aggregation/impl/LastValueDescAggrResult.java  |   12 +-
 .../query/aggregation/impl/MaxTimeAggrResult.java  |    5 +-
 .../aggregation/impl/MaxTimeDescAggrResult.java    |   10 +-
 .../query/aggregation/impl/MaxValueAggrResult.java |   10 +-
 .../query/aggregation/impl/MinTimeAggrResult.java  |   10 +-
 .../aggregation/impl/MinTimeDescAggrResult.java    |   10 +-
 .../query/aggregation/impl/MinValueAggrResult.java |   10 +-
 .../db/query/aggregation/impl/SumAggrResult.java   |    9 +-
 .../iotdb/db/query/context/QueryContext.java       |   21 +-
 .../iotdb/db/query/control/FileReaderManager.java  |  110 +-
 .../iotdb/db/query/control/QueryFileManager.java   |   38 +-
 .../db/query/control/QueryResourceManager.java     |   11 +-
 .../iotdb/db/query/control/SessionManager.java     |    2 +-
 .../db/query/control/SessionTimeoutManager.java    |   17 +-
 .../db/query/dataset/AlignByDeviceDataSet.java     |   71 +-
 .../apache/iotdb/db/query/dataset/ListDataSet.java |    2 +-
 .../db/query/dataset/NonAlignEngineDataSet.java    |    2 +-
 .../dataset/RawQueryDataSetWithValueFilter.java    |   19 +-
 .../dataset/RawQueryDataSetWithoutValueFilter.java |   42 +-
 .../query/dataset/ShowContinuousQueriesResult.java |    2 +-
 .../iotdb/db/query/dataset/ShowDevicesDataSet.java |    2 +-
 .../db/query/dataset/ShowTimeseriesDataSet.java    |    2 +-
 .../iotdb/db/query/dataset/SingleDataSet.java      |    6 +-
 .../db/query/dataset/UDTFAlignByTimeDataSet.java   |    2 +
 .../apache/iotdb/db/query/dataset/UDTFDataSet.java |    2 +-
 .../dataset/groupby/GroupByEngineDataSet.java      |  159 +-
 .../query/dataset/groupby/GroupByFillDataSet.java  |  220 --
 .../dataset/groupby/GroupByFillEngineDataSet.java  |  412 +++
 .../groupby/GroupByFillWithValueFilterDataSet.java |  438 ++++
 .../GroupByFillWithoutValueFilterDataSet.java      |  258 ++
 .../query/dataset/groupby/GroupByLevelDataSet.java |    6 +-
 .../groupby/GroupByWithValueFilterDataSet.java     |   16 +-
 .../groupby/GroupByWithoutValueFilterDataSet.java  |   11 +-
 .../dataset/groupby/LocalGroupByExecutor.java      |    2 +-
 .../db/query/executor/AggregationExecutor.java     |  155 +-
 .../iotdb/db/query/executor/FillQueryExecutor.java |    5 +-
 .../iotdb/db/query/executor/LastQueryExecutor.java |   61 +-
 .../iotdb/db/query/executor/QueryRouter.java       |   82 +-
 .../db/query/executor/RawDataQueryExecutor.java    |    8 +-
 .../executor/fill/AlignedLastPointReader.java      |   58 +
 .../apache/iotdb/db/query/executor/fill/IFill.java |   88 +-
 .../db/query/executor/fill/LastPointReader.java    |   56 +-
 .../iotdb/db/query/executor/fill/LinearFill.java   |   83 +-
 .../iotdb/db/query/executor/fill/PreviousFill.java |   45 +-
 .../iotdb/db/query/executor/fill/ValueFill.java    |    6 +-
 .../iotdb/db/query/expression/Expression.java      |   50 +-
 .../iotdb/db/query/expression/ResultColumn.java    |   15 +-
 .../query/expression/binary/BinaryExpression.java  |   30 +-
 .../db/query/expression/unary/ConstantOperand.java |  111 +
 .../query/expression/unary/FunctionExpression.java |   14 +-
 .../query/expression/unary/NegationExpression.java |   14 +-
 .../query/expression/unary/TimeSeriesOperand.java  |   14 +-
 .../iotdb/db/query/pool/QueryTaskPoolManager.java  |   10 +-
 .../query/reader/chunk/DiskAlignedChunkLoader.java |   67 +
 .../db/query/reader/chunk/DiskChunkLoader.java     |   12 +
 .../query/reader/chunk/MemAlignedChunkLoader.java  |   52 +
 .../query/reader/chunk/MemAlignedChunkReader.java  |  110 +
 .../query/reader/chunk/MemAlignedPageReader.java   |  109 +
 .../db/query/reader/chunk/MemChunkLoader.java      |    8 +-
 .../iotdb/db/query/reader/chunk/MemPageReader.java |   10 +-
 .../metadata/DiskAlignedChunkMetadataLoader.java   |  109 +
 .../chunk/metadata/DiskChunkMetadataLoader.java    |   68 +-
 .../metadata/MemAlignedChunkMetadataLoader.java    |   89 +
 .../chunk/metadata/MemChunkMetadataLoader.java     |   31 +-
 .../series/AlignedSeriesAggregateReader.java       |  201 ++
 .../query/reader/series/AlignedSeriesReader.java   |  109 +
 .../query/reader/series/SeriesAggregateReader.java |    5 +-
 .../reader/series/SeriesRawDataBatchReader.java    |    8 +-
 .../iotdb/db/query/reader/series/SeriesReader.java |  118 +-
 .../reader/series/SeriesReaderByTimestamp.java     |   23 +-
 .../reader/series/VectorSeriesAggregateReader.java |  177 --
 .../universal/AlignedDescPriorityMergeReader.java  |   39 +
 .../universal/AlignedPriorityMergeReader.java      |   51 +
 .../reader/universal/PriorityMergeReader.java      |   20 +-
 .../query/timegenerator/ServerTimeGenerator.java   |   29 +-
 .../api/customizer/parameter/UDFParameters.java    |    2 +-
 .../db/query/udf/builtin/BuiltinFunction.java      |    1 +
 .../iotdb/db/query/udf/builtin/UDTFCast.java       |  259 ++
 .../db/query/udf/core/executor/UDTFExecutor.java   |    6 +
 .../udf/core/layer/ConstantIntermediateLayer.java  |   66 +
 .../layer/MultiInputColumnIntermediateLayer.java   |    8 +-
 .../query/udf/core/layer/RawQueryInputLayer.java   |    7 +-
 ...InputColumnMultiReferenceIntermediateLayer.java |    5 +
 ...nputColumnSingleReferenceIntermediateLayer.java |    4 +
 .../udf/core/reader/ConstantLayerPointReader.java  |  132 +
 .../db/query/udf/core/reader/LayerPointReader.java |    2 +
 .../transformer/ArithmeticBinaryTransformer.java   |   17 +
 .../transformer/ArithmeticNegationTransformer.java |    5 +
 .../udf/core/transformer/UDFQueryTransformer.java  |    5 +
 .../tv/ElasticSerializableTVList.java              |    5 +
 .../iotdb/db/rescon/AbstractPoolManager.java       |   11 +
 .../apache/iotdb/db/rescon/TVListAllocator.java    |   19 +-
 .../java/org/apache/iotdb/db/rest/RestService.java |  156 ++
 .../iotdb/db/rest/filter/ApiOriginFilter.java      |   45 +
 .../iotdb/db/rest/filter/AuthorizationFilter.java  |  125 +
 .../iotdb/db/rest/filter/BasicSecurityContext.java |   56 +
 .../java/org/apache/iotdb/db/rest/filter/User.java |   38 +
 .../org/apache/iotdb/db/rest/filter/UserCache.java |   56 +
 .../db/rest/handler/AuthorizationHandler.java      |   56 +
 .../iotdb/db/rest/handler/ExceptionHandler.java    |   69 +
 .../handler/PhysicalPlanConstructionHandler.java   |  156 ++
 .../iotdb/db/rest/handler/QueryDataSetHandler.java |   95 +
 .../db/rest/handler/RequestValidationHandler.java  |   39 +
 .../iotdb/db/rest/impl/PingApiServiceImpl.java     |   37 +
 .../iotdb/db/rest/impl/RestApiServiceImpl.java     |  149 ++
 .../java/org/apache/iotdb/db/service/IoTDB.java    |   17 +-
 .../apache/iotdb/db/service/MetricsService.java    |    4 +-
 .../org/apache/iotdb/db/service/RPCService.java    |   14 +-
 .../iotdb/db/service/RPCServiceThriftHandler.java  |    2 +-
 .../org/apache/iotdb/db/service/ServiceType.java   |   11 +-
 .../org/apache/iotdb/db/service/SettleService.java |    2 +-
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  564 ++---
 .../org/apache/iotdb/db/service/UpgradeSevice.java |    9 +-
 .../db/service/basic/BasicOpenSessionResp.java     |   34 +
 .../db/service/basic/BasicServiceProvider.java     |  263 ++
 .../db/service/basic/QueryFrequencyRecorder.java   |   54 +
 .../iotdb/db/service/thrift/ThriftService.java     |   22 +-
 .../db/service/thrift/ThriftServiceThread.java     |  213 +-
 .../iotdb/db/sync/receiver/SyncServerManager.java  |    6 +
 .../db/sync/receiver/transfer/SyncServiceImpl.java |   14 +-
 .../iotdb/db/sync/sender/transfer/SyncClient.java  |   23 +-
 .../apache/iotdb/db/tools/IoTDBDataDirViewer.java  |    4 +-
 .../apache/iotdb/db/tools/TsFileRewriteTool.java   |   14 +-
 .../org/apache/iotdb/db/tools/mlog/MLogParser.java |   25 +-
 .../db/tools/settle/TsFileAndModSettleTool.java    |    6 +-
 .../db/tools/virtualsg/DeviceMappingViewer.java    |    2 +-
 .../iotdb/db/tools/vis/TsFileExtractVisdata.java   |    2 +-
 .../db/tools/watermark/WatermarkDetector.java      |    4 +-
 .../iotdb/db/utils/AlignedValueIterator.java       |   58 +
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  347 +++
 .../apache/iotdb/db/utils/ErrorHandlingUtils.java  |  152 ++
 .../org/apache/iotdb/db/utils/FileLoaderUtils.java |  157 +-
 .../java/org/apache/iotdb/db/utils/MemUtils.java   |   72 +-
 .../java/org/apache/iotdb/db/utils/MergeUtils.java |   37 +-
 .../apache/iotdb/db/utils/QueryDataSetUtils.java   |    3 +-
 .../java/org/apache/iotdb/db/utils/QueryUtils.java |   72 +-
 .../org/apache/iotdb/db/utils/SchemaTestUtils.java |   39 +
 .../org/apache/iotdb/db/utils/SchemaUtils.java     |   16 +-
 .../org/apache/iotdb/db/utils/SerializeUtils.java  |   77 +-
 .../org/apache/iotdb/db/utils/ValueIterator.java   |   56 +
 .../db/utils/datastructure/AlignedTVList.java      |  989 ++++++++
 .../iotdb/db/utils/datastructure/TVList.java       |   82 +-
 .../iotdb/db/utils/datastructure/VectorTVList.java |  718 ------
 .../writelog/manager/MultiFileLogNodeManager.java  |    5 +-
 .../db/writelog/node/ExclusiveWriteLogNode.java    |   21 +-
 .../iotdb/db/writelog/recover/LogReplayer.java     |   50 +-
 .../apache/iotdb/db/auth/AuthorityCheckerTest.java |    2 +-
 .../org/apache/iotdb/db/constant/TestConstant.java |  140 --
 .../iotdb/db/engine/MetadataManagerHelper.java     |    2 +-
 .../db/engine/cache/BloomFilterCacheTest.java      |  208 ++
 .../iotdb/db/engine/cache/ChunkCacheTest.java      |   12 +-
 .../engine/compaction/CompactionSchedulerTest.java |   20 +-
 .../compaction/CompactionTaskManagerTest.java      |  252 ++
 .../db/engine/compaction/TsFileIdentifierUT.java   |  194 ++
 .../compaction/cross/CrossSpaceCompactionTest.java |    2 +-
 .../engine/compaction/cross/MergeOverLapTest.java  |   12 +-
 .../db/engine/compaction/cross/MergeTaskTest.java  |   40 +-
 .../db/engine/compaction/cross/MergeTest.java      |    6 +-
 .../engine/compaction/cross/MergeUpgradeTest.java  |    3 +-
 .../compaction/inner/InnerCompactionCacheTest.java |  148 --
 .../compaction/inner/InnerCompactionChunkTest.java |    4 +-
 .../compaction/inner/InnerCompactionLogTest.java   |    4 +-
 .../inner/InnerCompactionMoreDataTest.java         |   16 +-
 .../inner/InnerCompactionSchedulerTest.java        |    4 +-
 .../compaction/inner/InnerCompactionTest.java      |   14 +-
 .../compaction/inner/InnerSeqCompactionTest.java   |   23 +-
 .../inner/InnerSpaceCompactionUtilsTest.java       |   21 +-
 .../compaction/inner/InnerUnseqCompactionTest.java |    9 +-
 .../SizeTieredCompactionRecoverTest.java           |  376 ++-
 .../inner/sizetiered/SizeTieredCompactionTest.java |    3 +-
 .../recover/SizeTieredCompactionRecoverTest.java   |  732 ++++++
 .../task/FakedInnerSpaceCompactionTask.java        |   44 +-
 .../compaction/utils/CompactionCheckerUtils.java   |    2 +-
 .../compaction/utils/CompactionClearUtils.java     |    1 -
 .../utils/CompactionFileGeneratorUtils.java        |   11 +-
 .../db/engine/memtable/MemTableFlushTaskTest.java  |   22 +-
 .../db/engine/memtable/MemTableTestUtils.java      |   24 +-
 .../db/engine/memtable/MemtableBenchmark.java      |    7 +-
 .../db/engine/memtable/PrimitiveMemTableTest.java  |  291 ++-
 .../engine/modification/DeletionFileNodeTest.java  |   17 +-
 .../db/engine/modification/DeletionQueryTest.java  |  101 +-
 .../engine/modification/ModificationFileTest.java  |    2 +-
 .../io/LocalTextModificationAccessorTest.java      |   51 +-
 .../engine/storagegroup/FakedTsFileResource.java   |   11 +
 .../storagegroup/FileNodeManagerBenchmark.java     |    2 +-
 .../storagegroup/StorageGroupProcessorTest.java    |   29 +-
 .../iotdb/db/engine/storagegroup/TTLTest.java      |   18 +-
 .../engine/storagegroup/TsFileProcessorTest.java   |  123 +-
 .../virtualSg/HashVirtualPartitionerTest.java      |    2 +-
 .../iotdb/db/integration/IOTDBGroupByIT.java       | 1007 --------
 .../integration/IOTDBGroupByInnerIntervalIT.java   |  341 ---
 .../db/integration/IOTDBInsertAlignedValuesIT.java |  219 --
 .../apache/iotdb/db/integration/IOTDBInsertIT.java |  126 -
 .../apache/iotdb/db/integration/IoTDBAliasIT.java  |  338 ---
 .../iotdb/db/integration/IoTDBAlignByDeviceIT.java | 1307 ----------
 .../iotdb/db/integration/IoTDBArithmeticIT.java    |  284 ---
 .../org/apache/iotdb/db/integration/IoTDBAsIT.java |  610 -----
 .../db/integration/IoTDBAutoCreateSchemaIT.java    |  206 --
 .../iotdb/db/integration/IoTDBCheckConfigIT.java   |  161 --
 .../iotdb/db/integration/IoTDBClearCacheIT.java    |  175 --
 .../apache/iotdb/db/integration/IoTDBCloseIT.java  |  197 --
 .../iotdb/db/integration/IoTDBCompleteIT.java      |  488 ----
 .../iotdb/db/integration/IoTDBCompressTypeIT.java  |  104 -
 .../db/integration/IoTDBContinuousQueryIT.java     |  413 ---
 .../db/integration/IoTDBCreateSnapshotIT.java      |  187 --
 .../db/integration/IoTDBCreateStorageGroupIT.java  |  130 -
 .../db/integration/IoTDBCreateTimeseriesIT.java    |  167 --
 .../apache/iotdb/db/integration/IoTDBDaemonIT.java |  470 ----
 .../db/integration/IoTDBDeleteStorageGroupIT.java  |  169 --
 .../db/integration/IoTDBDeleteTimeseriesIT.java    |  221 --
 .../iotdb/db/integration/IoTDBDeletionIT.java      |  516 ----
 .../iotdb/db/integration/IoTDBDisableAlignIT.java  |  414 ---
 .../iotdb/db/integration/IoTDBEncodingIT.java      |  347 ---
 .../db/integration/IoTDBEngineTimeGeneratorIT.java |  283 ---
 .../iotdb/db/integration/IoTDBExecuteBatchIT.java  |  197 --
 .../iotdb/db/integration/IoTDBFilePathUtilsIT.java |  112 -
 .../apache/iotdb/db/integration/IoTDBFillIT.java   |  940 -------
 .../db/integration/IoTDBFloatPrecisionIT.java      |  174 --
 .../db/integration/IoTDBFlushQueryMergeIT.java     |  216 --
 .../iotdb/db/integration/IoTDBFuzzyQueryIT.java    |  292 ---
 .../iotdb/db/integration/IoTDBGroupByFillIT.java   |  825 ------
 .../integration/IoTDBGroupByFillWithRangeIT.java   |  182 --
 .../iotdb/db/integration/IoTDBGroupByMonthIT.java  |  279 ---
 .../iotdb/db/integration/IoTDBGroupByUnseqIT.java  |  185 --
 .../org/apache/iotdb/db/integration/IoTDBInIT.java |  255 --
 .../db/integration/IoTDBInsertMultiRowIT.java      |  125 -
 .../iotdb/db/integration/IoTDBInsertNaNIT.java     |  203 --
 .../db/integration/IoTDBInsertWithQueryIT.java     |  532 ----
 .../db/integration/IoTDBInsertWithoutTimeIT.java   |  129 -
 .../iotdb/db/integration/IoTDBKillQueryIT.java     |   81 -
 .../iotdb/db/integration/IoTDBLargeDataIT.java     |  388 ---
 .../apache/iotdb/db/integration/IoTDBLastIT.java   |  584 -----
 .../iotdb/db/integration/IoTDBLimitSlimitIT.java   |  208 --
 ...IoTDBLoadExternalTsFileWithTimePartitionIT.java |  327 ---
 .../db/integration/IoTDBLoadExternalTsfileIT.java  |  822 ------
 .../integration/IoTDBManageTsFileResourceIT.java   |  292 ---
 .../apache/iotdb/db/integration/IoTDBMergeIT.java  |  339 ---
 .../iotdb/db/integration/IoTDBMetadataFetchIT.java |  631 -----
 .../iotdb/db/integration/IoTDBMultiDeviceIT.java   |  299 ---
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        |  115 -
 .../db/integration/IoTDBMultiOverlappedPageIT.java |  173 --
 .../iotdb/db/integration/IoTDBMultiSeriesIT.java   |  504 ----
 .../db/integration/IoTDBMultiStatementsIT.java     |  194 --
 .../iotdb/db/integration/IoTDBNestedQueryIT.java   |  410 ---
 .../db/integration/IoTDBNewTsFileCompactionIT.java | 1064 --------
 .../iotdb/db/integration/IoTDBNumberPathIT.java    |  484 ----
 .../db/integration/IoTDBOverlappedPageIT.java      |  203 --
 .../iotdb/db/integration/IoTDBQueryDemoIT.java     |  707 ------
 .../db/integration/IoTDBQueryMemoryControlIT.java  |  294 ---
 .../iotdb/db/integration/IoTDBQueryTimeoutIT.java  |  153 --
 .../iotdb/db/integration/IoTDBQuotedPathIT.java    |  146 --
 .../iotdb/db/integration/IoTDBRecoverIT.java       |  435 ----
 .../db/integration/IoTDBRecoverUnclosedIT.java     |  288 ---
 .../db/integration/IoTDBRemovePartitionIT.java     |  330 ---
 .../iotdb/db/integration/IoTDBRestartIT.java       |  459 ----
 .../iotdb/db/integration/IoTDBResultSetIT.java     |  126 -
 .../db/integration/IoTDBRpcCompressionIT.java      |  151 --
 .../IoTDBSameMeasurementsDifferentTypesIT.java     |  186 --
 .../iotdb/db/integration/IoTDBSelectIntoIT.java    |  670 -----
 .../iotdb/db/integration/IoTDBSensorUpdateIT.java  |   85 -
 .../db/integration/IoTDBSequenceDataQueryIT.java   |  335 ---
 .../iotdb/db/integration/IoTDBSeriesReaderIT.java  |  457 ----
 .../db/integration/IoTDBSessionTimeoutIT.java      |   82 -
 .../IoTDBSetSystemReadOnlyWritableIT.java          |  266 --
 .../apache/iotdb/db/integration/IoTDBSettleIT.java |   94 -
 .../iotdb/db/integration/IoTDBSimpleQueryIT.java   | 1361 ----------
 .../integration/IoTDBSizeTieredCompactionIT.java   | 1386 ----------
 .../integration/IoTDBSortedShowTimeseriesIT.java   |  335 ---
 .../iotdb/db/integration/IoTDBTagAlterIT.java      |  640 -----
 .../apache/iotdb/db/integration/IoTDBTagIT.java    | 1166 ---------
 .../iotdb/db/integration/IoTDBTimePartitionIT.java |   92 -
 .../iotdb/db/integration/IoTDBTimeZoneIT.java      |  163 --
 .../iotdb/db/integration/IoTDBTracingIT.java       |   88 -
 .../db/integration/IoTDBTriggerExecutionIT.java    |  614 -----
 .../db/integration/IoTDBTriggerManagementIT.java   |  500 ----
 .../apache/iotdb/db/integration/IoTDBTtlIT.java    |  230 --
 .../iotdb/db/integration/IoTDBUDFManagementIT.java |  393 ---
 .../db/integration/IoTDBUDFWindowQueryIT.java      |  562 -----
 .../integration/IoTDBUDTFAlignByTimeQueryIT.java   |  867 -------
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java |  367 ---
 .../db/integration/IoTDBUDTFHybridQueryIT.java     |  184 --
 .../db/integration/IoTDBUDTFNonAlignQueryIT.java   |  374 ---
 .../iotdb/db/integration/IoTDBVersionIT.java       |   70 -
 .../db/integration/IoTDBWithoutAllNullIT.java      |  264 --
 .../db/integration/IoTDBWithoutAnyNullIT.java      |  221 --
 .../aggregation/IoTDBAggregationByLevelIT.java     |  534 ----
 .../aggregation/IoTDBAggregationDeleteIT.java      |   91 -
 .../aggregation/IoTDBAggregationIT.java            | 1083 --------
 .../aggregation/IoTDBAggregationLargeDataIT.java   | 1048 --------
 .../aggregation/IoTDBAggregationSmallDataIT.java   |  855 -------
 .../db/integration/auth/IoTDBAuthorizationIT.java  | 1151 ---------
 .../iotdb/db/metadata/MManagerAdvancedTest.java    |   30 +-
 .../iotdb/db/metadata/MManagerBasicTest.java       |  504 ++--
 .../iotdb/db/metadata/MManagerImproveTest.java     |    1 +
 .../org/apache/iotdb/db/metadata/MTreeTest.java    |   24 +-
 .../apache/iotdb/db/metadata/MetaUtilsTest.java    |   31 +
 .../apache/iotdb/db/metadata/PartialPathTest.java  |    1 +
 .../org/apache/iotdb/db/metadata/TemplateTest.java |  252 ++
 .../iotdb/db/metadata/mlog/MLogUpgraderTest.java   |   74 +-
 .../apache/iotdb/db/mqtt/PublishHandlerTest.java   |   75 +-
 .../java/org/apache/iotdb/db/qp/PlannerTest.java   |    4 +-
 .../iotdb/db/qp/logical/LogicalPlanSmallTest.java  |    2 +-
 .../iotdb/db/qp/other/TSPlanContextAuthorTest.java |    2 +-
 .../iotdb/db/qp/physical/ConcatOptimizerTest.java  |    2 +-
 .../iotdb/db/qp/physical/InsertRowPlanTest.java    |  200 +-
 .../qp/physical/InsertRowsOfOneDevicePlanTest.java |    2 +-
 .../db/qp/physical/InsertTabletMultiPlanTest.java  |    2 +-
 .../iotdb/db/qp/physical/InsertTabletPlanTest.java |  228 +-
 .../db/qp/physical/PhysicalPlanSerializeTest.java  |    4 +-
 .../iotdb/db/qp/physical/PhysicalPlanTest.java     |  150 +-
 .../iotdb/db/qp/physical/SerializationTest.java    |    2 +-
 .../query/aggregation/DescAggregateResultTest.java |   63 +
 .../db/query/control/FileReaderManagerTest.java    |   19 +-
 .../query/dataset/UDTFAlignByTimeDataSetTest.java  |    2 +-
 .../dataset/groupby/GroupByFillDataSetTest.java    |    2 +-
 .../reader/series/SeriesAggregateReaderTest.java   |    9 +-
 .../reader/series/SeriesReaderByTimestampTest.java |    7 +-
 .../db/query/reader/series/SeriesReaderTest.java   |    2 +-
 .../query/reader/series/SeriesReaderTestUtil.java  |    8 +-
 .../universal/AlignedPriorityMergeReaderTest.java  |   91 +
 .../iotdb/db/query/udf/example/Accumulator.java    |  103 -
 .../iotdb/db/rescon/ResourceManagerTest.java       |    6 +-
 .../apache/iotdb/db/rest/IoTDBRestServiceIT.java   |  280 +++
 .../org/apache/iotdb/db/sink/MQTTSinkTest.java     |    2 +-
 .../db/sync/receiver/load/FileLoaderTest.java      |    2 +-
 .../recover/SyncReceiverLogAnalyzerTest.java       |    2 +-
 .../db/sync/sender/manage/SyncFileManagerTest.java |    2 +-
 .../sender/recover/SyncSenderLogAnalyzerTest.java  |    2 +-
 .../org/apache/iotdb/db/tools/MLogParserTest.java  |   33 +-
 .../iotdb/db/tools/TsFileAndModSettleToolTest.java |    4 +-
 .../iotdb/db/tools/TsFileSketchToolTest.java       |   17 +-
 .../org/apache/iotdb/db/tools/WalCheckerTest.java  |    2 +-
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |  345 ---
 .../org/apache/iotdb/db/utils/MemUtilsTest.java    |   12 +-
 .../org/apache/iotdb/db/utils/SchemaUtilsTest.java |    2 +-
 .../apache/iotdb/db/utils/SerializeUtilsTest.java  |  743 ++++++
 .../iotdb/db/utils/TsFileRewriteToolTest.java      |   15 +-
 .../db/utils/datastructure/VectorTVListTest.java   |   65 +-
 .../apache/iotdb/db/writelog/PerformanceTest.java  |    2 +-
 .../iotdb/db/writelog/WriteLogNodeManagerTest.java |    2 +-
 .../apache/iotdb/db/writelog/WriteLogNodeTest.java |  103 +-
 .../iotdb/db/writelog/io/LogWriterReaderTest.java  |    2 +-
 .../db/writelog/io/MultiFileLogReaderTest.java     |    2 +-
 .../db/writelog/recover/DeviceStringTest.java      |    8 +-
 .../iotdb/db/writelog/recover/LogReplayerTest.java |   27 +-
 .../recover/RecoverResourceFromReaderTest.java     |   10 +-
 .../db/writelog/recover/SeqTsFileRecoverTest.java  |   32 +-
 .../writelog/recover/UnseqTsFileRecoverTest.java   |   10 +-
 server/src/test/resources/iotdb-rest.properties    |   55 +
 .../org/apache/iotdb/rpc/RpcTransportFactory.java  |   36 +-
 .../main/java/org/apache/iotdb/rpc/RpcUtils.java   |    7 +-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |    6 +-
 .../java/org/apache/iotdb/session/Session.java     |  366 ++-
 .../apache/iotdb/session/SessionConnection.java    |   72 +-
 .../org/apache/iotdb/session/SessionDataSet.java   |    7 +-
 .../org/apache/iotdb/session/pool/SessionPool.java |  301 ++-
 .../iotdb/session/template/InternalNode.java       |   59 +
 .../iotdb/session/template/MeasurementNode.java    |   67 +
 .../apache/iotdb/session/template/Template.java    |  126 +
 .../iotdb/session/template/TemplateNode.java       |   55 +
 .../iotdb/session/template/TemplateQueryType.java  |   27 +
 .../iotdb/session/IoTDBSessionComplexIT.java       |  927 -------
 .../session/IoTDBSessionDisableMemControlIT.java   |  205 ++
 .../iotdb/session/IoTDBSessionIteratorIT.java      |  351 ---
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java | 1149 ---------
 .../session/IoTDBSessionVectorABDeviceIT.java      |   78 +-
 .../session/IoTDBSessionVectorAggregationIT.java   |   15 +-
 .../IoTDBSessionVectorAggregationWithUnSeqIT.java  |    4 +-
 .../iotdb/session/IoTDBSessionVectorInsertIT.java  |   93 +-
 .../java/org/apache/iotdb/session/SessionTest.java |  229 +-
 .../apache/iotdb/session/template/TemplateUT.java  |  103 +
 session/src/test/resources/iotdb-rest.properties   |   55 +
 site/pom.xml                                       |  158 +-
 site/src/main/.vuepress/config.js                  |    6 +-
 .../apache/iotdb/spark/db/EnvironmentUtils.java    |    2 +
 .../org/apache/iotdb/spark/tsfile/qp/Executor.java |    4 +-
 .../apache/iotdb/spark/tsfile/DefaultSource.scala  |    6 +-
 .../iotdb/spark/tsfile/NarrowConverter.scala       |    2 +-
 .../apache/iotdb/spark/tsfile/WideConverter.scala  |    2 +-
 .../org/apache/iotdb/spark/tool/TsFileExample.java |   29 +-
 .../apache/iotdb/spark/tool/TsFileWriteTool.java   |   87 +-
 .../test/java/org/apache/iotdb/db/sql/Cases.java   |   76 +-
 testcontainer/src/tool/README.md                   |   33 +
 testcontainer/src/tool/parser.py                   |   79 +
 thrift-cluster/src/main/thrift/cluster.thrift      |   15 +-
 thrift/rpc-changelist.md                           |   16 +-
 thrift/src/main/thrift/rpc.thrift                  |   43 +-
 tsfile/pom.xml                                     |    6 +-
 .../iotdb/tsfile/common/cache/Accountable.java     |   26 -
 .../apache/iotdb/tsfile/compress/ICompressor.java  |   58 +-
 .../compress/GZIPCompressOverflowException.java    |   26 +
 .../iotdb/tsfile/file/header/PageHeader.java       |   12 +
 .../tsfile/file/metadata/AlignedChunkMetadata.java |  198 ++
 .../file/metadata/AlignedTimeSeriesMetadata.java   |  142 ++
 .../iotdb/tsfile/file/metadata/ChunkMetadata.java  |   42 +-
 .../iotdb/tsfile/file/metadata/IChunkMetadata.java |    4 -
 .../tsfile/file/metadata/ITimeSeriesMetadata.java  |    3 +-
 .../file/metadata/MetadataIndexConstructor.java    |    6 +-
 .../tsfile/file/metadata/TimeseriesMetadata.java   |   24 +-
 .../tsfile/file/metadata/VectorChunkMetadata.java  |  208 --
 .../file/metadata/VectorTimeSeriesMetadata.java    |  131 -
 .../fileOutputFactory/LocalFSOutputFactory.java    |    7 +-
 .../apache/iotdb/tsfile/read/ReadOnlyTsFile.java   |   60 -
 .../org/apache/iotdb/tsfile/read/TsFileReader.java |   60 +
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  222 +-
 .../apache/iotdb/tsfile/read/common/BatchData.java |  123 +-
 .../org/apache/iotdb/tsfile/read/common/Chunk.java |   13 +-
 .../tsfile/read/common/DescReadWriteBatchData.java |   89 +
 .../tsfile/read/common/ExceptionBatchData.java     |   10 +-
 .../org/apache/iotdb/tsfile/read/common/Field.java |   26 +
 .../org/apache/iotdb/tsfile/read/common/Path.java  |    7 +-
 .../apache/iotdb/tsfile/read/common/RowRecord.java |    6 +-
 .../read/controller/CachedChunkLoaderImpl.java     |   18 +
 .../iotdb/tsfile/read/controller/IChunkLoader.java |    5 +
 .../read/controller/IChunkMetadataLoader.java      |    4 +-
 .../read/controller/MetadataQuerierByFileImpl.java |   87 +-
 .../iotdb/tsfile/read/filter/GroupByFilter.java    |   20 +-
 .../tsfile/read/filter/GroupByMonthFilter.java     |  114 +-
 .../iotdb/tsfile/read/filter/TimeFilter.java       |   11 +
 .../tsfile/read/filter/basic/BinaryFilter.java     |    8 +
 .../tsfile/read/filter/factory/FilterFactory.java  |    8 +
 .../read/filter/factory/FilterSerializeId.java     |    1 +
 .../iotdb/tsfile/read/filter/operator/In.java      |   15 +-
 .../iotdb/tsfile/read/filter/operator/Like.java    |   12 +-
 .../query/dataset/DataSetWithTimeGenerator.java    |   15 +-
 .../query/dataset/DataSetWithoutTimeGenerator.java |   24 +-
 .../tsfile/read/query/dataset/QueryDataSet.java    |   12 +
 .../tsfile/read/reader/IAlignedPageReader.java     |   28 +
 .../iotdb/tsfile/read/reader/LocalTsFileInput.java |    5 +
 .../iotdb/tsfile/read/reader/TsFileInput.java      |    2 +
 .../read/reader/chunk/AlignedChunkReader.java      |  309 +++
 .../chunk/AlignedChunkReaderByTimestamp.java       |   47 +
 .../read/reader/chunk/VectorChunkReader.java       |  278 --
 .../tsfile/read/reader/page/AlignedPageReader.java |  152 ++
 .../iotdb/tsfile/read/reader/page/PageReader.java  |    1 -
 .../tsfile/read/reader/page/TimePageReader.java    |   17 +
 .../tsfile/read/reader/page/ValuePageReader.java   |    3 +
 .../tsfile/read/reader/page/VectorPageReader.java  |  133 -
 .../reader/series/AbstractFileSeriesReader.java    |    4 +-
 .../read/reader/series/FileSeriesReader.java       |   18 +-
 .../reader/series/FileSeriesReaderByTimestamp.java |   28 +-
 .../org/apache/iotdb/tsfile/utils/BloomFilter.java |   39 +
 .../apache/iotdb/tsfile/utils/FilePathUtils.java   |   41 +-
 .../iotdb/tsfile/utils/MeasurementGroup.java       |   65 +
 .../iotdb/tsfile/utils/ReadWriteIOUtils.java       |   15 +-
 .../apache/iotdb/tsfile/utils/StringContainer.java |    8 +-
 .../tsfile/v2/read/TsFileSequenceReaderForV2.java  |   21 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |  415 ++-
 .../write/chunk/AlignedChunkGroupWriterImpl.java   |  301 +++
 .../tsfile/write/chunk/AlignedChunkWriterImpl.java |  189 ++
 .../tsfile/write/chunk/ChunkGroupWriterImpl.java   |  241 --
 .../iotdb/tsfile/write/chunk/ChunkWriterImpl.java  |   41 +-
 .../tsfile/write/chunk/IChunkGroupWriter.java      |   17 +-
 .../iotdb/tsfile/write/chunk/IChunkWriter.java     |   45 -
 .../chunk/NonAlignedChunkGroupWriterImpl.java      |  188 ++
 .../iotdb/tsfile/write/chunk/TimeChunkWriter.java  |    4 +
 .../iotdb/tsfile/write/chunk/ValueChunkWriter.java |   67 +-
 .../tsfile/write/chunk/VectorChunkWriterImpl.java  |  204 --
 .../apache/iotdb/tsfile/write/page/PageWriter.java |    4 +
 .../iotdb/tsfile/write/page/TimePageWriter.java    |    4 +
 .../iotdb/tsfile/write/page/ValuePageWriter.java   |    8 +
 .../apache/iotdb/tsfile/write/record/Tablet.java   |   55 +-
 .../write/record/datapoint/BooleanDataPoint.java   |    6 +-
 .../tsfile/write/record/datapoint/DataPoint.java   |    9 +-
 .../write/record/datapoint/DoubleDataPoint.java    |    6 +-
 .../write/record/datapoint/FloatDataPoint.java     |    6 +-
 .../write/record/datapoint/IntDataPoint.java       |    6 +-
 .../write/record/datapoint/LongDataPoint.java      |    6 +-
 .../write/record/datapoint/StringDataPoint.java    |    6 +-
 .../tsfile/write/schema/IMeasurementSchema.java    |    2 +
 .../apache/iotdb/tsfile/write/schema/Schema.java   |   69 +-
 .../write/schema/UnaryMeasurementSchema.java       |    5 +
 .../write/schema/VectorMeasurementSchema.java      |   92 +-
 .../write/writer/RestorableTsFileIOWriter.java     |    6 +-
 .../iotdb/tsfile/write/writer/TsFileIOWriter.java  |   77 +-
 .../org/apache/iotdb/tsfile/compress/GZIPTest.java |   17 +-
 .../org/apache/iotdb/tsfile/compress/LZ4Test.java  |   17 +-
 .../apache/iotdb/tsfile/compress/SnappyTest.java   |   17 +-
 .../file/metadata/TimeSeriesMetadataTest.java      |  110 -
 .../file/metadata/TimeseriesMetadataTest.java      |  110 +
 .../iotdb/tsfile/read/ReadInPartitionTest.java     |    4 +-
 .../iotdb/tsfile/read/ReadOnlyTsFileTest.java      |  241 --
 .../org/apache/iotdb/tsfile/read/ReadTest.java     |    4 +-
 .../iotdb/tsfile/read/TimePlainEncodeReadTest.java |    4 +-
 .../tsfile/read/TimeSeriesMetadataReadTest.java    |    7 +-
 .../apache/iotdb/tsfile/read/TsFileReaderTest.java |  477 ++++
 .../tsfile/read/TsFileSequenceReaderTest.java      |    4 +-
 .../tsfile/read/filter/FilterSerializeTest.java    |   25 +-
 .../read/query/timegenerator/ReadWriteTest.java    |    6 +-
 .../timegenerator/TimeGeneratorReadEmptyTest.java  |    6 +-
 .../timegenerator/TimeGeneratorReadWriteTest.java  |    6 +-
 .../TsFileGeneratorForSeriesReaderByTimestamp.java |   23 +-
 .../apache/iotdb/tsfile/utils/FileGenerator.java   |   45 +-
 .../iotdb/tsfile/utils/ReadWriteIOUtilsTest.java   |   30 +-
 .../org/apache/iotdb/tsfile/utils/RecordUtils.java |   17 +-
 .../apache/iotdb/tsfile/utils/RecordUtilsTest.java |   13 +-
 .../iotdb/tsfile/utils/TsFileGeneratorForTest.java |  147 +-
 .../tsfile/write/DefaultSchemaTemplateTest.java    |    8 +-
 .../tsfile/write/MetadataIndexConstructorTest.java |   73 +-
 .../org/apache/iotdb/tsfile/write/PerfTest.java    |   16 +-
 .../iotdb/tsfile/write/ReadPageInMemTest.java      |   16 +-
 ...SameMeasurementsWithDifferentDataTypesTest.java |    6 +-
 .../iotdb/tsfile/write/TsFileIOWriterTest.java     |   91 +-
 .../iotdb/tsfile/write/TsFileReadWriteTest.java    |   13 +-
 .../iotdb/tsfile/write/TsFileWriteApiTest.java     |  331 +++
 .../iotdb/tsfile/write/TsFileWriterTest.java       |  111 +-
 .../org/apache/iotdb/tsfile/write/WriteTest.java   |   10 +-
 .../write/schema/converter/SchemaBuilderTest.java  |   45 +-
 .../write/writer/AlignedChunkWriterImplTest.java   |  182 ++
 .../write/writer/ForceAppendTsFileWriterTest.java  |   16 +-
 .../write/writer/RestorableTsFileIOWriterTest.java |   63 +-
 .../write/writer/VectorChunkWriterImplTest.java    |  180 --
 .../write/writer/VectorMeasurementSchemaStub.java  |    6 +-
 .../zeppelin/iotdb/IoTDBInterpreterTest.java       |    9 +-
 1405 files changed, 102248 insertions(+), 66757 deletions(-)

diff --cc cluster/src/main/java/org/apache/iotdb/cluster/expr/SWRaftMember.java
index 0000000,0000000..52a99b9
new file mode 100644
--- /dev/null
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/expr/SWRaftMember.java
@@@ -1,0 -1,0 +1,206 @@@
++/*
++ * 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.cluster.expr;
++
++import org.apache.iotdb.cluster.client.ClientManager;
++import org.apache.iotdb.cluster.config.ClusterDescriptor;
++import org.apache.iotdb.cluster.log.Log;
++import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
++import org.apache.iotdb.cluster.server.Response;
++import org.apache.iotdb.cluster.server.member.RaftMember;
++import org.apache.iotdb.cluster.server.monitor.Timer;
++import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
++
++import java.util.Arrays;
++import java.util.List;
++
++public abstract class SWRaftMember extends RaftMember {
++
++  private int windowCapacity =
++      ClusterDescriptor.getInstance().getConfig().getMaxNumOfLogsInMem() * 2;
++  private int windowLength = 0;
++  private Log[] logWindow = new Log[windowCapacity];
++  private long firstPosPrevIndex;
++  private long[] prevTerms = new long[windowCapacity];
++
++  public SWRaftMember(String name, ClientManager clientManager) {
++    super(name, clientManager);
++  }
++
++  @Override
++  public void start() {
++    super.start();
++    this.firstPosPrevIndex = logManager.getLastLogIndex();
++    this.prevTerms[0] = logManager.getLastLogTerm();
++  }
++
++  /**
++   * After insert an entry into the window, check if its previous and latter entries should be
++   * removed if it mismatches.
++   *
++   * @param pos
++   */
++  private void checkLog(int pos) {
++    checkLogPrev(pos);
++    checkLogNext(pos);
++  }
++
++  private void checkLogPrev(int pos) {
++    // check the previous entry
++    long prevLogTerm = prevTerms[pos];
++    if (pos > 0) {
++      Log prev = logWindow[pos - 1];
++      if (prev != null && prev.getCurrLogTerm() != prevLogTerm) {
++        logWindow[pos - 1] = null;
++      }
++    }
++  }
++
++  private void checkLogNext(int pos) {
++    // check the next entry
++    Log log = logWindow[pos];
++    boolean nextMismatch = false;
++    if (pos < windowCapacity - 1) {
++      long nextPrevTerm = prevTerms[pos + 1];
++      if (nextPrevTerm != log.getCurrLogTerm()) {
++        nextMismatch = true;
++      }
++    }
++    if (nextMismatch) {
++      for (int i = pos + 1; i < windowCapacity; i++) {
++        if (logWindow[i] != null) {
++          logWindow[i] = null;
++          if (i == windowLength - 1) {
++            windowLength = pos + 1;
++          }
++        } else {
++          break;
++        }
++      }
++    }
++  }
++
++  /**
++   * Flush window range [0, flushPos) into the LogManager, where flushPos is the first null position
++   * in the window.
++   *
++   * @param result
++   * @param leaderCommit
++   * @return
++   */
++  private long flushWindow(AppendEntryResult result, long leaderCommit) {
++    long windowPrevLogIndex = firstPosPrevIndex;
++    long windowPrevLogTerm = prevTerms[0];
++
++    int flushPos = 0;
++    for (; flushPos < windowCapacity; flushPos++) {
++      if (logWindow[flushPos] == null) {
++        break;
++      }
++    }
++
++    // flush [0, flushPos)
++    List<Log> logs = Arrays.asList(logWindow).subList(0, flushPos);
++    long success =
++        logManager.maybeAppend(windowPrevLogIndex, windowPrevLogTerm, leaderCommit, logs);
++    if (success != -1) {
++      System.arraycopy(logWindow, flushPos, logWindow, 0, windowCapacity - flushPos);
++      System.arraycopy(prevTerms, flushPos, prevTerms, 0, windowCapacity - flushPos);
++      for (int i = 1; i <= flushPos; i++) {
++        logWindow[windowCapacity - i] = null;
++      }
++    }
++    firstPosPrevIndex = logManager.getLastLogIndex();
++    result.status = Response.RESPONSE_STRONG_ACCEPT;
++    result.setLastLogIndex(firstPosPrevIndex);
++    result.setLastLogTerm(logManager.getLastLogTerm());
++    return success;
++  }
++
++  @Override
++  protected AppendEntryResult appendEntries(
++      long prevLogIndex, long prevLogTerm, long leaderCommit, List<Log> logs) {
++    if (logs.isEmpty()) {
++      return new AppendEntryResult(Response.RESPONSE_AGREE).setHeader(getHeader());
++    }
++
++    AppendEntryResult result = null;
++    for (Log log : logs) {
++      result = appendEntry(prevLogIndex, prevLogTerm, leaderCommit, log);
++
++      if (result.status != Response.RESPONSE_AGREE
++          && result.status != Response.RESPONSE_STRONG_ACCEPT
++          && result.status != Response.RESPONSE_WEAK_ACCEPT) {
++        return result;
++      }
++      prevLogIndex = log.getCurrLogIndex();
++      prevLogTerm = log.getCurrLogTerm();
++    }
++
++    return result;
++  }
++
++  @Override
++  protected AppendEntryResult appendEntry(
++      long prevLogIndex, long prevLogTerm, long leaderCommit, Log log) {
++
++    long startTime = Timer.Statistic.RAFT_RECEIVER_APPEND_ENTRY.getOperationStartTime();
++    long appendedPos = 0;
++
++    AppendEntryResult result = new AppendEntryResult();
++    synchronized (logManager) {
++      int windowPos = (int) (log.getCurrLogIndex() - logManager.getLastLogIndex() - 1);
++      if (windowPos < 0) {
++        // the new entry may replace an appended entry
++        appendedPos = logManager.maybeAppend(prevLogIndex, prevLogTerm, leaderCommit, log);
++        result.status = Response.RESPONSE_STRONG_ACCEPT;
++        result.setLastLogIndex(logManager.getLastLogIndex());
++        result.setLastLogTerm(logManager.getLastLogTerm());
++      } else if (windowPos < windowCapacity) {
++        // the new entry falls into the window
++        logWindow[windowPos] = log;
++        prevTerms[windowPos] = prevLogTerm;
++        if (windowLength < windowPos + 1) {
++          windowLength = windowPos + 1;
++        }
++        checkLog(windowPos);
++        if (windowPos == 0) {
++          appendedPos = flushWindow(result, leaderCommit);
++        } else {
++          result.status = Response.RESPONSE_WEAK_ACCEPT;
++        }
++
++        Statistic.RAFT_WINDOW_LENGTH.add(windowLength);
++      } else {
++        Timer.Statistic.RAFT_RECEIVER_APPEND_ENTRY.calOperationCostTimeFromStart(startTime);
++        result.setStatus(Response.RESPONSE_OUT_OF_WINDOW);
++        result.setHeader(getHeader());
++        return result;
++      }
++    }
++
++    Timer.Statistic.RAFT_RECEIVER_APPEND_ENTRY.calOperationCostTimeFromStart(startTime);
++    if (appendedPos == -1) {
++      // the incoming log points to an illegal position, reject it
++      result.status = Response.RESPONSE_LOG_MISMATCH;
++    }
++    return result;
++  }
++}
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
index beaaa77,226593a..bfb2295
--- a/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/LogDispatcher.java
@@@ -32,15 -29,12 +32,14 @@@ import org.apache.iotdb.cluster.server.
  import org.apache.iotdb.cluster.server.member.RaftMember;
  import org.apache.iotdb.cluster.server.monitor.Peer;
  import org.apache.iotdb.cluster.server.monitor.Timer;
 +import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
  import org.apache.iotdb.cluster.utils.ClientUtils;
 +import org.apache.iotdb.cluster.utils.ClusterUtils;
+ import org.apache.iotdb.db.concurrent.IoTDBThreadPoolFactory;
  import org.apache.iotdb.db.conf.IoTDBConstant;
  import org.apache.iotdb.db.conf.IoTDBDescriptor;
- import org.apache.iotdb.db.utils.CommonUtils;
  import org.apache.iotdb.db.utils.TestOnly;
  
- import com.google.common.util.concurrent.ThreadFactoryBuilder;
  import org.apache.thrift.TException;
  import org.apache.thrift.async.AsyncMethodCallback;
  import org.slf4j.Logger;
@@@ -68,28 -62,25 +66,29 @@@ import java.util.concurrent.atomic.Atom
  public class LogDispatcher {
  
    private static final Logger logger = LoggerFactory.getLogger(LogDispatcher.class);
 -  private RaftMember member;
 -  private boolean useBatchInLogCatchUp =
 -      ClusterDescriptor.getInstance().getConfig().isUseBatchInLogCatchUp();
 -  // each follower has a queue and a dispatch thread is attached in executorService.
 -  private List<BlockingQueue<SendLogRequest>> nodeLogQueues = new ArrayList<>();
 -  private ExecutorService executorService;
 -
 -  // TODO we have no way to close this pool.
 -  private static final ExecutorService serializationService =
 +  RaftMember member;
 +  private ClusterConfig clusterConfig = ClusterDescriptor.getInstance().getConfig();
 +  private boolean useBatchInLogCatchUp = clusterConfig.isUseBatchInLogCatchUp();
 +  List<BlockingQueue<SendLogRequest>> nodesLogQueues = new ArrayList<>();
 +  ExecutorService executorService;
 +  private static ExecutorService serializationService =
-       Executors.newFixedThreadPool(
-           CommonUtils.getCpuCores() * 2,
-           new ThreadFactoryBuilder().setDaemon(true).setNameFormat("DispatcherEncoder-%d").build());
+       IoTDBThreadPoolFactory.newFixedThreadPoolWithDaemonThread(
+           Runtime.getRuntime().availableProcessors(), "DispatcherEncoder");
+ 
 +  public static int bindingThreadNum = 1;
 +  public static int maxBatchSize = 1;
 +
    public LogDispatcher(RaftMember member) {
      this.member = member;
-     executorService = Executors.newCachedThreadPool();
+     executorService =
+         IoTDBThreadPoolFactory.newCachedThreadPool("LogDispatcher-" + member.getName());
 +    createQueueAndBindingThreads();
 +  }
 +
 +  void createQueueAndBindingThreads() {
      for (Node node : member.getAllNodes()) {
 -      if (!node.equals(member.getThisNode())) {
 -        nodeLogQueues.add(createQueueAndBindingThread(node));
 +      if (!ClusterUtils.isNodeEquals(node, member.getThisNode())) {
 +        nodesLogQueues.add(createQueueAndBindingThread(node));
        }
      }
    }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
index 0000000,0000000..80878eb
new file mode 100644
--- /dev/null
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/log/VotingLogList.java
@@@ -1,0 -1,0 +1,104 @@@
++/*
++ * 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.cluster.log;
++
++import java.util.ArrayList;
++import java.util.List;
++
++public class VotingLogList {
++
++  private List<VotingLog> logList = new ArrayList<>();
++  private volatile long currTerm = -1;
++  private int quorumSize;
++
++  public VotingLogList(int quorumSize) {
++    this.quorumSize = quorumSize;
++  }
++
++  /**
++   * Insert a voting entry into the list. Notice the logs must be inserted in order of index, as
++   * they are inserted as soon as created
++   *
++   * @param log
++   */
++  public synchronized void insert(VotingLog log) {
++    if (log.getLog().getCurrLogTerm() != currTerm) {
++      logList.clear();
++      currTerm = log.getLog().getCurrLogTerm();
++    }
++    logList.add(log);
++  }
++
++  /**
++   * When an entry of index-term is strongly accepted by a node of acceptingNodeId, record the id in
++   * all entries whose index <= the accepted entry. If any entry is accepted by a quorum, remove it
++   * from the list.
++   *
++   * @param index
++   * @param term
++   * @param acceptingNodeId
++   * @return the lastly removed entry if any.
++   */
++  public void onStronglyAccept(long index, long term, int acceptingNodeId) {
++    int lastEntryIndexToCommit = -1;
++
++    List<VotingLog> acceptedLogs;
++    synchronized (this) {
++      for (int i = 0, logListSize = logList.size(); i < logListSize; i++) {
++        VotingLog votingLog = logList.get(i);
++        if (votingLog.getLog().getCurrLogIndex() <= index
++            && votingLog.getLog().getCurrLogTerm() == term) {
++          votingLog.getStronglyAcceptedNodeIds().add(acceptingNodeId);
++          if (votingLog.getStronglyAcceptedNodeIds().size() >= quorumSize) {
++            lastEntryIndexToCommit = i;
++          }
++          if (votingLog.getStronglyAcceptedNodeIds().size()
++                  + votingLog.getWeaklyAcceptedNodeIds().size()
++              >= quorumSize) {
++            votingLog.acceptedTime = System.nanoTime();
++          }
++        } else if (votingLog.getLog().getCurrLogIndex() > index) {
++          break;
++        }
++      }
++
++      List<VotingLog> tmpAcceptedLogs = logList.subList(0, lastEntryIndexToCommit + 1);
++      acceptedLogs = new ArrayList<>(tmpAcceptedLogs);
++      tmpAcceptedLogs.clear();
++    }
++
++    if (lastEntryIndexToCommit != -1) {
++      for (VotingLog acceptedLog : acceptedLogs) {
++        synchronized (acceptedLog) {
++          acceptedLog.acceptedTime = System.nanoTime();
++          acceptedLog.notifyAll();
++        }
++      }
++    }
++  }
++
++  public synchronized void clear() {
++    logList.clear();
++  }
++
++  public int size() {
++    return logList.size();
++  }
++}
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java
index fcb70cb,ea77244..233a90a
--- a/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/partition/slot/SlotPartitionTable.java
@@@ -211,13 -213,13 +213,13 @@@ public class SlotPartitionTable impleme
      return ret;
    }
  
-   public PartitionGroup getHeaderGroup(RaftNode raftNode, List<Node> nodeRing) {
-     PartitionGroup ret = new PartitionGroup(raftNode.getRaftId());
+   public PartitionGroup getPartitionGroup(RaftNode header, List<Node> nodeRing) {
+     PartitionGroup ret = new PartitionGroup(header.getRaftId());
  
      // assuming the nodes are [1,2,3,4,5]
-     int nodeIndex = findNodeIndex(raftNode.getNode());
 -    int nodeIndex = nodeRing.indexOf(header.getNode());
++    int nodeIndex = findNodeIndex(header.getNode());
      if (nodeIndex == -1) {
-       logger.warn("Node {} is not in the cluster", raftNode.getNode());
+       logger.warn("Node {} is not in the cluster", header.getNode());
        return null;
      }
      int endIndex = nodeIndex + replicationNum;
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
index b6c0df2,2945726..c243bca
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/handlers/caller/AppendNodeEntryHandler.java
@@@ -84,59 -83,50 +84,60 @@@ public class AppendNodeEntryHandler imp
        // someone has rejected this log because the leadership is stale
        return;
      }
 -    long resp = response;
 -    synchronized (voteCounter) {
 -      if (resp == RESPONSE_AGREE) {
 -        int remaining = voteCounter.decrementAndGet();
 -        logger.debug(
 -            "{}: Received an agreement from {} for {}, remaining votes to succeed: {}",
 -            member.getName(),
 -            receiver,
 -            log,
 -            remaining);
 -        if (remaining == 0) {
 -          logger.debug(
 -              "{}: Log [{}] {} is accepted by the quorum",
 -              member.getName(),
 -              log.getCurrLogIndex(),
 -              log);
 -          voteCounter.notifyAll();
 +
 +    long resp = response.status;
 +
 +    if (resp == RESPONSE_STRONG_ACCEPT) {
 +      synchronized (log) {
 +        if (log.getWeaklyAcceptedNodeIds().size() + log.getStronglyAcceptedNodeIds().size()
 +            >= quorumSize) {
 +          log.acceptedTime = System.nanoTime();
          }
 -        peer.setMatchIndex(Math.max(log.getCurrLogIndex(), peer.getMatchIndex()));
 -      } else if (resp > 0) {
 -        // a response > 0 is the follower's term
 -        // the leader ship is stale, wait for the new leader's heartbeat
 -        long prevReceiverTerm = receiverTerm.get();
 -        logger.debug(
 -            "{}: Received a rejection from {} because term is stale: {}/{} for log {}",
 -            member.getName(),
 -            receiver,
 -            prevReceiverTerm,
 -            resp,
 -            log);
 -        if (resp > prevReceiverTerm) {
 -          receiverTerm.set(resp);
 +        log.getStronglyAcceptedNodeIds().add(receiver.nodeIdentifier);
 +        log.notifyAll();
 +      }
 +      member
 +          .getVotingLogList()
 +          .onStronglyAccept(
 +              log.getLog().getCurrLogIndex(),
 +              log.getLog().getCurrLogTerm(),
 +              receiver.nodeIdentifier);
 +      peer.setMatchIndex(Math.max(log.getLog().getCurrLogIndex(), peer.getMatchIndex()));
 +    } else if (resp > 0) {
 +      // a response > 0 is the follower's term
 +      // the leader ship is stale, wait for the new leader's heartbeat
 +      long prevReceiverTerm = receiverTerm.get();
 +      logger.debug(
-           "{}: Received a rejection from {} because term is stale: {}/{}",
++          "{}: Received a rejection from {} because term is stale: {}/{}, log: {}",
 +          member.getName(),
 +          receiver,
 +          prevReceiverTerm,
-           resp);
++          resp,
++          log);
 +      if (resp > prevReceiverTerm) {
 +        receiverTerm.set(resp);
 +      }
 +      leaderShipStale.set(true);
 +      synchronized (log) {
 +        log.notifyAll();
 +      }
 +    } else if (resp == RESPONSE_WEAK_ACCEPT) {
 +      synchronized (log) {
 +        if (log.getWeaklyAcceptedNodeIds().size() + log.getStronglyAcceptedNodeIds().size()
 +            >= quorumSize) {
 +          log.acceptedTime = System.nanoTime();
          }
 -        leaderShipStale.set(true);
 -        voteCounter.notifyAll();
 -      } else {
 -        // e.g., Response.RESPONSE_LOG_MISMATCH
 -        logger.debug(
 -            "{}: The log {} is rejected by {} because: {}", member.getName(), log, receiver, resp);
 -        onFail();
 +        log.getWeaklyAcceptedNodeIds().add(receiver.nodeIdentifier);
 +        log.notifyAll();
        }
 -      // rejected because the receiver's logs are stale or the receiver has no cluster info, just
 -      // wait for the heartbeat to handle
 +    } else {
 +      // e.g., Response.RESPONSE_LOG_MISMATCH
 +      logger.debug(
 +          "{}: The log {} is rejected by {} because: {}", member.getName(), log, receiver, resp);
 +      onFail();
      }
 +    // rejected because the receiver's logs are stale or the receiver has no cluster info, just
 +    // wait for the heartbeat to handle
    }
  
    @Override
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThread.java
index 2ccc37f,38a314d..c503296
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThread.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/HeartbeatThread.java
@@@ -31,9 -32,6 +32,7 @@@ import org.apache.iotdb.cluster.server.
  import org.apache.iotdb.cluster.server.handlers.caller.ElectionHandler;
  import org.apache.iotdb.cluster.server.handlers.caller.HeartbeatHandler;
  import org.apache.iotdb.cluster.server.member.RaftMember;
- import org.apache.iotdb.cluster.utils.ClientUtils;
 +import org.apache.iotdb.cluster.utils.ClusterUtils;
  
  import org.apache.thrift.TException;
  import org.apache.thrift.transport.TTransportException;
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThread.java
index cb28a64,f8ce0b8..23a0724
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThread.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/heartbeat/MetaHeartbeatThread.java
@@@ -94,13 -87,10 +96,16 @@@ public class MetaHeartbeatThread extend
        // operation can be carried out in time.
        localMetaMember
            .getAppendLogThreadPool()
 -          .submit(() -> localMetaMember.processEmptyContentLog());
 +          .submit(
 +              () -> {
-                 while (localMetaMember.getPartitionTable() == null) {
++                while (!localMetaMember.isReady()) {
 +                  // wait until partition table is ready
 +                }
 +                localMetaMember.processPlanLocally(new DummyPlan());
 +              });
+       // this is a risk that (1) put a task into a pool
+       // and (2) the task puts more sub-tasks into the same pool, especially the task can only
+       // terminal when all sub-tasks finish.
      }
    }
  }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
index 292dafe,690a826..6472835
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
@@@ -180,27 -193,28 +194,28 @@@ public class DataGroupMember extends Ra
      lastAppliedPartitionTableVersion = new LastAppliedPatitionTableVersion(getMemberDir());
    }
  
-   DataGroupMember(
-       TProtocolFactory factory,
-       PartitionGroup nodes,
-       Node thisNode,
-       MetaGroupMember metaGroupMember) {
+   DataGroupMember(TProtocolFactory factory, PartitionGroup nodes, MetaGroupMember metaGroupMember) {
+     // The name is used in JMX, so we have to avoid to use "(" "," "=" ")"
      super(
-         "Data("
+         "Data-"
              + nodes.getHeader().getNode().getInternalIp()
-             + ":"
-             + nodes.getHeader().getNode().getMetaPort()
-             + ", raftId="
-             + nodes.getId()
-             + ")",
-         new AsyncClientPool(new AsyncDataClient.FactoryAsync(factory)),
-         new SyncClientPool(new SyncDataClient.FactorySync(factory)),
-         new AsyncClientPool(new AsyncDataHeartbeatClient.FactoryAsync(factory)),
-         new SyncClientPool(new SyncDataHeartbeatClient.FactorySync(factory)),
-         new AsyncClientPool(new SingleManagerFactory(factory)));
-     this.thisNode = thisNode;
+             + "-"
+             + nodes.getHeader().getNode().getDataPort()
+             + "-raftId-"
+             + nodes.getRaftId()
+             + "",
+         new ClientManager(
+             ClusterDescriptor.getInstance().getConfig().isUseAsyncServer(),
+             ClientManager.Type.DataGroupClient));
      this.metaGroupMember = metaGroupMember;
 -    allNodes = nodes;
 +    setAllNodes(nodes);
+     mbeanName =
+         String.format(
+             "%s:%s=%s%d",
+             "org.apache.iotdb.cluster.service",
+             IoTDBConstant.JMX_TYPE,
+             "DataMember",
+             getRaftGroupId());
      setQueryManager(new ClusterQueryManager());
      slotManager = new SlotManager(ClusterConstant.SLOT_NUM, getMemberDir(), getName());
      dataLogApplier = new DataLogApplier(metaGroupMember, this);
@@@ -899,9 -925,10 +929,10 @@@
        logger.debug("{}: start to pre remove node {}", name, removedNode);
      }
      synchronized (allNodes) {
 -      if (allNodes.contains(removedNode) && allNodes.size() == config.getReplicationNum()) {
 +      if (containsNode(removedNode) && allNodes.size() == config.getReplicationNum()) {
          // update the group if the deleted node was in it
-         PartitionGroup newGroup = metaGroupMember.getPartitionTable().getHeaderGroup(getHeader());
+         PartitionGroup newGroup =
+             metaGroupMember.getPartitionTable().getPartitionGroup(getHeader());
          if (newGroup == null) {
            return;
          }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index ad0f55c,f057131..aba662c
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@@ -272,12 -229,7 +229,8 @@@ public class MetaGroupMember extends Ra
      // load the identifier from the disk or generate a new one
      loadIdentifier();
      allNodes.add(thisNode);
 +    idNodeMap.put(thisNode.nodeIdentifier, thisNode);
  
-     Factory dataMemberFactory = new Factory(factory, this);
-     dataClusterServer = new DataClusterServer(thisNode, dataMemberFactory, this);
-     dataHeartbeatServer = new DataHeartbeatServer(thisNode, dataClusterServer);
-     clientServer = new ClientServer(this);
      startUpStatus = getNewStartUpStatus();
  
      // try loading the partition table if there was a previous cluster
@@@ -725,35 -648,8 +649,21 @@@
      if (response.isSetFollowerIdentifier()) {
        // register the follower, the response.getFollower() contains the node information of the
        // receiver.
 -      registerNodeIdentifier(response.getFollower(), response.getFollowerIdentifier());
 +      Node localNode = null;
 +      for (Node node : allNodes) {
 +        if (node.getInternalIp().equals(response.getFollower().internalIp)
 +            && node.getMetaPort() == response.getFollower().getMetaPort()) {
 +          localNode = node;
 +        }
 +      }
 +      if (localNode == null) {
 +        logger.warn(
 +            "Received a heartbeat response from a node that is not in the node list: {}",
 +            response.getFollower());
 +        return;
 +      }
 +      registerNodeIdentifier(localNode, response.getFollowerIdentifier());
-       // if all nodes' ids are known, we can build the partition table
-       if (allNodesIdKnown()) {
-         // When the meta raft group is established, the follower reports its node information to the
-         // leader through the first heartbeat. After the leader knows the node information of all
-         // nodes, it can replace the incomplete node information previously saved locally, and build
-         // partitionTable to send it to other followers.
-         setAllNodes(new PartitionGroup(idNodeMap.values()));
-         if (partitionTable == null) {
-           partitionTable = new SlotPartitionTable(allNodes, thisNode);
-           logger.info("Partition table is set up");
-         }
-         router = new ClusterPlanRouter(partitionTable);
-         this.coordinator.setRouter(router);
-         startSubServers();
-       }
+       buildMetaEngineServiceIfNotReady();
      }
      // record the requirement of partition table of the follower
      if (response.isRequirePartitionTable()) {
@@@ -761,6 -657,29 +671,29 @@@
      }
    }
  
+   public void buildMetaEngineServiceIfNotReady() {
+     // if all nodes' ids are known, we can build the partition table
+     if (!ready && allNodesIdKnown()) {
+       // Notice that this should only be called once.
+ 
+       // When the meta raft group is established, the follower reports its node information to the
+       // leader through the first heartbeat. After the leader knows the node information of all
+       // nodes, it can replace the incomplete node information previously saved locally, and build
+       // partitionTable to send it to other followers.
 -      allNodes = new PartitionGroup(idNodeMap.values());
++      setAllNodes(new PartitionGroup(idNodeMap.values()));
+       if (partitionTable == null) {
+         partitionTable = new SlotPartitionTable(allNodes, thisNode);
+         logger.info("Partition table is set up");
+       }
+ 
+       router = new ClusterPlanRouter(partitionTable);
+       this.coordinator.setRouter(router);
+       rebuildDataGroups();
+       logger.info("The Meta Engine is ready");
+       this.ready = true;
+     }
+   }
+ 
    /**
     * When a node requires a partition table in its heartbeat response, add it into blindNodes so in
     * the next heartbeat the partition table will be sent to the node.
@@@ -1201,13 -1172,12 +1152,13 @@@
          return null;
        }
        try {
 +        logger.debug("calling rpc");
          return client.checkStatus(getStartUpStatus());
        } catch (TException e) {
-         client.getInputProtocol().getTransport().close();
+         client.close();
          logger.warn("Error occurs when check status on node : {}", seedNode);
        } finally {
-         ClientUtils.putBackSyncClient(client);
+         client.returnSelf();
        }
      }
      return null;
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
index cd54aa6,ad356fb..4c6bd8a
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/RaftMember.java
@@@ -37,7 -38,6 +39,8 @@@ import org.apache.iotdb.cluster.log.Log
  import org.apache.iotdb.cluster.log.LogDispatcher;
  import org.apache.iotdb.cluster.log.LogDispatcher.SendLogRequest;
  import org.apache.iotdb.cluster.log.LogParser;
 +import org.apache.iotdb.cluster.log.VotingLog;
++import org.apache.iotdb.cluster.log.VotingLogList;
  import org.apache.iotdb.cluster.log.catchup.CatchUpTask;
  import org.apache.iotdb.cluster.log.logtypes.PhysicalPlanLog;
  import org.apache.iotdb.cluster.log.manage.RaftLogManager;
@@@ -62,8 -57,7 +65,8 @@@ import org.apache.iotdb.cluster.server.
  import org.apache.iotdb.cluster.server.Response;
  import org.apache.iotdb.cluster.server.handlers.caller.AppendNodeEntryHandler;
  import org.apache.iotdb.cluster.server.handlers.caller.GenericHandler;
 +import org.apache.iotdb.cluster.server.handlers.forwarder.IndirectAppendHandler;
+ import org.apache.iotdb.cluster.server.monitor.NodeStatusManager;
  import org.apache.iotdb.cluster.server.monitor.Peer;
  import org.apache.iotdb.cluster.server.monitor.Timer;
  import org.apache.iotdb.cluster.server.monitor.Timer.Statistic;
@@@ -88,9 -84,7 +94,8 @@@ import org.apache.iotdb.db.utils.TestOn
  import org.apache.iotdb.rpc.RpcUtils;
  import org.apache.iotdb.rpc.TSStatusCode;
  import org.apache.iotdb.service.rpc.thrift.TSStatus;
 +import org.apache.iotdb.tsfile.utils.Pair;
  
- import com.google.common.util.concurrent.ThreadFactoryBuilder;
  import org.apache.thrift.TException;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
@@@ -111,12 -104,11 +116,10 @@@ import java.util.Random
  import java.util.concurrent.ConcurrentHashMap;
  import java.util.concurrent.ExecutionException;
  import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
  import java.util.concurrent.Future;
  import java.util.concurrent.LinkedBlockingQueue;
- import java.util.concurrent.ThreadPoolExecutor;
  import java.util.concurrent.TimeUnit;
  import java.util.concurrent.atomic.AtomicBoolean;
 -import java.util.concurrent.atomic.AtomicInteger;
  import java.util.concurrent.atomic.AtomicLong;
  import java.util.concurrent.atomic.AtomicReference;
  
@@@ -126,18 -118,9 +129,17 @@@ import static org.apache.iotdb.cluster.
   * RaftMember process the common raft logic like leader election, log appending, catch-up and so on.
   */
  @SuppressWarnings("java:S3077") // reference volatile is enough
- public abstract class RaftMember {
- 
+ public abstract class RaftMember implements RaftMemberMBean {
    private static final Logger logger = LoggerFactory.getLogger(RaftMember.class);
 -  public static final boolean USE_LOG_DISPATCHER = false;
 +  public static boolean USE_LOG_DISPATCHER = false;
 +  public static boolean USE_INDIRECT_LOG_DISPATCHER = false;
 +  public static boolean ENABLE_WEAK_ACCEPTANCE = true;
 +  public static boolean ENABLE_COMMIT_RETURN = false;
 +
 +  protected static final LogSequencerFactory SEQUENCER_FACTORY =
 +      ClusterDescriptor.getInstance().getConfig().isUseAsyncSequencing()
 +          ? new Factory()
 +          : new SynchronousSequencer.Factory();
  
    private static final String MSG_FORWARD_TIMEOUT = "{}: Forward {} to {} time out";
    private static final String MSG_FORWARD_ERROR =
@@@ -193,12 -176,10 +195,12 @@@
     * offline.
     */
    volatile long lastHeartbeatReceivedTime;
 +
    /** the raft logs are all stored and maintained in the log manager */
 -  RaftLogManager logManager;
 +  protected RaftLogManager logManager;
 +
    /**
-    * s the single thread pool that runs the heartbeat thread, which send heartbeats to the follower
+    * the single thread pool that runs the heartbeat thread, which send heartbeats to the follower
     * when this node is a leader, or start elections when this node is an elector.
     */
    ExecutorService heartBeatService;
@@@ -266,43 -242,11 +263,19 @@@
     */
    protected PlanExecutor localExecutor;
  
 +  /** (logIndex, logTerm) -> append handler */
 +  protected Map<Pair<Long, Long>, AppendNodeEntryHandler> sentLogHandlers =
 +      new ConcurrentHashMap<>();
 +
 +  protected VotingLogList votingLogList;
 +
-   protected RaftMember() {}
- 
 +  protected LogSequencer logSequencer;
 +
-   protected RaftMember(
-       String name,
-       AsyncClientPool asyncPool,
-       SyncClientPool syncPool,
-       AsyncClientPool asyncHeartbeatPool,
-       SyncClientPool syncHeartbeatPool) {
-     this.name = name;
-     this.asyncClientPool = asyncPool;
-     this.syncClientPool = syncPool;
-     this.asyncHeartbeatClientPool = asyncHeartbeatPool;
-     this.syncHeartbeatClientPool = syncHeartbeatPool;
-     this.asyncSendLogClientPool = asyncClientPool;
-   }
- 
-   protected RaftMember(
-       String name,
-       AsyncClientPool asyncPool,
-       SyncClientPool syncPool,
-       AsyncClientPool asyncHeartbeatPool,
-       SyncClientPool syncHeartbeatPool,
-       AsyncClientPool asyncSendLogClientPool) {
+   protected RaftMember() {}
+ 
+   protected RaftMember(String name, ClientManager clientManager) {
      this.name = name;
-     this.asyncClientPool = asyncPool;
-     this.syncClientPool = syncPool;
-     this.asyncHeartbeatClientPool = asyncHeartbeatPool;
-     this.syncHeartbeatClientPool = syncHeartbeatPool;
-     this.asyncSendLogClientPool = asyncSendLogClientPool;
+     this.clientManager = clientManager;
    }
  
    /**
@@@ -698,26 -569,9 +664,8 @@@
      return localExecutor;
    }
  
-   /**
-    * Get an asynchronous heartbeat thrift client to the given node.
-    *
-    * @return an asynchronous thrift client or null if the caller tries to connect the local node.
-    */
-   public AsyncClient getAsyncHeartbeatClient(Node node) {
-     return getAsyncClient(node, asyncHeartbeatClientPool, false);
-   }
- 
-   /**
-    * NOTICE: client.putBack() must be called after use.
-    *
-    * @return the heartbeat client for the node
-    */
-   public Client getSyncHeartbeatClient(Node node) {
-     return getSyncClient(syncHeartbeatClientPool, node, false);
-   }
- 
    public void sendLogAsync(
 -      Log log,
 -      AtomicInteger voteCounter,
 +      VotingLog log,
        Node node,
        AtomicBoolean leaderShipStale,
        AtomicLong newLeaderTerm,
@@@ -888,8 -718,10 +832,10 @@@
     * @param plan a non-query plan.
     * @return A TSStatus indicating the execution result.
     */
 -  abstract TSStatus executeNonQueryPlan(PhysicalPlan plan);
 +  protected abstract TSStatus executeNonQueryPlan(PhysicalPlan plan);
  
+   abstract ClientCategory getClientCategory();
+ 
    /**
     * according to the consistency configuration, decide whether to execute syncLeader or not and
     * throws exception when failed. Note that the write request will always try to sync leader
@@@ -1130,39 -967,34 +1081,39 @@@
      long startTime = Timer.Statistic.RAFT_SENDER_APPEND_LOG.getOperationStartTime();
  
      Log log;
 +    if (plan instanceof LogPlan) {
 +      try {
 +        log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
 +      } catch (UnknownLogTypeException e) {
 +        logger.error("Can not parse LogPlan {}", plan, e);
 +        return StatusUtils.PARSE_LOG_ERROR;
 +      }
 +    } else {
 +      log = new PhysicalPlanLog();
 +      ((PhysicalPlanLog) log).setPlan(plan);
 +      plan.setIndex(logManager.getLastLogIndex() + 1);
 +    }
 +    // if a single log exceeds the threshold
 +    // we need to return error code to the client as in server mode
-     //    if (log.serialize().capacity() + Integer.BYTES
-     //        >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
-     //      logger.error(
-     //          "Log cannot fit into buffer, please increase raft_log_buffer_size;"
-     //              + "or reduce the size of requests you send.");
-     //      return StatusUtils.INTERNAL_ERROR;
-     //    }
++    if (log.serialize().capacity() + Integer.BYTES
++        >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
++      logger.error(
++          "Log cannot fit into buffer, please increase raft_log_buffer_size;"
++              + "or reduce the size of requests you send.");
++      return StatusUtils.INTERNAL_ERROR;
++    }
 +
      // assign term and index to the new log and append it
 +    VotingLog votingLog;
      synchronized (logManager) {
 -      if (plan instanceof LogPlan) {
 -        try {
 -          log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
 -        } catch (UnknownLogTypeException e) {
 -          logger.error("Can not parse LogPlan {}", plan, e);
 -          return StatusUtils.PARSE_LOG_ERROR;
 -        }
 -      } else {
 -        log = new PhysicalPlanLog();
 -        ((PhysicalPlanLog) log).setPlan(plan);
 -        plan.setIndex(logManager.getLastLogIndex() + 1);
 -      }
        log.setCurrLogTerm(getTerm().get());
        log.setCurrLogIndex(logManager.getLastLogIndex() + 1);
 -
 -      // if a single log exceeds the threshold
 -      // we need to return error code to the client as in server mode
 -      if (log.serialize().capacity() + Integer.BYTES
 -          >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
 -        logger.error(
 -            "Log cannot fit into buffer, please increase raft_log_buffer_size;"
 -                + "or reduce the size of requests you send.");
 -        return StatusUtils.INTERNAL_ERROR;
 -      }
        logManager.append(log);
 +      votingLog = buildVotingLog(log);
 +      votingLogList.insert(votingLog);
      }
 +    log.setCreateTime(System.nanoTime());
 +
      Timer.Statistic.RAFT_SENDER_APPEND_LOG.calOperationCostTimeFromStart(startTime);
  
      try {
@@@ -1181,32 -1012,54 +1132,32 @@@
      if (readOnly) {
        return StatusUtils.NODE_READ_ONLY;
      }
 -    // assign term and index to the new log and append it
 -    SendLogRequest sendLogRequest;
  
 -    long startTime =
 -        Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.getOperationStartTime();
      Log log;
 -    synchronized (logManager) {
 -      Statistic.RAFT_SENDER_COMPETE_LOG_MANAGER_BEFORE_APPEND_V2.calOperationCostTimeFromStart(
 -          startTime);
 -
 -      if (plan instanceof LogPlan) {
 -        try {
 -          log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
 -        } catch (UnknownLogTypeException e) {
 -          logger.error("Can not parse LogPlan {}", plan, e);
 -          return StatusUtils.PARSE_LOG_ERROR;
 -        }
 -      } else {
 -        log = new PhysicalPlanLog();
 -        ((PhysicalPlanLog) log).setPlan(plan);
 -        plan.setIndex(logManager.getLastLogIndex() + 1);
 -      }
 -      log.setCurrLogTerm(getTerm().get());
 -      log.setCurrLogIndex(logManager.getLastLogIndex() + 1);
 -
 -      startTime = Timer.Statistic.RAFT_SENDER_APPEND_LOG_V2.getOperationStartTime();
 -      // just like processPlanLocally,we need to check the size of log
 -      if (log.serialize().capacity() + Integer.BYTES
 -          >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
 -        logger.error(
 -            "Log cannot fit into buffer, please increase raft_log_buffer_size;"
 -                + "or reduce the size of requests you send.");
 -        return StatusUtils.INTERNAL_ERROR;
 +    if (plan instanceof LogPlan) {
 +      try {
 +        log = LogParser.getINSTANCE().parse(((LogPlan) plan).getLog());
 +      } catch (UnknownLogTypeException e) {
 +        logger.error("Can not parse LogPlan {}", plan, e);
 +        return StatusUtils.PARSE_LOG_ERROR;
        }
 -      // logDispatcher will serialize log, and set log size, and we will use the size after it
 -      logManager.append(log);
 -      Timer.Statistic.RAFT_SENDER_APPEND_LOG_V2.calOperationCostTimeFromStart(startTime);
 -
 -      startTime = Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.getOperationStartTime();
 -      sendLogRequest = buildSendLogRequest(log);
 -      Statistic.RAFT_SENDER_BUILD_LOG_REQUEST.calOperationCostTimeFromStart(startTime);
 +    } else {
 +      log = new PhysicalPlanLog();
 +      ((PhysicalPlanLog) log).setPlan(plan);
 +    }
  
 -      startTime = Statistic.RAFT_SENDER_OFFER_LOG.getOperationStartTime();
 -      log.setCreateTime(System.nanoTime());
 -      getLogDispatcher().offer(sendLogRequest);
 -      Statistic.RAFT_SENDER_OFFER_LOG.calOperationCostTimeFromStart(startTime);
 +    // just like processPlanLocally,we need to check the size of log
-     //    if (log.serialize().capacity() + Integer.BYTES
-     //        >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
-     //      logger.error(
-     //          "Log cannot fit into buffer, please increase raft_log_buffer_size;"
-     //              + "or reduce the size of requests you send.");
-     //      return StatusUtils.INTERNAL_ERROR;
-     //    }
++    if (log.serialize().capacity() + Integer.BYTES
++        >= ClusterDescriptor.getInstance().getConfig().getRaftLogBufferSize()) {
++      logger.error(
++          "Log cannot fit into buffer, please increase raft_log_buffer_size;"
++              + "or reduce the size of requests you send.");
++      return StatusUtils.INTERNAL_ERROR;
+     }
  
 +    // assign term and index to the new log and append it
 +    SendLogRequest sendLogRequest = logSequencer.sequence(log);
 +
      try {
        AppendLogResult appendLogResult =
            waitAppendResult(
@@@ -1618,28 -1502,18 +1621,27 @@@
     * one follower tells the node that it is no longer a valid leader, or a timeout is triggered.
     */
    @SuppressWarnings({"java:S2445"}) // safe synchronized
 -  private AppendLogResult waitAppendResult(
 -      AtomicInteger voteCounter, AtomicBoolean leaderShipStale, AtomicLong newLeaderTerm) {
 +  protected AppendLogResult waitAppendResult(
 +      VotingLog log, AtomicBoolean leaderShipStale, AtomicLong newLeaderTerm, int quorumSize) {
      // wait for the followers to vote
      long startTime = Timer.Statistic.RAFT_SENDER_VOTE_COUNTER.getOperationStartTime();
 -    synchronized (voteCounter) {
 +    long nextTimeToPrint = 15000;
 +
 +    int stronglyAcceptedNodeNum = log.getStronglyAcceptedNodeIds().size();
 +    int weaklyAcceptedNodeNum = log.getWeaklyAcceptedNodeIds().size();
 +    int totalAccepted = stronglyAcceptedNodeNum + weaklyAcceptedNodeNum;
 +
 +    synchronized (log) {
        long waitStart = System.currentTimeMillis();
        long alreadyWait = 0;
 -      while (voteCounter.get() > 0
 +      while (stronglyAcceptedNodeNum < quorumSize
 +          && (!ENABLE_WEAK_ACCEPTANCE
 +              || (totalAccepted < allNodes.size() - 1)
 +              || votingLogList.size() > config.getMaxNumOfLogsInMem())
-           && alreadyWait < RaftServer.getWriteOperationTimeoutMS()
+           && alreadyWait < ClusterConstant.getWriteOperationTimeoutMS()
 -          && voteCounter.get() != Integer.MAX_VALUE) {
 +          && !log.getStronglyAcceptedNodeIds().contains(Integer.MAX_VALUE)) {
          try {
 -          voteCounter.wait(ClusterConstant.getWriteOperationTimeoutMS());
 +          log.wait(0);
-           logger.debug("{} ends waiting", log);
          } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            logger.warn("Unexpected interruption when sending a log", e);
@@@ -2168,8 -1964,8 +2170,9 @@@
      long alreadyWait = 0;
      Object logUpdateCondition = logManager.getLogUpdateCondition(prevLogIndex);
      long lastLogIndex = logManager.getLastLogIndex();
 +    Timer.Statistic.RAFT_RECEIVER_INDEX_DIFF.add(prevLogIndex - lastLogIndex);
-     while (lastLogIndex < prevLogIndex && alreadyWait <= RaftServer.getWriteOperationTimeoutMS()) {
+     while (lastLogIndex < prevLogIndex
+         && alreadyWait <= ClusterConstant.getWriteOperationTimeoutMS()) {
        try {
          // each time new logs are appended, this will be notified
          synchronized (logUpdateCondition) {
@@@ -2186,10 -1982,10 +2189,10 @@@
        alreadyWait = System.currentTimeMillis() - waitStart;
      }
  
-     return alreadyWait <= RaftServer.getWriteOperationTimeoutMS();
+     return alreadyWait <= ClusterConstant.getWriteOperationTimeoutMS();
    }
  
 -  private long checkPrevLogIndex(long prevLogIndex) {
 +  protected long checkPrevLogIndex(long prevLogIndex) {
      long lastLogIndex = logManager.getLastLogIndex();
      long startTime = Timer.Statistic.RAFT_RECEIVER_WAIT_FOR_PREV_LOG.getOperationStartTime();
      if (lastLogIndex < prevLogIndex && !waitForPrevLog(prevLogIndex)) {
@@@ -2281,40 -2075,13 +2284,40 @@@
    }
  
    public int getRaftGroupId() {
-     return allNodes.getId();
+     return allNodes.getRaftId();
    }
  
 -  enum AppendLogResult {
 +  protected enum AppendLogResult {
      OK,
      TIME_OUT,
 -    LEADERSHIP_STALE
 +    LEADERSHIP_STALE,
 +    WEAK_ACCEPT
 +  }
 +
 +  /**
 +   * Process the result from an indirect receiver of an entry.
 +   *
 +   * @param ack acknowledgement from an indirect receiver.
 +   */
 +  public void acknowledgeAppendLog(AppendEntryResult ack) {
 +    AppendNodeEntryHandler appendNodeEntryHandler =
 +        sentLogHandlers.get(new Pair<>(ack.lastLogIndex, ack.lastLogTerm));
 +    if (appendNodeEntryHandler != null) {
 +      appendNodeEntryHandler.onComplete(ack);
 +    }
 +  }
 +
 +  public void registerAppendLogHandler(
 +      Pair<Long, Long> indexTerm, AppendNodeEntryHandler appendNodeEntryHandler) {
 +    sentLogHandlers.put(indexTerm, appendNodeEntryHandler);
 +  }
 +
 +  public void removeAppendLogHandler(Pair<Long, Long> indexTerm) {
 +    sentLogHandlers.remove(indexTerm);
 +  }
 +
 +  public VotingLogList getVotingLogList() {
 +    return votingLogList;
    }
  
    public Object getHeartBeatWaitObject() {
@@@ -2329,13 -2096,32 +2332,42 @@@
      this.skipElection = skipElection;
    }
  
 +  protected boolean containsNode(Node node) {
 +    for (Node localNode : allNodes) {
 +      if ((localNode.getInternalIp().equals(node.getInternalIp())
 +          && localNode.getMetaPort() == node.getMetaPort())) {
 +        return true;
 +      }
 +    }
 +    return false;
 +  }
++
+   public long getLastReportedLogIndex() {
+     return lastReportedLogIndex;
+   }
+ 
+   @Override
+   public String getAllNodesAsString() {
+     return allNodes.toString();
+   }
+ 
+   @Override
+   public String getPeerMapAsString() {
+     return peerMap.toString();
+   }
+ 
+   @Override
+   public String getLeaderAsString() {
+     return leader.get().toString();
+   }
+ 
+   @Override
+   public String getLogManagerObject() {
+     return getLogManager().toString();
+   }
+ 
+   @Override
+   public String getLastCatchUpResponseTimeAsString() {
+     return lastCatchUpResponseTime.toString();
+   }
  }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupServiceImpls.java
index 0000000,2fec073..ddec446
mode 000000,100644..100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupServiceImpls.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/service/DataGroupServiceImpls.java
@@@ -1,0 -1,743 +1,776 @@@
+ /*
+  * 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.cluster.server.service;
+ 
+ import org.apache.iotdb.cluster.rpc.thrift.AppendEntriesRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
++import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
+ import org.apache.iotdb.cluster.rpc.thrift.ElectionRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.ExecutNonQueryReq;
+ import org.apache.iotdb.cluster.rpc.thrift.GetAggrResultRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.GetAllPathsResult;
+ import org.apache.iotdb.cluster.rpc.thrift.GroupByRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.HeartBeatRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.HeartBeatResponse;
+ import org.apache.iotdb.cluster.rpc.thrift.LastQueryRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.MultSeriesQueryRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.Node;
+ import org.apache.iotdb.cluster.rpc.thrift.PreviousFillRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.PullSchemaRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.PullSchemaResp;
+ import org.apache.iotdb.cluster.rpc.thrift.PullSnapshotRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.PullSnapshotResp;
+ import org.apache.iotdb.cluster.rpc.thrift.RaftNode;
+ import org.apache.iotdb.cluster.rpc.thrift.RequestCommitIndexResponse;
+ import org.apache.iotdb.cluster.rpc.thrift.SendSnapshotRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.SingleSeriesQueryRequest;
+ import org.apache.iotdb.cluster.rpc.thrift.TSDataService;
+ import org.apache.iotdb.cluster.utils.IOUtils;
+ import org.apache.iotdb.service.rpc.thrift.TSStatus;
+ 
+ import org.apache.thrift.TException;
+ import org.apache.thrift.async.AsyncMethodCallback;
+ 
+ import java.io.File;
+ import java.io.IOException;
+ import java.nio.ByteBuffer;
+ import java.nio.file.Files;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ public class DataGroupServiceImpls implements TSDataService.AsyncIface, TSDataService.Iface {
+ 
+   @Override
+   public void sendHeartbeat(
+       HeartBeatRequest request, AsyncMethodCallback<HeartBeatResponse> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.sendHeartbeat(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void startElection(ElectionRequest request, AsyncMethodCallback<Long> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.startElection(request, resultHandler);
+     }
+   }
+ 
+   @Override
 -  public void appendEntries(AppendEntriesRequest request, AsyncMethodCallback<Long> resultHandler) {
++  public void appendEntries(
++      AppendEntriesRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.appendEntries(request, resultHandler);
+     }
+   }
+ 
+   @Override
 -  public void appendEntry(AppendEntryRequest request, AsyncMethodCallback<Long> resultHandler) {
++  public void appendEntry(
++      AppendEntryRequest request, AsyncMethodCallback<AppendEntryResult> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.appendEntry(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void sendSnapshot(SendSnapshotRequest request, AsyncMethodCallback<Void> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.sendSnapshot(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void pullSnapshot(
+       PullSnapshotRequest request, AsyncMethodCallback<PullSnapshotResp> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.pullSnapshot(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void executeNonQueryPlan(
+       ExecutNonQueryReq request, AsyncMethodCallback<TSStatus> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.executeNonQueryPlan(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void requestCommitIndex(
+       RaftNode header, AsyncMethodCallback<RequestCommitIndexResponse> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Request commit index");
+     if (service != null) {
+       service.requestCommitIndex(header, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void readFile(
+       String filePath, long offset, int length, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     try {
+       resultHandler.onComplete(IOUtils.readFile(filePath, offset, length));
+     } catch (IOException e) {
+       resultHandler.onError(e);
+     }
+   }
+ 
+   @Override
+   public void querySingleSeries(
+       SingleSeriesQueryRequest request, AsyncMethodCallback<Long> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(
+                 request.getHeader(), resultHandler, "Query series:" + request.getPath());
+     if (service != null) {
+       service.querySingleSeries(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void queryMultSeries(
+       MultSeriesQueryRequest request, AsyncMethodCallback<Long> resultHandler) throws TException {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(
+                 request.getHeader(), resultHandler, "Query series:" + request.getPath());
+     if (service != null) {
+       service.queryMultSeries(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void fetchSingleSeries(
+       RaftNode header, long readerId, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Fetch reader:" + readerId);
+     if (service != null) {
+       service.fetchSingleSeries(header, readerId, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void fetchMultSeries(
+       RaftNode header,
+       long readerId,
+       List<String> paths,
+       AsyncMethodCallback<Map<String, ByteBuffer>> resultHandler)
+       throws TException {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Fetch reader:" + readerId);
+     if (service != null) {
+       service.fetchMultSeries(header, readerId, paths, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getAllPaths(
+       RaftNode header,
+       List<String> paths,
+       boolean withAlias,
+       AsyncMethodCallback<GetAllPathsResult> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Find path:" + paths);
+     if (service != null) {
+       service.getAllPaths(header, paths, withAlias, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void endQuery(
+       RaftNode header, Node thisNode, long queryId, AsyncMethodCallback<Void> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "End query");
+     if (service != null) {
+       service.endQuery(header, thisNode, queryId, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void querySingleSeriesByTimestamp(
+       SingleSeriesQueryRequest request, AsyncMethodCallback<Long> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(
+                 request.getHeader(),
+                 resultHandler,
+                 "Query by timestamp:"
+                     + request.getQueryId()
+                     + "#"
+                     + request.getPath()
+                     + " of "
+                     + request.getRequester());
+     if (service != null) {
+       service.querySingleSeriesByTimestamp(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void fetchSingleSeriesByTimestamps(
+       RaftNode header,
+       long readerId,
+       List<Long> timestamps,
+       AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Fetch by timestamp:" + readerId);
+     if (service != null) {
+       service.fetchSingleSeriesByTimestamps(header, readerId, timestamps, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void pullTimeSeriesSchema(
+       PullSchemaRequest request, AsyncMethodCallback<PullSchemaResp> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.pullTimeSeriesSchema(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void pullMeasurementSchema(
+       PullSchemaRequest request, AsyncMethodCallback<PullSchemaResp> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, "Pull measurement schema");
+     if (service != null) {
+       service.pullMeasurementSchema(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getAllDevices(
+       RaftNode header, List<String> paths, AsyncMethodCallback<Set<String>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "Get all devices");
+     if (service != null) {
+       service.getAllDevices(header, paths, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getDevices(
 -      RaftNode header, ByteBuffer planBinary, AsyncMethodCallback<ByteBuffer> resultHandler)
 -      throws TException {
++      RaftNode header, ByteBuffer planBinary, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "get devices");
+     if (service != null) {
+       service.getDevices(header, planBinary, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getNodeList(
+       RaftNode header,
+       String path,
+       int nodeLevel,
+       AsyncMethodCallback<List<String>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "Get node list");
+     if (service != null) {
+       service.getNodeList(header, path, nodeLevel, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getChildNodeInNextLevel(
+       RaftNode header, String path, AsyncMethodCallback<Set<String>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Get child node in next level");
+     if (service != null) {
+       service.getChildNodeInNextLevel(header, path, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getChildNodePathInNextLevel(
+       RaftNode header, String path, AsyncMethodCallback<Set<String>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Get child node path in next level");
+     if (service != null) {
+       service.getChildNodePathInNextLevel(header, path, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getAllMeasurementSchema(
+       RaftNode header, ByteBuffer planBytes, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Get all measurement schema");
+     if (service != null) {
+       service.getAllMeasurementSchema(header, planBytes, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getAggrResult(
+       GetAggrResultRequest request, AsyncMethodCallback<List<ByteBuffer>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.getAggrResult(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getUnregisteredTimeseries(
+       RaftNode header,
+       List<String> timeseriesList,
+       AsyncMethodCallback<List<String>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Check if measurements are registered");
+     if (service != null) {
+       service.getUnregisteredTimeseries(header, timeseriesList, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getGroupByExecutor(GroupByRequest request, AsyncMethodCallback<Long> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.getGroupByExecutor(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getGroupByResult(
+       RaftNode header,
+       long executorId,
+       long startTime,
+       long endTime,
+       AsyncMethodCallback<List<ByteBuffer>> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "Fetch group by");
+     if (service != null) {
+       service.getGroupByResult(header, executorId, startTime, endTime, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void previousFill(
+       PreviousFillRequest request, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, request);
+     if (service != null) {
+       service.previousFill(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void matchTerm(
+       long index, long term, RaftNode header, AsyncMethodCallback<Boolean> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "Match term");
+     if (service != null) {
+       service.matchTerm(index, term, header, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void last(LastQueryRequest request, AsyncMethodCallback<ByteBuffer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(request.getHeader(), resultHandler, "last");
+     if (service != null) {
+       service.last(request, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getPathCount(
+       RaftNode header,
+       List<String> pathsToQuery,
+       int level,
+       AsyncMethodCallback<Integer> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "count path");
+     if (service != null) {
+       service.getPathCount(header, pathsToQuery, level, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void getDeviceCount(
+       RaftNode header, List<String> pathsToQuery, AsyncMethodCallback<Integer> resultHandler)
+       throws TException {
+     DataAsyncService service =
+         DataGroupEngine.getInstance().getDataAsyncService(header, resultHandler, "count device");
+     if (service != null) {
+       service.getDeviceCount(header, pathsToQuery, resultHandler);
+     }
+   }
+ 
+   @Override
+   public void onSnapshotApplied(
+       RaftNode header, List<Integer> slots, AsyncMethodCallback<Boolean> resultHandler) {
+     DataAsyncService service =
+         DataGroupEngine.getInstance()
+             .getDataAsyncService(header, resultHandler, "Snapshot applied");
+     if (service != null) {
+       service.onSnapshotApplied(header, slots, resultHandler);
+     }
+   }
+ 
+   @Override
+   public long querySingleSeries(SingleSeriesQueryRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .querySingleSeries(request);
+   }
+ 
+   @Override
+   public long queryMultSeries(MultSeriesQueryRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .queryMultSeries(request);
+   }
+ 
+   @Override
+   public ByteBuffer fetchSingleSeries(RaftNode header, long readerId) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .fetchSingleSeries(header, readerId);
+   }
+ 
+   @Override
+   public Map<String, ByteBuffer> fetchMultSeries(RaftNode header, long readerId, List<String> paths)
+       throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .fetchMultSeries(header, readerId, paths);
+   }
+ 
+   @Override
+   public long querySingleSeriesByTimestamp(SingleSeriesQueryRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .querySingleSeriesByTimestamp(request);
+   }
+ 
+   @Override
+   public ByteBuffer fetchSingleSeriesByTimestamps(
+       RaftNode header, long readerId, List<Long> timestamps) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .fetchSingleSeriesByTimestamps(header, readerId, timestamps);
+   }
+ 
+   @Override
+   public void endQuery(RaftNode header, Node thisNode, long queryId) throws TException {
+     DataGroupEngine.getInstance().getDataSyncService(header).endQuery(header, thisNode, queryId);
+   }
+ 
+   @Override
+   public GetAllPathsResult getAllPaths(RaftNode header, List<String> path, boolean withAlias)
+       throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getAllPaths(header, path, withAlias);
+   }
+ 
+   @Override
+   public Set<String> getAllDevices(RaftNode header, List<String> path) throws TException {
+     return DataGroupEngine.getInstance().getDataSyncService(header).getAllDevices(header, path);
+   }
+ 
+   @Override
+   public List<String> getNodeList(RaftNode header, String path, int nodeLevel) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getNodeList(header, path, nodeLevel);
+   }
+ 
+   @Override
+   public Set<String> getChildNodeInNextLevel(RaftNode header, String path) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getChildNodeInNextLevel(header, path);
+   }
+ 
+   @Override
+   public Set<String> getChildNodePathInNextLevel(RaftNode header, String path) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getChildNodePathInNextLevel(header, path);
+   }
+ 
+   @Override
+   public ByteBuffer getAllMeasurementSchema(RaftNode header, ByteBuffer planBinary)
+       throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getAllMeasurementSchema(header, planBinary);
+   }
+ 
+   @Override
+   public ByteBuffer getDevices(RaftNode header, ByteBuffer planBinary) throws TException {
+     return DataGroupEngine.getInstance().getDataSyncService(header).getDevices(header, planBinary);
+   }
+ 
+   @Override
+   public List<ByteBuffer> getAggrResult(GetAggrResultRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .getAggrResult(request);
+   }
+ 
+   @Override
+   public List<String> getUnregisteredTimeseries(RaftNode header, List<String> timeseriesList)
+       throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getUnregisteredTimeseries(header, timeseriesList);
+   }
+ 
+   @Override
+   public PullSnapshotResp pullSnapshot(PullSnapshotRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .pullSnapshot(request);
+   }
+ 
+   @Override
+   public long getGroupByExecutor(GroupByRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .getGroupByExecutor(request);
+   }
+ 
+   @Override
+   public List<ByteBuffer> getGroupByResult(
+       RaftNode header, long executorId, long startTime, long endTime) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getGroupByResult(header, executorId, startTime, endTime);
+   }
+ 
+   @Override
+   public PullSchemaResp pullTimeSeriesSchema(PullSchemaRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .pullTimeSeriesSchema(request);
+   }
+ 
+   @Override
+   public PullSchemaResp pullMeasurementSchema(PullSchemaRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .pullMeasurementSchema(request);
+   }
+ 
+   @Override
+   public ByteBuffer previousFill(PreviousFillRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .previousFill(request);
+   }
+ 
+   @Override
+   public ByteBuffer last(LastQueryRequest request) throws TException {
+     return DataGroupEngine.getInstance().getDataSyncService(request.getHeader()).last(request);
+   }
+ 
+   @Override
+   public int getPathCount(RaftNode header, List<String> pathsToQuery, int level) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getPathCount(header, pathsToQuery, level);
+   }
+ 
+   @Override
+   public boolean onSnapshotApplied(RaftNode header, List<Integer> slots) {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .onSnapshotApplied(header, slots);
+   }
+ 
+   @Override
+   public int getDeviceCount(RaftNode header, List<String> pathsToQuery) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .getDeviceCount(header, pathsToQuery);
+   }
+ 
+   @Override
+   public HeartBeatResponse sendHeartbeat(HeartBeatRequest request) {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .sendHeartbeat(request);
+   }
+ 
+   @Override
+   public long startElection(ElectionRequest request) {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .startElection(request);
+   }
+ 
+   @Override
 -  public long appendEntries(AppendEntriesRequest request) throws TException {
++  public AppendEntryResult appendEntries(AppendEntriesRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .appendEntries(request);
+   }
+ 
+   @Override
 -  public long appendEntry(AppendEntryRequest request) throws TException {
++  public AppendEntryResult appendEntry(AppendEntryRequest request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .appendEntry(request);
+   }
+ 
+   @Override
+   public void sendSnapshot(SendSnapshotRequest request) throws TException {
+     DataGroupEngine.getInstance().getDataSyncService(request.getHeader()).sendSnapshot(request);
+   }
+ 
+   @Override
+   public TSStatus executeNonQueryPlan(ExecutNonQueryReq request) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(request.getHeader())
+         .executeNonQueryPlan(request);
+   }
+ 
+   @Override
+   public RequestCommitIndexResponse requestCommitIndex(RaftNode header) throws TException {
+     return DataGroupEngine.getInstance().getDataSyncService(header).requestCommitIndex(header);
+   }
+ 
+   @Override
+   public ByteBuffer readFile(String filePath, long offset, int length) throws TException {
+     try {
+       return IOUtils.readFile(filePath, offset, length);
+     } catch (IOException e) {
+       throw new TException(e);
+     }
+   }
+ 
+   @Override
+   public boolean matchTerm(long index, long term, RaftNode header) {
+     return DataGroupEngine.getInstance().getDataSyncService(header).matchTerm(index, term, header);
+   }
+ 
+   @Override
+   public ByteBuffer peekNextNotNullValue(
+       RaftNode header, long executorId, long startTime, long endTime) throws TException {
+     return DataGroupEngine.getInstance()
+         .getDataSyncService(header)
+         .peekNextNotNullValue(header, executorId, startTime, endTime);
+   }
+ 
+   @Override
+   public void peekNextNotNullValue(
+       RaftNode header,
+       long executorId,
+       long startTime,
+       long endTime,
+       AsyncMethodCallback<ByteBuffer> resultHandler)
+       throws TException {
+     resultHandler.onComplete(
+         DataGroupEngine.getInstance()
+             .getDataSyncService(header)
+             .peekNextNotNullValue(header, executorId, startTime, endTime));
+   }
+ 
+   @Override
+   public void removeHardLink(String hardLinkPath) throws TException {
+     try {
+       Files.deleteIfExists(new File(hardLinkPath).toPath());
+     } catch (IOException e) {
+       throw new TException(e);
+     }
+   }
+ 
+   @Override
+   public void removeHardLink(String hardLinkPath, AsyncMethodCallback<Void> resultHandler) {
+     try {
+       Files.deleteIfExists(new File(hardLinkPath).toPath());
+       resultHandler.onComplete(null);
+     } catch (IOException e) {
+       resultHandler.onError(e);
+     }
+   }
++
++  @Override
++  public AppendEntryResult appendEntryIndirect(AppendEntryRequest request, List<Node> subReceivers)
++      throws TException {
++    return DataGroupEngine.getInstance()
++        .getDataSyncService(request.getHeader())
++        .appendEntryIndirect(request, subReceivers);
++  }
++
++  @Override
++  public void acknowledgeAppendEntry(AppendEntryResult ack) {
++    DataGroupEngine.getInstance().getDataSyncService(ack.getHeader()).acknowledgeAppendEntry(ack);
++  }
++
++  @Override
++  public void appendEntryIndirect(
++      AppendEntryRequest request,
++      List<Node> subReceivers,
++      AsyncMethodCallback<AppendEntryResult> resultHandler) {
++    DataGroupEngine.getInstance()
++        .getDataAsyncService(request.getHeader(), resultHandler, request)
++        .appendEntryIndirect(request, subReceivers, resultHandler);
++  }
++
++  @Override
++  public void acknowledgeAppendEntry(
++      AppendEntryResult ack, AsyncMethodCallback<Void> resultHandler) {
++    DataGroupEngine.getInstance()
++        .getDataAsyncService(ack.getHeader(), resultHandler, ack)
++        .acknowledgeAppendEntry(ack, resultHandler);
++  }
+ }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaAsyncService.java
index 4f547a3,659f953..878528b
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaAsyncService.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaAsyncService.java
@@@ -25,9 -25,9 +25,11 @@@ import org.apache.iotdb.cluster.excepti
  import org.apache.iotdb.cluster.exception.LeaderUnknownException;
  import org.apache.iotdb.cluster.exception.LogExecutionException;
  import org.apache.iotdb.cluster.exception.PartitionTableUnavailableException;
++import org.apache.iotdb.cluster.exception.UnknownLogTypeException;
  import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
  import org.apache.iotdb.cluster.rpc.thrift.AddNodeResponse;
  import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
++import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
  import org.apache.iotdb.cluster.rpc.thrift.CheckStatusResponse;
  import org.apache.iotdb.cluster.rpc.thrift.Node;
  import org.apache.iotdb.cluster.rpc.thrift.SendSnapshotRequest;
@@@ -45,9 -45,9 +47,10 @@@ import org.slf4j.Logger
  import org.slf4j.LoggerFactory;
  
  import java.nio.ByteBuffer;
++import java.util.List;
  
  public class MetaAsyncService extends BaseAsyncService implements TSMetaService.AsyncIface {
- 
+   private static final String ERROR_MSG_META_NOT_READY = "The metadata not is not ready.";
    private static final Logger logger = LoggerFactory.getLogger(MetaAsyncService.class);
  
    private MetaGroupMember metaGroupMember;
@@@ -236,4 -252,4 +255,23 @@@
      metaGroupMember.handleHandshake(sender);
      resultHandler.onComplete(null);
    }
++
++  @Override
++  public void appendEntryIndirect(
++      AppendEntryRequest request,
++      List<Node> subReceivers,
++      AsyncMethodCallback<AppendEntryResult> resultHandler) {
++    try {
++      resultHandler.onComplete(metaGroupMember.appendEntryIndirect(request, subReceivers));
++    } catch (UnknownLogTypeException e) {
++      resultHandler.onError(e);
++    }
++  }
++
++  @Override
++  public void acknowledgeAppendEntry(
++      AppendEntryResult ack, AsyncMethodCallback<Void> resultHandler) {
++    metaGroupMember.acknowledgeAppendLog(ack);
++    resultHandler.onComplete(null);
++  }
  }
diff --cc cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaSyncService.java
index 204c45a,f52b7c8..93a0ba6
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaSyncService.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/service/MetaSyncService.java
@@@ -26,6 -26,6 +26,7 @@@ import org.apache.iotdb.cluster.excepti
  import org.apache.iotdb.cluster.exception.LeaderUnknownException;
  import org.apache.iotdb.cluster.exception.LogExecutionException;
  import org.apache.iotdb.cluster.exception.PartitionTableUnavailableException;
++import org.apache.iotdb.cluster.exception.UnknownLogTypeException;
  import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
  import org.apache.iotdb.cluster.rpc.thrift.AddNodeResponse;
  import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
@@@ -47,6 -46,6 +48,7 @@@ import org.slf4j.Logger
  import org.slf4j.LoggerFactory;
  
  import java.nio.ByteBuffer;
++import java.util.List;
  
  public class MetaSyncService extends BaseSyncService implements TSMetaService.Iface {
  
@@@ -59,12 -58,23 +61,23 @@@
      this.metaGroupMember = metaGroupMember;
    }
  
+   // behavior of followers
    @Override
 -  public long appendEntry(AppendEntryRequest request) throws TException {
 +  public AppendEntryResult appendEntry(AppendEntryRequest request) throws TException {
-     if (metaGroupMember.getPartitionTable() == null) {
-       // this node lacks information of the cluster and refuse to work
-       logger.debug("This node is blind to the cluster and cannot accept logs");
-       return new AppendEntryResult(Response.RESPONSE_PARTITION_TABLE_UNAVAILABLE);
+     // if the metaGroupMember is not ready (e.g., as a follower the PartitionTable is loaded
+     // locally, but the partition table is not verified), we do not handle the RPC requests.
+     if (!metaGroupMember.isReady()) {
+       // the only special case is that the leader will send an empty entry for letting followers
+       // submit  previous log
+       // at this time, the partitionTable has been loaded but is not verified. So the PRC is not
+       // ready.
+       if (metaGroupMember.getPartitionTable() == null) {
+         // this node lacks information of the cluster and refuse to work
+         logger.debug("This node is blind to the cluster and cannot accept logs, {}", request);
 -        return Response.RESPONSE_PARTITION_TABLE_UNAVAILABLE;
++        return new AppendEntryResult(Response.RESPONSE_PARTITION_TABLE_UNAVAILABLE);
+       } else {
+         // do nothing because we consider if the partitionTable is loaded, then it is corrected.
+       }
      }
  
      return super.appendEntry(request);
@@@ -226,4 -250,4 +253,19 @@@
    public void handshake(Node sender) {
      metaGroupMember.handleHandshake(sender);
    }
++
++  @Override
++  public AppendEntryResult appendEntryIndirect(AppendEntryRequest request, List<Node> subReceivers)
++      throws TException {
++    try {
++      return metaGroupMember.appendEntryIndirect(request, subReceivers);
++    } catch (UnknownLogTypeException e) {
++      throw new TException(e);
++    }
++  }
++
++  @Override
++  public void acknowledgeAppendEntry(AppendEntryResult ack) {
++    metaGroupMember.acknowledgeAppendLog(ack);
++  }
  }
diff --cc cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
index b6762aa,1303df1..9d65020
--- a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
@@@ -19,9 -19,9 +19,10 @@@
  
  package org.apache.iotdb.cluster.common;
  
+ import org.apache.iotdb.cluster.client.ClientCategory;
  import org.apache.iotdb.cluster.client.async.AsyncDataClient;
  import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
 +import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
  import org.apache.iotdb.cluster.rpc.thrift.ElectionRequest;
  import org.apache.iotdb.cluster.rpc.thrift.ExecutNonQueryReq;
  import org.apache.iotdb.cluster.rpc.thrift.GetAggrResultRequest;
diff --cc cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendGroupEntryHandlerTest.java
index b5a984b,e468560..14eac19
--- a/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendGroupEntryHandlerTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/handlers/caller/AppendGroupEntryHandlerTest.java
@@@ -25,9 -25,9 +25,10 @@@ import org.apache.iotdb.cluster.common.
  import org.apache.iotdb.cluster.common.TestUtils;
  import org.apache.iotdb.cluster.config.ClusterDescriptor;
  import org.apache.iotdb.cluster.log.Log;
 +import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
  import org.apache.iotdb.cluster.server.Response;
  import org.apache.iotdb.cluster.server.member.RaftMember;
+ import org.apache.iotdb.db.exception.StorageEngineException;
  import org.apache.iotdb.db.utils.EnvironmentUtils;
  
  import org.junit.After;
diff --cc cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
index 406113b,d6ad1b7..9b5b6b8
--- a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/BaseMember.java
@@@ -40,9 -43,9 +43,10 @@@ import org.apache.iotdb.cluster.partiti
  import org.apache.iotdb.cluster.partition.PartitionTable;
  import org.apache.iotdb.cluster.partition.slot.SlotPartitionTable;
  import org.apache.iotdb.cluster.rpc.thrift.AppendEntryRequest;
 +import org.apache.iotdb.cluster.rpc.thrift.AppendEntryResult;
  import org.apache.iotdb.cluster.rpc.thrift.Node;
  import org.apache.iotdb.cluster.rpc.thrift.RaftNode;
+ import org.apache.iotdb.cluster.rpc.thrift.RaftService;
  import org.apache.iotdb.cluster.rpc.thrift.RaftService.AsyncClient;
  import org.apache.iotdb.cluster.rpc.thrift.TNodeStatus;
  import org.apache.iotdb.cluster.server.NodeCharacter;
diff --cc server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
index 8e03bae,86c7227..276ca36
--- a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java
@@@ -173,9 -173,10 +173,11 @@@ public abstract class Operator 
      SHOW_CONTINUOUS_QUERIES,
      SET_SYSTEM_MODE,
  
 +    EMPTY,
      SETTLE,
  
-     UNSET_SCHEMA_TEMPLATE
+     UNSET_TEMPLATE,
+     PRUNE_TEMPLATE,
+     APPEND_TEMPLATE
    }
  }
diff --cc server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
index 464d9cf,f77021a..33f1ca7
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
@@@ -488,9 -538,10 +542,11 @@@ public abstract class PhysicalPlan 
      CREATE_FUNCTION,
      DROP_FUNCTION,
      SELECT_INTO,
 +    DUMMY,
      SET_SYSTEM_MODE,
-     UNSET_SCHEMA_TEMPLATE
+     UNSET_TEMPLATE,
+     APPEND_TEMPLATE,
+     PRUNE_TEMPLATE
    }
  
    public long getIndex() {
diff --cc server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
index 58010c9,0000000..67f7637
mode 100644,000000..100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/DummyPlan.java
@@@ -1,94 -1,0 +1,95 @@@
 +/*
 + * 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.qp.physical.sys;
 +
 +import org.apache.iotdb.db.exception.metadata.IllegalPathException;
- import org.apache.iotdb.db.metadata.PartialPath;
++import org.apache.iotdb.db.metadata.path.PartialPath;
 +import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 +import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 +
 +import java.io.DataOutputStream;
 +import java.io.IOException;
 +import java.nio.ByteBuffer;
++import java.util.Collections;
 +import java.util.List;
 +
 +public class DummyPlan extends PhysicalPlan {
 +
 +  private byte[] workload;
 +  private boolean needForward;
 +
 +  public DummyPlan() {
 +    super(false, OperatorType.EMPTY);
 +  }
 +
 +  @Override
 +  public List<PartialPath> getPaths() {
-     return null;
++    return Collections.emptyList();
 +  }
 +
 +  @Override
 +  public void serialize(DataOutputStream stream) throws IOException {
 +    stream.write((byte) PhysicalPlanType.DUMMY.ordinal());
 +    stream.writeInt(workload == null ? 0 : workload.length);
 +    if (workload != null) {
 +      stream.write(workload);
 +    }
 +    stream.write(needForward ? 1 : 0);
 +  }
 +
 +  @Override
 +  public void serialize(ByteBuffer buffer) {
 +    buffer.put((byte) PhysicalPlanType.DUMMY.ordinal());
 +    buffer.putInt(workload == null ? 0 : workload.length);
 +    if (workload != null) {
 +      buffer.put(workload);
 +    }
 +    buffer.put(needForward ? (byte) 1 : 0);
 +  }
 +
 +  @Override
 +  public void deserialize(ByteBuffer buffer) throws IllegalPathException {
 +    int size = buffer.getInt();
 +    workload = new byte[size];
 +    buffer.get(workload);
 +    needForward = buffer.get() == 1;
 +  }
 +
 +  public void setWorkload(byte[] workload) {
 +    this.workload = workload;
 +  }
 +
 +  public boolean isNeedForward() {
 +    return needForward;
 +  }
 +
 +  public void setNeedForward(boolean needForward) {
 +    this.needForward = needForward;
 +  }
 +
 +  public byte[] getWorkload() {
 +    return workload;
 +  }
 +
 +  @Override
 +  public String toString() {
 +    return "ExprPlan";
 +  }
 +}
diff --cc thrift-cluster/src/main/thrift/cluster.thrift
index 74f670c,1bbd9e3..64914ba
--- a/thrift-cluster/src/main/thrift/cluster.thrift
+++ b/thrift-cluster/src/main/thrift/cluster.thrift
@@@ -88,18 -88,8 +88,12 @@@ struct AppendEntryRequest 
    // because a data server may play many data groups members, this is used to identify which
    // member should process the request or response. Only used in data group communication.
    7: optional RaftNode header
 +  // true if the request is sent from the leader, and the reiceiver just responds to the sender;
 +  // otherwise, the reiceiver should also notify the leader
 +  8: optional bool isFromLeader
  }
  
 +
- struct AppendEntryAcknowledgement {
-   1: required long term
-   2: required long index
-   3: required long response
- }
- 
  // leader -> follower
  struct AppendEntriesRequest {
    1: required long term // leader's
@@@ -273,17 -263,11 +267,18 @@@ struct LastQueryRequest 
  }
  
  struct GetAllPathsResult {
-   1: required list<list<string>> paths
-   2: optional list<string> aliasList
+   1: required list<string> paths
+   2: required list<byte> dataTypes
+   3: optional list<string> aliasList
  }
  
 +struct AppendEntryResult {
 +  1: required i64 status;
 +  2: optional i64 lastLogTerm;
 +  3: optional i64 lastLogIndex;
 +  4: optional RaftNode header;
 +}
 +
  
  service RaftService {
    /**