You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/07/06 09:02:32 UTC
[iotdb] branch rel/1.2 updated: [To rel/1.2] Fix error when deactivating empty template
This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new f43f767d573 [To rel/1.2] Fix error when deactivating empty template
f43f767d573 is described below
commit f43f767d5732752e46010830d8b589f438d9039a
Author: Chen YZ <43...@users.noreply.github.com>
AuthorDate: Thu Jul 6 17:02:26 2023 +0800
[To rel/1.2] Fix error when deactivating empty template
---
.../impl/schema/DeactivateTemplateProcedure.java | 73 +++++++++++-----------
.../iotdb/db/it/schema/IoTDBSchemaTemplateIT.java | 23 +++++++
2 files changed, 60 insertions(+), 36 deletions(-)
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
index 9c3f7b6a2f4..bf967b71c83 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java
@@ -71,11 +71,11 @@ public class DeactivateTemplateProcedure
private String queryId;
private Map<PartialPath, List<Template>> templateSetInfo;
- private transient String requestMessage;
+ private String requestMessage; // transient
// generate from templateSetInfo by concat pattern and measurement in template
- private transient PathPatternTree timeSeriesPatternTree;
- private transient ByteBuffer timeSeriesPatternTreeBytes;
- private transient Map<String, List<Integer>> dataNodeRequest;
+ private PathPatternTree timeSeriesPatternTree; // transient
+ private ByteBuffer timeSeriesPatternTreeBytes; // transient
+ private Map<String, List<Integer>> dataNodeRequest; // transient
public DeactivateTemplateProcedure() {
super();
@@ -188,21 +188,26 @@ public class DeactivateTemplateProcedure
}
private void invalidateCache(ConfigNodeProcedureEnv env) {
- Map<Integer, TDataNodeLocation> dataNodeLocationMap =
- env.getConfigManager().getNodeManager().getRegisteredDataNodeLocations();
- AsyncClientHandler<TInvalidateMatchedSchemaCacheReq, TSStatus> clientHandler =
- new AsyncClientHandler<>(
- DataNodeRequestType.INVALIDATE_MATCHED_SCHEMA_CACHE,
- new TInvalidateMatchedSchemaCacheReq(timeSeriesPatternTreeBytes),
- dataNodeLocationMap);
- AsyncDataNodeClientPool.getInstance().sendAsyncRequestToDataNodeWithRetry(clientHandler);
- Map<Integer, TSStatus> statusMap = clientHandler.getResponseMap();
- for (TSStatus status : statusMap.values()) {
- // all dataNodes must clear the related schema cache
- if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- LOGGER.error("Failed to invalidate schema cache of template timeseries {}", requestMessage);
- setFailure(new ProcedureException(new MetadataException("Invalidate schema cache failed")));
- return;
+ // if no target timeseres, return directly
+ if (!timeSeriesPatternTree.isEmpty()) {
+ Map<Integer, TDataNodeLocation> dataNodeLocationMap =
+ env.getConfigManager().getNodeManager().getRegisteredDataNodeLocations();
+ AsyncClientHandler<TInvalidateMatchedSchemaCacheReq, TSStatus> clientHandler =
+ new AsyncClientHandler<>(
+ DataNodeRequestType.INVALIDATE_MATCHED_SCHEMA_CACHE,
+ new TInvalidateMatchedSchemaCacheReq(timeSeriesPatternTreeBytes),
+ dataNodeLocationMap);
+ AsyncDataNodeClientPool.getInstance().sendAsyncRequestToDataNodeWithRetry(clientHandler);
+ Map<Integer, TSStatus> statusMap = clientHandler.getResponseMap();
+ for (TSStatus status : statusMap.values()) {
+ // all dataNodes must clear the related schema cache
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ LOGGER.error(
+ "Failed to invalidate schema cache of template timeseries {}", requestMessage);
+ setFailure(
+ new ProcedureException(new MetadataException("Invalidate schema cache failed")));
+ return;
+ }
}
}
@@ -210,27 +215,23 @@ public class DeactivateTemplateProcedure
}
private void deleteData(ConfigNodeProcedureEnv env) {
-
Map<TConsensusGroupId, TRegionReplicaSet> relatedDataRegionGroup =
env.getConfigManager().getRelatedDataRegionGroup(timeSeriesPatternTree);
- // target timeseries has no data
- if (relatedDataRegionGroup.isEmpty()) {
- setNextState(DeactivateTemplateState.DEACTIVATE_TEMPLATE);
- return;
+ // target timeseries has no data or no target timeseres, return directly
+ if (!relatedDataRegionGroup.isEmpty() && !timeSeriesPatternTree.isEmpty()) {
+ DeactivateTemplateRegionTaskExecutor<TDeleteDataForDeleteSchemaReq> deleteDataTask =
+ new DeactivateTemplateRegionTaskExecutor<>(
+ "delete data",
+ env,
+ relatedDataRegionGroup,
+ true,
+ DataNodeRequestType.DELETE_DATA_FOR_DELETE_SCHEMA,
+ ((dataNodeLocation, consensusGroupIdList) ->
+ new TDeleteDataForDeleteSchemaReq(
+ new ArrayList<>(consensusGroupIdList), timeSeriesPatternTreeBytes)));
+ deleteDataTask.execute();
}
-
- DeactivateTemplateRegionTaskExecutor<TDeleteDataForDeleteSchemaReq> deleteDataTask =
- new DeactivateTemplateRegionTaskExecutor<>(
- "delete data",
- env,
- relatedDataRegionGroup,
- true,
- DataNodeRequestType.DELETE_DATA_FOR_DELETE_SCHEMA,
- ((dataNodeLocation, consensusGroupIdList) ->
- new TDeleteDataForDeleteSchemaReq(
- new ArrayList<>(consensusGroupIdList), timeSeriesPatternTreeBytes)));
- deleteDataTask.execute();
setNextState(DeactivateTemplateState.DEACTIVATE_TEMPLATE);
}
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 c4b0c199ba3..4037a4d696f 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
@@ -828,4 +828,27 @@ public class IoTDBSchemaTemplateIT extends AbstractSchemaIT {
}
}
}
+
+ @Test
+ public void testActivateAndDropEmptyTemplate() throws Exception {
+ try (Connection connection = EnvFactory.getEnv().getConnection();
+ Statement statement = connection.createStatement()) {
+ statement.execute("CREATE SCHEMA TEMPLATE e_t;");
+ statement.execute("SET SCHEMA TEMPLATE e_t TO root.sg1.t.d1;");
+ statement.execute("insert into root.sg1.t.d2(timestamp,s1) values(now(),false);");
+ statement.execute("CREATE TIMESERIES OF SCHEMA TEMPLATE ON root.sg1.t.d1;");
+ try (ResultSet resultSet = statement.executeQuery("show nodes in schema template e_t")) {
+ Assert.assertFalse(resultSet.next());
+ }
+ try (ResultSet resultSet = statement.executeQuery("show paths set schema template e_t")) {
+ Assert.assertTrue(resultSet.next());
+ Assert.assertFalse(resultSet.next());
+ }
+ statement.execute("DEACTIVATE SCHEMA TEMPLATE FROM root.sg1.t.d1;");
+ statement.execute("UNSET SCHEMA TEMPLATE e_t FROM root.sg1.t.d1;");
+ try (ResultSet resultSet = statement.executeQuery("show paths set schema template e_t")) {
+ Assert.assertFalse(resultSet.next());
+ }
+ }
+ }
}