This is an automated email from the ASF dual-hosted git repository.
jackietien 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 24a93f578e9 Fixed the concurrency bug of create timeseries /
set(unset) template & Optimized the table log & Removed the useless
timeseries/table lock (#15062)
24a93f578e9 is described below
commit 24a93f578e999cc3559ccafe90315db640a16a31
Author: Caideyipi <[email protected]>
AuthorDate: Thu Mar 13 09:09:08 2025 +0800
Fixed the concurrency bug of create timeseries / set(unset) template &
Optimized the table log & Removed the useless timeseries/table lock (#15062)
---
.../impl/schema/UnsetTemplateProcedure.java | 146 ++++++++-------------
.../template/NoTemplateOnMNodeException.java | 34 -----
.../impl/DataNodeInternalRPCServiceImpl.java | 33 ++---
.../queryengine/plan/analyze/AnalyzeVisitor.java | 46 ++-----
.../plan/analyze/lock/SchemaLockType.java | 13 --
.../db/schemaengine/table/DataNodeTableCache.java | 28 ++--
.../template/TemplateInternalRPCUpdateType.java | 5 +-
7 files changed, 102 insertions(+), 203 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
index 049c6a46eac..eb57e57c4c0 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
@@ -69,12 +69,15 @@ public class UnsetTemplateProcedure
private transient ByteBuffer addTemplateSetInfo;
private transient ByteBuffer invalidateTemplateSetInfo;
- public UnsetTemplateProcedure(boolean isGeneratedByPipe) {
+ public UnsetTemplateProcedure(final boolean isGeneratedByPipe) {
super(isGeneratedByPipe);
}
public UnsetTemplateProcedure(
- String queryId, Template template, PartialPath path, boolean
isGeneratedByPipe) {
+ final String queryId,
+ final Template template,
+ final PartialPath path,
+ final boolean isGeneratedByPipe) {
super(isGeneratedByPipe);
this.queryId = queryId;
this.template = template;
@@ -82,9 +85,9 @@ public class UnsetTemplateProcedure
}
@Override
- protected Flow executeFromState(ConfigNodeProcedureEnv env,
UnsetTemplateState state)
+ protected Flow executeFromState(final ConfigNodeProcedureEnv env, final
UnsetTemplateState state)
throws ProcedureSuspendedException, ProcedureYieldException,
InterruptedException {
- long startTime = System.currentTimeMillis();
+ final long startTime = System.currentTimeMillis();
try {
switch (state) {
case CONSTRUCT_BLACK_LIST:
@@ -127,8 +130,8 @@ public class UnsetTemplateProcedure
}
}
- private void constructBlackList(ConfigNodeProcedureEnv env) {
- TSStatus status =
+ private void constructBlackList(final ConfigNodeProcedureEnv env) {
+ final TSStatus status =
env.getConfigManager()
.getClusterSchemaManager()
.preUnsetSchemaTemplate(template.getId(), path);
@@ -139,30 +142,33 @@ public class UnsetTemplateProcedure
}
}
- private void invalidateCache(ConfigNodeProcedureEnv env) {
+ private void invalidateCache(final ConfigNodeProcedureEnv env) {
try {
+ // Cannot roll back after cache invalidation
+ // Because we do not know whether there are time series successfully
created
+ alreadyRollback = true;
executeInvalidateCache(env);
setNextState(UnsetTemplateState.CHECK_DATANODE_TEMPLATE_ACTIVATION);
- } catch (ProcedureException e) {
+ } catch (final ProcedureException e) {
setFailure(e);
}
}
- private void executeInvalidateCache(ConfigNodeProcedureEnv env) throws
ProcedureException {
- Map<Integer, TDataNodeLocation> dataNodeLocationMap =
+ private void executeInvalidateCache(final ConfigNodeProcedureEnv env) throws
ProcedureException {
+ final Map<Integer, TDataNodeLocation> dataNodeLocationMap =
env.getConfigManager().getNodeManager().getRegisteredDataNodeLocations();
- TUpdateTemplateReq invalidateTemplateSetInfoReq = new TUpdateTemplateReq();
+ final TUpdateTemplateReq invalidateTemplateSetInfoReq = new
TUpdateTemplateReq();
invalidateTemplateSetInfoReq.setType(
TemplateInternalRPCUpdateType.INVALIDATE_TEMPLATE_SET_INFO.toByte());
invalidateTemplateSetInfoReq.setTemplateInfo(getInvalidateTemplateSetInfo());
- DataNodeAsyncRequestContext<TUpdateTemplateReq, TSStatus> clientHandler =
+ final DataNodeAsyncRequestContext<TUpdateTemplateReq, TSStatus>
clientHandler =
new DataNodeAsyncRequestContext<>(
CnToDnAsyncRequestType.UPDATE_TEMPLATE,
invalidateTemplateSetInfoReq,
dataNodeLocationMap);
CnToDnInternalServiceAsyncRequestManager.getInstance().sendAsyncRequestWithRetry(clientHandler);
- Map<Integer, TSStatus> statusMap = clientHandler.getResponseMap();
- for (TSStatus status : statusMap.values()) {
+ final Map<Integer, TSStatus> statusMap = clientHandler.getResponseMap();
+ for (final TSStatus status : statusMap.values()) {
// all dataNodes must clear the related template cache
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error(
@@ -174,14 +180,14 @@ public class UnsetTemplateProcedure
}
}
- private boolean checkDataNodeTemplateActivation(ConfigNodeProcedureEnv env) {
- PathPatternTree patternTree = new PathPatternTree();
+ private boolean checkDataNodeTemplateActivation(final ConfigNodeProcedureEnv
env) {
+ final PathPatternTree patternTree = new PathPatternTree();
patternTree.appendPathPattern(path);
patternTree.appendPathPattern(path.concatAsMeasurementPath(MULTI_LEVEL_PATH_WILDCARD));
try {
return SchemaUtils.checkDataNodeTemplateActivation(
env.getConfigManager(), patternTree, template);
- } catch (MetadataException e) {
+ } catch (final MetadataException e) {
setFailure(
new ProcedureException(
new MetadataException(
@@ -192,51 +198,45 @@ public class UnsetTemplateProcedure
}
}
- private void unsetTemplate(ConfigNodeProcedureEnv env) {
- TSStatus status =
+ private void unsetTemplate(final ConfigNodeProcedureEnv env) {
+ final TSStatus status =
env.getConfigManager()
.getClusterSchemaManager()
.unsetSchemaTemplateInBlackList(template.getId(), path,
isGeneratedByPipe);
- if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setNextState(UnsetTemplateState.CLEAN_DATANODE_TEMPLATE_CACHE);
- } else {
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
}
}
@Override
- protected void rollbackState(ConfigNodeProcedureEnv env, UnsetTemplateState
unsetTemplateState)
+ protected void rollbackState(
+ final ConfigNodeProcedureEnv env, final UnsetTemplateState
unsetTemplateState)
throws IOException, InterruptedException, ProcedureException {
if (alreadyRollback) {
return;
}
alreadyRollback = true;
ProcedureException rollbackException;
- try {
- executeRollbackInvalidateCache(env);
- TSStatus status =
- env.getConfigManager()
- .getClusterSchemaManager()
- .rollbackPreUnsetSchemaTemplate(template.getId(), path);
- if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- return;
- } else {
- LOGGER.error(
- "Failed to rollback pre unset template operation of template {}
set on {}",
- template.getName(),
- path);
- rollbackException =
- new ProcedureException(
- new MetadataException(
- "Rollback template pre unset failed because of" +
status.getMessage()));
- }
- } catch (ProcedureException e) {
- rollbackException = e;
+ final TSStatus status =
+ env.getConfigManager()
+ .getClusterSchemaManager()
+ .rollbackPreUnsetSchemaTemplate(template.getId(), path);
+ if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return;
+ } else {
+ LOGGER.error(
+ "Failed to rollback pre unset template operation of template {} set
on {}",
+ template.getName(),
+ path);
+ rollbackException =
+ new ProcedureException(
+ new MetadataException(
+ "Rollback template pre unset failed because of" +
status.getMessage()));
}
try {
executeInvalidateCache(env);
setFailure(rollbackException);
- } catch (ProcedureException exception) {
+ } catch (final ProcedureException exception) {
setFailure(
new ProcedureException(
new MetadataException(
@@ -244,43 +244,18 @@ public class UnsetTemplateProcedure
}
}
- private void executeRollbackInvalidateCache(ConfigNodeProcedureEnv env)
- throws ProcedureException {
- Map<Integer, TDataNodeLocation> dataNodeLocationMap =
-
env.getConfigManager().getNodeManager().getRegisteredDataNodeLocations();
- TUpdateTemplateReq rollbackTemplateSetInfoReq = new TUpdateTemplateReq();
- rollbackTemplateSetInfoReq.setType(
- TemplateInternalRPCUpdateType.ADD_TEMPLATE_SET_INFO.toByte());
- rollbackTemplateSetInfoReq.setTemplateInfo(getAddTemplateSetInfo());
- DataNodeAsyncRequestContext<TUpdateTemplateReq, TSStatus> clientHandler =
- new DataNodeAsyncRequestContext<>(
- CnToDnAsyncRequestType.UPDATE_TEMPLATE,
- rollbackTemplateSetInfoReq,
- dataNodeLocationMap);
-
CnToDnInternalServiceAsyncRequestManager.getInstance().sendAsyncRequestWithRetry(clientHandler);
- Map<Integer, TSStatus> statusMap = clientHandler.getResponseMap();
- for (TSStatus status : statusMap.values()) {
- // all dataNodes must clear the related template cache
- if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- LOGGER.error(
- "Failed to rollback template cache of template {} set on {}",
template.getName(), path);
- throw new ProcedureException(new MetadataException("Rollback template
cache failed"));
- }
- }
- }
-
@Override
- protected boolean isRollbackSupported(UnsetTemplateState unsetTemplateState)
{
+ protected boolean isRollbackSupported(final UnsetTemplateState
unsetTemplateState) {
return true;
}
@Override
- protected UnsetTemplateState getState(int stateId) {
+ protected UnsetTemplateState getState(final int stateId) {
return UnsetTemplateState.values()[stateId];
}
@Override
- protected int getStateId(UnsetTemplateState unsetTemplateState) {
+ protected int getStateId(final UnsetTemplateState unsetTemplateState) {
return unsetTemplateState.ordinal();
}
@@ -309,17 +284,6 @@ public class UnsetTemplateProcedure
return path;
}
- private ByteBuffer getAddTemplateSetInfo() {
- if (this.addTemplateSetInfo == null) {
- this.addTemplateSetInfo =
- ByteBuffer.wrap(
- TemplateInternalRPCUtil.generateAddTemplateSetInfoBytes(
- template, path.getFullPath()));
- }
-
- return addTemplateSetInfo;
- }
-
private ByteBuffer getInvalidateTemplateSetInfo() {
if (this.invalidateTemplateSetInfo == null) {
this.invalidateTemplateSetInfo =
@@ -331,7 +295,7 @@ public class UnsetTemplateProcedure
}
@Override
- public void serialize(DataOutputStream stream) throws IOException {
+ public void serialize(final DataOutputStream stream) throws IOException {
stream.writeShort(
isGeneratedByPipe
?
ProcedureType.PIPE_ENRICHED_UNSET_TEMPLATE_PROCEDURE.getTypeCode()
@@ -344,7 +308,7 @@ public class UnsetTemplateProcedure
}
@Override
- public void deserialize(ByteBuffer byteBuffer) {
+ public void deserialize(final ByteBuffer byteBuffer) {
super.deserialize(byteBuffer);
queryId = ReadWriteIOUtils.readString(byteBuffer);
template = new Template();
@@ -354,10 +318,14 @@ public class UnsetTemplateProcedure
}
@Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- UnsetTemplateProcedure that = (UnsetTemplateProcedure) o;
+ public boolean equals(final Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ final UnsetTemplateProcedure that = (UnsetTemplateProcedure) o;
return Objects.equals(getProcId(), that.getProcId())
&& Objects.equals(getCurrentState(), that.getCurrentState())
&& Objects.equals(getCycles(), that.getCycles())
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/exception/metadata/template/NoTemplateOnMNodeException.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/exception/metadata/template/NoTemplateOnMNodeException.java
deleted file mode 100644
index 0f2a274235a..00000000000
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/exception/metadata/template/NoTemplateOnMNodeException.java
+++ /dev/null
@@ -1,34 +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.exception.metadata.template;
-
-import org.apache.iotdb.commons.exception.MetadataException;
-import org.apache.iotdb.rpc.TSStatusCode;
-
-public class NoTemplateOnMNodeException extends MetadataException {
-
- public NoTemplateOnMNodeException(String path) {
- super(
- String.format("NO template on %s", path),
- TSStatusCode.TEMPLATE_NOT_SET.getStatusCode(),
- true);
- }
-}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index 9e0540b49d5..31a098b9897 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1583,19 +1583,11 @@ public class DataNodeInternalRPCServiceImpl implements
IDataNodeRPCService.Iface
@Override
public TSStatus updateTable(final TUpdateTableReq req) {
- final String database;
- final int size;
switch (TsTableInternalRPCType.getType(req.type)) {
case PRE_UPDATE_TABLE:
-
DataNodeSchemaLockManager.getInstance().takeWriteLock(SchemaLockType.TIMESERIES_VS_TABLE);
- try {
- Pair<String, TsTable> pair =
-
TsTableInternalRPCUtil.deserializeSingleTsTableWithDatabase(req.getTableInfo());
- DataNodeTableCache.getInstance().preUpdateTable(pair.left,
pair.right);
- } finally {
- DataNodeSchemaLockManager.getInstance()
- .releaseWriteLock(SchemaLockType.TIMESERIES_VS_TABLE);
- }
+ Pair<String, TsTable> pair =
+
TsTableInternalRPCUtil.deserializeSingleTsTableWithDatabase(req.getTableInfo());
+ DataNodeTableCache.getInstance().preUpdateTable(pair.left, pair.right);
break;
case ROLLBACK_UPDATE_TABLE:
DataNodeTableCache.getInstance()
@@ -2271,24 +2263,25 @@ public class DataNodeInternalRPCServiceImpl implements
IDataNodeRPCService.Iface
}
@Override
- public TSStatus updateTemplate(TUpdateTemplateReq req) {
+ public TSStatus updateTemplate(final TUpdateTemplateReq req) {
switch (TemplateInternalRPCUpdateType.getType(req.type)) {
- case ADD_TEMPLATE_SET_INFO:
+ // Reserved for rolling upgrade
+ case ROLLBACK_INVALIDATE_TEMPLATE_SET_INFO:
+
ClusterTemplateManager.getInstance().addTemplateSetInfo(req.getTemplateInfo());
+ break;
+ case INVALIDATE_TEMPLATE_SET_INFO:
+
ClusterTemplateManager.getInstance().invalidateTemplateSetInfo(req.getTemplateInfo());
+ break;
+ case ADD_TEMPLATE_PRE_SET_INFO:
DataNodeSchemaLockManager.getInstance()
.takeWriteLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
try {
-
ClusterTemplateManager.getInstance().addTemplateSetInfo(req.getTemplateInfo());
+
ClusterTemplateManager.getInstance().addTemplatePreSetInfo(req.getTemplateInfo());
} finally {
DataNodeSchemaLockManager.getInstance()
.releaseWriteLock(SchemaLockType.TIMESERIES_VS_TEMPLATE);
}
break;
- case INVALIDATE_TEMPLATE_SET_INFO:
-
ClusterTemplateManager.getInstance().invalidateTemplateSetInfo(req.getTemplateInfo());
- break;
- case ADD_TEMPLATE_PRE_SET_INFO:
-
ClusterTemplateManager.getInstance().addTemplatePreSetInfo(req.getTemplateInfo());
- break;
case COMMIT_TEMPLATE_SET_INFO:
ClusterTemplateManager.getInstance().commitTemplatePreSetInfo(req.getTemplateInfo());
break;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index 7f51f95c362..102cbd9732c 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -2594,7 +2594,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
analysis.setRealStatement(createTimeSeriesStatement);
checkIsTemplateCompatible(
- createTimeSeriesStatement.getPath(),
createTimeSeriesStatement.getAlias(), context, true);
+ createTimeSeriesStatement.getPath(),
createTimeSeriesStatement.getAlias(), context);
PathPatternTree patternTree = new PathPatternTree();
patternTree.appendFullPath(createTimeSeriesStatement.getPath());
@@ -2606,14 +2606,9 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
private void checkIsTemplateCompatible(
- final PartialPath timeSeriesPath,
- final String alias,
- final MPPQueryContext context,
- final boolean takeLock) {
- if (takeLock) {
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
- }
+ final PartialPath timeSeriesPath, final String alias, final
MPPQueryContext context) {
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
final Pair<Template, PartialPath> templateInfo =
schemaFetcher.checkTemplateSetAndPreSetInfo(timeSeriesPath, alias);
if (templateInfo != null) {
@@ -2627,12 +2622,9 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
final PartialPath devicePath,
final List<String> measurements,
final List<String> aliasList,
- final MPPQueryContext context,
- final boolean takeLock) {
- if (takeLock) {
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
- }
+ final MPPQueryContext context) {
+ DataNodeSchemaLockManager.getInstance()
+ .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (int i = 0; i < measurements.size(); i++) {
final Pair<Template, PartialPath> templateInfo =
schemaFetcher.checkTemplateSetAndPreSetInfo(
@@ -2701,8 +2693,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
createAlignedTimeSeriesStatement.getDevicePath(),
createAlignedTimeSeriesStatement.getMeasurements(),
createAlignedTimeSeriesStatement.getAliasList(),
- context,
- true);
+ context);
PathPatternTree pathPatternTree = new PathPatternTree();
for (String measurement :
createAlignedTimeSeriesStatement.getMeasurements()) {
@@ -2729,8 +2720,7 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
internalCreateTimeSeriesStatement.getDevicePath(),
internalCreateTimeSeriesStatement.getMeasurements(),
null,
- context,
- true);
+ context);
PathPatternTree pathPatternTree = new PathPatternTree();
for (String measurement :
internalCreateTimeSeriesStatement.getMeasurements()) {
@@ -2756,14 +2746,10 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
analysis.setRealStatement(internalCreateMultiTimeSeriesStatement);
final PathPatternTree pathPatternTree = new PathPatternTree();
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TABLE);
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (final Map.Entry<PartialPath, Pair<Boolean, MeasurementGroup>> entry :
internalCreateMultiTimeSeriesStatement.getDeviceMap().entrySet()) {
checkIsTemplateCompatible(
- entry.getKey(), entry.getValue().right.getMeasurements(), null,
context, false);
+ entry.getKey(), entry.getValue().right.getMeasurements(), null,
context);
pathPatternTree.appendFullPath(entry.getKey().concatNode(ONE_LEVEL_PATH_WILDCARD));
}
@@ -2788,13 +2774,9 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
final List<MeasurementPath> timeseriesPathList =
createMultiTimeSeriesStatement.getPaths();
final List<String> aliasList =
createMultiTimeSeriesStatement.getAliasList();
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TABLE);
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (int i = 0; i < timeseriesPathList.size(); i++) {
checkIsTemplateCompatible(
- timeseriesPathList.get(i), aliasList == null ? null :
aliasList.get(i), context, false);
+ timeseriesPathList.get(i), aliasList == null ? null :
aliasList.get(i), context);
}
final PathPatternTree patternTree = new PathPatternTree();
@@ -4041,12 +4023,8 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
}
// Make sure all paths are not under any templates
try {
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TABLE);
- DataNodeSchemaLockManager.getInstance()
- .takeReadLock(context, SchemaLockType.TIMESERIES_VS_TEMPLATE);
for (final PartialPath path :
createLogicalViewStatement.getTargetPathList()) {
- checkIsTemplateCompatible(path, null, context, false);
+ checkIsTemplateCompatible(path, null, context);
}
} catch (final Exception e) {
analysis.setFinishQueryAfterAnalyze(true);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/SchemaLockType.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/SchemaLockType.java
index 6fa4d11d0a1..88ac05e89c9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/SchemaLockType.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/lock/SchemaLockType.java
@@ -48,17 +48,4 @@ public enum SchemaLockType {
* </ol>
*/
VALIDATE_VS_DELETION,
-
- /**
- * This lock is used for guarantee no timeseries (tree model) under path
representing table (table
- * model).
- *
- * <ol>
- * <li>Take read lock before creating timeseries (tree model).
- * <li>Release read lock after finishing creating timeseries (tree model).
- * <li>Take write lock before pre-create table (table model).
- * <li>Release write lock after finishing pre-create table (table model).
- * </ol>
- */
- TIMESERIES_VS_TABLE,
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
index 72bf651c90a..73c1d230d68 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
@@ -178,12 +178,14 @@ public class DataNodeTableCache implements ITableCache {
databaseTableMap
.computeIfAbsent(database, k -> new ConcurrentHashMap<>())
.put(tableName, newTable);
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug(
"Commit-update table {}.{} successfully, {}",
database,
tableName,
compareTable(oldTable, newTable));
+ } else if (LOGGER.isInfoEnabled()) {
+ LOGGER.info("Commit-update table {}.{} successfully.", database,
tableName);
}
removeTableFromPreUpdateMap(database, tableName);
version.incrementAndGet();
@@ -349,15 +351,19 @@ public class DataNodeTableCache implements ITableCache {
return;
}
isUpdated.set(true);
- LOGGER.info(
- "Update table {}.{} by table fetch, {}",
- database,
- tableName,
- compareTable(
- existingPair.getLeft(),
- databaseTableMap
- .computeIfAbsent(database, k -> new
ConcurrentHashMap<>())
- .get(tableName)));
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug(
+ "Update table {}.{} by table fetch, {}",
+ database,
+ tableName,
+ compareTable(
+ existingPair.getLeft(),
+ databaseTableMap
+ .computeIfAbsent(database, k -> new
ConcurrentHashMap<>())
+ .get(tableName)));
+ } else if (LOGGER.isInfoEnabled()) {
+ LOGGER.info("Update table {}.{} by table fetch.",
database, tableName);
+ }
existingPair.setLeft(null);
if (Objects.nonNull(tsTable)) {
databaseTableMap
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUpdateType.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUpdateType.java
index c273849e385..ebe730114e2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUpdateType.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/TemplateInternalRPCUpdateType.java
@@ -26,7 +26,8 @@ import java.io.OutputStream;
import java.nio.ByteBuffer;
public enum TemplateInternalRPCUpdateType {
- ADD_TEMPLATE_SET_INFO((byte) 0),
+ // Deprecated
+ ROLLBACK_INVALIDATE_TEMPLATE_SET_INFO((byte) 0),
INVALIDATE_TEMPLATE_SET_INFO((byte) 1),
ADD_TEMPLATE_PRE_SET_INFO((byte) 2),
COMMIT_TEMPLATE_SET_INFO((byte) 3),
@@ -54,7 +55,7 @@ public enum TemplateInternalRPCUpdateType {
public static TemplateInternalRPCUpdateType getType(byte type) {
switch (type) {
case 0:
- return ADD_TEMPLATE_SET_INFO;
+ return ROLLBACK_INVALIDATE_TEMPLATE_SET_INFO;
case 1:
return INVALIDATE_TEMPLATE_SET_INFO;
case 2: