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

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

commit 34eee265aecb45b9405fb0bb90f8de34d3b48eaa
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Dec 21 13:24:42 2020 +0800

    fix something
---
 .../iotdb/cluster/log/applier/BaseApplier.java     |  7 ++--
 .../iotdb/cluster/log/applier/DataLogApplier.java  |  3 +-
 .../iotdb/cluster/log/applier/MetaLogApplier.java  |  3 +-
 .../cluster/server/member/DataGroupMember.java     |  5 +--
 .../cluster/server/member/MetaGroupMember.java     |  4 +++
 .../org/apache/iotdb/cluster/common/IoTDBTest.java |  3 +-
 .../iotdb/cluster/common/TestAsyncDataClient.java  |  3 +-
 .../iotdb/cluster/common/TestLogApplier.java       |  4 +--
 .../org/apache/iotdb/cluster/common/TestUtils.java |  3 +-
 .../cluster/server/member/DataGroupMemberTest.java | 11 ++++---
 .../cluster/server/member/MetaGroupMemberTest.java | 11 ++++---
 .../org/apache/iotdb/db/engine/StorageEngine.java  | 14 ++++----
 .../apache/iotdb/db/exception/UserException.java   | 38 ++++++++++++++++++++++
 .../org/apache/iotdb/db/mqtt/PublishHandler.java   |  4 +--
 .../apache/iotdb/db/qp/executor/IPlanExecutor.java |  3 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  | 23 ++++++++-----
 .../org/apache/iotdb/db/service/TSServiceImpl.java |  6 +++-
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |  1 +
 18 files changed, 104 insertions(+), 42 deletions(-)

diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
index 75cef69..a641b30 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/BaseApplier.java
@@ -28,6 +28,7 @@ import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.server.member.DataGroupMember;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -64,7 +65,7 @@ abstract class BaseApplier implements LogApplier {
    * @throws StorageEngineException
    */
   void applyPhysicalPlan(PhysicalPlan plan, DataGroupMember dataGroupMember)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
     if (plan instanceof InsertPlan) {
       processPlanWithTolerance((InsertPlan) plan, dataGroupMember);
     } else if (plan != null && !plan.isQuery()) {
@@ -85,7 +86,7 @@ abstract class BaseApplier implements LogApplier {
   }
 
   private void executeAfterSync(PhysicalPlan plan)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
     try {
       metaGroupMember.syncLeaderWithConsistencyCheck(true);
     } catch (CheckConsistencyException ce) {
@@ -103,7 +104,7 @@ abstract class BaseApplier implements LogApplier {
    * @throws StorageEngineException
    */
   private void processPlanWithTolerance(InsertPlan plan, DataGroupMember 
dataGroupMember)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
     try {
       getQueryExecutor().processNonQuery(plan);
     } catch (QueryProcessException | StorageGroupNotSetException | 
StorageEngineException e) {
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
index 8ce84b5..ecb1db7 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/DataLogApplier.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.cluster.utils.IOUtils;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
@@ -89,7 +90,7 @@ public class DataLogApplier extends BaseApplier {
   }
 
   private void applyInsert(InsertPlan plan)
-      throws StorageGroupNotSetException, QueryProcessException, 
StorageEngineException {
+      throws StorageGroupNotSetException, QueryProcessException, 
StorageEngineException, UserException {
     // check if the corresponding slot is being pulled
     PartialPath sg;
     long time = plan.getMinTime();
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
index d7dd5f9..0e13dc8 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/log/applier/MetaLogApplier.java
@@ -26,6 +26,7 @@ import org.apache.iotdb.cluster.log.logtypes.RemoveNodeLog;
 import org.apache.iotdb.cluster.rpc.thrift.Node;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.slf4j.Logger;
@@ -60,7 +61,7 @@ public class MetaLogApplier extends BaseApplier {
       } else {
         logger.error("Unsupported log: {} {}", log.getClass().getName(), log);
       }
-    } catch (StorageEngineException | StorageGroupNotSetException | 
QueryProcessException e) {
+    } catch (StorageEngineException | StorageGroupNotSetException | 
QueryProcessException | UserException e) {
       logger.debug("Exception occurred when executing {}", log, e);
       log.setException(e);
     } finally {
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
index de200cf..b136a3e 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/DataGroupMember.java
@@ -89,6 +89,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
 import 
org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.TimePartitionFilter;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.metadata.PartialPath;
@@ -641,8 +642,8 @@ public class DataGroupMember extends RaftMember {
     try {
       PlanExecutor.flushSpecifiedStorageGroups(flushPlan);
       return true;
-    } catch (StorageGroupNotSetException e) {
-      logger.error("Some SGs are missing while flushing", e);
+    } catch (UserException e) {
+      logger.warn("Some SGs are missing while flushing {}", e.getMessage());
     }
     return false;
   }
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index 863314f..e8891ab 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -126,6 +126,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.exception.StartupException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
@@ -1352,6 +1353,9 @@ public class MetaGroupMember extends RaftMember {
     boolean execRet;
     try {
       execRet = getLocalExecutor().processNonQuery(plan);
+    } catch (UserException e) {
+      logger.warn("meet error while processing non-query {}", e.getMessage());
+      return RpcUtils.getStatus(e.getErrorCode(), e.getMessage());
     } catch (QueryProcessException e) {
       if (e.getErrorCode() != 
TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode()) {
         logger.debug("meet error while processing non-query. ", e);
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java
index a6d7b6d..db45b43 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/IoTDBTest.java
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.conf.IoTDBConstant;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.StartupException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -141,7 +142,7 @@ public abstract class IoTDBTest {
           schema.getMeasurementId()),
           schema.getType(), schema.getEncodingType(), schema.getCompressor(), 
schema.getProps(),
           Collections.emptyMap(), Collections.emptyMap(), null));
-    } catch (QueryProcessException | StorageGroupNotSetException | 
StorageEngineException | IllegalPathException e) {
+    } catch (QueryProcessException | StorageGroupNotSetException | 
StorageEngineException | IllegalPathException | UserException e) {
       // ignore
     }
   }
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
index 118f7e5..472fc41 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestAsyncDataClient.java
@@ -42,6 +42,7 @@ import 
org.apache.iotdb.cluster.server.service.DataAsyncService;
 import org.apache.iotdb.cluster.utils.IOUtils;
 import org.apache.iotdb.cluster.utils.StatusUtils;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
@@ -110,7 +111,7 @@ public class TestAsyncDataClient extends AsyncDataClient {
         PhysicalPlan plan = PhysicalPlan.Factory.create(request.planBytes);
         planExecutor.processNonQuery(plan);
         resultHandler.onComplete(StatusUtils.OK);
-      } catch (IOException | QueryProcessException | 
StorageGroupNotSetException | StorageEngineException | IllegalPathException e) {
+      } catch (IOException | QueryProcessException | 
StorageGroupNotSetException | StorageEngineException | IllegalPathException | 
UserException e) {
         resultHandler.onError(e);
       }
     }).start();
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java
index fe90c0a..00920d3 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestLogApplier.java
@@ -24,8 +24,8 @@ import org.apache.iotdb.cluster.log.LogApplier;
 import org.apache.iotdb.cluster.log.logtypes.CloseFileLog;
 import org.apache.iotdb.cluster.log.logtypes.PhysicalPlanLog;
 import org.apache.iotdb.db.engine.StorageEngine;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
-import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.executor.PlanExecutor;
@@ -47,7 +47,7 @@ public class TestLogApplier implements LogApplier {
               .closeStorageGroupProcessor(new 
PartialPath(closeFileLog.getStorageGroupName()),
                   closeFileLog.getPartitionId(),
                   closeFileLog.isSeq(), false);
-        } catch (StorageGroupNotSetException | IllegalPathException e) {
+        } catch (UserException | IllegalPathException e) {
           throw new QueryProcessException(e);
         }
       }
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java 
b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java
index 771112b..acacd95 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/common/TestUtils.java
@@ -38,6 +38,7 @@ import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
@@ -269,7 +270,7 @@ public class TestUtils {
   }
 
   public static void prepareData()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     InsertRowPlan insertPlan = new InsertRowPlan();
     // data for raw data query and aggregation
     // 10 devices (storage groups)
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
index 96dc257..8876ae2 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/DataGroupMemberTest.java
@@ -86,6 +86,7 @@ import org.apache.iotdb.db.engine.modification.Deletion;
 import org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.WriteProcessException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -591,7 +592,7 @@ public class DataGroupMemberTest extends MemberTest {
 
   @Test
   public void testQuerySingleSeries()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     System.out.println("Start testQuerySingleSeries()");
     InsertRowPlan insertPlan = new InsertRowPlan();
     insertPlan.setDeviceId(new PartialPath(TestUtils.getTestSg(0)));
@@ -649,7 +650,7 @@ public class DataGroupMemberTest extends MemberTest {
 
   @Test
   public void testQuerySingleSeriesWithValueFilter()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     System.out.println("Start testQuerySingleSeriesWithValueFilter()");
     InsertRowPlan insertPlan = new InsertRowPlan();
     insertPlan.setDeviceId(new PartialPath(TestUtils.getTestSg(0)));
@@ -707,7 +708,7 @@ public class DataGroupMemberTest extends MemberTest {
 
   @Test
   public void testQuerySingleSeriesByTimestamp()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     System.out.println("Start testQuerySingleSeriesByTimestamp()");
     InsertRowPlan insertPlan = new InsertRowPlan();
     insertPlan.setDeviceId(new PartialPath(TestUtils.getTestSg(0)));
@@ -763,7 +764,7 @@ public class DataGroupMemberTest extends MemberTest {
 
   @Test
   public void testQuerySingleSeriesByTimestampWithValueFilter()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     System.out.println("Start 
testQuerySingleSeriesByTimestampWithValueFilter()");
     InsertRowPlan insertPlan = new InsertRowPlan();
     insertPlan.setDeviceId(new PartialPath(TestUtils.getTestSg(0)));
@@ -951,7 +952,7 @@ public class DataGroupMemberTest extends MemberTest {
 
   @Test
   public void testGroupBy()
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, IllegalPathException, UserException {
     System.out.println("Start testGroupBy()");
     TestUtils.prepareData();
 
diff --git 
a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
 
b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
index 32b0b30..94c4c31 100644
--- 
a/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
+++ 
b/cluster/src/test/java/org/apache/iotdb/cluster/server/member/MetaGroupMemberTest.java
@@ -101,6 +101,7 @@ import org.apache.iotdb.db.auth.entity.User;
 import org.apache.iotdb.db.engine.StorageEngine;
 import org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -194,7 +195,7 @@ public class MetaGroupMemberTest extends MemberTest {
         try {
           planExecutor.processNonQuery(plan);
           return StatusUtils.OK;
-        } catch (QueryProcessException | StorageGroupNotSetException | 
StorageEngineException e) {
+        } catch (QueryProcessException | StorageGroupNotSetException | 
StorageEngineException | UserException e) {
           return StatusUtils.getStatus(StatusUtils.EXECUTE_STATEMENT_ERROR, 
e.getMessage());
         }
       }
@@ -411,7 +412,7 @@ public class MetaGroupMemberTest extends MemberTest {
                   PhysicalPlan plan = 
PhysicalPlan.Factory.create(request.planBytes);
                   planExecutor.processNonQuery(plan);
                   resultHandler.onComplete(StatusUtils.OK);
-                } catch (IOException | QueryProcessException | 
StorageGroupNotSetException | StorageEngineException | IllegalPathException e) {
+                } catch (IOException | QueryProcessException | 
StorageGroupNotSetException | StorageEngineException | IllegalPathException | 
UserException e) {
                   resultHandler.onError(e);
                 }
               }).start();
@@ -482,7 +483,7 @@ public class MetaGroupMemberTest extends MemberTest {
 
   @Test
   public void testClosePartition()
-      throws QueryProcessException, StorageEngineException, 
StorageGroupNotSetException, IllegalPathException {
+      throws QueryProcessException, StorageEngineException, 
StorageGroupNotSetException, IllegalPathException, UserException {
     System.out.println("Start testClosePartition()");
     // the operation is accepted
     dummyResponse.set(Response.RESPONSE_AGREE);
@@ -745,7 +746,7 @@ public class MetaGroupMemberTest extends MemberTest {
 
   @Test
   public void testGetReaderByTimestamp()
-      throws QueryProcessException, StorageEngineException, IOException, 
StorageGroupNotSetException, IllegalPathException {
+      throws QueryProcessException, StorageEngineException, IOException, 
StorageGroupNotSetException, IllegalPathException, UserException {
     System.out.println("Start testGetReaderByTimestamp()");
     RaftServer.setReadOperationTimeoutMS(10000);
     mockDataClusterServer = true;
@@ -793,7 +794,7 @@ public class MetaGroupMemberTest extends MemberTest {
 
   @Test
   public void testGetReader()
-      throws QueryProcessException, StorageEngineException, IOException, 
StorageGroupNotSetException, IllegalPathException, EmptyIntervalException {
+      throws QueryProcessException, StorageEngineException, IOException, 
StorageGroupNotSetException, IllegalPathException, EmptyIntervalException, 
UserException {
     System.out.println("Start testGetReader()");
     mockDataClusterServer = true;
     InsertRowPlan insertPlan = new InsertRowPlan();
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java 
b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
index 781836f..dfbda13 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngine.java
@@ -59,11 +59,11 @@ import org.apache.iotdb.db.exception.ShutdownException;
 import org.apache.iotdb.db.exception.StorageEngineException;
 import org.apache.iotdb.db.exception.StorageGroupProcessorException;
 import org.apache.iotdb.db.exception.TsFileProcessorException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.WriteProcessException;
 import org.apache.iotdb.db.exception.WriteProcessRejectException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
-import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.runtime.StorageEngineFailureException;
 import org.apache.iotdb.db.metadata.PartialPath;
@@ -497,15 +497,14 @@ public class StorageEngine implements IService {
    * @param partitionId      the partition id
    * @param isSeq            is sequence tsfile or unsequence tsfile
    * @param isSync           close tsfile synchronously or asynchronously
-   * @throws StorageGroupNotSetException
    */
   public void closeStorageGroupProcessor(PartialPath storageGroupPath, long 
partitionId,
       boolean isSeq,
-      boolean isSync)
-      throws StorageGroupNotSetException {
+      boolean isSync) throws UserException {
     StorageGroupProcessor processor = processorMap.get(storageGroupPath);
     if (processor == null) {
-      throw new StorageGroupNotSetException(storageGroupPath.getFullPath());
+      throw new UserException(String.format("Storage group is not set for 
current seriesPath: [%s]",
+          storageGroupPath.getFullPath()), 
TSStatusCode.METADATA_ERROR.getStatusCode());
     }
 
     logger.info("async closing sg processor is called for closing {}, seq = 
{}, partitionId = {}",
@@ -871,8 +870,9 @@ public class StorageEngine implements IService {
       try {
         TimeUnit.MILLISECONDS.sleep(config.getCheckPeriodWhenInsertBlocked());
         if (System.currentTimeMillis() - startTime > 
config.getMaxWaitingTimeWhenInsertBlocked()) {
-          throw new WriteProcessRejectException("System rejected over " + 
config.getMaxWaitingTimeWhenInsertBlocked() +
-              "ms");
+          throw new WriteProcessRejectException(
+              "System rejected over " + 
config.getMaxWaitingTimeWhenInsertBlocked() +
+                  "ms");
         }
       } catch (InterruptedException e) {
         Thread.currentThread().interrupt();
diff --git 
a/server/src/main/java/org/apache/iotdb/db/exception/UserException.java 
b/server/src/main/java/org/apache/iotdb/db/exception/UserException.java
new file mode 100644
index 0000000..9abdef2
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/exception/UserException.java
@@ -0,0 +1,38 @@
+/*
+ * 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.exception;
+
+/**
+ * This kind of exception is caused by users' wrong sql, and server needn't 
print the full stack of
+ * the exception
+ */
+public class UserException extends IoTDBException{
+
+  public UserException(String message, int errorCode) {
+    super(message, errorCode);
+  }
+
+  public UserException(String message, Throwable cause, int errorCode) {
+    super(message, cause, errorCode);
+  }
+
+  public UserException(Throwable cause, int errorCode) {
+    super(cause, errorCode);
+  }
+}
diff --git a/server/src/main/java/org/apache/iotdb/db/mqtt/PublishHandler.java 
b/server/src/main/java/org/apache/iotdb/db/mqtt/PublishHandler.java
index 87a2adf..d445c40 100644
--- a/server/src/main/java/org/apache/iotdb/db/mqtt/PublishHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/mqtt/PublishHandler.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.iotdb.db.conf.IoTDBConfig;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.exception.StorageEngineException;
-import org.apache.iotdb.db.exception.metadata.IllegalPathException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
@@ -109,7 +109,7 @@ public class PublishHandler extends 
AbstractInterceptHandler {
     }
 
     private boolean executeNonQuery(PhysicalPlan plan)
-        throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+        throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
         if (IoTDBDescriptor.getInstance().getConfig().isReadOnly()) {
             throw new QueryProcessException(
                     "Current system mode is read-only, does not support 
non-query operation");
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java 
b/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
index 5febac6..f9e6495 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/IPlanExecutor.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.sql.SQLException;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
@@ -54,7 +55,7 @@ public interface IPlanExecutor {
    * @param plan Physical Non-Query Plan
    */
   boolean processNonQuery(PhysicalPlan plan)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException;
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException;
 
   /**
    * execute update command and return whether the operator is successful.
diff --git 
a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java 
b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 68497de..978190c 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -69,6 +69,7 @@ import 
org.apache.iotdb.db.engine.storagegroup.StorageGroupProcessor.TimePartiti
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.DeleteFailedException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
@@ -186,7 +187,7 @@ public class PlanExecutor implements IPlanExecutor {
 
   @Override
   public boolean processNonQuery(PhysicalPlan plan)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
     switch (plan.getOperatorType()) {
       case DELETE:
         delete((DeletePlan) plan);
@@ -306,7 +307,7 @@ public class PlanExecutor implements IPlanExecutor {
     
IoTDBDescriptor.getInstance().getConfig().setEnablePerformanceTracing(plan.isTracingOn());
   }
 
-  private void operateFlush(FlushPlan plan) throws StorageGroupNotSetException 
{
+  private void operateFlush(FlushPlan plan) throws UserException {
     if (plan.getPaths().isEmpty()) {
       StorageEngine.getInstance().syncCloseAllProcessor();
     } else {
@@ -318,14 +319,16 @@ public class PlanExecutor implements IPlanExecutor {
       if (!noExistSg.isEmpty()) {
         StringBuilder sb = new StringBuilder();
         noExistSg.forEach(storageGroup -> 
sb.append(storageGroup.getFullPath()).append(","));
-        throw new StorageGroupNotSetException(
-            sb.subSequence(0, sb.length() - 1).toString());
+        throw new UserException(String
+            .format("Storage group is not set for current seriesPath: [%s]",
+                sb.subSequence(0, sb.length() - 1).toString()),
+            TSStatusCode.METADATA_ERROR.getStatusCode());
       }
     }
   }
 
   public static void flushSpecifiedStorageGroups(FlushPlan plan)
-      throws StorageGroupNotSetException {
+      throws UserException {
     Map<PartialPath, List<Pair<Long, Boolean>>> storageGroupMap = plan
         .getStorageGroupPartitionIds();
     for (Entry<PartialPath, List<Pair<Long, Boolean>>> entry : 
storageGroupMap.entrySet()) {
@@ -935,7 +938,7 @@ public class PlanExecutor implements IPlanExecutor {
     }
   }
 
-  private boolean operateAuthor(AuthorPlan author) throws 
QueryProcessException {
+  private boolean operateAuthor(AuthorPlan author) throws 
QueryProcessException, UserException {
     AuthorOperator.AuthorType authorType = author.getAuthorType();
     String userName = author.getUserName();
     String roleName = author.getRoleName();
@@ -990,7 +993,7 @@ public class PlanExecutor implements IPlanExecutor {
           throw new QueryProcessException("Unsupported operation " + 
authorType);
       }
     } catch (AuthException e) {
-      throw new QueryProcessException(e.getMessage());
+      throw new UserException(e.getMessage(), 
TSStatusCode.AUTHORITY_ERROR.getStatusCode());
     }
     return true;
   }
@@ -1133,14 +1136,16 @@ public class PlanExecutor implements IPlanExecutor {
   }
 
   protected boolean deleteStorageGroups(DeleteStorageGroupPlan 
deleteStorageGroupPlan)
-      throws QueryProcessException {
+      throws QueryProcessException, UserException {
     List<PartialPath> deletePathList = new ArrayList<>();
     try {
       for (PartialPath storageGroupPath : deleteStorageGroupPlan.getPaths()) {
         List<PartialPath> allRelatedStorageGroupPath = IoTDB.metaManager
             .getStorageGroupPaths(storageGroupPath);
         if (allRelatedStorageGroupPath.isEmpty()) {
-          throw new PathNotExistException(storageGroupPath.getFullPath());
+          throw new UserException(
+              String.format("Path [%s] does not exist", 
storageGroupPath.getFullPath()),
+              TSStatusCode.TIMESERIES_NOT_EXIST.getStatusCode());
         }
         for (PartialPath path : allRelatedStorageGroupPath) {
           StorageEngine.getInstance().deleteStorageGroup(path);
diff --git 
a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java 
b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 6e75bfb..13c2c66 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -54,6 +54,7 @@ import 
org.apache.iotdb.db.engine.cache.TimeSeriesMetadataCache;
 import org.apache.iotdb.db.exception.BatchProcessException;
 import org.apache.iotdb.db.exception.QueryInBatchStatementException;
 import org.apache.iotdb.db.exception.StorageEngineException;
+import org.apache.iotdb.db.exception.UserException;
 import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException;
@@ -1133,7 +1134,7 @@ public class TSServiceImpl implements TSIService.Iface, 
ServerContext {
   }
 
   private boolean executeNonQuery(PhysicalPlan plan)
-      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException {
+      throws QueryProcessException, StorageGroupNotSetException, 
StorageEngineException, UserException {
     if (IoTDBDescriptor.getInstance().getConfig().isReadOnly()) {
       throw new QueryProcessException(
           "Current system mode is read-only, does not support non-query 
operation");
@@ -1792,6 +1793,9 @@ public class TSServiceImpl implements TSIService.Iface, 
ServerContext {
       execRet = executeNonQuery(plan);
     } catch (BatchProcessException e) {
       return RpcUtils.getStatus(Arrays.asList(e.getFailingStatus()));
+    } catch (UserException e) {
+      logger.warn("meet error while processing non-query {}", e.getMessage());
+      return RpcUtils.getStatus(e.getErrorCode(), e.getMessage());
     } catch (QueryProcessException e) {
       logger.warn("meet error while processing non-query. ", e);
       Throwable cause = e;
diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java 
b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index 4e2184c..d063e0a 100644
--- a/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -72,6 +72,7 @@ public enum TSStatusCode {
   START_UP_ERROR(504),
   SHUT_DOWN_ERROR(505),
   MULTIPLE_ERROR(506),
+  AUTHORITY_ERROR(507),
 
   WRONG_LOGIN_PASSWORD_ERROR(600),
   NOT_LOGIN_ERROR(601),

Reply via email to