You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2023/05/24 02:20:57 UTC

[iotdb] 01/01: change client-cpp and client-py to clients module

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

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

commit fbdcba188a62c80d3933692effd1e3eef68e05f2
Author: Alima777 <wx...@gmail.com>
AuthorDate: Wed May 24 10:18:20 2023 +0800

    change client-cpp and client-py to clients module
---
 client-cpp/src/main/CMakeLists.txt                 |  54 -------
 client-cpp/src/test/CMakeLists.txt                 |  63 --------
 client-go                                          |   1 -
 client-py/requirements.txt                         |  26 ----
 client-py/requirements_dev.txt                     |  27 ----
 {client-cpp => client/client-cpp}/README.md        |   0
 {client-cpp => client/client-cpp}/pom.xml          |  27 ++--
 .../client-cpp}/src/assembly/client-cpp.xml        |   0
 .../client-cpp}/src/main/Session.cpp               |   0
 .../client-cpp}/src/main/Session.h                 |   0
 .../client-cpp}/src/test/cpp/sessionIT.cpp         |   0
 .../client-cpp}/src/test/main.cpp                  |   0
 {client-py => client/client-py}/.flake8            |   0
 {client-py => client/client-py}/.gitignore         |   0
 {client-py => client/client-py}/README.md          |   0
 .../client-py}/SessionAlignedTimeseriesExample.py  |   0
 {client-py => client/client-py}/SessionExample.py  |   0
 .../client-py}/iotdb/IoTDBContainer.py             |   0
 {client-py => client/client-py}/iotdb/Session.py   |   0
 {client-py => client/client-py}/iotdb/__init__.py  |   0
 .../client-py}/iotdb/dbapi/Connection.py           |   0
 .../client-py}/iotdb/dbapi/Cursor.py               |   0
 .../client-py}/iotdb/dbapi/Exceptions.py           |   0
 .../client-py}/iotdb/dbapi/__init__.py             |   0
 .../client-py}/iotdb/dbapi/tests/__init__.py       |   0
 .../iotdb/dbapi/tests/test_connection.py           |   0
 .../client-py}/iotdb/dbapi/tests/test_cursor.py    |   0
 .../client-py}/iotdb/sqlalchemy/IoTDBDialect.py    |   0
 .../iotdb/sqlalchemy/IoTDBIdentifierPreparer.py    |   0
 .../iotdb/sqlalchemy/IoTDBSQLCompiler.py           |   0
 .../iotdb/sqlalchemy/IoTDBTypeCompiler.py          |   0
 .../client-py}/iotdb/sqlalchemy/__init__.py        |   0
 .../client-py}/iotdb/sqlalchemy/tests/__init__.py  |   0
 .../iotdb/sqlalchemy/tests/test_dialect.py         |   0
 .../client-py}/iotdb/template/InternalNode.py      |   0
 .../client-py}/iotdb/template/MeasurementNode.py   |   0
 .../client-py}/iotdb/template/Template.py          |   0
 .../client-py}/iotdb/template/TemplateNode.py      |   0
 .../client-py}/iotdb/template/TemplateQueryType.py |   0
 .../client-py}/iotdb/template/__init__.py          |   0
 .../client-py}/iotdb/tsfile/__init__.py            |   0
 .../client-py}/iotdb/tsfile/common/__init__.py     |   0
 .../iotdb/tsfile/common/constant/TsFileConstant.py |   0
 .../iotdb/tsfile/common/constant/__init__.py       |   0
 .../client-py}/iotdb/tsfile/utils/Pair.py          |   0
 .../iotdb/tsfile/utils/ReadWriteIOUtils.py         |   0
 .../client-py}/iotdb/tsfile/utils/__init__.py      |   0
 .../client-py}/iotdb/utils/BitMap.py               |   0
 .../client-py}/iotdb/utils/Field.py                |   0
 .../iotdb/utils/IoTDBConnectionException.py        |   0
 .../client-py}/iotdb/utils/IoTDBConstants.py       |   0
 .../client-py}/iotdb/utils/IoTDBRpcDataSet.py      |   0
 .../client-py}/iotdb/utils/NumpyTablet.py          |   0
 .../client-py}/iotdb/utils/RowRecord.py            |   0
 .../client-py}/iotdb/utils/SessionDataSet.py       |   0
 .../client-py}/iotdb/utils/Tablet.py               |   0
 .../client-py}/iotdb/utils/__init__.py             |   0
 {client-py => client/client-py}/pom.xml            |  17 +-
 {client-py => client/client-py}/pyproject.toml     |   0
 {client-py => client/client-py}/release.sh         |   0
 {client-py => client/client-py}/setup.py           |   0
 {client-py => client/client-py}/tests/__init__.py  |   0
 .../tests/tablet_performance_comparison.py         |   0
 .../client-py}/tests/test_aligned_timeseries.py    |   0
 .../client-py}/tests/test_dataframe.py             |   0
 .../client-py}/tests/test_delete_data.py           |   0
 .../client-py}/tests/test_numpy_tablet.py          |   0
 .../client-py}/tests/test_one_device.py            |   0
 .../client-py}/tests/test_session.py               |   0
 .../client-py}/tests/test_tablet.py                |   0
 .../client-py}/tests/test_template.py              |   0
 {client-py => client/client-py}/tests/test_todf.py |   0
 client/pom.xml                                     |  60 ++++++++
 pom.xml                                            | 171 ++++++++++-----------
 74 files changed, 162 insertions(+), 284 deletions(-)

