This is an automated email from the ASF dual-hosted git repository.

justinchen pushed a commit to branch err-cli-opti
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/err-cli-opti by this push:
     new 85d42df2e3e ut
85d42df2e3e is described below

commit 85d42df2e3eda9b3dc5ae1453ac7de879ea4360b
Author: Caideyipi <[email protected]>
AuthorDate: Tue Jan 6 11:52:55 2026 +0800

    ut
---
 .../main/java/org/apache/iotdb/rpc/RpcUtils.java   | 12 ++++
 .../schema/AlterEncodingCompressorProcedure.java   |  3 +-
 .../schema/AlterTimeSeriesDataTypeProcedure.java   |  3 +-
 .../impl/schema/DataNodeTSStatusTaskExecutor.java  |  5 +-
 .../procedure/impl/schema/SchemaUtils.java         |  4 +-
 .../impl/schema/SetTemplateProcedure.java          |  4 +-
 .../schema/DataNodeRegionTaskExecutorTest.java     | 81 ++++++++++++++++++++++
 7 files changed, 106 insertions(+), 6 deletions(-)

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 7541f500e45..7a7c7a5ed44 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 class RpcUtils {
     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 f0aec5ee32e..e9e257ac254 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.consensus.exception.ConsensusException;
 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 @@ public class AlterEncodingCompressorProcedure
               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 0474ba4df94..ccd83014f64 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.db.exception.metadata.PathNotExistException;
 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 @@ public class AlterTimeSeriesDataTypeProcedure
               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 4b73478b783..37c93b3941d 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.TRegionReplicaSet;
 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 @@ public abstract class DataNodeTSStatusTaskExecutor<Q>
       failedRegionList.addAll(consensusGroupIdList);
     }
     if (!failedRegionList.isEmpty()) {
-      failureMap.put(dataNodeLocation, response);
+      failureMap.put(dataNodeLocation, 
RpcUtils.extractFailureStatues(response));
     } else {
       failureMap.remove(dataNodeLocation);
     }
@@ -99,7 +100,7 @@ public abstract class DataNodeTSStatusTaskExecutor<Q>
       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 644b8658876..f5dcae9e739 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.TCheckSchemaRegionUsingTemplateResp;
 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 @@ public class SchemaUtils {
                   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 95a88ae5349..27ccd77b03a 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.db.schemaengine.template.TemplateInternalRPCUtil;
 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 @@ public class SetTemplateProcedure
                   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 00000000000..d1286cc3587
--- /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<Void> {
+
+    private TestRegionTaskExecutor() {
+      super(new ConfigNodeProcedureEnv(null, null), null, false, null, null);
+    }
+
+    @Override
+    protected void onAllReplicasetFailure(
+        final TConsensusGroupId consensusGroupId,
+        final Set<TDataNodeLocation> dataNodeLocationSet) {
+      interruptTask();
+    }
+  }
+}

Reply via email to