From 5b9f18908fbc72c26c4046f5fa8d9e49e25eef5c Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Mon, 5 Jan 2026 12:01:46 +0800 Subject: [PATCH 1/9] userE --- .../schemaregion/SchemaExecutionVisitor.java | 78 ++++++++++++------- .../impl/SchemaRegionMemoryImpl.java | 2 +- 2 files changed, 50 insertions(+), 30 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java index 29e914594204..62b62e943951 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java @@ -85,6 +85,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; + import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -101,7 +103,7 @@ public TSStatus visitCreateTimeSeries( try { schemaRegion.createTimeSeries(node, -1); } catch (final MetadataException e) { - logger.error("{}: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME, e); + logMetaDataException(String.format("%s: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME), e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, "Execute successfully"); @@ -128,7 +130,7 @@ public TSStatus visitCreateAlignedTimeSeries( schemaRegion.createAlignedTimeSeries(node); } } catch (final MetadataException e) { - logger.error("{}: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME, e); + logMetaDataException(String.format("%s: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME), e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, "Execute successfully"); @@ -154,7 +156,8 @@ public TSStatus visitCreateMultiTimeSeries( ((CreateTimeSeriesPlanImpl) createTimeSeriesPlan).setWithMerge(node.isGeneratedByPipe()); schemaRegion.createTimeSeries(createTimeSeriesPlan, -1); } catch (final MetadataException e) { - logger.error("{}: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME, e); + logMetaDataException( + String.format("%s: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME), e); failingStatus.add(RpcUtils.getStatus(e.getErrorCode(), e.getMessage())); } } @@ -296,7 +299,7 @@ private void executeInternalCreateTimeSeries( RpcUtils.getStatus( e.getErrorCode(), PartialPath.transformDataToString(e.getMeasurementPath()))); } catch (final MetadataException e) { - logger.warn("{}: MetaData error: ", e.getMessage(), e); + logMetaDataException(String.format("%s: MetaData error: ", e.getMessage()), e); failingStatus.add(RpcUtils.getStatus(e.getErrorCode(), e.getMessage())); } } @@ -431,7 +434,7 @@ public TSStatus visitAlterTimeSeries( break; } } catch (MetadataException e) { - logger.error("{}: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME, e); + logMetaDataException(String.format("%s: MetaData error: ", IoTDBConstant.GLOBAL_DB_NAME), e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } catch (IOException e) { logger.error("{}: IO error: ", IoTDBConstant.GLOBAL_DB_NAME, e); @@ -454,7 +457,7 @@ public TSStatus visitActivateTemplate( schemaRegion.activateSchemaTemplate(node, template); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -482,7 +485,7 @@ public TSStatus visitBatchActivateTemplate( if (e.getErrorCode() == TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode()) { alreadyActivatedDeviceList.add(entry.getKey()); } else { - logger.error(e.getMessage(), e); + logMetaDataException(e); statusList.add(RpcUtils.getStatus(e.getErrorCode(), e.getMessage())); } } @@ -490,7 +493,7 @@ public TSStatus visitBatchActivateTemplate( if (!alreadyActivatedDeviceList.isEmpty()) { final TemplateIsInUseException e = new TemplateIsInUseException(alreadyActivatedDeviceList.toString()); - logger.error(e.getMessage(), e); + logMetaDataException(e); statusList.add(RpcUtils.getStatus(e.getErrorCode(), e.getMessage())); } return statusList.isEmpty() ? RpcUtils.SUCCESS_STATUS : RpcUtils.getStatus(statusList); @@ -519,7 +522,7 @@ public TSStatus visitInternalBatchActivateTemplate( "Device Template has already been activated on path %s, there's no need to activate again.", entry.getKey())); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -538,7 +541,7 @@ public TSStatus visitConstructSchemaBlackList( : TSStatusCode.SUCCESS_STATUS, String.valueOf(preDeletedNumAndIsAllLogicalView.getLeft())); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -550,7 +553,7 @@ public TSStatus visitRollbackSchemaBlackList( schemaRegion.rollbackSchemaBlackList(node.getPatternTree()); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -562,7 +565,7 @@ public TSStatus visitDeleteTimeseries( schemaRegion.deleteTimeseriesInBlackList(node.getPatternTree()); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -575,7 +578,7 @@ public TSStatus visitAlterEncodingCompressor( return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { if (e.getErrorCode() != TSStatusCode.PATH_NOT_EXIST.getStatusCode()) { - logger.error(e.getMessage(), e); + logMetaDataException(e); } return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } @@ -589,7 +592,7 @@ public TSStatus visitPreDeactivateTemplate( TSStatusCode.SUCCESS_STATUS, String.valueOf(schemaRegion.constructSchemaBlackListWithTemplate(node))); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -601,7 +604,7 @@ public TSStatus visitRollbackPreDeactivateTemplate( schemaRegion.rollbackSchemaBlackListWithTemplate(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -613,7 +616,7 @@ public TSStatus visitDeactivateTemplate( schemaRegion.deactivateTemplateInBlackList(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -668,7 +671,7 @@ public TSStatus visitConstructLogicalViewBlackList( TSStatusCode.SUCCESS_STATUS, String.valueOf(schemaRegion.constructLogicalViewBlackList(node.getPatternTree()))); } catch (MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -680,7 +683,7 @@ public TSStatus visitRollbackLogicalViewBlackList( schemaRegion.rollbackLogicalViewBlackList(node.getPatternTree()); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -691,7 +694,7 @@ public TSStatus visitDeleteLogicalView(DeleteLogicalViewNode node, ISchemaRegion schemaRegion.deleteLogicalView(node.getPatternTree()); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -704,7 +707,7 @@ public TSStatus visitCreateOrUpdateTableDevice( schemaRegion.createOrUpdateTableDevice(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -716,7 +719,7 @@ public TSStatus visitTableDeviceAttributeUpdate( schemaRegion.updateTableDeviceAttribute(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -728,7 +731,7 @@ public TSStatus visitTableDeviceAttributeCommit( schemaRegion.commitUpdateAttribute(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -740,7 +743,7 @@ public TSStatus visitTableNodeLocationAdd( schemaRegion.addNodeLocation(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -752,7 +755,7 @@ public TSStatus visitDeleteTableDevice( schemaRegion.deleteTableDevice(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -764,7 +767,7 @@ public TSStatus visitTableAttributeColumnDrop( schemaRegion.dropTableAttribute(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -776,7 +779,7 @@ public TSStatus visitConstructTableDevicesBlackList( final long preDeletedNum = schemaRegion.constructTableDevicesBlackList(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, String.valueOf(preDeletedNum)); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -788,7 +791,7 @@ public TSStatus visitRollbackTableDevicesBlackList( schemaRegion.rollbackTableDevicesBlackList(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -800,7 +803,7 @@ public TSStatus visitDeleteTableDevicesInBlackList( schemaRegion.deleteTableDevicesInBlackList(node); return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS); } catch (final MetadataException e) { - logger.error(e.getMessage(), e); + logMetaDataException(e); return RpcUtils.getStatus(e.getErrorCode(), e.getMessage()); } } @@ -837,7 +840,24 @@ public TSStatus visitPipeOperateSchemaQueueNode( } @Override - public TSStatus visitPlan(PlanNode node, ISchemaRegion context) { + public TSStatus visitPlan(final PlanNode node, final ISchemaRegion context) { return null; } + + private static void logMetaDataException( + final @Nonnull String message, final @Nonnull MetadataException e) { + if (e.isUserException()) { + logger.info(message); + } else { + logger.error(message, e); + } + } + + private static void logMetaDataException(final @Nonnull MetadataException e) { + if (e.isUserException()) { + logger.info(e.getMessage()); + } else { + logger.error(e.getMessage(), e); + } + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java index 6c57e0e22484..27207cfa8e9e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/impl/SchemaRegionMemoryImpl.java @@ -978,7 +978,7 @@ public void alterEncodingCompressor(final AlterEncodingCompressorNode node) mTree.alterEncodingCompressor(pathPattern, node.getEncoding(), node.getCompressionType()); } if (!exist) { - throw new PathNotExistException(node.getPatternTree().getAllPathPatterns().toString(), false); + throw new PathNotExistException(node.getPatternTree().getAllPathPatterns().toString(), true); } writeToMLog(node); } From 26d673ef699488ac54e85180c2a2e1e03eab87b1 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Mon, 5 Jan 2026 15:55:37 +0800 Subject: [PATCH 2/9] logger --- .../AlterEncodingCompressorProcedure.java | 5 +---- .../impl/schema/AlterLogicalViewProcedure.java | 10 ++++++++-- .../impl/schema/DataNodeRegionTaskExecutor.java | 17 ++++++++++++++++- .../schema/DataNodeTSStatusTaskExecutor.java | 6 ++++++ .../schema/DeactivateTemplateProcedure.java | 4 ++-- .../impl/schema/DeleteLogicalViewProcedure.java | 9 +++++++-- .../impl/schema/DeleteTimeSeriesProcedure.java | 9 +++++++-- .../procedure/impl/schema/SchemaUtils.java | 10 ++++++++-- .../impl/schema/SetTemplateProcedure.java | 10 ++++++++-- .../schema/table/DeleteDevicesProcedure.java | 13 +++++++++---- 10 files changed, 72 insertions(+), 21 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java index 6f6d4b162d4d..f0aec5ee32e7 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java @@ -51,7 +51,6 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -176,8 +175,6 @@ private boolean alterEncodingCompressorInSchemaRegion(final ConfigNodeProcedureE .setCompressor(compressor) .setEncoding(encoding))) { - private final Map failureMap = new HashMap<>(); - @Override protected List processResponseOfOneDataNode( final TDataNodeLocation dataNodeLocation, @@ -219,7 +216,7 @@ protected void onAllReplicasetFailure( new MetadataException( String.format( "Alter encoding compressor %s in schema regions failed. Failures: %s", - requestMessage, failureMap)))); + requestMessage, printFailureMap())))); interruptTask(); } }; diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterLogicalViewProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterLogicalViewProcedure.java index d600db8207dd..cc41d941c208 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterLogicalViewProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterLogicalViewProcedure.java @@ -59,6 +59,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.BiFunction; +import java.util.stream.Collectors; public class AlterLogicalViewProcedure extends StateMachineProcedure { @@ -72,6 +73,8 @@ public class AlterLogicalViewProcedure private transient PathPatternTree pathPatternTree; private transient ByteBuffer patternTreeBytes; + protected final Map failureMap = new HashMap<>(); + public AlterLogicalViewProcedure(final boolean isGeneratedByPipe) { super(isGeneratedByPipe); } @@ -390,11 +393,14 @@ protected void onAllReplicasetFailure( new ProcedureException( new MetadataException( String.format( - "Alter view %s failed when [%s] because failed to execute in all replicaset of schemaRegion %s. Failure nodes: %s", + "Alter view %s failed when [%s] because failed to execute in all replicaset of schemaRegion %s. Failure nodes: %s, statuses: %s", viewPathToSourceMap.keySet(), taskName, consensusGroupId.id, - dataNodeLocationSet)))); + dataNodeLocationSet.stream() + .map(TDataNodeLocation::getDataNodeId) + .collect(Collectors.toSet()), + failureStatusList)))); interruptTask(); } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutor.java index f632f5f1305f..104128a04249 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutor.java @@ -22,11 +22,13 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId; import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation; import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; +import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType; import org.apache.iotdb.confignode.client.async.CnToDnInternalServiceAsyncRequestManager; import org.apache.iotdb.confignode.client.async.handlers.DataNodeAsyncRequestContext; import org.apache.iotdb.confignode.manager.ConfigManager; import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; +import org.apache.iotdb.rpc.TSStatusCode; import java.util.ArrayList; import java.util.HashMap; @@ -35,6 +37,7 @@ import java.util.Map; import java.util.Set; import java.util.function.BiFunction; +import java.util.stream.Collectors; import static org.apache.iotdb.confignode.procedure.impl.schema.DataNodeRegionGroupUtil.getAllReplicaDataNodeRegionGroupMap; import static org.apache.iotdb.confignode.procedure.impl.schema.DataNodeRegionGroupUtil.getLeaderDataNodeRegionGroupMap; @@ -48,7 +51,7 @@ public abstract class DataNodeRegionTaskExecutor { protected final CnToDnAsyncRequestType dataNodeRequestType; protected final BiFunction, Q> dataNodeRequestGenerator; - + protected final Map failureMap = new HashMap<>(); private boolean isInterrupted = false; protected DataNodeRegionTaskExecutor( @@ -229,4 +232,16 @@ protected abstract List processResponseOfOneDataNode( */ protected abstract void onAllReplicasetFailure( final TConsensusGroupId consensusGroupId, final Set dataNodeLocationSet); + + protected String printFailureMap() { + return failureMap.entrySet().stream() + .collect( + Collectors.toMap( + entry -> "DataNodeId: " + entry.getKey().getDataNodeId(), + entry -> + entry.getValue().getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode() + ? entry.getValue().getSubStatus() + : entry.getValue())) + .toString(); + } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java index 700cb3a9a49a..72c31a940485 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java @@ -56,6 +56,7 @@ protected List processResponseOfOneDataNode( final TSStatus response) { final List failedRegionList = new ArrayList<>(); if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + failureMap.remove(dataNodeLocation); return failedRegionList; } @@ -69,6 +70,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java index 0e4a17887c9b..c158e9b828fd 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java @@ -465,12 +465,12 @@ protected void onAllReplicasetFailure( new ProcedureException( new MetadataException( String.format( - "Deactivate template of %s failed when [%s] because failed to execute in all replicaset of %s %s. Failure nodes: %s", + "Deactivate template of %s failed when [%s] because failed to execute in all replicaset of %s %s. Failure: %s", requestMessage, taskName, consensusGroupId.type, consensusGroupId.id, - dataNodeLocationSet)))); + printFailureMap())))); interruptTask(); } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java index 1cfead14fcf3..1ea85f0ee290 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java @@ -164,6 +164,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } }; @@ -357,8 +362,8 @@ protected void onAllReplicasetFailure( new ProcedureException( new MetadataException( String.format( - "Delete view %s failed when [%s] because failed to execute in all replicaset of schemaRegion %s. Failure nodes: %s", - requestMessage, taskName, consensusGroupId.id, dataNodeLocationSet)))); + "Delete view %s failed when [%s] because failed to execute in all replicaset of schemaRegion %s. Failures: %s", + requestMessage, taskName, consensusGroupId.id, printFailureMap())))); interruptTask(); } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java index c49f80948fc1..316cd0c8e4e6 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java @@ -185,6 +185,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } }; @@ -446,12 +451,12 @@ protected void onAllReplicasetFailure( new ProcedureException( new MetadataException( String.format( - "Delete time series %s failed when [%s] because failed to execute in all replicaset of %s %s. Failure nodes: %s", + "Delete time series %s failed when [%s] because failed to execute in all replicaset of %s %s. Failures: %s", requestMessage, taskName, consensusGroupId.type, consensusGroupId.id, - dataNodeLocationSet)))); + printFailureMap())))); interruptTask(); } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java index e2ab08e93666..644b86588768 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java @@ -182,6 +182,7 @@ protected List processResponseOfOneDataNode( respList.add(response); List failedRegionList = new ArrayList<>(); if (response.getStatus().getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + failureMap.remove(dataNodeLocation); return failedRegionList; } @@ -195,6 +196,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response.getStatus()); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } @@ -204,8 +210,8 @@ protected void onAllReplicasetFailure( exception[0] = new MetadataException( String.format( - "Failed to execute in all replicaset of schemaRegion %s when checking templates on path %s. Failure nodes: %s", - consensusGroupId.id, deleteDatabasePatternPaths, dataNodeLocationSet)); + "Failed to execute in all replicaset of schemaRegion %s when checking templates on path %s. Failures: %s", + consensusGroupId.id, deleteDatabasePatternPaths, printFailureMap())); interruptTask(); } }; diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java index 5509037c6fa9..95a88ae5349f 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java @@ -293,6 +293,7 @@ protected List processResponseOfOneDataNode( respList.add(response); final List failedRegionList = new ArrayList<>(); if (response.getStatus().getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + failureMap.remove(dataNodeLocation); return failedRegionList; } @@ -308,6 +309,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response.getStatus()); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } @@ -320,11 +326,11 @@ protected void onAllReplicasetFailure( new MetadataException( String.format( "Set template %s to %s failed when [check time series existence on DataNode] because " - + "failed to check time series existence in all replicaset of schemaRegion %s. Failure nodes: %s", + + "failed to check time series existence in all replicaset of schemaRegion %s. Failures: %s", templateName, templateSetPath, consensusGroupId.id, - dataNodeLocationSet)))); + printFailureMap())))); interruptTask(); } }; diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java index c093084e1e0e..389678a49c0b 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java @@ -33,7 +33,7 @@ import org.apache.iotdb.confignode.manager.ClusterManager; import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; import org.apache.iotdb.confignode.procedure.exception.ProcedureException; -import org.apache.iotdb.confignode.procedure.impl.schema.DataNodeRegionTaskExecutor; +import org.apache.iotdb.confignode.procedure.impl.schema.DataNodeTSStatusTaskExecutor; import org.apache.iotdb.confignode.procedure.state.schema.DeleteDevicesState; import org.apache.iotdb.confignode.procedure.store.ProcedureType; import org.apache.iotdb.consensus.exception.ConsensusException; @@ -163,7 +163,7 @@ private void constructBlackList(final ConfigNodeProcedureEnv env) { return; } final List successResult = new ArrayList<>(); - new DataNodeRegionTaskExecutor( + new DataNodeTSStatusTaskExecutor( env, relatedSchemaRegionGroup, false, @@ -194,6 +194,11 @@ protected List processResponseOfOneDataNode( } else { failedRegionList.addAll(consensusGroupIdList); } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response); + } else { + failureMap.remove(dataNodeLocation); + } return failedRegionList; } @@ -205,13 +210,13 @@ protected void onAllReplicasetFailure( new ProcedureException( new MetadataException( String.format( - "[%s] for %s.%s failed when construct black list for table because failed to execute in all replicaset of %s %s. Failure nodes: %s", + "[%s] for %s.%s failed when construct black list for table because failed to execute in all replicaset of %s %s. Failures: %s", this.getClass().getSimpleName(), database, tableName, consensusGroupId.type, consensusGroupId.id, - dataNodeLocationSet)))); + printFailureMap())))); interruptTask(); } }.execute(); From 1ce0f3283265b560f36e36c5b22ee8fa667e4ce3 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Mon, 5 Jan 2026 18:59:01 +0800 Subject: [PATCH 3/9] fix --- .../schema/DataNodeTSStatusTaskExecutor.java | 32 ++++++++++++++++++ .../schema/DeleteLogicalViewProcedure.java | 33 ++++--------------- .../schema/DeleteTimeSeriesProcedure.java | 21 ++---------- .../schema/table/DeleteDevicesProcedure.java | 23 ++----------- 4 files changed, 42 insertions(+), 67 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java index 72c31a940485..e3416a00b712 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java @@ -34,6 +34,7 @@ public abstract class DataNodeTSStatusTaskExecutor extends DataNodeRegionTaskExecutor { + private List successResult = new ArrayList<>(); protected DataNodeTSStatusTaskExecutor( final ConfigNodeProcedureEnv env, @@ -77,4 +78,35 @@ protected List processResponseOfOneDataNode( } return failedRegionList; } + + protected List processResponseOfOneDataNodeWithSuccessResult( + final TDataNodeLocation dataNodeLocation, + final List consensusGroupIdList, + final TSStatus response) { + final List failedRegionList = new ArrayList<>(); + if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + successResult.add(response); + } else if (response.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) { + List subStatusList = response.getSubStatus(); + for (int i = 0; i < subStatusList.size(); i++) { + if (subStatusList.get(i).getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + successResult.add(subStatusList.get(i)); + } else { + failedRegionList.add(consensusGroupIdList.get(i)); + } + } + } else { + failedRegionList.addAll(consensusGroupIdList); + } + if (!failedRegionList.isEmpty()) { + failureMap.put(dataNodeLocation, response); + } else { + failureMap.remove(dataNodeLocation); + } + return failedRegionList; + } + + public List getSuccessResult() { + return successResult; + } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java index 1ea85f0ee290..0c68fa62e188 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteLogicalViewProcedure.java @@ -53,7 +53,6 @@ import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -135,7 +134,6 @@ private long constructBlackList(ConfigNodeProcedureEnv env) { if (targetSchemaRegionGroup.isEmpty()) { return 0; } - List successResult = new ArrayList<>(); DeleteLogicalViewRegionTaskExecutor constructBlackListTask = new DeleteLogicalViewRegionTaskExecutor( "construct view schema engine black list", @@ -146,30 +144,11 @@ private long constructBlackList(ConfigNodeProcedureEnv env) { new TConstructViewSchemaBlackListReq(consensusGroupIdList, patternTreeBytes))) { @Override protected List processResponseOfOneDataNode( - TDataNodeLocation dataNodeLocation, - List consensusGroupIdList, - TSStatus response) { - List failedRegionList = new ArrayList<>(); - if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(response); - } else if (response.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) { - List subStatusList = response.getSubStatus(); - for (int i = 0; i < subStatusList.size(); i++) { - if (subStatusList.get(i).getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(subStatusList.get(i)); - } else { - failedRegionList.add(consensusGroupIdList.get(i)); - } - } - } else { - failedRegionList.addAll(consensusGroupIdList); - } - if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); - } else { - failureMap.remove(dataNodeLocation); - } - return failedRegionList; + final TDataNodeLocation dataNodeLocation, + final List consensusGroupIdList, + final TSStatus response) { + return processResponseOfOneDataNodeWithSuccessResult( + dataNodeLocation, consensusGroupIdList, response); } }; constructBlackListTask.execute(); @@ -178,7 +157,7 @@ protected List processResponseOfOneDataNode( return 0; } - return successResult.stream() + return constructBlackListTask.getSuccessResult().stream() .mapToLong(resp -> Long.parseLong(resp.getMessage())) .reduce(0L, Long::sum); } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java index 316cd0c8e4e6..32d9fd98d790 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java @@ -167,30 +167,13 @@ protected List processResponseOfOneDataNode( final TDataNodeLocation dataNodeLocation, final List consensusGroupIdList, final TSStatus response) { - final List failedRegionList = new ArrayList<>(); if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { isAllLogicalView = false; - successResult.add(response); } else if (response.getCode() == TSStatusCode.ONLY_LOGICAL_VIEW.getStatusCode()) { successResult.add(response); - } else if (response.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) { - final List subStatusList = response.getSubStatus(); - for (int i = 0; i < subStatusList.size(); i++) { - if (subStatusList.get(i).getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(subStatusList.get(i)); - } else { - failedRegionList.add(consensusGroupIdList.get(i)); - } - } - } else { - failedRegionList.addAll(consensusGroupIdList); - } - if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); - } else { - failureMap.remove(dataNodeLocation); } - return failedRegionList; + return processResponseOfOneDataNodeWithSuccessResult( + dataNodeLocation, consensusGroupIdList, response); } }; constructBlackListTask.execute(); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java index 389678a49c0b..14cbe1616991 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java @@ -179,27 +179,8 @@ protected List processResponseOfOneDataNode( final TDataNodeLocation dataNodeLocation, final List consensusGroupIdList, final TSStatus response) { - final List failedRegionList = new ArrayList<>(); - if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(response); - } else if (response.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) { - final List subStatusList = response.getSubStatus(); - for (int i = 0; i < subStatusList.size(); i++) { - if (subStatusList.get(i).getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(subStatusList.get(i)); - } else { - failedRegionList.add(consensusGroupIdList.get(i)); - } - } - } else { - failedRegionList.addAll(consensusGroupIdList); - } - if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); - } else { - failureMap.remove(dataNodeLocation); - } - return failedRegionList; + return processResponseOfOneDataNodeWithSuccessResult( + dataNodeLocation, consensusGroupIdList, response); } @Override From d36f5846ed032d7b475c9687f312580562f3c963 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 10:42:07 +0800 Subject: [PATCH 4/9] refactor --- .../schema/DataNodeTSStatusTaskExecutor.java | 2 +- .../schema/DeleteTimeSeriesProcedure.java | 3 +- .../schema/table/DeleteDevicesProcedure.java | 80 ++++++++++--------- 3 files changed, 43 insertions(+), 42 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java index e3416a00b712..4b73478b7832 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java @@ -34,7 +34,7 @@ public abstract class DataNodeTSStatusTaskExecutor extends DataNodeRegionTaskExecutor { - private List successResult = new ArrayList<>(); + protected List successResult = new ArrayList<>(); protected DataNodeTSStatusTaskExecutor( final ConfigNodeProcedureEnv env, diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java index 32d9fd98d790..801863ffc326 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java @@ -153,7 +153,6 @@ private long constructBlackList(final ConfigNodeProcedureEnv env) { return 0; } isAllLogicalView = true; - final List successResult = new ArrayList<>(); final DeleteTimeSeriesRegionTaskExecutor constructBlackListTask = new DeleteTimeSeriesRegionTaskExecutor( "construct schema engine black list", @@ -179,7 +178,7 @@ protected List processResponseOfOneDataNode( constructBlackListTask.execute(); return !isFailed() - ? successResult.stream() + ? constructBlackListTask.getSuccessResult().stream() .mapToLong(resp -> Long.parseLong(resp.getMessage())) .reduce(Long::sum) .orElse(0L) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java index 14cbe1616991..b78b99539ede 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DeleteDevicesProcedure.java @@ -162,50 +162,52 @@ private void constructBlackList(final ConfigNodeProcedureEnv env) { deletedDevicesNum = 0; return; } - final List successResult = new ArrayList<>(); - new DataNodeTSStatusTaskExecutor( - env, - relatedSchemaRegionGroup, - false, - CnToDnAsyncRequestType.CONSTRUCT_TABLE_DEVICE_BLACK_LIST, - ((dataNodeLocation, consensusGroupIdList) -> - new TTableDeviceDeletionWithPatternAndFilterReq( - new ArrayList<>(consensusGroupIdList), - tableName, - ByteBuffer.wrap(patternBytes), - ByteBuffer.wrap(filterBytes)))) { - @Override - protected List processResponseOfOneDataNode( - final TDataNodeLocation dataNodeLocation, - final List consensusGroupIdList, - final TSStatus response) { - return processResponseOfOneDataNodeWithSuccessResult( - dataNodeLocation, consensusGroupIdList, response); - } - - @Override - protected void onAllReplicasetFailure( - final TConsensusGroupId consensusGroupId, - final Set dataNodeLocationSet) { - setFailure( - new ProcedureException( - new MetadataException( - String.format( - "[%s] for %s.%s failed when construct black list for table because failed to execute in all replicaset of %s %s. Failures: %s", - this.getClass().getSimpleName(), - database, + final DataNodeTSStatusTaskExecutor + deleteDevicesExecutor = + new DataNodeTSStatusTaskExecutor( + env, + relatedSchemaRegionGroup, + false, + CnToDnAsyncRequestType.CONSTRUCT_TABLE_DEVICE_BLACK_LIST, + ((dataNodeLocation, consensusGroupIdList) -> + new TTableDeviceDeletionWithPatternAndFilterReq( + new ArrayList<>(consensusGroupIdList), tableName, - consensusGroupId.type, - consensusGroupId.id, - printFailureMap())))); - interruptTask(); - } - }.execute(); + ByteBuffer.wrap(patternBytes), + ByteBuffer.wrap(filterBytes)))) { + @Override + protected List processResponseOfOneDataNode( + final TDataNodeLocation dataNodeLocation, + final List consensusGroupIdList, + final TSStatus response) { + return processResponseOfOneDataNodeWithSuccessResult( + dataNodeLocation, consensusGroupIdList, response); + } + + @Override + protected void onAllReplicasetFailure( + final TConsensusGroupId consensusGroupId, + final Set dataNodeLocationSet) { + setFailure( + new ProcedureException( + new MetadataException( + String.format( + "[%s] for %s.%s failed when construct black list for table because failed to execute in all replicaset of %s %s. Failures: %s", + this.getClass().getSimpleName(), + database, + tableName, + consensusGroupId.type, + consensusGroupId.id, + printFailureMap())))); + interruptTask(); + } + }; + deleteDevicesExecutor.execute(); setNextState(CONSTRUCT_BLACK_LIST); deletedDevicesNum = !isFailed() - ? successResult.stream() + ? deleteDevicesExecutor.getSuccessResult().stream() .mapToLong(resp -> Long.parseLong(resp.getMessage())) .reduce(Long::sum) .orElse(0L) From 95eae5ee36f88373c98a8a27708ab6f2f97bed39 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:14:37 +0800 Subject: [PATCH 5/9] tsd --- .../impl/schema/AlterTimeSeriesDataTypeProcedure.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java index e31d8a3bbd57..0474ba4df940 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java @@ -54,7 +54,6 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -195,8 +194,6 @@ private boolean alterTimeSeriesDataType(final ConfigNodeProcedureEnv env) { ByteBuffer.wrap(stream.toByteArray())); })) { - private final Map failureMap = new HashMap<>(); - @Override protected List processResponseOfOneDataNode( final TDataNodeLocation dataNodeLocation, @@ -240,7 +237,7 @@ protected void onAllReplicasetFailure( measurementPath.getFullPath(), measurementPath.getSeriesType(), dataType, - failureMap)))); + printFailureMap())))); interruptTask(); } }; From 85d42df2e3eda9b3dc5ae1453ac7de879ea4360b Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 11:52:55 +0800 Subject: [PATCH 6/9] ut --- .../java/org/apache/iotdb/rpc/RpcUtils.java | 12 +++ .../AlterEncodingCompressorProcedure.java | 3 +- .../AlterTimeSeriesDataTypeProcedure.java | 3 +- .../schema/DataNodeTSStatusTaskExecutor.java | 5 +- .../procedure/impl/schema/SchemaUtils.java | 4 +- .../impl/schema/SetTemplateProcedure.java | 4 +- .../DataNodeRegionTaskExecutorTest.java | 81 +++++++++++++++++++ 7 files changed, 106 insertions(+), 6 deletions(-) create mode 100644 iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutorTest.java diff --git a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/RpcUtils.java b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/RpcUtils.java index 7541f500e45d..7a7c7a5ed442 100644 --- a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/RpcUtils.java +++ b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/RpcUtils.java @@ -190,6 +190,18 @@ public static TSStatus getStatus(List statusList) { return status; } + public static TSStatus extractFailureStatues(final TSStatus input) { + return input.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode() + ? new TSStatus(input.getCode()) + .setMessage(input.getMessage()) + .setSubStatus( + input.getSubStatus().stream() + .filter( + status -> status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) + .collect(Collectors.toList())) + : input; + } + /** * Convert from {@link TSStatusCode} to {@link TSStatus}, which has message appended with existing * status message diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java index f0aec5ee32e7..e9e257ac254a 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterEncodingCompressorProcedure.java @@ -41,6 +41,7 @@ import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.mpp.rpc.thrift.TAlterEncodingCompressorReq; import org.apache.iotdb.pipe.api.exception.PipeException; +import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.utils.ReadWriteIOUtils; @@ -200,7 +201,7 @@ protected List processResponseOfOneDataNode( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); + failureMap.put(dataNodeLocation, RpcUtils.extractFailureStatues(response)); } else { failureMap.remove(dataNodeLocation); } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java index 0474ba4df940..ccd83014f643 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/AlterTimeSeriesDataTypeProcedure.java @@ -42,6 +42,7 @@ import org.apache.iotdb.mpp.rpc.thrift.TAlterTimeSeriesReq; import org.apache.iotdb.mpp.rpc.thrift.TInvalidateMatchedSchemaCacheReq; import org.apache.iotdb.pipe.api.exception.PipeException; +import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.enums.TSDataType; @@ -218,7 +219,7 @@ protected List processResponseOfOneDataNode( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); + failureMap.put(dataNodeLocation, RpcUtils.extractFailureStatues(response)); } else { failureMap.remove(dataNodeLocation); } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java index 4b73478b7832..37c93b3941d5 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeTSStatusTaskExecutor.java @@ -25,6 +25,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.confignode.client.async.CnToDnAsyncRequestType; import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; +import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; import java.util.ArrayList; @@ -72,7 +73,7 @@ protected List processResponseOfOneDataNode( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); + failureMap.put(dataNodeLocation, RpcUtils.extractFailureStatues(response)); } else { failureMap.remove(dataNodeLocation); } @@ -99,7 +100,7 @@ protected List processResponseOfOneDataNodeWithSuccessResult( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response); + failureMap.put(dataNodeLocation, RpcUtils.extractFailureStatues(response)); } else { failureMap.remove(dataNodeLocation); } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java index 644b86588768..f5dcae9e7391 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SchemaUtils.java @@ -43,6 +43,7 @@ import org.apache.iotdb.mpp.rpc.thrift.TCountPathsUsingTemplateReq; import org.apache.iotdb.mpp.rpc.thrift.TCountPathsUsingTemplateResp; import org.apache.iotdb.mpp.rpc.thrift.TUpdateTableReq; +import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.utils.ReadWriteIOUtils; @@ -197,7 +198,8 @@ protected List processResponseOfOneDataNode( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response.getStatus()); + failureMap.put( + dataNodeLocation, RpcUtils.extractFailureStatues(response.getStatus())); } else { failureMap.remove(dataNodeLocation); } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java index 95a88ae5349f..27ccd77b03a3 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java @@ -51,6 +51,7 @@ import org.apache.iotdb.mpp.rpc.thrift.TCheckTimeSeriesExistenceReq; import org.apache.iotdb.mpp.rpc.thrift.TCheckTimeSeriesExistenceResp; import org.apache.iotdb.mpp.rpc.thrift.TUpdateTemplateReq; +import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.tsfile.utils.ReadWriteIOUtils; @@ -310,7 +311,8 @@ protected List processResponseOfOneDataNode( failedRegionList.addAll(consensusGroupIdList); } if (!failedRegionList.isEmpty()) { - failureMap.put(dataNodeLocation, response.getStatus()); + failureMap.put( + dataNodeLocation, RpcUtils.extractFailureStatues(response.getStatus())); } else { failureMap.remove(dataNodeLocation); } diff --git a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutorTest.java b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutorTest.java new file mode 100644 index 000000000000..d1286cc3587d --- /dev/null +++ b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/procedure/impl/schema/DataNodeRegionTaskExecutorTest.java @@ -0,0 +1,81 @@ +/* + * 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.procedure.impl.schema; + +import org.apache.iotdb.common.rpc.thrift.TConsensusGroupId; +import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType; +import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation; +import org.apache.iotdb.common.rpc.thrift.TSStatus; +import org.apache.iotdb.commons.utils.StatusUtils; +import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv; +import org.apache.iotdb.rpc.RpcUtils; +import org.apache.iotdb.rpc.TSStatusCode; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Set; + +public class DataNodeRegionTaskExecutorTest { + + @Test + public void testPrintFailureMap() { + final TestRegionTaskExecutor executor = new TestRegionTaskExecutor(); + executor.processResponseOfOneDataNode( + new TDataNodeLocation().setDataNodeId(0), + Collections.singletonList(new TConsensusGroupId(TConsensusGroupType.DataRegion, 3)), + StatusUtils.OK); + executor.processResponseOfOneDataNode( + new TDataNodeLocation().setDataNodeId(0), + Arrays.asList( + new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), + new TConsensusGroupId(TConsensusGroupType.DataRegion, 2)), + RpcUtils.getStatus( + Arrays.asList( + StatusUtils.OK, new TSStatus(TSStatusCode.ILLEGAL_PATH.getStatusCode())))); + Assert.assertEquals("{DataNodeId: 0=[TSStatus(code:509)]}", executor.printFailureMap()); + + executor.processResponseOfOneDataNodeWithSuccessResult( + new TDataNodeLocation().setDataNodeId(0), + Arrays.asList( + new TConsensusGroupId(TConsensusGroupType.DataRegion, 1), + new TConsensusGroupId(TConsensusGroupType.DataRegion, 2)), + RpcUtils.getStatus( + Arrays.asList( + StatusUtils.OK, new TSStatus(TSStatusCode.ILLEGAL_PATH.getStatusCode())))); + Assert.assertTrue(StatusUtils.OK == executor.getSuccessResult().get(0)); + } + + private static class TestRegionTaskExecutor extends DataNodeTSStatusTaskExecutor { + + private TestRegionTaskExecutor() { + super(new ConfigNodeProcedureEnv(null, null), null, false, null, null); + } + + @Override + protected void onAllReplicasetFailure( + final TConsensusGroupId consensusGroupId, + final Set dataNodeLocationSet) { + interruptTask(); + } + } +} From 2f3789c61f33fa5606336bcb50744cf47a71ede6 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 12:19:18 +0800 Subject: [PATCH 7/9] fix --- .../schema/DeactivateTemplateProcedure.java | 28 ++++--------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java index c158e9b828fd..54249754d7e8 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeactivateTemplateProcedure.java @@ -143,7 +143,6 @@ private long constructBlackList(ConfigNodeProcedureEnv env) { if (targetSchemaRegionGroup.isEmpty()) { return 0; } - List successResult = new ArrayList<>(); DeactivateTemplateRegionTaskExecutor constructBlackListTask = new DeactivateTemplateRegionTaskExecutor( @@ -156,26 +155,11 @@ private long constructBlackList(ConfigNodeProcedureEnv env) { consensusGroupIdList, dataNodeRequest))) { @Override protected List processResponseOfOneDataNode( - TDataNodeLocation dataNodeLocation, - List consensusGroupIdList, - TSStatus response) { - List failedRegionList = new ArrayList<>(); - if (response.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(response); - } else if (response.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) { - List subStatusList = response.getSubStatus(); - for (int i = 0; i < subStatusList.size(); i++) { - if (subStatusList.get(i).getCode() - == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - successResult.add(subStatusList.get(i)); - } else { - failedRegionList.add(consensusGroupIdList.get(i)); - } - } - } else { - failedRegionList.addAll(consensusGroupIdList); - } - return failedRegionList; + final TDataNodeLocation dataNodeLocation, + final List consensusGroupIdList, + final TSStatus response) { + return processResponseOfOneDataNodeWithSuccessResult( + dataNodeLocation, consensusGroupIdList, response); } }; constructBlackListTask.execute(); @@ -185,7 +169,7 @@ protected List processResponseOfOneDataNode( } long preDeletedNum = 0; - for (TSStatus resp : successResult) { + for (TSStatus resp : constructBlackListTask.getSuccessResult()) { preDeletedNum += Long.parseLong(resp.getMessage()); } return preDeletedNum; From e9c3ca725e98e4e5c1c210b208fcde7bbe597a92 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 14:20:34 +0800 Subject: [PATCH 8/9] logic-fix --- .../procedure/impl/schema/DeleteTimeSeriesProcedure.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java index 801863ffc326..a8f4b6d53c8a 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteTimeSeriesProcedure.java @@ -55,6 +55,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -170,6 +171,7 @@ protected List processResponseOfOneDataNode( isAllLogicalView = false; } else if (response.getCode() == TSStatusCode.ONLY_LOGICAL_VIEW.getStatusCode()) { successResult.add(response); + return Collections.emptyList(); } return processResponseOfOneDataNodeWithSuccessResult( dataNodeLocation, consensusGroupIdList, response); From adc0931bccf6807f136d0cd6d5c3239a7487b631 Mon Sep 17 00:00:00 2001 From: Caideyipi <87789683+Caideyipi@users.noreply.github.com> Date: Tue, 6 Jan 2026 14:52:55 +0800 Subject: [PATCH 9/9] cut --- .../schemaregion/SchemaExecutionVisitor.java | 12 +- .../SchemaExecutionVisitorTest.java | 277 ++++++++++++++++++ 2 files changed, 286 insertions(+), 3 deletions(-) create mode 100644 iotdb-core/datanode/src/test/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitorTest.java diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java index e04f5614c181..261b4908a906 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitor.java @@ -28,6 +28,7 @@ import org.apache.iotdb.commons.schema.template.Template; import org.apache.iotdb.commons.schema.view.viewExpression.ViewExpression; import org.apache.iotdb.commons.utils.MetadataUtils; +import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.exception.metadata.MeasurementAlreadyExistException; import org.apache.iotdb.db.exception.metadata.template.TemplateIsInUseException; import org.apache.iotdb.db.pipe.agent.PipeDataNodeAgent; @@ -96,7 +97,7 @@ /** Schema write {@link PlanNode} visitor */ public class SchemaExecutionVisitor extends PlanVisitor { - private static final Logger logger = LoggerFactory.getLogger(SchemaExecutionVisitor.class); + private static Logger logger = LoggerFactory.getLogger(SchemaExecutionVisitor.class); @Override public TSStatus visitCreateTimeSeries( @@ -858,7 +859,7 @@ public TSStatus visitPlan(final PlanNode node, final ISchemaRegion context) { return null; } - private static void logMetaDataException( + public static void logMetaDataException( final @Nonnull String message, final @Nonnull MetadataException e) { if (e.isUserException()) { logger.info(message); @@ -867,11 +868,16 @@ private static void logMetaDataException( } } - private static void logMetaDataException(final @Nonnull MetadataException e) { + public static void logMetaDataException(final @Nonnull MetadataException e) { if (e.isUserException()) { logger.info(e.getMessage()); } else { logger.error(e.getMessage(), e); } } + + @TestOnly + public static void setLogger(final Logger logger) { + SchemaExecutionVisitor.logger = logger; + } } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitorTest.java new file mode 100644 index 000000000000..b36f585e1175 --- /dev/null +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/consensus/statemachine/schemaregion/SchemaExecutionVisitorTest.java @@ -0,0 +1,277 @@ +/* + * 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.consensus.statemachine.schemaregion; + +import org.apache.iotdb.commons.exception.MetadataException; + +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.Marker; + +public class SchemaExecutionVisitorTest { + @Test + public void testAuthLogger() { + SchemaExecutionVisitor.setLogger( + new Logger() { + @Override + public String getName() { + return null; + } + + @Override + public boolean isTraceEnabled() { + return false; + } + + @Override + public void trace(String msg) {} + + @Override + public void trace(String format, Object arg) {} + + @Override + public void trace(String format, Object arg1, Object arg2) {} + + @Override + public void trace(String format, Object... arguments) {} + + @Override + public void trace(String msg, Throwable t) {} + + @Override + public boolean isTraceEnabled(Marker marker) { + return false; + } + + @Override + public void trace(Marker marker, String msg) {} + + @Override + public void trace(Marker marker, String format, Object arg) {} + + @Override + public void trace(Marker marker, String format, Object arg1, Object arg2) {} + + @Override + public void trace(Marker marker, String format, Object... argArray) {} + + @Override + public void trace(Marker marker, String msg, Throwable t) {} + + @Override + public boolean isDebugEnabled() { + return false; + } + + @Override + public void debug(String msg) {} + + @Override + public void debug(String format, Object arg) {} + + @Override + public void debug(String format, Object arg1, Object arg2) {} + + @Override + public void debug(String format, Object... arguments) {} + + @Override + public void debug(String msg, Throwable t) {} + + @Override + public boolean isDebugEnabled(Marker marker) { + return false; + } + + @Override + public void debug(Marker marker, String msg) {} + + @Override + public void debug(Marker marker, String format, Object arg) {} + + @Override + public void debug(Marker marker, String format, Object arg1, Object arg2) {} + + @Override + public void debug(Marker marker, String format, Object... arguments) {} + + @Override + public void debug(Marker marker, String msg, Throwable t) {} + + @Override + public boolean isInfoEnabled() { + return true; + } + + @Override + public void info(String msg) {} + + @Override + public void info(String format, Object arg) {} + + @Override + public void info(String format, Object arg1, Object arg2) {} + + @Override + public void info(String format, Object... arguments) {} + + @Override + public void info(String msg, Throwable t) {} + + @Override + public boolean isInfoEnabled(Marker marker) { + return true; + } + + @Override + public void info(Marker marker, String msg) {} + + @Override + public void info(Marker marker, String format, Object arg) {} + + @Override + public void info(Marker marker, String format, Object arg1, Object arg2) {} + + @Override + public void info(Marker marker, String format, Object... arguments) {} + + @Override + public void info(Marker marker, String msg, Throwable t) {} + + // Warn + @Override + public boolean isWarnEnabled() { + return true; + } + + @Override + public void warn(String msg) {} + + @Override + public void warn(String format, Object arg) {} + + @Override + public void warn(String format, Object... arguments) {} + + @Override + public void warn(String format, Object arg1, Object arg2) {} + + @Override + public void warn(String msg, Throwable t) {} + + @Override + public boolean isWarnEnabled(Marker marker) { + return false; + } + + @Override + public void warn(Marker marker, String msg) {} + + @Override + public void warn(Marker marker, String format, Object arg) {} + + @Override + public void warn(Marker marker, String format, Object arg1, Object arg2) {} + + @Override + public void warn(Marker marker, String format, Object... arguments) {} + + @Override + public void warn(Marker marker, String msg, Throwable t) {} + + @Override + public boolean isErrorEnabled() { + return true; + } + + @Override + public void error(String msg) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(String format, Object arg) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(String format, Object arg1, Object arg2) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(String format, Object... arguments) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(String msg, Throwable t) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isErrorEnabled(Marker marker) { + return true; + } + + @Override + public void error(Marker marker, String msg) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(Marker marker, String format, Object arg) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(Marker marker, String format, Object arg1, Object arg2) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(Marker marker, String format, Object... arguments) { + throw new UnsupportedOperationException(); + } + + @Override + public void error(Marker marker, String msg, Throwable t) { + throw new UnsupportedOperationException(); + } + }); + SchemaExecutionVisitor.logMetaDataException(new MetadataException("", true)); + SchemaExecutionVisitor.logMetaDataException("", new MetadataException("", true)); + try { + SchemaExecutionVisitor.logMetaDataException(new MetadataException("", false)); + Assert.fail(); + } catch (final UnsupportedOperationException e) { + // Expected + } + try { + SchemaExecutionVisitor.logMetaDataException(new MetadataException("", false)); + Assert.fail(); + } catch (final UnsupportedOperationException e) { + // Expected + } + SchemaExecutionVisitor.setLogger(LoggerFactory.getLogger(SchemaExecutionVisitor.class)); + } +}