diff --git a/client-cpp/src/main/CMakeLists.txt b/client-cpp/src/main/CMakeLists.txt
deleted file mode 100644
index 5a044a6383f..00000000000
--- a/client-cpp/src/main/CMakeLists.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
-PROJECT(iotdb_session CXX)
-SET(CMAKE_CXX_STANDARD 11)
-SET(CMAKE_CXX_STANDARD_REQUIRED ON)
-SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -g -O2 ")
-SET(TOOLS_DIR "${CMAKE_SOURCE_DIR}/../../../../compile-tools")
-
-# Add Thrift include directory
-INCLUDE_DIRECTORIES(${TOOLS_DIR}/thrift/target/thrift-0.14.1/lib/cpp/src)
-
-FIND_PACKAGE(Boost REQUIRED)
-IF (DEFINED BOOST_INCLUDEDIR)
-    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
-ENDIF()
-
-IF(MSVC)
-    SET(THRIFT_STATIC_LIB "${TOOLS_DIR}/thrift/target/build/lib/Release/thriftmd.lib")
-ELSE()
-    SET(THRIFT_STATIC_LIB "${TOOLS_DIR}/thrift/target/build/lib/libthrift.a")
-ENDIF()
-
-# Add Boost include path for MacOS
-INCLUDE_DIRECTORIES(/usr/local/include)
-
-# Add ./generated-sources-cpp as a Cmake subdirectory
-AUX_SOURCE_DIRECTORY(./generated-sources-cpp SESSION_SRCS)
-
-IF(MSVC)
-    ADD_LIBRARY(iotdb_session ${SESSION_SRCS})
-ELSE()
-    ADD_LIBRARY(iotdb_session SHARED ${SESSION_SRCS})
-ENDIF()
-
-# Link with Thrift static library
-TARGET_LINK_LIBRARIES(iotdb_session ${THRIFT_STATIC_LIB})
diff --git a/client-cpp/src/test/CMakeLists.txt b/client-cpp/src/test/CMakeLists.txt
deleted file mode 100644
index 7d6d18bcd5f..00000000000
--- a/client-cpp/src/test/CMakeLists.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
-INCLUDE( CTest )
-SET(CMAKE_CXX_STANDARD 11)
-SET(CMAKE_CXX_STANDARD_REQUIRED ON)
-SET(TARGET_NAME session_tests)
-SET(TOOLS_DIR "${CMAKE_SOURCE_DIR}/../../../../compile-tools")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -g -O2")
-ENABLE_TESTING()
-
-# Add Boost include path for MacOS
-INCLUDE_DIRECTORIES(/usr/local/include)
-# Add Session related include files
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/../main/generated-sources-cpp)
-# Add Thrift include directory
-INCLUDE_DIRECTORIES(${TOOLS_DIR}/thrift/target/thrift-0.14.1/lib/cpp/src)
-
-find_package(Boost REQUIRED)
-IF (DEFINED BOOST_INCLUDEDIR)
-    include_directories("${Boost_INCLUDE_DIR}")
-ENDIF()
-
-# Link directories are different for Windows and Linux/Mac
-IF(MSVC)
-    LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/../main/Release)
-    SET(THRIFT_STATIC_LIB "${TOOLS_DIR}/thrift/target/build/lib/Release/thriftmd.lib")
-ELSE()
-    LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/../main)
-ENDIF()
-
-ADD_EXECUTABLE(${TARGET_NAME} main.cpp cpp/sessionIT.cpp)
-
-# Link with shared library iotdb_session and pthread
-IF(MSVC)
-    TARGET_LINK_LIBRARIES(${TARGET_NAME} iotdb_session ${THRIFT_STATIC_LIB})
-ELSE()
-    TARGET_LINK_LIBRARIES(${TARGET_NAME} iotdb_session pthread)
-ENDIF()
-TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME} PUBLIC ./catch2/)
-
-# Add 'sessionIT' to the project to be run by ctest
-IF(MSVC)
-    ADD_TEST(NAME sessionIT CONFIGURATIONS Release COMMAND ${TARGET_NAME})
-ELSE()
-    ADD_TEST(NAME sessionIT COMMAND ${TARGET_NAME})
-ENDIF()
diff --git a/client-go b/client-go
deleted file mode 160000
index a05323c73a3..00000000000
--- a/client-go
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a05323c73a3d615efde25d4d3287fcee32ec1292
diff --git a/client-py/requirements.txt b/client-py/requirements.txt
deleted file mode 100644
index 521bb7ed836..00000000000
--- a/client-py/requirements.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-# Pandas Export
-pandas>=1.3.5
-# Testcontainer
-testcontainers==3.3.0
-numpy>=1.21.4
-# SQLAlchemy Dialect
-sqlalchemy == 1.3.20
-sqlalchemy-utils == 0.36.8
\ No newline at end of file
diff --git a/client-py/requirements_dev.txt b/client-py/requirements_dev.txt
deleted file mode 100644
index 304a07c3172..00000000000
--- a/client-py/requirements_dev.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
--r requirements.txt
-# Pytest to run tests
-pytest==7.2.0
-thrift==0.14.1
-flake8==3.9.0
-black==20.8b1
-# For releases
-twine==3.4.1
-wheel==0.38.1
\ No newline at end of file
diff --git a/client-cpp/README.md b/client/client-cpp/README.md
similarity index 100%
rename from client-cpp/README.md
rename to client/client-cpp/README.md
diff --git a/client-cpp/pom.xml b/client/client-cpp/pom.xml
similarity index 95%
rename from client-cpp/pom.xml
rename to client/client-cpp/pom.xml
index 1e9a199d74a..e892349595a 100644
--- a/client-cpp/pom.xml
+++ b/client/client-cpp/pom.xml
@@ -22,7 +22,7 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <artifactId>iotdb-parent</artifactId>
+        <artifactId>iotdb-clients</artifactId>
         <groupId>org.apache.iotdb</groupId>
         <version>1.2.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
