diff --git a/distribution/pom.xml b/distribution/pom.xml
index 025a67b379d66..65a3572fd3a55 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -59,6 +59,12 @@
2.0.7-SNAPSHOT
provided
+
+ org.apache.iotdb
+ rest
+ 2.0.7-SNAPSHOT
+ provided
+
diff --git a/distribution/src/assembly/all.xml b/distribution/src/assembly/all.xml
index 255912d75e611..1b2e1be054f3e 100644
--- a/distribution/src/assembly/all.xml
+++ b/distribution/src/assembly/all.xml
@@ -96,6 +96,10 @@
${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar
lib
+
+ ${maven.multiModuleProjectDirectory}/external-service-impl/rest/target/rest-${project.version}-jar-with-dependencies.jar
+ lib
+
common-files.xml
diff --git a/distribution/src/assembly/datanode.xml b/distribution/src/assembly/datanode.xml
index 8994667fb873a..225fa5a7e7d28 100644
--- a/distribution/src/assembly/datanode.xml
+++ b/distribution/src/assembly/datanode.xml
@@ -79,6 +79,10 @@
${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar
lib
+
+ ${maven.multiModuleProjectDirectory}/external-service-impl/rest/target/rest-${project.version}-jar-with-dependencies.jar
+ lib
+
common-files.xml
diff --git a/distribution/src/assembly/external-service-impl.xml b/distribution/src/assembly/external-service-impl.xml
index 273efe6eddfb5..c743fa8559720 100644
--- a/distribution/src/assembly/external-service-impl.xml
+++ b/distribution/src/assembly/external-service-impl.xml
@@ -47,5 +47,9 @@
${maven.multiModuleProjectDirectory}/external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar
/
+
+ ${maven.multiModuleProjectDirectory}/external-service-impl/rest/target/rest-${project.version}-jar-with-dependencies.jar
+ /
+
diff --git a/external-service-impl/pom.xml b/external-service-impl/pom.xml
index 986522e6275d2..04483b289f32f 100644
--- a/external-service-impl/pom.xml
+++ b/external-service-impl/pom.xml
@@ -31,6 +31,8 @@
pom
mqtt
+ rest
+ rest-openapi
8
diff --git a/iotdb-protocol/openapi/pom.xml b/external-service-impl/rest-openapi/pom.xml
similarity index 87%
rename from iotdb-protocol/openapi/pom.xml
rename to external-service-impl/rest-openapi/pom.xml
index f31e3ba1d097d..3b46227cf61f1 100644
--- a/iotdb-protocol/openapi/pom.xml
+++ b/external-service-impl/rest-openapi/pom.xml
@@ -23,11 +23,11 @@
4.0.0
org.apache.iotdb
- iotdb-protocol
+ external-service-impl
2.0.7-SNAPSHOT
- openapi
- IoTDB: Protocol: OpenAPI
+ rest-openapi
+ IoTDB: External-Service-Impl: Rest-OpenAPI
io.swagger
@@ -91,9 +91,9 @@
${project.basedir}/src/main/openapi3/iotdb_rest_common.yaml
- org.apache.iotdb.db.protocol.rest
- org.apache.iotdb.db.protocol.rest.model
- org.apache.iotdb.db.protocol.rest.invoker
+ org.apache.iotdb.rest.protocol
+ org.apache.iotdb.rest.protocol.model
+ org.apache.iotdb.rest.protocol.invoker
jaxrs-jersey
org.apache.iotdb
iotdb-rest-service
@@ -118,9 +118,9 @@
${project.basedir}/src/main/openapi3/iotdb_rest_v1.yaml
- org.apache.iotdb.db.protocol.rest.v1
- org.apache.iotdb.db.protocol.rest.v1.model
- org.apache.iotdb.db.protocol.rest.v1.invoker
+ org.apache.iotdb.rest.protocol.v1
+ org.apache.iotdb.rest.protocol.v1.model
+ org.apache.iotdb.rest.protocol.v1.invoker
jaxrs-jersey
org.apache.iotdb
iotdb-rest-service
@@ -145,9 +145,9 @@
${project.basedir}/src/main/openapi3/iotdb_rest_v2.yaml
- org.apache.iotdb.db.protocol.rest.v2
- org.apache.iotdb.db.protocol.rest.v2.model
- org.apache.iotdb.db.protocol.rest.v2.invoker
+ org.apache.iotdb.rest.protocol.v2
+ org.apache.iotdb.rest.protocol.v2.model
+ org.apache.iotdb.rest.protocol.v2.invoker
jaxrs-jersey
org.apache.iotdb
iotdb-rest-service
@@ -172,9 +172,9 @@
${project.basedir}/src/main/openapi3/iotdb_rest_table_v1.yaml
- org.apache.iotdb.db.protocol.rest.table.v1
- org.apache.iotdb.db.protocol.rest.table.v1.model
- org.apache.iotdb.db.protocol.rest.table.v1.invoker
+ org.apache.iotdb.rest.protocol.table.v1
+ org.apache.iotdb.rest.protocol.table.v1.model
+ org.apache.iotdb.rest.protocol.table.v1.invoker
jaxrs-jersey
org.apache.iotdb
iotdb-rest-service
@@ -232,6 +232,10 @@
org.glassfish.jersey.media:jersey-media-multipart
+
+ org.apache.iotdb:external-service-api
+ junit:junit
+
diff --git a/iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_common.yaml b/external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_common.yaml
similarity index 100%
rename from iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_common.yaml
rename to external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_common.yaml
diff --git a/iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_table_v1.yaml b/external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_table_v1.yaml
similarity index 100%
rename from iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_table_v1.yaml
rename to external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_table_v1.yaml
diff --git a/iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_v1.yaml b/external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_v1.yaml
similarity index 100%
rename from iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_v1.yaml
rename to external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_v1.yaml
diff --git a/iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_v2.yaml b/external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_v2.yaml
similarity index 100%
rename from iotdb-protocol/openapi/src/main/openapi3/iotdb_rest_v2.yaml
rename to external-service-impl/rest-openapi/src/main/openapi3/iotdb_rest_v2.yaml
diff --git a/external-service-impl/rest/pom.xml b/external-service-impl/rest/pom.xml
new file mode 100644
index 0000000000000..edb8aa3fc3371
--- /dev/null
+++ b/external-service-impl/rest/pom.xml
@@ -0,0 +1,226 @@
+
+
+
+ 4.0.0
+
+ org.apache.iotdb
+ external-service-impl
+ 2.0.7-SNAPSHOT
+
+ rest
+ IoTDB: External-Service-Impl: Rest
+
+ 8
+ 8
+ UTF-8
+
+
+
+ org.glassfish.jersey.inject
+ jersey-hk2
+ runtime
+
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+
+
+
+
+ org.apache.iotdb
+ rest-openapi
+ 2.0.7-SNAPSHOT
+
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+
+ org.javassist
+ javassist
+
+
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet-core
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+
+ jakarta.annotation
+ jakarta.annotation-api
+
+
+
+
+ org.eclipse.jetty
+ jetty-servlet
+
+
+ org.eclipse.jetty
+ jetty-util
+
+
+ org.eclipse.jetty
+ jetty-server
+
+
+ org.eclipse.jetty
+ jetty-http
+
+
+ org.apache.iotdb
+ node-commons
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ org.apache.iotdb
+ iotdb-server
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ org.apache.iotdb
+ iotdb-session
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ com.google.guava
+ guava
+ provided
+
+
+ org.slf4j
+ slf4j-api
+ provided
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+ provided
+
+
+
+ org.checkerframework
+ checker-qual
+
+
+
+
+ org.apache.iotdb
+ service-rpc
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ jakarta.ws.rs
+ jakarta.ws.rs-api
+ provided
+
+
+ org.apache.iotdb
+ iotdb-thrift
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ org.apache.tsfile
+ tsfile
+ ${tsfile.version}
+ provided
+
+
+ org.apache.tsfile
+ common
+ ${tsfile.version}
+ provided
+
+
+ org.apache.iotdb
+ iotdb-thrift-commons
+ 2.0.7-SNAPSHOT
+ provided
+
+
+ org.antlr
+ antlr4-runtime
+ provided
+
+
+
+
+
+ maven-assembly-plugin
+ ${maven.assembly.version}
+
+
+ jar-with-dependencies
+
+
+
+
+ make-assembly
+
+
+ single
+
+
+ package
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ org.apache.tsfile:common
+ junit:junit
+
+
+
+ org.glassfish.jersey.inject:jersey-hk2
+
+
+
+
+
+
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/RestService.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/RestService.java
similarity index 87%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/RestService.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/RestService.java
index 7fc4d788380ef..9a90e6b18f2ea 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/RestService.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/RestService.java
@@ -14,14 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.iotdb.db.service;
+package org.apache.iotdb.rest;
-import org.apache.iotdb.commons.exception.StartupException;
-import org.apache.iotdb.commons.service.IService;
-import org.apache.iotdb.commons.service.ServiceType;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceConfig;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
-import org.apache.iotdb.db.protocol.rest.filter.ApiOriginFilter;
+import org.apache.iotdb.externalservice.api.IExternalService;
+import org.apache.iotdb.rest.protocol.filter.ApiOriginFilter;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.server.HttpConfiguration;
@@ -41,7 +39,7 @@
import java.util.EnumSet;
-public class RestService implements IService {
+public class RestService implements IExternalService {
private static final Logger LOGGER = LoggerFactory.getLogger(RestService.class);
@@ -97,7 +95,7 @@ private ServletContextHandler constructServletContextHandler() {
holder.setInitOrder(1);
holder.setInitParameter(
"jersey.config.server.provider.packages",
- "io.swagger.jaxrs.listing, io.swagger.sample.resource, org.apache.iotdb.db.protocol.rest");
+ "io.swagger.jaxrs.listing, io.swagger.sample.resource, org.apache.iotdb.rest.protocol");
holder.setInitParameter(
"jersey.config.server.provider.classnames",
"org.glassfish.jersey.media.multipart.MultiPartFeature");
@@ -117,7 +115,7 @@ private void serverStart() {
}
@Override
- public void start() throws StartupException {
+ public void start() {
IoTDBRestServiceConfig config = IoTDBRestServiceDescriptor.getInstance().getConfig();
if (IoTDBRestServiceDescriptor.getInstance().getConfig().isEnableHttps()) {
startSSL(
@@ -143,20 +141,4 @@ public void stop() {
server.destroy();
}
}
-
- @Override
- public ServiceType getID() {
- return ServiceType.REST_SERVICE;
- }
-
- public static RestService getInstance() {
- return RestServiceHolder.INSTANCE;
- }
-
- private static class RestServiceHolder {
-
- private static final RestService INSTANCE = new RestService();
-
- private RestServiceHolder() {}
- }
}
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/ApiOriginFilter.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/ApiOriginFilter.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/ApiOriginFilter.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/ApiOriginFilter.java
index aacc2bcc09aa6..578b8b3574868 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/ApiOriginFilter.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/ApiOriginFilter.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.filter;
+package org.apache.iotdb.rest.protocol.filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/AuthorizationFilter.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/AuthorizationFilter.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/AuthorizationFilter.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/AuthorizationFilter.java
index 1f4da4c5a6a8c..a31e5b953abbc 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/AuthorizationFilter.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/AuthorizationFilter.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.filter;
+package org.apache.iotdb.rest.protocol.filter;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.auth.AuthException;
@@ -23,9 +23,9 @@
import org.apache.iotdb.db.auth.AuthorityChecker;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceConfig;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.protocol.session.RestClientSession;
import org.apache.iotdb.db.protocol.session.SessionManager;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import javax.servlet.annotation.WebFilter;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/BasicSecurityContext.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/BasicSecurityContext.java
similarity index 96%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/BasicSecurityContext.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/BasicSecurityContext.java
index 28030577a93bc..5bea8d520dd7a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/BasicSecurityContext.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/BasicSecurityContext.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.filter;
+package org.apache.iotdb.rest.protocol.filter;
import javax.ws.rs.core.SecurityContext;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/User.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/User.java
similarity index 96%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/User.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/User.java
index af4b27e2a61c6..b6deb5825e3ac 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/User.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/User.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.filter;
+package org.apache.iotdb.rest.protocol.filter;
public class User {
private long userId = -1;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/UserCache.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/UserCache.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/UserCache.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/UserCache.java
index f53273def2d05..8c8a55f25b596 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/filter/UserCache.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/filter/UserCache.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.filter;
+package org.apache.iotdb.rest.protocol.filter;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceConfig;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/handler/AuthorizationHandler.java
similarity index 93%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/handler/AuthorizationHandler.java
index 3c30e3e95a97e..4826a39fadd59 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/handler/AuthorizationHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/handler/AuthorizationHandler.java
@@ -15,13 +15,13 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.handler;
+package org.apache.iotdb.rest.protocol.handler;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.audit.UserEntity;
import org.apache.iotdb.db.auth.AuthorityChecker;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import javax.ws.rs.core.Response;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/impl/PingApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/impl/PingApiServiceImpl.java
similarity index 91%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/impl/PingApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/impl/PingApiServiceImpl.java
index f85de024b4780..740bb28b069d4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/impl/PingApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/impl/PingApiServiceImpl.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.impl;
+package org.apache.iotdb.rest.protocol.impl;
import org.apache.iotdb.commons.service.ThriftService;
-import org.apache.iotdb.db.protocol.rest.PingApiService;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.service.ExternalRPCService;
+import org.apache.iotdb.rest.protocol.PingApiService;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import javax.ws.rs.core.Response;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExceptionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExceptionHandler.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExceptionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExceptionHandler.java
index 1d2da9ad57a82..61e64465a0678 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExceptionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExceptionHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.handler;
+package org.apache.iotdb.rest.protocol.table.v1.handler;
import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -27,8 +27,8 @@
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.ParsingException;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import org.antlr.v4.runtime.misc.ParseCancellationException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExecuteStatementHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExecuteStatementHandler.java
similarity index 99%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExecuteStatementHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExecuteStatementHandler.java
index 1b2737531396f..4fa749dd567be 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/ExecuteStatementHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/ExecuteStatementHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.handler;
+package org.apache.iotdb.rest.protocol.table.v1.handler;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.CountDevice;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DescribeTable;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/QueryDataSetHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/QueryDataSetHandler.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/QueryDataSetHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/QueryDataSetHandler.java
index 25e331b38a81e..ec22f478b8b70 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/QueryDataSetHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/QueryDataSetHandler.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.handler;
+package org.apache.iotdb.rest.protocol.table.v1.handler;
import org.apache.iotdb.commons.exception.IoTDBException;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.QueryDataSet;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Query;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.table.v1.model.QueryDataSet;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.block.column.Column;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/RequestValidationHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/RequestValidationHandler.java
similarity index 95%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/RequestValidationHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/RequestValidationHandler.java
index 66958785ce51f..fc546212caf43 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/RequestValidationHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/RequestValidationHandler.java
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.handler;
+package org.apache.iotdb.rest.protocol.table.v1.handler;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.SQL;
+import org.apache.iotdb.rest.protocol.table.v1.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.table.v1.model.SQL;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.external.commons.lang3.Validate;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/StatementConstructionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/StatementConstructionHandler.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/StatementConstructionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/StatementConstructionHandler.java
index bda0627ce6110..b7f712c41f779 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/handler/StatementConstructionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/handler/StatementConstructionHandler.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.handler;
+package org.apache.iotdb.rest.protocol.table.v1.handler;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory;
import org.apache.iotdb.db.exception.WriteProcessRejectException;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.InsertTabletRequest;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
+import org.apache.iotdb.rest.protocol.table.v1.model.InsertTabletRequest;
import org.apache.tsfile.enums.ColumnCategory;
import org.apache.tsfile.enums.TSDataType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/impl/RestApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/impl/RestApiServiceImpl.java
similarity index 92%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/impl/RestApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/impl/RestApiServiceImpl.java
index ec0237f13ea98..b35e9d27f595c 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/table/v1/impl/RestApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/table/v1/impl/RestApiServiceImpl.java
@@ -15,22 +15,12 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.table.v1.impl;
+package org.apache.iotdb.rest.protocol.table.v1.impl;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
-import org.apache.iotdb.db.protocol.rest.table.v1.NotFoundException;
-import org.apache.iotdb.db.protocol.rest.table.v1.RestApiService;
-import org.apache.iotdb.db.protocol.rest.table.v1.handler.ExceptionHandler;
-import org.apache.iotdb.db.protocol.rest.table.v1.handler.ExecuteStatementHandler;
-import org.apache.iotdb.db.protocol.rest.table.v1.handler.QueryDataSetHandler;
-import org.apache.iotdb.db.protocol.rest.table.v1.handler.RequestValidationHandler;
-import org.apache.iotdb.db.protocol.rest.table.v1.handler.StatementConstructionHandler;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.table.v1.model.SQL;
import org.apache.iotdb.db.protocol.session.IClientSession;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.protocol.thrift.OperationType;
@@ -46,6 +36,16 @@
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
import org.apache.iotdb.db.utils.CommonUtils;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.rest.protocol.table.v1.NotFoundException;
+import org.apache.iotdb.rest.protocol.table.v1.RestApiService;
+import org.apache.iotdb.rest.protocol.table.v1.handler.ExceptionHandler;
+import org.apache.iotdb.rest.protocol.table.v1.handler.ExecuteStatementHandler;
+import org.apache.iotdb.rest.protocol.table.v1.handler.QueryDataSetHandler;
+import org.apache.iotdb.rest.protocol.table.v1.handler.RequestValidationHandler;
+import org.apache.iotdb.rest.protocol.table.v1.handler.StatementConstructionHandler;
+import org.apache.iotdb.rest.protocol.table.v1.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.table.v1.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.table.v1.model.SQL;
import org.apache.iotdb.rpc.TSStatusCode;
import javax.ws.rs.core.Response;
@@ -294,7 +294,7 @@ private Response validateStatement(Statement statement, boolean userQuery) {
if (statement == null) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.SQL_PARSE_ERROR.getStatusCode())
.message("This operation type is not supported"))
.build();
@@ -304,7 +304,7 @@ private Response validateStatement(Statement statement, boolean userQuery) {
if (userQuery == isQueryStmt) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())
.message(TSStatusCode.EXECUTE_STATEMENT_ERROR.name()))
.build();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertRowDataUtils.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertRowDataUtils.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertRowDataUtils.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertRowDataUtils.java
index fae611dcf7774..08deec903c957 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertRowDataUtils.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertRowDataUtils.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.utils;
+package org.apache.iotdb.rest.protocol.utils;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.iotdb.rpc.NoValidValueException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertTabletSortDataUtils.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertTabletSortDataUtils.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertTabletSortDataUtils.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertTabletSortDataUtils.java
index e2e3d2f79762f..82969f46bf234 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/utils/InsertTabletSortDataUtils.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/utils/InsertTabletSortDataUtils.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.utils;
+package org.apache.iotdb.rest.protocol.utils;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExceptionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExceptionHandler.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExceptionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExceptionHandler.java
index 69994577f09d2..6edcb57ab4d9a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExceptionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExceptionHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v1.handler;
import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -27,7 +27,7 @@
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.v1.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import org.antlr.v4.runtime.misc.ParseCancellationException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExecuteStatementHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExecuteStatementHandler.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExecuteStatementHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExecuteStatementHandler.java
index f1c621a4aa445..ab3811cf11684 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExecuteStatementHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/ExecuteStatementHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.handler;
+package org.apache.iotdb.rest.protocol.v1.handler;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/QueryDataSetHandler.java
similarity index 93%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/QueryDataSetHandler.java
index 55623ecad21a8..c2fe52440a779 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/QueryDataSetHandler.java
@@ -15,10 +15,9 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.handler;
+package org.apache.iotdb.rest.protocol.v1.handler;
import org.apache.iotdb.commons.exception.IoTDBException;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExecutionStatus;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -30,6 +29,7 @@
import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowLoadedModelsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
+import org.apache.iotdb.rest.protocol.v1.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.block.column.Column;
@@ -83,8 +83,8 @@ public static Response fillQueryDataSet(
public static Response fillDataSetWithTimestamps(
IQueryExecution queryExecution, final int actualRowSizeLimit, final long timePrecision)
throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v1.model.QueryDataSet();
return fillQueryDataSetWithTimestamps(
queryExecution, actualRowSizeLimit, targetDataSet, timePrecision);
@@ -93,8 +93,8 @@ public static Response fillDataSetWithTimestamps(
public static Response fillAggregationPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v1.model.QueryDataSet();
DatasetHeader datasetHeader = queryExecution.getDatasetHeader();
List dataTypes = new ArrayList<>();
@@ -117,8 +117,8 @@ public static Response fillAggregationPlanDataSet(
private static Response fillShowPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v1.model.QueryDataSet();
int[] targetDataSetIndexToSourceDataSetIndex =
new int[queryExecution.getDatasetHeader().getRespColumns().size()];
initTargetDatasetOrderByOrderWithSourceDataSet(
@@ -135,7 +135,7 @@ private static Response fillShowPlanDataSet(
private static void initTargetDatasetOrderByOrderWithSourceDataSet(
DatasetHeader datasetHeader,
int[] targetDataSetIndexToSourceDataSetIndex,
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet) {
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet) {
if (datasetHeader.getRespColumns() != null) {
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addColumnNamesItem(datasetHeader.getRespColumns().get(i));
@@ -148,7 +148,7 @@ private static void initTargetDatasetOrderByOrderWithSourceDataSet(
private static Response fillQueryDataSetWithTimestamps(
IQueryExecution queryExecution,
int actualRowSizeLimit,
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet,
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet,
final long timePrecision)
throws IoTDBException {
int fetched = 0;
@@ -167,7 +167,7 @@ private static Response fillQueryDataSetWithTimestamps(
if (0 < actualRowSizeLimit && actualRowSizeLimit <= fetched) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.QUERY_PROCESS_ERROR.getStatusCode())
.message(
String.format(
@@ -216,7 +216,7 @@ private static Response fillQueryDataSetWithoutTimestamps(
IQueryExecution queryExecution,
int[] targetDataSetIndexToSourceDataSetIndex,
int actualRowSizeLimit,
- org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet,
+ org.apache.iotdb.rest.protocol.v1.model.QueryDataSet targetDataSet,
List dataTypes)
throws IoTDBException {
int fetched = 0;
@@ -225,7 +225,7 @@ private static Response fillQueryDataSetWithoutTimestamps(
if (0 < actualRowSizeLimit && actualRowSizeLimit <= fetched) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.QUERY_PROCESS_ERROR.getStatusCode())
.message(
String.format(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/RequestValidationHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/RequestValidationHandler.java
similarity index 90%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/RequestValidationHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/RequestValidationHandler.java
index d7239f9fe620d..dc81322cc7880 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/RequestValidationHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/RequestValidationHandler.java
@@ -15,11 +15,11 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.handler;
+package org.apache.iotdb.rest.protocol.v1.handler;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExpressionRequest;
-import org.apache.iotdb.db.protocol.rest.v1.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.v1.model.SQL;
+import org.apache.iotdb.rest.protocol.v1.model.ExpressionRequest;
+import org.apache.iotdb.rest.protocol.v1.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.v1.model.SQL;
import org.apache.tsfile.external.commons.lang3.Validate;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/StatementConstructionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/StatementConstructionHandler.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/StatementConstructionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/StatementConstructionHandler.java
index 523b8ccfb6af6..65ec7a966f1e0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/StatementConstructionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/handler/StatementConstructionHandler.java
@@ -15,15 +15,15 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.handler;
+package org.apache.iotdb.rest.protocol.v1.handler;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.db.exception.WriteProcessRejectException;
-import org.apache.iotdb.db.protocol.rest.v1.model.InsertTabletRequest;
import org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDevicePathCache;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
+import org.apache.iotdb.rest.protocol.v1.model.InsertTabletRequest;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Binary;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/GrafanaApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/GrafanaApiServiceImpl.java
similarity index 94%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/GrafanaApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/GrafanaApiServiceImpl.java
index c9a4f8f9ee11c..0db4cd06c669f 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/GrafanaApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/GrafanaApiServiceImpl.java
@@ -15,20 +15,12 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.impl;
+package org.apache.iotdb.rest.protocol.v1.impl;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.protocol.rest.handler.AuthorizationHandler;
-import org.apache.iotdb.db.protocol.rest.v1.GrafanaApiService;
-import org.apache.iotdb.db.protocol.rest.v1.handler.ExceptionHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.QueryDataSetHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.RequestValidationHandler;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExpressionRequest;
-import org.apache.iotdb.db.protocol.rest.v1.model.SQL;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.queryengine.plan.Coordinator;
import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
@@ -42,6 +34,14 @@
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.rest.protocol.handler.AuthorizationHandler;
+import org.apache.iotdb.rest.protocol.v1.GrafanaApiService;
+import org.apache.iotdb.rest.protocol.v1.handler.ExceptionHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.QueryDataSetHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.RequestValidationHandler;
+import org.apache.iotdb.rest.protocol.v1.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.v1.model.ExpressionRequest;
+import org.apache.iotdb.rest.protocol.v1.model.SQL;
import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.base.Joiner;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/RestApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/RestApiServiceImpl.java
similarity index 91%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/RestApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/RestApiServiceImpl.java
index 6982fb0b53368..329ac47034bdb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/impl/RestApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v1/impl/RestApiServiceImpl.java
@@ -15,22 +15,11 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.impl;
+package org.apache.iotdb.rest.protocol.v1.impl;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
-import org.apache.iotdb.db.protocol.rest.handler.AuthorizationHandler;
-import org.apache.iotdb.db.protocol.rest.utils.InsertTabletSortDataUtils;
-import org.apache.iotdb.db.protocol.rest.v1.RestApiService;
-import org.apache.iotdb.db.protocol.rest.v1.handler.ExceptionHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.ExecuteStatementHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.QueryDataSetHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.RequestValidationHandler;
-import org.apache.iotdb.db.protocol.rest.v1.handler.StatementConstructionHandler;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.v1.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.v1.model.SQL;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.protocol.thrift.OperationType;
import org.apache.iotdb.db.queryengine.plan.Coordinator;
@@ -48,6 +37,17 @@
import org.apache.iotdb.db.queryengine.plan.statement.metadata.view.CreateTableViewStatement;
import org.apache.iotdb.db.utils.CommonUtils;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.rest.protocol.handler.AuthorizationHandler;
+import org.apache.iotdb.rest.protocol.utils.InsertTabletSortDataUtils;
+import org.apache.iotdb.rest.protocol.v1.RestApiService;
+import org.apache.iotdb.rest.protocol.v1.handler.ExceptionHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.ExecuteStatementHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.QueryDataSetHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.RequestValidationHandler;
+import org.apache.iotdb.rest.protocol.v1.handler.StatementConstructionHandler;
+import org.apache.iotdb.rest.protocol.v1.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.v1.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.v1.model.SQL;
import org.apache.iotdb.rpc.TSStatusCode;
import javax.ws.rs.core.Response;
@@ -91,7 +91,7 @@ public Response executeNonQueryStatement(SQL sql, SecurityContext securityContex
if (statement == null) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.SQL_PARSE_ERROR.getStatusCode())
.message("This operation type is not supported"))
.build();
@@ -99,7 +99,7 @@ public Response executeNonQueryStatement(SQL sql, SecurityContext securityContex
if (!ExecuteStatementHandler.validateStatement(statement)) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())
.message(TSStatusCode.EXECUTE_STATEMENT_ERROR.name()))
.build();
@@ -181,7 +181,7 @@ public Response executeQueryStatement(SQL sql, SecurityContext securityContext)
if (statement == null) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.SQL_PARSE_ERROR.getStatusCode())
.message("This operation type is not supported"))
.build();
@@ -189,7 +189,7 @@ public Response executeQueryStatement(SQL sql, SecurityContext securityContext)
if (ExecuteStatementHandler.validateStatement(statement)) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())
.message(TSStatusCode.EXECUTE_STATEMENT_ERROR.name()))
.build();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExceptionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExceptionHandler.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExceptionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExceptionHandler.java
index 8784d4ff72172..931ec0cec002b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/ExceptionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExceptionHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v1.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
import org.apache.iotdb.commons.auth.AuthException;
import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -27,7 +27,7 @@
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.sql.SemanticException;
import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
-import org.apache.iotdb.db.protocol.rest.v1.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import org.antlr.v4.runtime.misc.ParseCancellationException;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExecuteStatementHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExecuteStatementHandler.java
similarity index 98%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExecuteStatementHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExecuteStatementHandler.java
index 00e43d17cce69..1e937f0c8aa2e 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/ExecuteStatementHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/ExecuteStatementHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.queryengine.plan.statement.StatementType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/FastLastHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/FastLastHandler.java
similarity index 87%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/FastLastHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/FastLastHandler.java
index 59ebb57ffbb1f..2895e0b198e54 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/FastLastHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/FastLastHandler.java
@@ -15,12 +15,12 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.db.protocol.rest.v2.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.v2.model.PrefixPathList;
import org.apache.iotdb.db.protocol.session.IClientSession;
+import org.apache.iotdb.rest.protocol.v2.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.v2.model.PrefixPathList;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq;
@@ -45,7 +45,7 @@ public static TSLastDataQueryReq createTSLastDataQueryReq(
public static Response buildErrorResponse(TSStatusCode statusCode) {
return Response.ok()
.entity(
- new org.apache.iotdb.db.protocol.rest.model.ExecutionStatus()
+ new org.apache.iotdb.rest.protocol.model.ExecutionStatus()
.code(statusCode.getStatusCode())
.message(statusCode.name()))
.build();
@@ -58,7 +58,7 @@ public static Response buildExecutionStatusResponse(TSStatus status) {
}
public static void setupTargetDataSet(
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet dataSet) {
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet dataSet) {
dataSet.addExpressionsItem("Timeseries");
dataSet.addExpressionsItem("Value");
dataSet.addExpressionsItem("DataType");
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/QueryDataSetHandler.java
similarity index 94%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/QueryDataSetHandler.java
index b89c4f768a730..188b37ebb1eda 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/QueryDataSetHandler.java
@@ -15,10 +15,9 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
import org.apache.iotdb.commons.exception.IoTDBException;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.db.queryengine.plan.execution.IQueryExecution;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
@@ -30,6 +29,7 @@
import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowLoadedModelsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.model.ShowModelsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.sys.AuthorStatement;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.block.column.Column;
@@ -83,8 +83,8 @@ public static Response fillQueryDataSet(
public static Response fillDataSetWithTimestamps(
IQueryExecution queryExecution, final int actualRowSizeLimit, final long timePrecision)
throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v2.model.QueryDataSet();
return fillQueryDataSetWithTimestamps(
queryExecution, actualRowSizeLimit, targetDataSet, timePrecision);
@@ -93,8 +93,8 @@ public static Response fillDataSetWithTimestamps(
public static Response fillAggregationPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v2.model.QueryDataSet();
DatasetHeader datasetHeader = queryExecution.getDatasetHeader();
int[] targetDataSetIndexToSourceDataSetIndex = new int[datasetHeader.getRespColumns().size()];
@@ -113,8 +113,8 @@ public static Response fillAggregationPlanDataSet(
private static Response fillShowPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet =
- new org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet();
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet =
+ new org.apache.iotdb.rest.protocol.v2.model.QueryDataSet();
int[] targetDataSetIndexToSourceDataSetIndex =
new int[queryExecution.getDatasetHeader().getRespColumns().size()];
initTargetDatasetOrderByOrderWithSourceDataSet(
@@ -127,7 +127,7 @@ private static Response fillShowPlanDataSet(
private static void initTargetDatasetOrderByOrderWithSourceDataSet(
DatasetHeader datasetHeader,
int[] targetDataSetIndexToSourceDataSetIndex,
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet) {
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet) {
if (datasetHeader.getRespColumns() != null) {
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addColumnNamesItem(datasetHeader.getRespColumns().get(i));
@@ -140,7 +140,7 @@ private static void initTargetDatasetOrderByOrderWithSourceDataSet(
private static Response fillQueryDataSetWithTimestamps(
IQueryExecution queryExecution,
int actualRowSizeLimit,
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet,
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet,
final long timePrecision)
throws IoTDBException {
int fetched = 0;
@@ -209,7 +209,7 @@ private static Response fillQueryDataSetWithoutTimestamps(
IQueryExecution queryExecution,
int[] targetDataSetIndexToSourceDataSetIndex,
int actualRowSizeLimit,
- org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet)
+ org.apache.iotdb.rest.protocol.v2.model.QueryDataSet targetDataSet)
throws IoTDBException {
int fetched = 0;
int columnNum = queryExecution.getOutputValueColumnCount();
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/RequestValidationHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/RequestValidationHandler.java
similarity index 93%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/RequestValidationHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/RequestValidationHandler.java
index 4192caaeca281..5f999b3ddccdf 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/RequestValidationHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/RequestValidationHandler.java
@@ -15,13 +15,13 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
-import org.apache.iotdb.db.protocol.rest.v2.model.ExpressionRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertRecordsRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.PrefixPathList;
-import org.apache.iotdb.db.protocol.rest.v2.model.SQL;
+import org.apache.iotdb.rest.protocol.v2.model.ExpressionRequest;
+import org.apache.iotdb.rest.protocol.v2.model.InsertRecordsRequest;
+import org.apache.iotdb.rest.protocol.v2.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.v2.model.PrefixPathList;
+import org.apache.iotdb.rest.protocol.v2.model.SQL;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.external.commons.lang3.Validate;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/StatementConstructionHandler.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/StatementConstructionHandler.java
similarity index 97%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/StatementConstructionHandler.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/StatementConstructionHandler.java
index 4bf9a1a55106b..6668244e9e4f0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/StatementConstructionHandler.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/handler/StatementConstructionHandler.java
@@ -15,20 +15,20 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.handler;
+package org.apache.iotdb.rest.protocol.v2.handler;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.utils.PathUtils;
import org.apache.iotdb.db.exception.WriteProcessRejectException;
import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
-import org.apache.iotdb.db.protocol.rest.utils.InsertRowDataUtils;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertRecordsRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertTabletRequest;
import org.apache.iotdb.db.queryengine.plan.analyze.cache.schema.DataNodeDevicePathCache;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowsStatement;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
import org.apache.iotdb.db.utils.TimestampPrecisionUtils;
+import org.apache.iotdb.rest.protocol.utils.InsertRowDataUtils;
+import org.apache.iotdb.rest.protocol.v2.model.InsertRecordsRequest;
+import org.apache.iotdb.rest.protocol.v2.model.InsertTabletRequest;
import org.apache.iotdb.rpc.IoTDBConnectionException;
import org.apache.tsfile.enums.TSDataType;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/GrafanaApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/GrafanaApiServiceImpl.java
similarity index 94%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/GrafanaApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/GrafanaApiServiceImpl.java
index 229e9a41b27fc..5b120b9c1d7a3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/GrafanaApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/GrafanaApiServiceImpl.java
@@ -15,20 +15,12 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.impl;
+package org.apache.iotdb.rest.protocol.v2.impl;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.protocol.rest.handler.AuthorizationHandler;
-import org.apache.iotdb.db.protocol.rest.v2.GrafanaApiService;
-import org.apache.iotdb.db.protocol.rest.v2.handler.ExceptionHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.QueryDataSetHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.RequestValidationHandler;
-import org.apache.iotdb.db.protocol.rest.v2.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.v2.model.ExpressionRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.SQL;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.queryengine.plan.Coordinator;
import org.apache.iotdb.db.queryengine.plan.analyze.ClusterPartitionFetcher;
@@ -42,6 +34,14 @@
import org.apache.iotdb.db.queryengine.plan.statement.crud.QueryStatement;
import org.apache.iotdb.db.queryengine.plan.statement.metadata.ShowStatement;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.rest.protocol.handler.AuthorizationHandler;
+import org.apache.iotdb.rest.protocol.v2.GrafanaApiService;
+import org.apache.iotdb.rest.protocol.v2.handler.ExceptionHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.QueryDataSetHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.RequestValidationHandler;
+import org.apache.iotdb.rest.protocol.v2.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.v2.model.ExpressionRequest;
+import org.apache.iotdb.rest.protocol.v2.model.SQL;
import org.apache.iotdb.rpc.TSStatusCode;
import com.google.common.base.Joiner;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/RestApiServiceImpl.java
similarity index 94%
rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
rename to external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/RestApiServiceImpl.java
index b657523987dc1..1ea82c606576b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
+++ b/external-service-impl/rest/src/main/java/org/apache/iotdb/rest/protocol/v2/impl/RestApiServiceImpl.java
@@ -15,29 +15,13 @@
* limitations under the License.
*/
-package org.apache.iotdb.db.protocol.rest.v2.impl;
+package org.apache.iotdb.rest.protocol.v2.impl;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
-import org.apache.iotdb.db.protocol.rest.handler.AuthorizationHandler;
-import org.apache.iotdb.db.protocol.rest.model.ExecutionStatus;
-import org.apache.iotdb.db.protocol.rest.utils.InsertTabletSortDataUtils;
-import org.apache.iotdb.db.protocol.rest.v2.NotFoundException;
-import org.apache.iotdb.db.protocol.rest.v2.RestApiService;
-import org.apache.iotdb.db.protocol.rest.v2.handler.ExceptionHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.ExecuteStatementHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.FastLastHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.QueryDataSetHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.RequestValidationHandler;
-import org.apache.iotdb.db.protocol.rest.v2.handler.StatementConstructionHandler;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertRecordsRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.InsertTabletRequest;
-import org.apache.iotdb.db.protocol.rest.v2.model.PrefixPathList;
-import org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet;
-import org.apache.iotdb.db.protocol.rest.v2.model.SQL;
import org.apache.iotdb.db.protocol.session.IClientSession;
import org.apache.iotdb.db.protocol.session.SessionManager;
import org.apache.iotdb.db.protocol.thrift.OperationType;
@@ -60,6 +44,22 @@
import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.utils.CommonUtils;
import org.apache.iotdb.db.utils.SetThreadName;
+import org.apache.iotdb.rest.protocol.handler.AuthorizationHandler;
+import org.apache.iotdb.rest.protocol.model.ExecutionStatus;
+import org.apache.iotdb.rest.protocol.utils.InsertTabletSortDataUtils;
+import org.apache.iotdb.rest.protocol.v2.NotFoundException;
+import org.apache.iotdb.rest.protocol.v2.RestApiService;
+import org.apache.iotdb.rest.protocol.v2.handler.ExceptionHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.ExecuteStatementHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.FastLastHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.QueryDataSetHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.RequestValidationHandler;
+import org.apache.iotdb.rest.protocol.v2.handler.StatementConstructionHandler;
+import org.apache.iotdb.rest.protocol.v2.model.InsertRecordsRequest;
+import org.apache.iotdb.rest.protocol.v2.model.InsertTabletRequest;
+import org.apache.iotdb.rest.protocol.v2.model.PrefixPathList;
+import org.apache.iotdb.rest.protocol.v2.model.QueryDataSet;
+import org.apache.iotdb.rest.protocol.v2.model.SQL;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.iotdb.service.rpc.thrift.TSLastDataQueryReq;
@@ -90,7 +90,7 @@ public class RestApiServiceImpl extends RestApiService {
private static final SessionManager SESSION_MANAGER = SessionManager.getInstance();
- private static final String FORMAT = "rest/v2/fastLastQuery %s";
+ private static final String FORMAT = "org/apache/iotdb/rest/protocol/v2/fastLastQuery %s";
private final IPartitionFetcher partitionFetcher;
diff --git a/integration-test/pom.xml b/integration-test/pom.xml
index c82a63c3f3b15..a4776a57c55f0 100644
--- a/integration-test/pom.xml
+++ b/integration-test/pom.xml
@@ -239,6 +239,13 @@
provided
+
+ org.apache.iotdb
+ rest
+ 2.0.7-SNAPSHOT
+
+ provided
+
diff --git a/integration-test/src/assembly/mpp-share.xml b/integration-test/src/assembly/mpp-share.xml
index 96ac13e64d179..70072e8282ec6 100644
--- a/integration-test/src/assembly/mpp-share.xml
+++ b/integration-test/src/assembly/mpp-share.xml
@@ -35,5 +35,9 @@
${project.basedir}/../external-service-impl/mqtt/target/mqtt-${project.version}-jar-with-dependencies.jar
lib
+
+ ${project.basedir}/../external-service-impl/rest/target/rest-${project.version}-jar-with-dependencies.jar
+ lib
+
diff --git a/iotdb-core/confignode/pom.xml b/iotdb-core/confignode/pom.xml
index 805848aadaf0e..1112363f46631 100644
--- a/iotdb-core/confignode/pom.xml
+++ b/iotdb-core/confignode/pom.xml
@@ -132,12 +132,6 @@
org.reflections
reflections
test
-
-
- org.javassist
- javassist
-
-
com.google.code.findbugs
diff --git a/iotdb-core/datanode/pom.xml b/iotdb-core/datanode/pom.xml
index b55fd8e5c6827..2ccae580549f2 100644
--- a/iotdb-core/datanode/pom.xml
+++ b/iotdb-core/datanode/pom.xml
@@ -59,11 +59,6 @@
external-api
2.0.7-SNAPSHOT
-
- org.apache.iotdb
- openapi
- 2.0.7-SNAPSHOT
-
org.apache.iotdb
node-commons
@@ -188,10 +183,6 @@
org.eclipse.milo
sdk-core
-
- jakarta.servlet
- jakarta.servlet-api
-
org.eclipse.milo
stack-server
@@ -208,10 +199,6 @@
org.bouncycastle
bcprov-jdk18on
-
- org.eclipse.jetty
- jetty-http
-
org.apache.commons
commons-pool2
@@ -220,18 +207,10 @@
org.antlr
antlr4-runtime
-
- org.eclipse.jetty
- jetty-util
-
io.airlift
airline
-
- org.eclipse.jetty
- jetty-server
-
org.eclipse.milo
sdk-server
@@ -259,31 +238,20 @@
-
- org.glassfish.jersey.containers
- jersey-container-servlet-core
-
com.google.code.gson
gson
-
- org.eclipse.jetty
- jetty-servlet
-
-
- org.glassfish.jersey.inject
- jersey-hk2
- runtime
-
-
- com.fasterxml.jackson.core
- jackson-databind
- runtime
-
com.github.ben-manes.caffeine
caffeine
+
+
+
+ org.checkerframework
+ checker-qual
+
+
com.google.guava
@@ -330,11 +298,6 @@
json-smart
test
-
- org.apache.httpcomponents
- httpcore
- test
-
org.apache.ratis
ratis-thirdparty-misc
@@ -345,11 +308,6 @@
oauth2-oidc-sdk
test
-
- org.apache.httpcomponents
- httpclient
- test
-
org.powermock
powermock-core
@@ -538,8 +496,6 @@
io.jsonwebtoken:jjwt-impl
io.jsonwebtoken:jjwt-jackson
-
- org.glassfish.jersey.inject:jersey-hk2
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
index d0eef468d4f94..eaa4fa0a4e992 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -75,7 +75,6 @@
import org.apache.iotdb.db.conf.IoTDBConfig;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.conf.IoTDBStartCheck;
-import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
import org.apache.iotdb.db.consensus.DataRegionConsensusImpl;
import org.apache.iotdb.db.consensus.SchemaRegionConsensusImpl;
import org.apache.iotdb.db.pipe.agent.PipeDataNodeAgent;
@@ -1311,9 +1310,6 @@ public void stop() {
}
private void initProtocols() throws StartupException {
- if (IoTDBRestServiceDescriptor.getInstance().getConfig().isEnableRestService()) {
- registerManager.register(RestService.getInstance());
- }
prepareExternalServiceResources();
if (PipeConfig.getInstance().getPipeAirGapReceiverEnabled()) {
registerManager.register(PipeDataNodeAgent.receiver().airGap());
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java
index 4dee890e65fd8..157734aef56ce 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/externalservice/BuiltinExternalServices.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.service.externalservice;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
import java.util.function.Supplier;
@@ -31,8 +32,7 @@ public enum BuiltinExternalServices {
REST(
"REST",
"org.apache.iotdb.rest.RestService",
- // IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService
- () -> false);
+ IoTDBRestServiceDescriptor.getInstance().getConfig()::isEnableRestService);
private final String serviceName;
private final String className;
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java
deleted file mode 100644
index 55d7474245340..0000000000000
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/GrafanaApiServiceTest.java
+++ /dev/null
@@ -1,450 +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.
- */
-package org.apache.iotdb.db.protocol.rest;
-
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-// move to integration-test
-@Ignore
-public class GrafanaApiServiceTest {
- @Before
- public void setUp() throws Exception {
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- EnvironmentUtils.cleanEnv();
- }
-
- private String getAuthorization(String username, String password) {
- return Base64.getEncoder()
- .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
- }
-
- private HttpPost getHttpPost(String url) {
- HttpPost httpPost = new HttpPost(url);
- httpPost.addHeader("Content-type", "application/json; charset=utf-8");
- httpPost.setHeader("Accept", "application/json");
- String authorization = getAuthorization("root", "root");
- httpPost.setHeader("Authorization", authorization);
- return httpPost;
- }
-
- @Test
- public void login() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet httpGet = new HttpGet("http://127.0.0.1:18080/grafana/v1/login");
- CloseableHttpResponse response = null;
- try {
- String authorization = getAuthorization("root", "root");
- httpGet.setHeader("Authorization", authorization);
- response = httpClient.execute(httpGet);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(200, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (httpClient != null) {
- httpClient.close();
- }
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void rightInsertTablet(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/rest/v1/insertTablet");
- String json =
- "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s4\",\"s5\"],\"dataTypes\":[\"INT32\",\"INT32\"],\"values\":[[11,2],[15,13]],\"isAligned\":false,\"deviceId\":\"root.sg25\"}";
- httpPost.setEntity(new StringEntity(json, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(200, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void expressionAggGroupByTimeAndLevel(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s),level=1\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- List timestampsResult = (List) map.get("timestamps");
- List expressionsResult = (List) map.get("expressions");
- List> valuesResult = (List>) map.get("values");
- Assert.assertTrue(map.size() > 0);
- Assert.assertTrue(timestampsResult.size() == 10);
- Assert.assertTrue(valuesResult.size() == 1);
- Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0)));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void expression(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"s4\",\"s5\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232133960,\"endTime\":1635232163960}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- String[] expressionsResult = {"root.sg25.s4", "root.sg25.s5"};
- Long[] timestamps = {1635232143960L, 1635232153960L};
- Object[] values1 = {11, 2};
- Object[] values2 = {15, 13};
- Assert.assertArrayEquals(
- expressionsResult, (map.get("expressions")).toArray(new String[] {}));
- Assert.assertArrayEquals(timestamps, (map.get("timestamps")).toArray(new Long[] {}));
- Assert.assertArrayEquals(
- values1, ((List) (map.get("values")).get(0)).toArray(new Object[] {}));
- Assert.assertArrayEquals(
- values2, ((List) (map.get("values")).get(1)).toArray(new Object[] {}));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void expressionWithControl(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"sum(s4)\",\"avg(s5)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232133960,\"endTime\":1635232163960,\"control\":\"group by([1635232133960,1635232163960),20s)\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- String[] expressionsResult = {"sum(root.sg25.s4)", "avg(root.sg25.s5)"};
- Long[] timestamps = {1635232133960L, 1635232153960L};
- Object[] values1 = {11.0, 2.0};
- Object[] values2 = {15.0, 13.0};
- Assert.assertArrayEquals(
- expressionsResult, (map.get("expressions")).toArray(new String[] {}));
- Assert.assertArrayEquals(timestamps, (map.get("timestamps")).toArray(new Long[] {}));
- Assert.assertArrayEquals(
- values1, ((List) (map.get("values")).get(0)).toArray(new Object[] {}));
- Assert.assertArrayEquals(
- values2, ((List) (map.get("values")).get(1)).toArray(new Object[] {}));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void expressionWithConditionControl(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"sum(s4)\",\"avg(s5)\"],\"prefixPath\":[\"root.sg25\"],\"condition\":\"timestamp=1635232143960\",\"startTime\":1635232133960,\"endTime\":1635232163960,\"control\":\"group by([1635232133960,1635232163960),20s)\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- String[] expressionsResult = {"sum(root.sg25.s4)", "avg(root.sg25.s5)"};
- Long[] timestamps = {1635232133960L, 1635232153960L};
- Object[] values1 = {11.0, null};
- Object[] values2 = {15.0, null};
- Assert.assertArrayEquals(expressionsResult, map.get("expressions").toArray(new String[] {}));
- Assert.assertArrayEquals(timestamps, (map.get("timestamps")).toArray(new Long[] {}));
- Assert.assertArrayEquals(
- values1, ((List) (map.get("values")).get(0)).toArray(new Object[] {}));
- Assert.assertArrayEquals(
- values2, ((List) (map.get("values")).get(1)).toArray(new Object[] {}));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void variable(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/variable");
- String sql = "{\"sql\":\"show child paths root.sg25\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- List list = mapper.readValue(message, List.class);
- String[] expectedResult = {"s4", "s5"};
- Assert.assertArrayEquals(expectedResult, list.toArray(new String[] {}));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- @Test
- public void expressionWithConditionControlTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
- expressionWithConditionControl(httpClient);
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void expressionTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
- expression(httpClient);
- expressionAggGroupByTimeAndLevel(httpClient);
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void expressionWithControlTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
- expressionWithControl(httpClient);
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void variableTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
- variable(httpClient);
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void expressionWithAggGroupByTimeTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
-
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by([1635232143960,1635232153960),1s)\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- List timestampsResult = (List) map.get("timestamps");
- List expressionsResult = (List) map.get("expressions");
- List> valuesResult = (List>) map.get("values");
- Assert.assertTrue(map.size() > 0);
- Assert.assertTrue(timestampsResult.size() == 10);
- Assert.assertTrue(valuesResult.size() == 1);
- Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0)));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void expressionWithAggGroupByLevelTest() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
-
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/grafana/v1/query/expression");
- String sql =
- "{\"expression\":[\"count(s4)\"],\"prefixPath\":[\"root.sg25\"],\"startTime\":1635232143960,\"endTime\":1635232153960,\"control\":\"group by level = 1\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- List timestampsResult = (List) map.get("timestamps");
- List expressionsResult = (List) map.get("expressions");
- List> valuesResult = (List>) map.get("values");
- Assert.assertTrue(map.size() > 0);
- Assert.assertTrue(timestampsResult == null);
- Assert.assertTrue(valuesResult.size() == 1);
- Assert.assertTrue("count(root.sg25.s4)".equals(expressionsResult.get(0)));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-}
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/IoTDBRestServiceTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/IoTDBRestServiceTest.java
deleted file mode 100644
index 4c15d3635acac..0000000000000
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/IoTDBRestServiceTest.java
+++ /dev/null
@@ -1,918 +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.
- */
-package org.apache.iotdb.db.protocol.rest;
-
-import org.apache.iotdb.commons.exception.StartupException;
-import org.apache.iotdb.db.service.ExternalRPCService;
-import org.apache.iotdb.db.utils.EnvironmentUtils;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import org.apache.http.HttpEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.util.EntityUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.FixMethodOrder;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runners.MethodSorters;
-
-import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Base64;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-// Move it to integration-test
-@Ignore
-@FixMethodOrder(MethodSorters.JVM)
-public class IoTDBRestServiceTest {
- @Before
- public void setUp() throws Exception {
- EnvironmentUtils.envSetUp();
- }
-
- @After
- public void tearDown() throws Exception {
- EnvironmentUtils.cleanEnv();
- }
-
- private String getAuthorization(String username, String password) {
- return Base64.getEncoder()
- .encodeToString((username + ":" + password).getBytes(StandardCharsets.UTF_8));
- }
-
- @Test
- public void ping() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet httpGet = new HttpGet("http://127.0.0.1:18080/ping");
- CloseableHttpResponse response = null;
- try {
- response = httpClient.execute(httpGet);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(200, response.getStatusLine().getStatusCode());
- assertEquals(200, Integer.parseInt(result.get("code").toString()));
-
- // Shutdown RPCService to test
- ExternalRPCService.getInstance().stop();
- response = httpClient.execute(httpGet);
- responseEntity = response.getEntity();
- message = EntityUtils.toString(responseEntity, "utf-8");
- result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(503, response.getStatusLine().getStatusCode());
- assertEquals(500, Integer.parseInt(result.get("code").toString()));
- ExternalRPCService.getInstance().start();
-
- } catch (IOException | StartupException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (httpClient != null) {
- httpClient.close();
- }
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- private HttpPost getHttpPost(String url) {
- HttpPost httpPost = new HttpPost(url);
- httpPost.addHeader("Content-type", "application/json; charset=utf-8");
- httpPost.setHeader("Accept", "application/json");
- String authorization = getAuthorization("root", "root");
- httpPost.setHeader("Authorization", authorization);
- return httpPost;
- }
-
- public void rightInsertTablet(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/rest/v1/insertTablet");
- String json =
- "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[11,2],[1635000012345555,1635000012345556],[1.41,null],[null,false],[null,3.5555]],\"isAligned\":false,\"deviceId\":\"root.sg25\"}";
- httpPost.setEntity(new StringEntity(json, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(200, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- @Test
- public void errorInsertTablet() {
- CloseableHttpResponse response = null;
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/rest/v1/insertTablet");
- String json =
- "{\"timestamps\":[1635232143960,1635232153960],\"measurements\":[\"s3\",\"s4\",\"s5\",\"s6\",\"s7\",\"s8\"],\"dataTypes\":[\"TEXT\",\"INT32\",\"INT64\",\"FLOAT\",\"BOOLEAN\",\"DOUBLE\"],\"values\":[[\"2aa\",\"\"],[111111112312312442352545452323123,2],[16,15],[1.41,null],[null,false],[null,3.55555555555555555555555555555555555555555555312234235345123127318927461482308478123645555555555555555555555555555555555555555555531223423534512312731892746148230847812364]],\"isAligned\":false,\"deviceId\":\"root.sg25\"}";
- httpPost.setEntity(new StringEntity(json, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(413, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- @Test
- public void insertAndQuery() {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- rightInsertTablet(httpClient);
- query(httpClient);
- queryGroupByLevel(httpClient);
- queryRowLimit(httpClient);
- queryShowChildPaths(httpClient);
- queryShowNodes(httpClient);
- showAllTTL(httpClient);
- showStorageGroup(httpClient);
- showFunctions(httpClient);
- showTimeseries(httpClient);
-
- showLastTimeseries(httpClient);
- countTimeseries(httpClient);
- countNodes(httpClient);
- showDevices(httpClient);
-
- showDevicesWithStroage(httpClient);
- listUser(httpClient);
- selectCount(httpClient);
- selectLast(httpClient);
- try {
- httpClient.close();
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
-
- @Test
- public void queryWithUnsetAuthorization() {
- CloseableHttpResponse response = null;
- try {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpPost httpPost = new HttpPost("http://127.0.0.1:18080/rest/v1/query");
- httpPost.addHeader("Content-type", "application/json; charset=utf-8");
- httpPost.setHeader("Accept", "application/json");
- String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- Assert.assertEquals(401, response.getStatusLine().getStatusCode());
- String message = EntityUtils.toString(response.getEntity(), "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(603, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- @Test
- public void queryWithWrongAuthorization() {
- CloseableHttpResponse response = null;
- try {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpPost httpPost = new HttpPost("http://127.0.0.1:18080/rest/v1/query");
- httpPost.addHeader("Content-type", "application/json; charset=utf-8");
- httpPost.setHeader("Accept", "application/json");
- String authorization = getAuthorization("abc", "def");
- httpPost.setHeader("Authorization", authorization);
- String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- Assert.assertEquals(401, response.getStatusLine().getStatusCode());
- String message = EntityUtils.toString(response.getEntity(), "utf-8");
- JsonObject result = JsonParser.parseString(message).getAsJsonObject();
- assertEquals(600, Integer.parseInt(result.get("code").toString()));
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- } finally {
- try {
- if (response != null) {
- response.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- fail(e.getMessage());
- }
- }
- }
-
- public void query(CloseableHttpClient httpClient) {
- CloseableHttpResponse response = null;
- try {
- HttpPost httpPost = getHttpPost("http://127.0.0.1:18080/rest/v1/query");
- String sql = "{\"sql\":\"select *,s4+1,s4+1 from root.sg25\"}";
- httpPost.setEntity(new StringEntity(sql, Charset.defaultCharset()));
- response = httpClient.execute(httpPost);
- HttpEntity responseEntity = response.getEntity();
- String message = EntityUtils.toString(responseEntity, "utf-8");
- ObjectMapper mapper = new ObjectMapper();
- Map map = mapper.readValue(message, Map.class);
- List timestampsResult = (List) map.get("timestamps");
- List expressionsResult = (List) map.get("expressions");
- List> valuesResult = (List>) map.get("values");
- Assert.assertTrue(map.size() > 0);
- List