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()