@@ -42,7 +42,7 @@
         <catch2.url>https://github.com/catchorg/Catch2/releases/download/v2.13.7/catch.hpp</catch2.url>
     </properties>
     <modules>
-        <module>../example/client-cpp-example</module>
+        <module>../../example/client-cpp-example</module>
     </modules>
     <dependencies>
         <dependency>
@@ -50,11 +50,6 @@
             <artifactId>client-cpp-tools-thrift</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>iotdb-thrift-commons</artifactId>
-            <version>${project.version}</version>
-        </dependency>
     </dependencies>
     <profiles>
         <profile>
@@ -241,15 +236,15 @@
                                 <configuration>
                                     <classifier>${os.classifier}</classifier>
                                     <!--
-                                      We need to use a newer version of cmake, so disable downloading. If we do not
-                                      set this to false, a cmake of version 3.7.2 will be downloaded.
-                                    -->
+                    We need to use a newer version of cmake, so disable downloading. If we do not
+                    set this to false, a cmake of version 3.7.2 will be downloaded.
+                  -->
                                     <downloadBinaries>false</downloadBinaries>
                                     <sourcePath>${project.build.directory}/build/main</sourcePath>
                                     <!--
-                                      Path to where the build configuration is generated
-                                      (This directory is then used in the compile step to actually perform the build)
-                                    -->
+                    Path to where the build configuration is generated
+                    (This directory is then used in the compile step to actually perform the build)
+                  -->
                                     <targetPath>${project.build.directory}/build/main</targetPath>
                                     <generator>${cmake.generator}</generator>
                                     <options>
@@ -269,9 +264,9 @@
                                     <classifier>${os.classifier}</classifier>
                                     <config>${cmake.build.type}</config>
                                     <!--
-                                      We need to use a newer version of cmake, so disable downloading
-                                      and tell the plugin where to find that version.
-                                    -->
+                    We need to use a newer version of cmake, so disable downloading
+                    and tell the plugin where to find that version.
+                  -->
                                     <downloadBinaries>false</downloadBinaries>
                                     <!-- The directory where the "generate" step generated the build configuration -->
                                     <projectDirectory>${project.build.directory}/build/main</projectDirectory>
diff --git a/client-cpp/src/assembly/client-cpp.xml b/client/client-cpp/src/assembly/client-cpp.xml
similarity index 100%
rename from client-cpp/src/assembly/client-cpp.xml
rename to client/client-cpp/src/assembly/client-cpp.xml
diff --git a/client-cpp/src/main/Session.cpp b/client/client-cpp/src/main/Session.cpp
similarity index 100%
rename from client-cpp/src/main/Session.cpp
rename to client/client-cpp/src/main/Session.cpp
diff --git a/client-cpp/src/main/Session.h b/client/client-cpp/src/main/Session.h
similarity index 100%
rename from client-cpp/src/main/Session.h
rename to client/client-cpp/src/main/Session.h
diff --git a/client-cpp/src/test/cpp/sessionIT.cpp b/client/client-cpp/src/test/cpp/sessionIT.cpp
similarity index 100%
rename from client-cpp/src/test/cpp/sessionIT.cpp
rename to client/client-cpp/src/test/cpp/sessionIT.cpp
diff --git a/client-cpp/src/test/main.cpp b/client/client-cpp/src/test/main.cpp
similarity index 100%
rename from client-cpp/src/test/main.cpp
rename to client/client-cpp/src/test/main.cpp
diff --git a/client-py/.flake8 b/client/client-py/.flake8
similarity index 100%
rename from client-py/.flake8
rename to client/client-py/.flake8
diff --git a/client-py/.gitignore b/client/client-py/.gitignore
similarity index 100%
rename from client-py/.gitignore
rename to client/client-py/.gitignore
diff --git a/client-py/README.md b/client/client-py/README.md
similarity index 100%
rename from client-py/README.md
rename to client/client-py/README.md
diff --git a/client-py/SessionAlignedTimeseriesExample.py b/client/client-py/SessionAlignedTimeseriesExample.py
similarity index 100%
rename from client-py/SessionAlignedTimeseriesExample.py
rename to client/client-py/SessionAlignedTimeseriesExample.py
diff --git a/client-py/SessionExample.py b/client/client-py/SessionExample.py
similarity index 100%
rename from client-py/SessionExample.py
rename to client/client-py/SessionExample.py
diff --git a/client-py/iotdb/IoTDBContainer.py b/client/client-py/iotdb/IoTDBContainer.py
similarity index 100%
rename from client-py/iotdb/IoTDBContainer.py
rename to client/client-py/iotdb/IoTDBContainer.py
diff --git a/client-py/iotdb/Session.py b/client/client-py/iotdb/Session.py
similarity index 100%
rename from client-py/iotdb/Session.py
rename to client/client-py/iotdb/Session.py
diff --git a/client-py/iotdb/__init__.py b/client/client-py/iotdb/__init__.py
similarity index 100%
rename from client-py/iotdb/__init__.py
rename to client/client-py/iotdb/__init__.py
diff --git a/client-py/iotdb/dbapi/Connection.py b/client/client-py/iotdb/dbapi/Connection.py
similarity index 100%
rename from client-py/iotdb/dbapi/Connection.py
rename to client/client-py/iotdb/dbapi/Connection.py
diff --git a/client-py/iotdb/dbapi/Cursor.py b/client/client-py/iotdb/dbapi/Cursor.py
similarity index 100%
rename from client-py/iotdb/dbapi/Cursor.py
rename to client/client-py/iotdb/dbapi/Cursor.py
diff --git a/client-py/iotdb/dbapi/Exceptions.py b/client/client-py/iotdb/dbapi/Exceptions.py
similarity index 100%
rename from client-py/iotdb/dbapi/Exceptions.py
rename to client/client-py/iotdb/dbapi/Exceptions.py
diff --git a/client-py/iotdb/dbapi/__init__.py b/client/client-py/iotdb/dbapi/__init__.py
similarity index 100%
rename from client-py/iotdb/dbapi/__init__.py
rename to client/client-py/iotdb/dbapi/__init__.py
diff --git a/client-py/iotdb/dbapi/tests/__init__.py b/client/client-py/iotdb/dbapi/tests/__init__.py
similarity index 100%
rename from client-py/iotdb/dbapi/tests/__init__.py
rename to client/client-py/iotdb/dbapi/tests/__init__.py
diff --git a/client-py/iotdb/dbapi/tests/test_connection.py b/client/client-py/iotdb/dbapi/tests/test_connection.py
similarity index 100%
rename from client-py/iotdb/dbapi/tests/test_connection.py
rename to client/client-py/iotdb/dbapi/tests/test_connection.py
diff --git a/client-py/iotdb/dbapi/tests/test_cursor.py b/client/client-py/iotdb/dbapi/tests/test_cursor.py
similarity index 100%
rename from client-py/iotdb/dbapi/tests/test_cursor.py
rename to client/client-py/iotdb/dbapi/tests/test_cursor.py
diff --git a/client-py/iotdb/sqlalchemy/IoTDBDialect.py b/client/client-py/iotdb/sqlalchemy/IoTDBDialect.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/IoTDBDialect.py
rename to client/client-py/iotdb/sqlalchemy/IoTDBDialect.py
diff --git a/client-py/iotdb/sqlalchemy/IoTDBIdentifierPreparer.py b/client/client-py/iotdb/sqlalchemy/IoTDBIdentifierPreparer.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/IoTDBIdentifierPreparer.py
rename to client/client-py/iotdb/sqlalchemy/IoTDBIdentifierPreparer.py
diff --git a/client-py/iotdb/sqlalchemy/IoTDBSQLCompiler.py b/client/client-py/iotdb/sqlalchemy/IoTDBSQLCompiler.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/IoTDBSQLCompiler.py
rename to client/client-py/iotdb/sqlalchemy/IoTDBSQLCompiler.py
diff --git a/client-py/iotdb/sqlalchemy/IoTDBTypeCompiler.py b/client/client-py/iotdb/sqlalchemy/IoTDBTypeCompiler.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/IoTDBTypeCompiler.py
rename to client/client-py/iotdb/sqlalchemy/IoTDBTypeCompiler.py
diff --git a/client-py/iotdb/sqlalchemy/__init__.py b/client/client-py/iotdb/sqlalchemy/__init__.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/__init__.py
rename to client/client-py/iotdb/sqlalchemy/__init__.py
diff --git a/client-py/iotdb/sqlalchemy/tests/__init__.py b/client/client-py/iotdb/sqlalchemy/tests/__init__.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/tests/__init__.py
rename to client/client-py/iotdb/sqlalchemy/tests/__init__.py
diff --git a/client-py/iotdb/sqlalchemy/tests/test_dialect.py b/client/client-py/iotdb/sqlalchemy/tests/test_dialect.py
similarity index 100%
rename from client-py/iotdb/sqlalchemy/tests/test_dialect.py
rename to client/client-py/iotdb/sqlalchemy/tests/test_dialect.py
diff --git a/client-py/iotdb/template/InternalNode.py b/client/client-py/iotdb/template/InternalNode.py
similarity index 100%
rename from client-py/iotdb/template/InternalNode.py
rename to client/client-py/iotdb/template/InternalNode.py
diff --git a/client-py/iotdb/template/MeasurementNode.py b/client/client-py/iotdb/template/MeasurementNode.py
similarity index 100%
rename from client-py/iotdb/template/MeasurementNode.py
rename to client/client-py/iotdb/template/MeasurementNode.py
diff --git a/client-py/iotdb/template/Template.py b/client/client-py/iotdb/template/Template.py
similarity index 100%
rename from client-py/iotdb/template/Template.py
rename to client/client-py/iotdb/template/Template.py
diff --git a/client-py/iotdb/template/TemplateNode.py b/client/client-py/iotdb/template/TemplateNode.py
similarity index 100%
rename from client-py/iotdb/template/TemplateNode.py
rename to client/client-py/iotdb/template/TemplateNode.py
diff --git a/client-py/iotdb/template/TemplateQueryType.py b/client/client-py/iotdb/template/TemplateQueryType.py
similarity index 100%
rename from client-py/iotdb/template/TemplateQueryType.py
rename to client/client-py/iotdb/template/TemplateQueryType.py
diff --git a/client-py/iotdb/template/__init__.py b/client/client-py/iotdb/template/__init__.py
similarity index 100%
rename from client-py/iotdb/template/__init__.py
rename to client/client-py/iotdb/template/__init__.py
diff --git a/client-py/iotdb/tsfile/__init__.py b/client/client-py/iotdb/tsfile/__init__.py
similarity index 100%
rename from client-py/iotdb/tsfile/__init__.py
rename to client/client-py/iotdb/tsfile/__init__.py
diff --git a/client-py/iotdb/tsfile/common/__init__.py b/client/client-py/iotdb/tsfile/common/__init__.py
similarity index 100%
rename from client-py/iotdb/tsfile/common/__init__.py
rename to client/client-py/iotdb/tsfile/common/__init__.py
diff --git a/client-py/iotdb/tsfile/common/constant/TsFileConstant.py b/client/client-py/iotdb/tsfile/common/constant/TsFileConstant.py
similarity index 100%
rename from client-py/iotdb/tsfile/common/constant/TsFileConstant.py
rename to client/client-py/iotdb/tsfile/common/constant/TsFileConstant.py
diff --git a/client-py/iotdb/tsfile/common/constant/__init__.py b/client/client-py/iotdb/tsfile/common/constant/__init__.py
similarity index 100%
rename from client-py/iotdb/tsfile/common/constant/__init__.py
rename to client/client-py/iotdb/tsfile/common/constant/__init__.py
diff --git a/client-py/iotdb/tsfile/utils/Pair.py b/client/client-py/iotdb/tsfile/utils/Pair.py
similarity index 100%
rename from client-py/iotdb/tsfile/utils/Pair.py
rename to client/client-py/iotdb/tsfile/utils/Pair.py
diff --git a/client-py/iotdb/tsfile/utils/ReadWriteIOUtils.py b/client/client-py/iotdb/tsfile/utils/ReadWriteIOUtils.py
similarity index 100%
rename from client-py/iotdb/tsfile/utils/ReadWriteIOUtils.py
rename to client/client-py/iotdb/tsfile/utils/ReadWriteIOUtils.py
diff --git a/client-py/iotdb/tsfile/utils/__init__.py b/client/client-py/iotdb/tsfile/utils/__init__.py
similarity index 100%
rename from client-py/iotdb/tsfile/utils/__init__.py
rename to client/client-py/iotdb/tsfile/utils/__init__.py
diff --git a/client-py/iotdb/utils/BitMap.py b/client/client-py/iotdb/utils/BitMap.py
similarity index 100%
rename from client-py/iotdb/utils/BitMap.py
rename to client/client-py/iotdb/utils/BitMap.py
diff --git a/client-py/iotdb/utils/Field.py b/client/client-py/iotdb/utils/Field.py
similarity index 100%
rename from client-py/iotdb/utils/Field.py
rename to client/client-py/iotdb/utils/Field.py
diff --git a/client-py/iotdb/utils/IoTDBConnectionException.py b/client/client-py/iotdb/utils/IoTDBConnectionException.py
similarity index 100%
rename from client-py/iotdb/utils/IoTDBConnectionException.py
rename to client/client-py/iotdb/utils/IoTDBConnectionException.py
diff --git a/client-py/iotdb/utils/IoTDBConstants.py b/client/client-py/iotdb/utils/IoTDBConstants.py
similarity index 100%
rename from client-py/iotdb/utils/IoTDBConstants.py
rename to client/client-py/iotdb/utils/IoTDBConstants.py
diff --git a/client-py/iotdb/utils/IoTDBRpcDataSet.py b/client/client-py/iotdb/utils/IoTDBRpcDataSet.py
similarity index 100%
rename from client-py/iotdb/utils/IoTDBRpcDataSet.py
rename to client/client-py/iotdb/utils/IoTDBRpcDataSet.py
diff --git a/client-py/iotdb/utils/NumpyTablet.py b/client/client-py/iotdb/utils/NumpyTablet.py
similarity index 100%
rename from client-py/iotdb/utils/NumpyTablet.py
rename to client/client-py/iotdb/utils/NumpyTablet.py
diff --git a/client-py/iotdb/utils/RowRecord.py b/client/client-py/iotdb/utils/RowRecord.py
similarity index 100%
rename from client-py/iotdb/utils/RowRecord.py
rename to client/client-py/iotdb/utils/RowRecord.py
diff --git a/client-py/iotdb/utils/SessionDataSet.py b/client/client-py/iotdb/utils/SessionDataSet.py
similarity index 100%
rename from client-py/iotdb/utils/SessionDataSet.py
rename to client/client-py/iotdb/utils/SessionDataSet.py
diff --git a/client-py/iotdb/utils/Tablet.py b/client/client-py/iotdb/utils/Tablet.py
similarity index 100%
rename from client-py/iotdb/utils/Tablet.py
rename to client/client-py/iotdb/utils/Tablet.py
diff --git a/client-py/iotdb/utils/__init__.py b/client/client-py/iotdb/utils/__init__.py
similarity index 100%
rename from client-py/iotdb/utils/__init__.py
rename to client/client-py/iotdb/utils/__init__.py
diff --git a/client-py/pom.xml b/client/client-py/pom.xml
similarity index 87%
rename from client-py/pom.xml
rename to client/client-py/pom.xml
index 39687b7e123..a2bd79ba9e4 100644
--- a/client-py/pom.xml
+++ b/client/client-py/pom.xml
@@ -23,7 +23,7 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.iotdb</groupId>
-        <artifactId>iotdb-parent</artifactId>
+        <artifactId>iotdb-clients</artifactId>
         <version>1.2.0-SNAPSHOT</version>
         <relativePath>../pom.xml</relativePath>
     </parent>
@@ -36,11 +36,6 @@
             <artifactId>iotdb-thrift</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.apache.iotdb</groupId>
-            <artifactId>iotdb-thrift-commons</artifactId>
-            <version>${project.version}</version>
-        </dependency>
     </dependencies>
     <build>
         <plugins>
@@ -92,16 +87,16 @@
                         </goals>
                         <configuration>
                             <encoding>utf-8</encoding>
-                            <outputDirectory>${basedir}/iotdb/thrift/</outputDirectory>
+                            <outputDirectory>iotdb/thrift</outputDirectory>
                             <resources>
                                 <resource>
-                                    <directory>${basedir}/../thrift/target/generated-sources-python/iotdb/thrift/</directory>
+                                    <directory>${basedir}/../../thrift/target/generated-sources-python/iotdb/thrift/</directory>
                                     <includes>
                                         <include>**/rpc/*</include>
                                     </includes>
                                 </resource>
                                 <resource>
-                                    <directory>${basedir}/../thrift-commons/target/generated-sources-python/iotdb/thrift/</directory>
+                                    <directory>${basedir}/../../thrift-commons/target/generated-sources-python/iotdb/thrift/</directory>
                                 </resource>
                             </resources>
                         </configuration>
@@ -116,10 +111,10 @@
                         </goals>
                         <configuration>
                             <encoding>utf-8</encoding>
-                            <outputDirectory>${basedir}/</outputDirectory>
+                            <outputDirectory/>
                             <resources>
                                 <resource>
-                                    <directory>${basedir}/..</directory>
+                                    <directory>${basedir}/../..</directory>
                                     <includes>
                                         <include>LICENSE</include>
                                     </includes>
diff --git a/client-py/pyproject.toml b/client/client-py/pyproject.toml
similarity index 100%
rename from client-py/pyproject.toml
rename to client/client-py/pyproject.toml
diff --git a/client-py/release.sh b/client/client-py/release.sh
similarity index 100%
rename from client-py/release.sh
rename to client/client-py/release.sh
diff --git a/client-py/setup.py b/client/client-py/setup.py
similarity index 100%
rename from client-py/setup.py
rename to client/client-py/setup.py
diff --git a/client-py/tests/__init__.py b/client/client-py/tests/__init__.py
similarity index 100%
rename from client-py/tests/__init__.py
rename to client/client-py/tests/__init__.py
diff --git a/client-py/tests/tablet_performance_comparison.py b/client/client-py/tests/tablet_performance_comparison.py
similarity index 100%
rename from client-py/tests/tablet_performance_comparison.py
rename to client/client-py/tests/tablet_performance_comparison.py
diff --git a/client-py/tests/test_aligned_timeseries.py b/client/client-py/tests/test_aligned_timeseries.py
similarity index 100%
rename from client-py/tests/test_aligned_timeseries.py
rename to client/client-py/tests/test_aligned_timeseries.py
diff --git a/client-py/tests/test_dataframe.py b/client/client-py/tests/test_dataframe.py
similarity index 100%
rename from client-py/tests/test_dataframe.py
rename to client/client-py/tests/test_dataframe.py
diff --git a/client-py/tests/test_delete_data.py b/client/client-py/tests/test_delete_data.py
similarity index 100%
rename from client-py/tests/test_delete_data.py
rename to client/client-py/tests/test_delete_data.py
diff --git a/client-py/tests/test_numpy_tablet.py b/client/client-py/tests/test_numpy_tablet.py
similarity index 100%
rename from client-py/tests/test_numpy_tablet.py
rename to client/client-py/tests/test_numpy_tablet.py
diff --git a/client-py/tests/test_one_device.py b/client/client-py/tests/test_one_device.py
similarity index 100%
rename from client-py/tests/test_one_device.py
rename to client/client-py/tests/test_one_device.py
diff --git a/client-py/tests/test_session.py b/client/client-py/tests/test_session.py
similarity index 100%
rename from client-py/tests/test_session.py
rename to client/client-py/tests/test_session.py
diff --git a/client-py/tests/test_tablet.py b/client/client-py/tests/test_tablet.py
similarity index 100%
rename from client-py/tests/test_tablet.py
rename to client/client-py/tests/test_tablet.py
diff --git a/client-py/tests/test_template.py b/client/client-py/tests/test_template.py
similarity index 100%
rename from client-py/tests/test_template.py
rename to client/client-py/tests/test_template.py
diff --git a/client-py/tests/test_todf.py b/client/client-py/tests/test_todf.py
similarity index 100%
rename from client-py/tests/test_todf.py
rename to client/client-py/tests/test_todf.py
diff --git a/client/pom.xml b/client/pom.xml
new file mode 100644
index 00000000000..4abc3339dbb
--- /dev/null
+++ b/client/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.iotdb</groupId>
+        <artifactId>iotdb-parent</artifactId>
+        <version>1.2.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+    <packaging>pom</packaging>
+    <artifactId>iotdb-clients</artifactId>
+    <name>IoTDB Clients</name>
+    <modules>
+        <module>client-cpp</module>
+        <module>client-py</module>
+    </modules>
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-compiler-plugin</artifactId>
+                    <configuration>
+                        <source>8</source>
+                        <target>8</target>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.iotdb</groupId>
+                <artifactId>iotdb-thrift-commons</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+</project>
diff --git a/pom.xml b/pom.xml
index b224191718e..9cb1c222142 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,9 +108,8 @@
         <module>node-commons</module>
         <module>confignode</module>
         <module>zeppelin-interpreter</module>
-        <module>client-py</module>
+        <module>client</module>
         <module>compile-tools</module>
-        <module>client-cpp</module>
         <module>metrics</module>
         <!-- Will remove integration at 2023.1.23-->
         <module>integration</module>
@@ -209,11 +208,11 @@
         <io.airlift.slice.version>0.41</io.airlift.slice.version>
         <dep.airlift.version>200</dep.airlift.version>
         <!-- do not upgrade this package unless we have to...
-        Some experiments(https://github.com/jixuan1989/DependencyTest/blob/main/src/main/java/timecho/exp/JolTimeCost.java):
-        jol v0.2, scan tsfile package and calculate the classes size, time cost: 600ms
-        jol v0.4: time cost is 980ms,
-        jol v0.14, time cost is 1600ms
-        -->
+    Some experiments(https://github.com/jixuan1989/DependencyTest/blob/main/src/main/java/timecho/exp/JolTimeCost.java):
+    jol v0.2, scan tsfile package and calculate the classes size, time cost: 600ms
+    jol v0.4: time cost is 980ms,
+    jol v0.14, time cost is 1600ms
+    -->
         <jol-core.version>0.2</jol-core.version>
         <jackson-core-asl.version>1.9.13</jackson-core-asl.version>
         <mqtt-client.version>1.12</mqtt-client.version>
@@ -240,16 +239,16 @@
         <codegen.phase>generate-sources</codegen.phase>
     </properties>
     <!--
-        if we claim dependencies in dependencyManagement, then we do not claim
-        their version in sub-project's pom, but we have to claim themselves again
-        in sub-projects
-    -->
+      if we claim dependencies in dependencyManagement, then we do not claim
+      their version in sub-project's pom, but we have to claim themselves again
+      in sub-projects
+  -->
     <dependencyManagement>
         <dependencies>
             <!--
-                in the subprojects, you have to claim logback again, because maybe
-                someone in your dependences uses log4j lib.
-            -->
+          in the subprojects, you have to claim logback again, because maybe
+          someone in your dependences uses log4j lib.
+      -->
             <dependency>
                 <groupId>ch.qos.logback</groupId>
                 <artifactId>logback-classic</artifactId>
@@ -440,10 +439,10 @@
                 </exclusions>
             </dependency>
             <!--            <dependency>
-                <groupId>org.javassist</groupId>
-                <artifactId>javassist</artifactId>
-                <version>3.24.1-GA</version>
-            </dependency>-->
+          <groupId>org.javassist</groupId>
+          <artifactId>javassist</artifactId>
+          <version>3.24.1-GA</version>
+      </dependency>-->
             <dependency>
                 <groupId>org.mockito</groupId>
                 <artifactId>mockito-core</artifactId>
@@ -680,7 +679,7 @@
         <pluginManagement>
             <plugins>
                 <!-- using `mvn -N versions:update-child-modules` can update the version
-                of child modules to what their parent claims -->
+        of child modules to what their parent claims -->
                 <plugin>
                     <groupId>org.codehaus.mojo</groupId>
                     <artifactId>versions-maven-plugin</artifactId>
@@ -695,18 +694,18 @@
                     <configuration>
                         <excludePackageNames>*thrift*</excludePackageNames>
                         <!--
-                          This will suppress the generation of a hidden timestamp at the top of each generated html page
-                          and hopefully let the site generation nod to too big updates every time.
-                        -->
+              This will suppress the generation of a hidden timestamp at the top of each generated html page
+              and hopefully let the site generation nod to too big updates every time.
+            -->
                         <notimestamp>true</notimestamp>
                         <!--Don't fail the build, just because there were issues in the JavaDoc generation.-->
                         <failOnError>false</failOnError>
                     </configuration>
                 </plugin>
                 <!--
-                  We need to increase the memory available to tests as we were
-                  getting out-of-memory errors when building on windows machines.
-                -->
+          We need to increase the memory available to tests as we were
+          getting out-of-memory errors when building on windows machines.
+        -->
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
@@ -715,8 +714,8 @@
                     </configuration>
                 </plugin>
                 <!--
-                    Plugin for doing the code analysis.
-                -->
+            Plugin for doing the code analysis.
+        -->
                 <plugin>
                     <groupId>org.sonarsource.scanner.maven</groupId>
                     <artifactId>sonar-maven-plugin</artifactId>
@@ -870,10 +869,10 @@
                 </dependencies>
             </plugin>
             <!--
-                      Strange things usually happen if you run with a too low Java version.
-                      This plugin not only checks the minimum java version of 1.8, but also
-                      checks all dependencies (and transitive dependencies) for reported CVEs.
-                    -->
+                Strange things usually happen if you run with a too low Java version.
+                This plugin not only checks the minimum java version of 1.8, but also
+                checks all dependencies (and transitive dependencies) for reported CVEs.
+              -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-enforcer-plugin</artifactId>
@@ -894,28 +893,28 @@
                         </goals>
                     </execution>
                     <!--
-                        Fails the build if classes are included from multiple
-                        artifacts and these are not identical.
-                    -->
+              Fails the build if classes are included from multiple
+              artifacts and these are not identical.
+          -->
                     <!--execution>
-                        <id>enforce-ban-duplicate-classes</id>
-                        <goals>
-                            <goal>enforce</goal>
-                        </goals>
-                        <configuration>
-                            <rules>
-                                <banDuplicateClasses>
-                                    <scopes>
-                                        <scope>compile</scope>
-                                        <scope>provided</scope>
-                                    </scopes>
-                                    <findAllDuplicates>true</findAllDuplicates>
-                                    <ignoreWhenIdentical>true</ignoreWhenIdentical>
-                                </banDuplicateClasses>
-                            </rules>
-                            <fail>true</fail>
-                        </configuration>
-                    </execution-->
+              <id>enforce-ban-duplicate-classes</id>
+              <goals>
+                  <goal>enforce</goal>
+              </goals>
+              <configuration>
+                  <rules>
+                      <banDuplicateClasses>
+                          <scopes>
+                              <scope>compile</scope>
+                              <scope>provided</scope>
+                          </scopes>
+                          <findAllDuplicates>true</findAllDuplicates>
+                          <ignoreWhenIdentical>true</ignoreWhenIdentical>
+                      </banDuplicateClasses>
+                  </rules>
+                  <fail>true</fail>
+              </configuration>
+          </execution-->
                     <!-- Make sure no dependencies are used for which known vulnerabilities exist. -->
                     <execution>
                         <id>vulnerability-checks</id>
@@ -951,14 +950,14 @@
                 </dependencies>
             </plugin>
             <!--
-              Even if Maven transitively pulls in dependencies, relying on these can
-              quite often cause hard to find problems. So it's a good practice to make
-              sure everything directly required is also directly added as a dependency.
-              On the other side adding unused dependency only over-complicates the
-              the dependency graph, so the maven-dependency-plugin checks we depend on
-              what we need and only that and that runtime dependencies are correctly
-              imported with runtime scope.
-            -->
+        Even if Maven transitively pulls in dependencies, relying on these can
+        quite often cause hard to find problems. So it's a good practice to make
+        sure everything directly required is also directly added as a dependency.
+        On the other side adding unused dependency only over-complicates the
+        the dependency graph, so the maven-dependency-plugin checks we depend on
+        what we need and only that and that runtime dependencies are correctly
+        imported with runtime scope.
+      -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-dependency-plugin</artifactId>
@@ -1011,9 +1010,9 @@
                 </configuration>
             </plugin>
             <!--
-              Check if all files contain Apache headers in them.
-              Ignore this plugin, we use license-maven-plugin to check apache header.
-            -->
+        Check if all files contain Apache headers in them.
+        Ignore this plugin, we use license-maven-plugin to check apache header.
+      -->
             <plugin>
                 <groupId>org.apache.rat</groupId>
                 <artifactId>apache-rat-plugin</artifactId>
@@ -1051,8 +1050,8 @@
                 </executions>
             </plugin>
             <!--
-              Generate the legally required text files in the jars
-            -->
+        Generate the legally required text files in the jars
+      -->
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-remote-resources-plugin</artifactId>
@@ -1151,9 +1150,9 @@
             </build>
         </profile>
         <!--
-          A set of profiles defining the different properties needed to download and run thrift
-          They are automatically activated depending on the OS you are using.
-        -->
+      A set of profiles defining the different properties needed to download and run thrift
+      They are automatically activated depending on the OS you are using.
+    -->
         <profile>
             <id>windows</id>
             <activation>
@@ -1237,7 +1236,7 @@
             <properties>
                 <maven.compiler.release>8</maven.compiler.release>
                 <!-- change to 1.15.0 will modify many codes (all are javadocs), we change it to 1.15.0
-                until: iotdb decides to do not support jdk8-->
+        until: iotdb decides to do not support jdk8-->
                 <google.java.format.version>1.7</google.java.format.version>
             </properties>
             <dependencies>
@@ -1257,7 +1256,7 @@
             </dependencies>
         </profile>
         <!-- Add argLine for Java 16 and above, due to [JEP 396: Strongly Encapsulate JDK Internals by Default]
-          (https://openjdk.java.net/jeps/396) -->
+      (https://openjdk.java.net/jeps/396) -->
         <profile>
             <id>java-16-and-above</id>
             <activation>
@@ -1270,14 +1269,14 @@
             </properties>
         </profile>
         <!--
-          Self activating profile, that activates itself as soon as a "src/main/thrift" directory is found.
-          The different plugins here download the thrift executable matching the current os, make that
-          executable (on mac and unix/linux) and run the code generation.
+      Self activating profile, that activates itself as soon as a "src/main/thrift" directory is found.
+      The different plugins here download the thrift executable matching the current os, make that
+      executable (on mac and unix/linux) and run the code generation.
 
-          Note to the Download: The download-maven-plugin checks if a resource is previously downloaded
-          and only downloads each file once. It caches downloaded files in:
-          {maven local repo}/.cache/download-maven-plugin
-        -->
+      Note to the Download: The download-maven-plugin checks if a resource is previously downloaded
+      and only downloads each file once. It caches downloaded files in:
+      {maven local repo}/.cache/download-maven-plugin
+    -->
         <profile>
             <id>thrift-generation</id>
             <activation>
@@ -1395,10 +1394,10 @@
                                     <goal>single</goal>
                                 </goals>
                                 <!-- heads up: combine.self in the following is highlighted
-                                    as an error in Eclipse's xml editor view.
-                                    Just ignore that.
-                                    See  https://issues.apache.org/jira/browse/MNG-5454  sigh.
-                                 -->
+                    as an error in Eclipse's xml editor view.
+                    Just ignore that.
+                    See  https://issues.apache.org/jira/browse/MNG-5454  sigh.
+                 -->
                                 <configuration combine.self="append">
                                     <finalName>apache-iotdb-${project.version}</finalName>
                                     <archive>
@@ -1412,8 +1411,8 @@
                         </executions>
                     </plugin>
                     <!--
-                      Create SHA512 checksum files for the release artifacts.
-                    -->
+            Create SHA512 checksum files for the release artifacts.
+          -->
                     <plugin>
                         <groupId>net.nicoulaj.maven.plugins</groupId>
                         <artifactId>checksum-maven-plugin</artifactId>
@@ -1461,7 +1460,7 @@
             <build>
                 <plugins>
                     <!-- Jacoco is a code coverage analysis plugin when tests run.
-                    (not a static code analysis tool)-->
+          (not a static code analysis tool)-->
                     <plugin>
                         <groupId>org.jacoco</groupId>
                         <artifactId>jacoco-maven-plugin</artifactId>
@@ -1478,7 +1477,7 @@
                                     <element>BUNDLE</element>
                                     <limits>  
                                         <!-- Cover methodes >=30%. (the plugin does not support
-                                        ignore getter and setter and toString etc..) -->
+                    ignore getter and setter and toString etc..) -->
                                         <limit implementation="org.jacoco.report.check.Limit">
                                             <counter>METHOD</counter>
                                             <value>COVEREDRATIO</value>
@@ -1611,7 +1610,7 @@
         </profile>
         <!-- upload code coverage report to coveralls.io-->
         <!-- to enable coveralls locally, you need to get the repoToken from https://coveralls.io/github/apache/iotdb.
-             use `mvn post-integration-test -Pcode-coverage -DrepoToken=TOKEN`-->
+         use `mvn post-integration-test -Pcode-coverage -DrepoToken=TOKEN`-->
         <profile>
             <id>enforce</id>
             <properties>