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

haonan pushed a commit to branch restapi_302
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 169e3db6b1cc5f640b0c42af80dcc3c85aee37c0
Author: HTHou <[email protected]>
AuthorDate: Thu May 30 16:34:43 2024 +0800

    Fix restAPi return null message when meets multiple error
---
 .../src/main/java/org/apache/iotdb/rpc/RpcUtils.java  | 19 +++++++++++++++++++
 .../db/protocol/rest/v2/impl/RestApiServiceImpl.java  | 18 +++++++++++++-----
 2 files changed, 32 insertions(+), 5 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 5ee3a815955..15f7d423911 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
@@ -25,6 +25,9 @@ import org.apache.iotdb.service.rpc.thrift.IClientRPCService;
 import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementResp;
 import org.apache.iotdb.service.rpc.thrift.TSFetchResultsResp;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.lang.reflect.Proxy;
 import java.text.SimpleDateFormat;
 import java.time.Instant;
@@ -32,12 +35,16 @@ import java.time.ZoneId;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 public class RpcUtils {
 
+  private static final Logger LOGGER = LoggerFactory.getLogger(RpcUtils.class);
+
   /** How big should the default read and write buffers be? Defaults to 1KB */
   public static final int THRIFT_DEFAULT_BUF_CAPACITY = 1024;
 
@@ -139,6 +146,18 @@ public class RpcUtils {
   public static TSStatus getStatus(List<TSStatus> statusList) {
     TSStatus status = new 
TSStatus(TSStatusCode.MULTIPLE_ERROR.getStatusCode());
     status.setSubStatus(statusList);
+    StringBuilder errMsg = new StringBuilder().append("Multiple error occur, 
messages: ");
+    Set<String> msgSet = new HashSet<>();
+    for (TSStatus subStatus : statusList) {
+      if (subStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()
+          && subStatus.getCode() != 
TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
+        if (!msgSet.contains(status.getMessage())) {
+          errMsg.append(status.getMessage()).append("; ");
+          msgSet.add(status.getMessage());
+        }
+      }
+    }
+    LOGGER.error(errMsg.toString());
     return status;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
index c0029b913eb..9a5c41eee0e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/impl/RestApiServiceImpl.java
@@ -17,6 +17,7 @@
 
 package org.apache.iotdb.db.protocol.rest.v2.impl;
 
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
@@ -51,6 +52,7 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.SecurityContext;
 
 import java.time.ZoneId;
+import java.util.List;
 
 public class RestApiServiceImpl extends RestApiService {
 
@@ -219,14 +221,20 @@ public class RestApiServiceImpl extends RestApiService {
                     .code(TSStatusCode.SUCCESS_STATUS.getStatusCode())
                     .message(TSStatusCode.SUCCESS_STATUS.name()))
             .build();
-      } else if (result.status.message == null
-          && result.status.subStatus != null
-          && result.status.subStatus.size() > 0) {
+      } else if (result.status.code == 
TSStatusCode.MULTIPLE_ERROR.getStatusCode()) {
+        List<TSStatus> subStatus = result.status.getSubStatus();
+        StringBuilder errMsg = new StringBuilder();
+        for (TSStatus status : subStatus) {
+          if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()
+              && status.getCode() != 
TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
+            errMsg.append(status.getMessage()).append("; ");
+          }
+        }
         return Response.ok()
             .entity(
                 new ExecutionStatus()
-                    .code(result.status.getCode())
-                    .message(result.status.subStatus.get(0).message))
+                    .code(TSStatusCode.MULTIPLE_ERROR.getStatusCode())
+                    .message(errMsg.toString()))
             .build();
       } else {
         return Response.ok()

Reply via email to