You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2022/10/29 05:21:27 UTC
[iotdb] branch master updated: [IOTDB-3976] Support Drop Schema Template in cluster (#7769)
This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 9d9ef04b5a [IOTDB-3976] Support Drop Schema Template in cluster (#7769)
9d9ef04b5a is described below
commit 9d9ef04b5a044358dc10b3097339f02d282cd615
Author: Marcos_Zyk <38...@users.noreply.github.com>
AuthorDate: Sat Oct 29 13:21:21 2022 +0800
[IOTDB-3976] Support Drop Schema Template in cluster (#7769)
[IOTDB-3976] Support Drop Schema Template in cluster (#7769)
---
.../consensus/request/ConfigPhysicalPlan.java | 4 ++
.../consensus/request/ConfigPhysicalPlanType.java | 3 +-
.../write/template/DropSchemaTemplatePlan.java | 57 ++++++++++++++++++++++
.../confignode/manager/ClusterSchemaManager.java | 33 +++++++++++++
.../iotdb/confignode/manager/ConfigManager.java | 10 ++++
.../apache/iotdb/confignode/manager/IManager.java | 3 ++
.../persistence/executor/ConfigPlanExecutor.java | 3 ++
.../persistence/schema/ClusterSchemaInfo.java | 10 ++++
.../persistence/schema/TemplateTable.java | 15 ++++++
.../thrift/ConfigNodeRPCServiceProcessor.java | 5 ++
.../request/ConfigPhysicalPlanSerDeTest.java | 11 +++++
.../iotdb/db/it/schema/IoTDBSchemaTemplateIT.java | 14 +++---
.../apache/iotdb/db/client/ConfigNodeClient.java | 21 ++++++++
.../plan/execution/config/ConfigTaskVisitor.java | 8 +++
.../config/executor/ClusterConfigTaskExecutor.java | 26 ++++++++++
.../config/executor/IConfigTaskExecutor.java | 4 ++
.../executor/StandaloneConfigTaskExecutor.java | 12 +++++
.../metadata/template/DropSchemaTemplateTask.java | 42 ++++++++++++++++
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 6 +++
.../db/mpp/plan/statement/StatementVisitor.java | 6 +++
.../template/DropSchemaTemplateStatement.java | 55 +++++++++++++++++++++
.../src/main/thrift/confignode.thrift | 5 ++
22 files changed, 344 insertions(+), 9 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
index ab0dd1332b..065506dde9 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
@@ -81,6 +81,7 @@ import org.apache.iotdb.confignode.consensus.request.write.sync.PreCreatePipePla
import org.apache.iotdb.confignode.consensus.request.write.sync.SetPipeStatusPlan;
import org.apache.iotdb.confignode.consensus.request.write.sync.ShowPipePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
+import org.apache.iotdb.confignode.consensus.request.write.template.DropSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.PreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.RollbackPreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.SetSchemaTemplatePlan;
@@ -290,6 +291,9 @@ public abstract class ConfigPhysicalPlan implements IConsensusRequest {
case GetTemplateSetInfo:
req = new GetTemplateSetInfoPlan();
break;
+ case DropSchemaTemplate:
+ req = new DropSchemaTemplatePlan();
+ break;
case PreUnsetTemplate:
req = new PreUnsetSchemaTemplatePlan();
break;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
index d55b94dd4e..b63eaf6775 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
@@ -109,5 +109,6 @@ public enum ConfigPhysicalPlanType {
GetFunctionJar,
PreUnsetTemplate,
RollbackUnsetTemplate,
- UnsetTemplate
+ UnsetTemplate,
+ DropSchemaTemplate
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/DropSchemaTemplatePlan.java b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/DropSchemaTemplatePlan.java
new file mode 100644
index 0000000000..a8aab11239
--- /dev/null
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/template/DropSchemaTemplatePlan.java
@@ -0,0 +1,57 @@
+/*
+ * 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.confignode.consensus.request.write.template;
+
+import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlan;
+import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+
+public class DropSchemaTemplatePlan extends ConfigPhysicalPlan {
+
+ private String templateName;
+
+ public DropSchemaTemplatePlan() {
+ super(ConfigPhysicalPlanType.DropSchemaTemplate);
+ }
+
+ public DropSchemaTemplatePlan(String templateName) {
+ super(ConfigPhysicalPlanType.DropSchemaTemplate);
+ this.templateName = templateName;
+ }
+
+ public String getTemplateName() {
+ return templateName;
+ }
+
+ @Override
+ protected void serializeImpl(DataOutputStream stream) throws IOException {
+ stream.writeInt(ConfigPhysicalPlanType.DropSchemaTemplate.ordinal());
+ ReadWriteIOUtils.write(templateName, stream);
+ }
+
+ @Override
+ protected void deserializeImpl(ByteBuffer buffer) throws IOException {
+ this.templateName = ReadWriteIOUtils.readString(buffer);
+ }
+}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
index 5ceebf6b8b..26e33d18fb 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ClusterSchemaManager.java
@@ -48,6 +48,7 @@ import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetStora
import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetTTLPlan;
import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetTimePartitionIntervalPlan;
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
+import org.apache.iotdb.confignode.consensus.request.write.template.DropSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.PreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.RollbackPreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.SetSchemaTemplatePlan;
@@ -603,6 +604,38 @@ public class ClusterSchemaManager {
return getConsensusManager().write(new UnsetSchemaTemplatePlan(templateId, path)).getStatus();
}
+ public synchronized TSStatus dropSchemaTemplate(String templateName) {
+
+ // check template existence
+ GetSchemaTemplatePlan getSchemaTemplatePlan = new GetSchemaTemplatePlan(templateName);
+ TemplateInfoResp templateInfoResp =
+ (TemplateInfoResp) getConsensusManager().read(getSchemaTemplatePlan).getDataset();
+ if (templateInfoResp.getStatus().getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return templateInfoResp.getStatus();
+ } else if (templateInfoResp.getTemplateList() == null
+ || templateInfoResp.getTemplateList().isEmpty()) {
+ return RpcUtils.getStatus(
+ TSStatusCode.UNDEFINED_TEMPLATE.getStatusCode(),
+ String.format("Undefined template name: %s", templateName));
+ }
+
+ // check is template set on some path, block all template set operation
+ GetPathsSetTemplatePlan getPathsSetTemplatePlan = new GetPathsSetTemplatePlan(templateName);
+ PathInfoResp pathInfoResp =
+ (PathInfoResp) getConsensusManager().read(getPathsSetTemplatePlan).getDataset();
+ if (pathInfoResp.getStatus().getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return pathInfoResp.getStatus();
+ } else if (pathInfoResp.getPathList() != null && !pathInfoResp.getPathList().isEmpty()) {
+ return RpcUtils.getStatus(
+ TSStatusCode.METADATA_ERROR.getStatusCode(),
+ String.format(
+ "Template [%s] has been set on MTree, cannot be dropped now.", templateName));
+ }
+
+ // execute drop template
+ return getConsensusManager().write(new DropSchemaTemplatePlan(templateName)).getStatus();
+ }
+
private NodeManager getNodeManager() {
return configManager.getNodeManager();
}
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index d47a694913..3e1287de3a 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -1141,6 +1141,16 @@ public class ConfigManager implements IManager {
}
}
+ @Override
+ public TSStatus dropSchemaTemplate(String templateName) {
+ TSStatus status = confirmLeader();
+ if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return clusterSchemaManager.dropSchemaTemplate(templateName);
+ } else {
+ return status;
+ }
+ }
+
@Override
public TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req) {
TSStatus status = confirmLeader();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
index 01f4cff1ee..cd55a485d1 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
@@ -435,6 +435,9 @@ public interface IManager {
/** unset schema template */
TSStatus unsetSchemaTemplate(TUnsetSchemaTemplateReq req);
+ /** Drop schema template */
+ TSStatus dropSchemaTemplate(String templateName);
+
/*
* delete timeseries
*
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
index 8bf5a7bb3b..57b238116b 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
@@ -80,6 +80,7 @@ import org.apache.iotdb.confignode.consensus.request.write.sync.PreCreatePipePla
import org.apache.iotdb.confignode.consensus.request.write.sync.SetPipeStatusPlan;
import org.apache.iotdb.confignode.consensus.request.write.sync.ShowPipePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
+import org.apache.iotdb.confignode.consensus.request.write.template.DropSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.PreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.RollbackPreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.SetSchemaTemplatePlan;
@@ -321,6 +322,8 @@ public class ConfigPlanExecutor {
(RollbackPreUnsetSchemaTemplatePlan) physicalPlan);
case UnsetTemplate:
return clusterSchemaInfo.unsetSchemaTemplate((UnsetSchemaTemplatePlan) physicalPlan);
+ case DropSchemaTemplate:
+ return clusterSchemaInfo.dropSchemaTemplate((DropSchemaTemplatePlan) physicalPlan);
case CreatePipeSink:
return syncInfo.addPipeSink((CreatePipeSinkPlan) physicalPlan);
case DropPipeSink:
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
index cec262ba3b..f7ad8cffcb 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
@@ -41,6 +41,7 @@ import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetStora
import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetTTLPlan;
import org.apache.iotdb.confignode.consensus.request.write.storagegroup.SetTimePartitionIntervalPlan;
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
+import org.apache.iotdb.confignode.consensus.request.write.template.DropSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.PreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.RollbackPreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.SetSchemaTemplatePlan;
@@ -764,6 +765,15 @@ public class ClusterSchemaInfo implements SnapshotProcessor {
}
}
+ public TSStatus dropSchemaTemplate(DropSchemaTemplatePlan dropSchemaTemplatePlan) {
+ try {
+ templateTable.dropTemplate(dropSchemaTemplatePlan.getTemplateName());
+ return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ } catch (MetadataException e) {
+ return RpcUtils.getStatus(e.getErrorCode(), e.getMessage());
+ }
+ }
+
public Map<String, TStorageGroupSchema> getMatchedStorageGroupSchemasByOneName(
String[] storageGroupPathPattern) {
Map<String, TStorageGroupSchema> schemaMap = new HashMap<>();
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
index 864dd92af3..b2abdb61fd 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/TemplateTable.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.confignode.persistence.schema;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.utils.TestOnly;
+import org.apache.iotdb.db.exception.metadata.template.UndefinedTemplateException;
import org.apache.iotdb.db.metadata.template.Template;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -115,6 +116,20 @@ public class TemplateTable {
}
}
+ public void dropTemplate(String templateName) throws MetadataException {
+ try {
+ templateReadWriteLock.writeLock().lock();
+ Template temp = this.templateMap.remove(templateName);
+ if (temp == null) {
+ LOGGER.error("Undefined template {}", templateName);
+ throw new UndefinedTemplateException(templateName);
+ }
+ templateIdMap.remove(temp.getId());
+ } finally {
+ templateReadWriteLock.writeLock().unlock();
+ }
+ }
+
private void serialize(OutputStream outputStream) throws IOException {
ReadWriteIOUtils.write(templateIdGenerator.get(), outputStream);
ReadWriteIOUtils.write(templateMap.size(), outputStream);
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
index 2f353fc640..bc2f573897 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
@@ -664,6 +664,11 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac
return configManager.unsetSchemaTemplate(req);
}
+ @Override
+ public TSStatus dropSchemaTemplate(String req) throws TException {
+ return configManager.dropSchemaTemplate(req);
+ }
+
@Override
public TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req) {
return configManager.deleteTimeSeries(req);
diff --git a/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java b/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
index 3d2d86590c..0df73f9a78 100644
--- a/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
+++ b/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
@@ -96,6 +96,7 @@ import org.apache.iotdb.confignode.consensus.request.write.sync.PreCreatePipePla
import org.apache.iotdb.confignode.consensus.request.write.sync.SetPipeStatusPlan;
import org.apache.iotdb.confignode.consensus.request.write.sync.ShowPipePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.CreateSchemaTemplatePlan;
+import org.apache.iotdb.confignode.consensus.request.write.template.DropSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.PreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.RollbackPreUnsetSchemaTemplatePlan;
import org.apache.iotdb.confignode.consensus.request.write.template.SetSchemaTemplatePlan;
@@ -905,6 +906,16 @@ public class ConfigPhysicalPlanSerDeTest {
Assert.assertEquals(getPathsSetTemplatePlan0.getName(), getPathsSetTemplatePlan1.getName());
}
+ @Test
+ public void DropSchemaTemplateTest() throws IOException {
+ DropSchemaTemplatePlan dropSchemaTemplatePlan = new DropSchemaTemplatePlan("template");
+ DropSchemaTemplatePlan deserializedPlan =
+ (DropSchemaTemplatePlan)
+ ConfigPhysicalPlan.Factory.create(dropSchemaTemplatePlan.serializeToByteBuffer());
+ Assert.assertEquals(
+ dropSchemaTemplatePlan.getTemplateName(), deserializedPlan.getTemplateName());
+ }
+
@Test
public void CreatePipeSinkPlanTest() throws IOException {
Map<String, String> attributes = new HashMap<>();
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
index e2759ece95..465dba1f95 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/schema/IoTDBSchemaTemplateIT.java
@@ -25,7 +25,6 @@ import org.apache.iotdb.itbase.category.ClusterIT;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
@@ -81,12 +80,12 @@ public class IoTDBSchemaTemplateIT {
statement.execute("SET SCHEMA TEMPLATE t2 TO root.sg1.d2");
// test drop template which has been set
- // try {
- // statement.execute("DROP SCHEMA TEMPLATE t1");
- // } catch (SQLException e) {
- // Assert.assertEquals(
- // "303: Template [t1] has been set on MTree, cannot be dropped now.", e.getMessage());
- // }
+ try {
+ statement.execute("DROP SCHEMA TEMPLATE t1");
+ } catch (SQLException e) {
+ Assert.assertEquals(
+ "303: Template [t1] has been set on MTree, cannot be dropped now.", e.getMessage());
+ }
try (ResultSet resultSet = statement.executeQuery("SHOW TIMESERIES root.sg1.**")) {
Assert.assertFalse(resultSet.next());
@@ -214,7 +213,6 @@ public class IoTDBSchemaTemplateIT {
}
}
- @Ignore
@Test
public void testDropAndShowSchemaTemplates() throws SQLException {
// show schema templates
diff --git a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
index 3e02f6eccc..9399df5170 100644
--- a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
+++ b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
@@ -1388,6 +1388,27 @@ public class ConfigNodeClient
throw new TException(MSG_RECONNECTION_FAIL);
}
+ @Override
+ public TSStatus dropSchemaTemplate(String req) throws TException {
+ for (int i = 0; i < RETRY_NUM; i++) {
+ try {
+ TSStatus status = client.dropSchemaTemplate(req);
+ if (!updateConfigNodeLeader(status)) {
+ return status;
+ }
+ } catch (TException e) {
+ logger.warn(
+ "Failed to connect to ConfigNode {} from DataNode {} when executing {}",
+ configNode,
+ config.getAddressAndPort(),
+ Thread.currentThread().getStackTrace()[1].getMethodName());
+ configLeader = null;
+ }
+ reconnect();
+ }
+ throw new TException(MSG_RECONNECTION_FAIL);
+ }
+
@Override
public TSStatus deleteTimeSeries(TDeleteTimeSeriesReq req) throws TException {
for (int i = 0; i < RETRY_NUM; i++) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
index 066111705a..1e6aa6f61e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
@@ -45,6 +45,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowTriggersTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.UnSetTTLTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.CreateSchemaTemplateTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.DeactivateSchemaTemplateTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.DropSchemaTemplateTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.SetSchemaTemplateTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.ShowNodesInSchemaTemplateTask;
import org.apache.iotdb.db.mpp.plan.execution.config.metadata.template.ShowPathSetTemplateTask;
@@ -93,6 +94,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTriggersStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.UnSetTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -287,6 +289,12 @@ public class ConfigTaskVisitor
return new UnsetSchemaTemplateTask(context.getQueryId(), unsetSchemaTemplateStatement);
}
+ @Override
+ public IConfigTask visitDropSchemaTemplate(
+ DropSchemaTemplateStatement dropSchemaTemplateStatement, TaskContext context) {
+ return new DropSchemaTemplateTask(dropSchemaTemplateStatement);
+ }
+
@Override
public IConfigTask visitShowDataNodes(
ShowDataNodesStatement showDataNodesStatement, TaskContext context) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index b1368c0b96..3ead0fb787 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -114,6 +114,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -982,6 +983,31 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> dropSchemaTemplate(
+ DropSchemaTemplateStatement dropSchemaTemplateStatement) {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ try (ConfigNodeClient configNodeClient =
+ CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.partitionRegionId)) {
+ // Send request to some API server
+ TSStatus tsStatus =
+ configNodeClient.dropSchemaTemplate(dropSchemaTemplateStatement.getTemplateName());
+ // Get response or throw exception
+ if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
+ LOGGER.error(
+ "Failed to execute drop schema template {} in config node, status is {}.",
+ dropSchemaTemplateStatement.getTemplateName(),
+ tsStatus);
+ future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ } else {
+ future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
+ }
+ } catch (TException | IOException e) {
+ future.setException(e);
+ }
+ return future;
+ }
+
private ByteBuffer serializePatternListToByteBuffer(List<PartialPath> patternList) {
PathPatternTree patternTree = new PathPatternTree();
for (PartialPath pathPattern : patternList) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
index 35a58afb70..dc79335224 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
@@ -39,6 +39,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -124,6 +125,9 @@ public interface IConfigTaskExecutor {
SettableFuture<ConfigTaskResult> unsetSchemaTemplate(
String queryId, UnsetSchemaTemplateStatement unsetSchemaTemplateStatement);
+ SettableFuture<ConfigTaskResult> dropSchemaTemplate(
+ DropSchemaTemplateStatement dropSchemaTemplateStatement);
+
SettableFuture<ConfigTaskResult> createPipeSink(CreatePipeSinkStatement createPipeSinkStatement);
SettableFuture<ConfigTaskResult> dropPipeSink(DropPipeSinkStatement dropPipeSinkStatement);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
index da4eaa5150..a0c59d4d8b 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
@@ -57,6 +57,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -504,6 +505,17 @@ public class StandaloneConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> dropSchemaTemplate(
+ DropSchemaTemplateStatement dropSchemaTemplateStatement) {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ future.setException(
+ new IoTDBException(
+ "Executing drop schema template is not supported",
+ TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode()));
+ return future;
+ }
+
@Override
public SettableFuture<ConfigTaskResult> unsetSchemaTemplate(
String queryId, UnsetSchemaTemplateStatement unsetSchemaTemplateStatement) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/template/DropSchemaTemplateTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/template/DropSchemaTemplateTask.java
new file mode 100644
index 0000000000..c8dd6366de
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/template/DropSchemaTemplateTask.java
@@ -0,0 +1,42 @@
+/*
+ * 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.mpp.plan.execution.config.metadata.template;
+
+import org.apache.iotdb.db.mpp.plan.execution.config.ConfigTaskResult;
+import org.apache.iotdb.db.mpp.plan.execution.config.IConfigTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecutor;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
+
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class DropSchemaTemplateTask implements IConfigTask {
+
+ private final DropSchemaTemplateStatement statement;
+
+ public DropSchemaTemplateTask(DropSchemaTemplateStatement statement) {
+ this.statement = statement;
+ }
+
+ @Override
+ public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
+ throws InterruptedException {
+ return configTaskExecutor.dropSchemaTemplate(statement);
+ }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index 156eba1496..72d68f36e3 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -130,6 +130,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.UnSetTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ActivateTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -3011,6 +3012,11 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
return new UnsetSchemaTemplateStatement(templateName, path);
}
+ @Override
+ public Statement visitDropSchemaTemplate(IoTDBSqlParser.DropSchemaTemplateContext ctx) {
+ return new DropSchemaTemplateStatement(parseIdentifier(ctx.templateName.getText()));
+ }
+
public Map<String, String> parseSyncAttributeClauses(
IoTDBSqlParser.SyncAttributeClausesContext ctx) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
index 788b386a2f..bd1d02330a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
@@ -69,6 +69,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.UnSetTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ActivateTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DeactivateTemplateStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.template.DropSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.SetSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowNodesInSchemaTemplateStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.ShowPathSetTemplateStatement;
@@ -439,4 +440,9 @@ public abstract class StatementVisitor<R, C> {
UnsetSchemaTemplateStatement unsetSchemaTemplateStatement, C context) {
return visitStatement(unsetSchemaTemplateStatement, context);
}
+
+ public R visitDropSchemaTemplate(
+ DropSchemaTemplateStatement dropSchemaTemplateStatement, C context) {
+ return visitStatement(dropSchemaTemplateStatement, context);
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/template/DropSchemaTemplateStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/template/DropSchemaTemplateStatement.java
new file mode 100644
index 0000000000..51013c94d7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/template/DropSchemaTemplateStatement.java
@@ -0,0 +1,55 @@
+/*
+ * 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.mpp.plan.statement.metadata.template;
+
+import org.apache.iotdb.db.mpp.plan.analyze.QueryType;
+import org.apache.iotdb.db.mpp.plan.constant.StatementType;
+import org.apache.iotdb.db.mpp.plan.statement.IConfigStatement;
+import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStatement;
+
+public class DropSchemaTemplateStatement extends ShowStatement implements IConfigStatement {
+
+ private String templateName;
+
+ public DropSchemaTemplateStatement(String templateName) {
+ super();
+ this.templateName = templateName;
+ this.statementType = StatementType.DROP_TEMPLATE;
+ }
+
+ public String getTemplateName() {
+ return templateName;
+ }
+
+ public void setTemplateName(String templateName) {
+ this.templateName = templateName;
+ }
+
+ @Override
+ public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
+ return visitor.visitDropSchemaTemplate(this, context);
+ }
+
+ @Override
+ public QueryType getQueryType() {
+ return QueryType.WRITE;
+ }
+}
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift b/thrift-confignode/src/main/thrift/confignode.thrift
index 195fce9f2d..7f318b0a39 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -960,6 +960,11 @@ service IConfigNodeRPCService {
common.TSStatus unsetSchemaTemplate(TUnsetSchemaTemplateReq req)
+ /**
+ * Drop schema template
+ */
+ common.TSStatus dropSchemaTemplate(string req)
+
/**
* Generate a set of DeleteTimeSeriesProcedure to delete some specific TimeSeries
*