This is an automated email from the ASF dual-hosted git repository. geniuspig pushed a commit to branch move_flush in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 529d28296d3d067945e80ce314e0d2ca58824cf9 Author: zhutianci <[email protected]> AuthorDate: Fri May 1 17:52:40 2020 +0800 move flush --- .../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 7 ++- .../apache/iotdb/db/qp/constant/SQLConstant.java | 4 ++ .../apache/iotdb/db/qp/executor/IPlanExecutor.java | 4 +- .../apache/iotdb/db/qp/executor/PlanExecutor.java | 43 +++++++++++++- .../org/apache/iotdb/db/qp/logical/Operator.java | 2 +- .../apache/iotdb/db/qp/logical/RootOperator.java | 2 +- .../{RootOperator.java => sys/FlushOperator.java} | 37 +++++++++--- .../{RootOperator.java => sys/MergeOperator.java} | 15 ++--- .../sys/FlushPlan.java} | 30 +++++++--- .../sys/MergePlan.java} | 26 ++++++--- .../iotdb/db/qp/strategy/LogicalGenerator.java | 36 ++++++++++++ .../iotdb/db/qp/strategy/PhysicalGenerator.java | 9 +++ .../org/apache/iotdb/db/service/TSServiceImpl.java | 66 +--------------------- 13 files changed, 177 insertions(+), 104 deletions(-) diff --git a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 index c181d38..f21fbc1 100644 --- a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 +++ b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 @@ -36,7 +36,9 @@ statement | DESCRIBE prefixPath #describePath // not support yet | CREATE INDEX ON fullPath USING function=ID indexWithClause? whereClause? #createIndex //not support yet | DROP INDEX function=ID ON fullPath #dropIndex //not support yet - | MERGE #merge //not support yet + | MERGE #merge + | FLUSH (COMMA prefixPath)* (ID)?#flush //ID is true or false + | FULL MERGE #fullMerge | CREATE USER userName=ID password=STRING_LITERAL #createUser | ALTER USER userName=(ROOT|ID) SET PASSWORD password=STRING_LITERAL #alterUser | DROP USER userName=ID #dropUser @@ -817,6 +819,9 @@ RENAME : R E N A M E ; +FULL + : F U L L + ; //============================ // End of the keywords list //============================ diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java index a3771a8..e7258a8 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/SQLConstant.java @@ -141,6 +141,10 @@ public class SQLConstant { public static final int TOK_METADATA_ALTER = 80; + public static final int TOK_FLUSH = 81; + public static final int TOK_MERGE = 82; + public static final int TOK_FULL_MERGE = 83; + public static final Map<Integer, String> tokenSymbol = new HashMap<>(); public static final Map<Integer, String> tokenNames = new HashMap<>(); public static final Map<Integer, Integer> reverseWords = new HashMap<>(); 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 addf757..7e70ed2 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.StorageEngineException; 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.qp.physical.PhysicalPlan; import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan; @@ -51,7 +52,8 @@ public interface IPlanExecutor { * * @param plan Physical Non-Query Plan */ - boolean processNonQuery(PhysicalPlan plan) throws QueryProcessException; + boolean processNonQuery(PhysicalPlan plan) + throws QueryProcessException, StorageGroupNotSetException, StorageEngineException; /** * 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 92f363e..3e4f8b8 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,12 +69,14 @@ import org.apache.iotdb.db.exception.metadata.DeleteFailedException; import org.apache.iotdb.db.exception.metadata.MetadataException; import org.apache.iotdb.db.exception.metadata.PathAlreadyExistException; import org.apache.iotdb.db.exception.metadata.PathNotExistException; +import org.apache.iotdb.db.exception.metadata.StorageGroupNotSetException; import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.metadata.MManager; import org.apache.iotdb.db.metadata.mnode.InternalMNode; import org.apache.iotdb.db.metadata.mnode.LeafMNode; import org.apache.iotdb.db.metadata.mnode.MNode; import org.apache.iotdb.db.metadata.mnode.StorageGroupMNode; +import org.apache.iotdb.db.qp.logical.Operator.OperatorType; import org.apache.iotdb.db.qp.logical.sys.AuthorOperator; import org.apache.iotdb.db.qp.logical.sys.AuthorOperator.AuthorType; import org.apache.iotdb.db.qp.physical.PhysicalPlan; @@ -97,6 +99,8 @@ import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan; import org.apache.iotdb.db.qp.physical.sys.DataAuthPlan; import org.apache.iotdb.db.qp.physical.sys.DeleteStorageGroupPlan; import org.apache.iotdb.db.qp.physical.sys.DeleteTimeSeriesPlan; +import org.apache.iotdb.db.qp.physical.sys.FlushPlan; +import org.apache.iotdb.db.qp.physical.sys.MergePlan; import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan; import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan; import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan; @@ -173,7 +177,8 @@ public class PlanExecutor implements IPlanExecutor { } @Override - public boolean processNonQuery(PhysicalPlan plan) throws QueryProcessException { + public boolean processNonQuery(PhysicalPlan plan) + throws QueryProcessException, StorageGroupNotSetException, StorageEngineException { switch (plan.getOperatorType()) { case DELETE: delete((DeletePlan) plan); @@ -229,12 +234,43 @@ public class PlanExecutor implements IPlanExecutor { case MOVE_FILE: operateMoveFile((OperateFilePlan) plan); return true; + case FLUSH: + operateFlush((FlushPlan) plan); + return true; + case MERGE: + operateMerge((MergePlan) plan); default: throw new UnsupportedOperationException( String.format("operation %s is not supported", plan.getOperatorType())); } } + private void operateMerge(MergePlan plan) throws StorageEngineException { + if(plan.getOperatorType() == OperatorType.FULL_MERGE) { + StorageEngine.getInstance().mergeAll(true); + } else { + StorageEngine.getInstance() + .mergeAll(IoTDBDescriptor.getInstance().getConfig().isForceFullMerge()); + } + } + + private void operateFlush(FlushPlan plan) throws StorageGroupNotSetException { + if(plan.getPaths() == null) { + StorageEngine.getInstance().syncCloseAllProcessor(); + } else { + if(plan.isSeq() == null) { + for (Path storageGroup : plan.getPaths()) { + StorageEngine.getInstance().asyncCloseProcessor(storageGroup.toString(), true); + StorageEngine.getInstance().asyncCloseProcessor(storageGroup.toString(), false); + } + } else { + for (Path storageGroup : plan.getPaths()) { + StorageEngine.getInstance().asyncCloseProcessor(storageGroup.toString(), plan.isSeq()); + } + } + } + } + protected QueryDataSet processDataQuery(QueryPlan queryPlan, QueryContext context) throws StorageEngineException, QueryFilterOptimizationException, QueryProcessException, IOException { @@ -1035,7 +1071,7 @@ public class PlanExecutor implements IPlanExecutor { if (!failedNames.isEmpty()) { throw new DeleteFailedException(String.join(",", failedNames)); } - } catch (MetadataException e) { + } catch (MetadataException | StorageEngineException e) { throw new QueryProcessException(e); } return true; @@ -1113,7 +1149,8 @@ public class PlanExecutor implements IPlanExecutor { * * @param pathList deleted paths */ - private void deleteDataOfTimeSeries(List<Path> pathList) throws QueryProcessException { + private void deleteDataOfTimeSeries(List<Path> pathList) + throws QueryProcessException, StorageGroupNotSetException, StorageEngineException { for (Path p : pathList) { DeletePlan deletePlan = new DeletePlan(); deletePlan.addPath(p); diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java index 37c1d10..50ccba6 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/Operator.java @@ -75,6 +75,6 @@ public abstract class Operator { LIST_USER_PRIVILEGE, LIST_ROLE_PRIVILEGE, LIST_USER_ROLES, LIST_ROLE_USERS, GRANT_WATERMARK_EMBEDDING, REVOKE_WATERMARK_EMBEDDING, TTL, DELETE_STORAGE_GROUP, LOAD_CONFIGURATION, SHOW, LOAD_FILES, REMOVE_FILE, MOVE_FILE, LAST, GROUP_BY_FILL, - ALTER_TIMESERIES + ALTER_TIMESERIES, FLUSH, MERGE, FULL_MERGE } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java index 98da176..edb44ed 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java @@ -26,6 +26,6 @@ public abstract class RootOperator extends Operator { public RootOperator(int tokenIntType) { super(tokenIntType); + operatorType = OperatorType.MERGE; } - } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/FlushOperator.java similarity index 55% copy from server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java copy to server/src/main/java/org/apache/iotdb/db/qp/logical/sys/FlushOperator.java index 98da176..ef9c370 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/FlushOperator.java @@ -16,16 +16,37 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.qp.logical; +package org.apache.iotdb.db.qp.logical.sys; -/** - * RootOperator indicates the operator that could be executed as a entire command. RootOperator - * consists of SFWOperator, like INSERT/UPDATE/DELETE, and other Operators. - */ -public abstract class RootOperator extends Operator { +import java.util.List; +import org.apache.iotdb.db.qp.logical.RootOperator; +import org.apache.iotdb.tsfile.read.common.Path; - public RootOperator(int tokenIntType) { - super(tokenIntType); +public class FlushOperator extends RootOperator { + + public List<Path> getStorageGroupList() { + return storageGroupList; } + public void setStorageGroupList( + List<Path> storageGroupList) { + this.storageGroupList = storageGroupList; + } + + private List<Path> storageGroupList; + + public Boolean isSeq() { + return isSeq; + } + + public void setSeq(boolean seq) { + isSeq = seq; + } + + private Boolean isSeq; + + public FlushOperator(int tokenIntType) { + super(tokenIntType); + operatorType = OperatorType.FLUSH; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MergeOperator.java similarity index 72% copy from server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java copy to server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MergeOperator.java index 98da176..407019e 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/logical/sys/MergeOperator.java @@ -1,3 +1,7 @@ +package org.apache.iotdb.db.qp.logical.sys; + +import org.apache.iotdb.db.qp.logical.RootOperator; + /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -16,16 +20,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.qp.logical; +public class MergeOperator extends RootOperator { -/** - * RootOperator indicates the operator that could be executed as a entire command. RootOperator - * consists of SFWOperator, like INSERT/UPDATE/DELETE, and other Operators. - */ -public abstract class RootOperator extends Operator { - - public RootOperator(int tokenIntType) { + public MergeOperator(int tokenIntType) { super(tokenIntType); } - } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/FlushPlan.java similarity index 56% copy from server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java copy to server/src/main/java/org/apache/iotdb/db/qp/physical/sys/FlushPlan.java index 98da176..d21c26e 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/FlushPlan.java @@ -16,16 +16,30 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.qp.logical; +package org.apache.iotdb.db.qp.physical.sys; -/** - * RootOperator indicates the operator that could be executed as a entire command. RootOperator - * consists of SFWOperator, like INSERT/UPDATE/DELETE, and other Operators. - */ -public abstract class RootOperator extends Operator { +import java.util.List; +import org.apache.iotdb.db.qp.logical.Operator.OperatorType; +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.tsfile.read.common.Path; + +public class FlushPlan extends PhysicalPlan { + private List<Path> storeGroups; + + public Boolean isSeq() { + return isSeq; + } + + private Boolean isSeq; - public RootOperator(int tokenIntType) { - super(tokenIntType); + public FlushPlan(Boolean isSeq, List<Path> storeGroups) { + super(false, OperatorType.FLUSH); + this.storeGroups = storeGroups; + this.isSeq = isSeq; } + @Override + public List<Path> getPaths() { + return storeGroups; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/MergePlan.java similarity index 60% copy from server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java copy to server/src/main/java/org/apache/iotdb/db/qp/physical/sys/MergePlan.java index 98da176..d443002 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/logical/RootOperator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/MergePlan.java @@ -16,16 +16,26 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.iotdb.db.qp.logical; +package org.apache.iotdb.db.qp.physical.sys; -/** - * RootOperator indicates the operator that could be executed as a entire command. RootOperator - * consists of SFWOperator, like INSERT/UPDATE/DELETE, and other Operators. - */ -public abstract class RootOperator extends Operator { +import java.util.ArrayList; +import java.util.List; +import org.apache.iotdb.db.qp.logical.Operator.OperatorType; +import org.apache.iotdb.db.qp.physical.PhysicalPlan; +import org.apache.iotdb.tsfile.read.common.Path; + +public class MergePlan extends PhysicalPlan { - public RootOperator(int tokenIntType) { - super(tokenIntType); + public MergePlan(OperatorType operatorType) { + super(false, operatorType); } + public MergePlan() { + super(false, OperatorType.MERGE); + } + + @Override + public List<Path> getPaths() { + return new ArrayList<>(); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java index 561ffe0..8647ab2 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java @@ -18,6 +18,7 @@ */ package org.apache.iotdb.db.qp.strategy; +import org.antlr.v4.runtime.misc.ParseCancellationException; import org.antlr.v4.runtime.tree.TerminalNode; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.exception.runtime.SQLParserException; @@ -81,6 +82,41 @@ public class LogicalGenerator extends SqlBaseBaseListener { } @Override + public void enterFlush(FlushContext ctx) { + super.enterFlush(ctx); + FlushOperator flushOperator = new FlushOperator(SQLConstant.TOK_FLUSH); + if(ctx.ID() != null) { + if(ctx.ID().getText().equalsIgnoreCase("true") + || ctx.ID().getText().equalsIgnoreCase("false")) { + flushOperator.setSeq(Boolean.parseBoolean(ctx.ID().getText())); + } else { + throw new ParseCancellationException("Should be true or false"); + } + } + if(ctx.prefixPath(0) != null) { + List<Path> storageGroups = new ArrayList<>(); + for(PrefixPathContext prefixPathContext : ctx.prefixPath()) { + storageGroups.add(parsePrefixPath(prefixPathContext)); + } + flushOperator.setStorageGroupList(storageGroups); + } + + initializedOperator = flushOperator; + } + + @Override + public void enterMerge(MergeContext ctx) { + super.enterMerge(ctx); + initializedOperator = new MergeOperator(SQLConstant.TOK_MERGE); + } + + @Override + public void enterFullMerge(FullMergeContext ctx) { + super.enterFullMerge(ctx); + initializedOperator = new MergeOperator(SQLConstant.TOK_FULL_MERGE); + } + + @Override public void enterCountNodes(CountNodesContext ctx) { super.enterCountNodes(ctx); initializedOperator = new CountOperator(SQLConstant.TOK_COUNT_NODES, diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java index 72e66b4..1ed5af4 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/PhysicalGenerator.java @@ -126,6 +126,15 @@ public class PhysicalGenerator { insert.getTime(), insert.getMeasurementList(), insert.getValueList()); + case MERGE: + if(operator.getTokenIntType() == SQLConstant.TOK_FULL_MERGE) { + return new MergePlan(OperatorType.FULL_MERGE); + } else { + return new MergePlan(); + } + case FLUSH: + FlushOperator flushOperator = (FlushOperator) operator; + return new FlushPlan(flushOperator.isSeq(), flushOperator.getStorageGroupList()); case QUERY: QueryOperator query = (QueryOperator) operator; return transformQuery(query); 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 f8a36c2..58f15f8 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 @@ -28,7 +28,6 @@ import org.apache.iotdb.db.conf.IoTDBConstant; import org.apache.iotdb.db.conf.IoTDBDescriptor; import org.apache.iotdb.db.cost.statistic.Measurement; import org.apache.iotdb.db.cost.statistic.Operation; -import org.apache.iotdb.db.engine.StorageEngine; import org.apache.iotdb.db.exception.QueryInBatchStatementException; import org.apache.iotdb.db.exception.StorageEngineException; import org.apache.iotdb.db.exception.metadata.MetadataException; @@ -322,60 +321,6 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { return MManager.getInstance().getAllTimeseriesName(path); } - /** - * Judge whether the statement is ADMIN COMMAND and if true, execute it. - * - * @param statement command - * @return true if the statement is ADMIN COMMAND - */ - private boolean execAdminCommand(String statement, long sessionId) throws StorageEngineException { - if (!"root".equals(sessionIdUsernameMap.get(sessionId))) { - return false; - } - if (statement == null) { - return false; - } - statement = statement.toLowerCase(); - if (statement.startsWith("flush")) { - try { - execFlush(statement); - } catch (StorageGroupNotSetException e) { - throw new StorageEngineException(e); - } - return true; - } - switch (statement) { - case "merge": - StorageEngine.getInstance() - .mergeAll(IoTDBDescriptor.getInstance().getConfig().isForceFullMerge()); - return true; - case "full merge": - StorageEngine.getInstance().mergeAll(true); - return true; - default: - return false; - } - } - - private void execFlush(String statement) throws StorageGroupNotSetException { - String[] args = statement.split("\\s+"); - if (args.length == 1) { - StorageEngine.getInstance().syncCloseAllProcessor(); - } else if (args.length == 2) { - String[] storageGroups = args[1].split(","); - for (String storageGroup : storageGroups) { - StorageEngine.getInstance().asyncCloseProcessor(storageGroup, true); - StorageEngine.getInstance().asyncCloseProcessor(storageGroup, false); - } - } else { - String[] storageGroups = args[1].split(","); - boolean isSeq = Boolean.parseBoolean(args[2]); - for (String storageGroup : storageGroups) { - StorageEngine.getInstance().asyncCloseProcessor(storageGroup, isSeq); - } - } - } - @Override public TSExecuteBatchStatementResp executeBatchStatement(TSExecuteBatchStatementReq req) { long t1 = System.currentTimeMillis(); @@ -465,10 +410,6 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { } String statement = req.getStatement(); - if (execAdminCommand(statement, req.getSessionId())) { - return RpcUtils.getTSExecuteStatementResp( - RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS, "ADMIN_COMMAND_SUCCESS")); - } PhysicalPlan physicalPlan = processor.parseSQLToPhysicalPlan(statement, sessionIdZoneIdMap.get(req.getSessionId())); if (physicalPlan.isQuery()) { @@ -489,10 +430,6 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { return RpcUtils.getTSExecuteStatementResp( RpcUtils.getStatus(TSStatusCode.QUERY_PROCESS_ERROR, "Meet error in query process: " + e.getMessage())); - } catch (StorageEngineException e) { - logger.info(ERROR_PARSING_SQL, e.getMessage()); - return RpcUtils.getTSExecuteStatementResp( - RpcUtils.getStatus(TSStatusCode.READ_ONLY_SYSTEM_ERROR, e.getMessage())); } catch (Exception e) { logger.error("{}: server Internal Error: ", IoTDBConstant.GLOBAL_DB_NAME, e); return RpcUtils.getTSExecuteStatementResp(TSStatusCode.INTERNAL_SERVER_ERROR, e.getMessage()); @@ -960,7 +897,8 @@ public class TSServiceImpl implements TSIService.Iface, ServerContext { return resp; } - private boolean executeNonQuery(PhysicalPlan plan) throws QueryProcessException { + private boolean executeNonQuery(PhysicalPlan plan) + throws QueryProcessException, StorageGroupNotSetException { if (IoTDBDescriptor.getInstance().getConfig().isReadOnly()) { throw new QueryProcessException( "Current system mode is read-only, does not support non-query operation");
