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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3fadcfeab8 [IOTDB-3254][IOTDB-3492] Fix storage group related error 
message (#6462)
3fadcfeab8 is described below

commit 3fadcfeab864a511fd7beae86f597e21aeaf3c51
Author: Marcos_Zyk <[email protected]>
AuthorDate: Mon Jun 27 22:38:04 2022 +0800

    [IOTDB-3254][IOTDB-3492] Fix storage group related error message (#6462)
    
    [IOTDB-3254][IOTDB-3492] Fix storage group related error message (#6462)
---
 .../iotdb/confignode/persistence/ClusterSchemaInfo.java   |  4 +---
 .../db/mpp/plan/analyze/ClusterPartitionFetcher.java      | 11 ++++++++++-
 .../db/mpp/plan/execution/config/ConfigExecution.java     | 15 ++++++++++++++-
 .../config/executor/ClusterConfigTaskExecutor.java        |  3 ++-
 .../db/service/thrift/impl/DataNodeTSIServiceImpl.java    |  2 +-
 .../org/apache/iotdb/db/utils/ErrorHandlingUtils.java     |  6 ++++++
 6 files changed, 34 insertions(+), 7 deletions(-)

diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/ClusterSchemaInfo.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/ClusterSchemaInfo.java
index bd292f1061..91dca04457 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/ClusterSchemaInfo.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/ClusterSchemaInfo.java
@@ -112,9 +112,7 @@ public class ClusterSchemaInfo implements SnapshotProcessor 
{
       result.setCode(TSStatusCode.SUCCESS_STATUS.getStatusCode());
     } catch (MetadataException e) {
       LOGGER.error("Error StorageGroup name", e);
-      result
-          .setCode(TSStatusCode.SET_STORAGE_GROUP_FAILED.getStatusCode())
-          .setMessage("Error StorageGroup name");
+      result.setCode(e.getErrorCode()).setMessage(e.getMessage());
     } finally {
       storageGroupReadWriteLock.writeLock().unlock();
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
index ebfed56211..63bdcfd0c1 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
@@ -19,10 +19,12 @@
 package org.apache.iotdb.db.mpp.plan.analyze;
 
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.common.rpc.thrift.TSeriesPartitionSlot;
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.client.IClientManager;
 import org.apache.iotdb.commons.consensus.PartitionRegionId;
+import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
@@ -299,11 +301,18 @@ public class ClusterPartitionFetcher implements 
IPartitionFetcher {
                 
storageGroupNamesNeedCreated.add(storageGroupNameNeedCreated.getFullPath());
               }
             }
+            Set<String> successFullyCreatedStorageGroup = new HashSet<>();
             for (String storageGroupName : storageGroupNamesNeedCreated) {
               TStorageGroupSchema storageGroupSchema = new 
TStorageGroupSchema();
               storageGroupSchema.setName(storageGroupName);
               TSetStorageGroupReq req = new 
TSetStorageGroupReq(storageGroupSchema);
-              client.setStorageGroup(req);
+              TSStatus tsStatus = client.setStorageGroup(req);
+              if (TSStatusCode.SUCCESS_STATUS.getStatusCode() == 
tsStatus.getCode()) {
+                successFullyCreatedStorageGroup.add(storageGroupName);
+              } else {
+                
partitionCache.updateStorageCache(successFullyCreatedStorageGroup);
+                throw new RuntimeException(new 
IoTDBException(tsStatus.message, tsStatus.code));
+              }
             }
             partitionCache.updateStorageCache(storageGroupNamesNeedCreated);
             // third try to hit cache
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigExecution.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigExecution.java
index a8ebfac6eb..b807d51565 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigExecution.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigExecution.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.mpp.plan.execution.config;
 
+import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
@@ -33,6 +34,7 @@ import 
org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecuto
 import 
org.apache.iotdb.db.mpp.plan.execution.config.executor.StandaloneConfigTaskExecutor;
 import org.apache.iotdb.db.mpp.plan.statement.Statement;
 import org.apache.iotdb.rpc.RpcUtils;
+import org.apache.iotdb.rpc.StatementExecutionException;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 
@@ -117,7 +119,18 @@ public class ConfigExecution implements IQueryExecution {
 
   public void fail(Throwable cause) {
     stateMachine.transitionToFailed(cause);
-    taskFuture.set(new ConfigTaskResult(TSStatusCode.INTERNAL_SERVER_ERROR));
+    ConfigTaskResult result;
+    if (cause instanceof IoTDBException) {
+      result =
+          new ConfigTaskResult(TSStatusCode.representOf(((IoTDBException) 
cause).getErrorCode()));
+    } else if (cause instanceof StatementExecutionException) {
+      result =
+          new ConfigTaskResult(
+              TSStatusCode.representOf(((StatementExecutionException) 
cause).getStatusCode()));
+    } else {
+      result = new ConfigTaskResult(TSStatusCode.INTERNAL_SERVER_ERROR);
+    }
+    taskFuture.set(result);
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 93c08bfb40..d4a16138e2 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TFlushReq;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.client.IClientManager;
 import org.apache.iotdb.commons.consensus.PartitionRegionId;
+import org.apache.iotdb.commons.exception.IoTDBException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.confignode.rpc.thrift.TClusterNodeInfos;
 import org.apache.iotdb.confignode.rpc.thrift.TCountStorageGroupResp;
@@ -103,7 +104,7 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
             "Failed to execute set storage group {} in config node, status is 
{}.",
             setStorageGroupStatement.getStorageGroupPath(),
             tsStatus);
-        future.setException(new StatementExecutionException(tsStatus));
+        future.setException(new IoTDBException(tsStatus.message, 
tsStatus.code));
       } else {
         future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
       }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
index b035aa05ee..65770b9658 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/DataNodeTSIServiceImpl.java
@@ -564,7 +564,7 @@ public class DataNodeTSIServiceImpl implements 
TSIEventHandler {
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
           && result.status.code != 
TSStatusCode.NEED_REDIRECTION.getStatusCode()) {
-        throw new RuntimeException("error code: " + result.status);
+        return RpcUtils.getTSExecuteStatementResp(result.status);
       }
 
       IQueryExecution queryExecution = COORDINATOR.getQueryExecution(queryId);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java 
b/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index 1a82376149..4b90e70bfd 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -123,6 +123,12 @@ public class ErrorHandlingUtils {
     } else if (t instanceof SemanticException) {
       return RpcUtils.getStatus(TSStatusCode.SEMANTIC_ERROR, 
rootCause.getMessage());
     }
+
+    if (t instanceof RuntimeException && rootCause instanceof IoTDBException) {
+      return RpcUtils.getStatus(
+          ((IoTDBException) rootCause).getErrorCode(), rootCause.getMessage());
+    }
+
     return null;
   }
 

Reply via email to