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