This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch QueryMetrics in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 9c3a999c6ce0797a5d1e19c1b9b288f3cf1a066c Author: Minghui Liu <[email protected]> AuthorDate: Mon Nov 7 10:29:50 2022 +0800 support TRACING ON/OFF --- .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 7 ++- .../plan/execution/config/ConfigTaskVisitor.java | 7 +++ .../config/executor/ClusterConfigTaskExecutor.java | 16 ++++++ .../config/executor/IConfigTaskExecutor.java | 2 + .../executor/StandaloneConfigTaskExecutor.java | 13 +++++ .../mpp/plan/execution/config/sys/TracingTask.java | 41 +++++++++++++++ .../iotdb/db/mpp/plan/parser/ASTVisitor.java | 7 +++ .../db/mpp/plan/statement/StatementVisitor.java | 5 ++ .../mpp/plan/statement/sys/TracingStatement.java | 60 ++++++++++++++++++++++ .../iotdb/db/mpp/statistics/QueryStatistics.java | 4 +- 10 files changed, 159 insertions(+), 3 deletions(-) diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 index 51cb8f178d..20ab185a94 100644 --- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 +++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 @@ -59,7 +59,7 @@ dclStatement ; utilityStatement - : merge | fullMerge | flush | clearCache | settle | explain + : merge | fullMerge | flush | clearCache | settle | explain | tracing | setSystemStatus | showVersion | showFlushInfo | showLockInfo | showQueryResource | showQueryProcesslist | killQuery | grantWatermarkEmbedding | revokeWatermarkEmbedding | loadConfiguration | loadTimeseries | loadFile | removeFile | unloadFile; @@ -693,6 +693,11 @@ explain : EXPLAIN selectStatement ; +// Tracing +tracing + : TRACING (ON | OFF) + ; + // Set System To readonly/running/error setSystemStatus : SET SYSTEM TO (READONLY|RUNNING) (ON (LOCAL | CLUSTER))? diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java index 1e6aa6f61e..cceed5fca8 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java @@ -57,6 +57,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.sys.FlushTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.LoadConfigurationTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.MergeTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.SetSystemStatusTask; +import org.apache.iotdb.db.mpp.plan.execution.config.sys.TracingTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.sync.CreatePipeSinkTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.sync.CreatePipeTask; import org.apache.iotdb.db.mpp.plan.execution.config.sys.sync.DropPipeSinkTask; @@ -106,6 +107,7 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.FlushStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.LoadConfigurationStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.MergeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.SetSystemStatusStatement; +import org.apache.iotdb.db.mpp.plan.statement.sys.TracingStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeSinkStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.DropPipeSinkStatement; @@ -393,6 +395,11 @@ public class ConfigTaskVisitor return new ShowContinuousQueriesTask(); } + @Override + public IConfigTask visitTracing(TracingStatement tracingStatement, TaskContext context) { + return new TracingTask(tracingStatement.isEnableTracing()); + } + public static class TaskContext { private final String queryId; diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java index 10df3d09c3..ac3d34c8a8 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java @@ -129,6 +129,7 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeSinkStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.StartPipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.StopPipeStatement; +import org.apache.iotdb.db.mpp.statistics.QueryStatistics; import org.apache.iotdb.db.sync.SyncService; import org.apache.iotdb.db.trigger.service.TriggerClassLoader; import org.apache.iotdb.rpc.RpcUtils; @@ -1441,4 +1442,19 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor { return future; } + + @Override + public SettableFuture<ConfigTaskResult> tracing(boolean enableTracing) { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + if (enableTracing) { + QueryStatistics.getInstance().enableTracing(); + } else { + QueryStatistics.getInstance().disableTracing(); + } + future.setException( + new IoTDBException( + "The statement is executed locally but not broadcast to the cluster.", + TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())); + return future; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java index dc79335224..fcebb26073 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java @@ -161,4 +161,6 @@ public interface IConfigTaskExecutor { SettableFuture<ConfigTaskResult> dropContinuousQuery(String cqId); SettableFuture<ConfigTaskResult> showContinuousQueries(); + + SettableFuture<ConfigTaskResult> tracing(boolean enableTracing); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java index a0c59d4d8b..86f2c6258b 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java @@ -71,6 +71,7 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeSinkStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.StartPipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.StopPipeStatement; +import org.apache.iotdb.db.mpp.statistics.QueryStatistics; import org.apache.iotdb.rpc.StatementExecutionException; import org.apache.iotdb.rpc.TSStatusCode; @@ -712,4 +713,16 @@ public class StandaloneConfigTaskExecutor implements IConfigTaskExecutor { TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode())); return future; } + + @Override + public SettableFuture<ConfigTaskResult> tracing(boolean enableTracing) { + SettableFuture<ConfigTaskResult> future = SettableFuture.create(); + if (enableTracing) { + QueryStatistics.getInstance().enableTracing(); + } else { + QueryStatistics.getInstance().disableTracing(); + } + future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS)); + return future; + } } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/sys/TracingTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/sys/TracingTask.java new file mode 100644 index 0000000000..c86e6b4577 --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/sys/TracingTask.java @@ -0,0 +1,41 @@ +/* + * 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.mpp.plan.execution.config.sys; + +import org.apache.iotdb.db.mpp.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.mpp.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecutor; + +import com.google.common.util.concurrent.ListenableFuture; + +public class TracingTask implements IConfigTask { + + private final boolean enableTracing; + + public TracingTask(boolean enableTracing) { + this.enableTracing = enableTracing; + } + + @Override + public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.tracing(enableTracing); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java index a10c09e2c4..00e42b1fba 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java @@ -145,6 +145,7 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.LoadConfigurationStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.MergeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.SetSystemStatusStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.ShowVersionStatement; +import org.apache.iotdb.db.mpp.plan.statement.sys.TracingStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeSinkStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.DropPipeSinkStatement; @@ -2261,6 +2262,12 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> { return new ExplainStatement(queryStatement); } + // Tracing ======================================================================== + @Override + public Statement visitTracing(IoTDBSqlParser.TracingContext ctx) { + return new TracingStatement(ctx.ON() != null); + } + @Override public Statement visitDeleteStatement(IoTDBSqlParser.DeleteStatementContext ctx) { DeleteDataStatement statement = new DeleteDataStatement(); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java index bd1d02330a..fe9c2bbea5 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java @@ -84,6 +84,7 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.LoadConfigurationStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.MergeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.SetSystemStatusStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.ShowVersionStatement; +import org.apache.iotdb.db.mpp.plan.statement.sys.TracingStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeSinkStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.CreatePipeStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.DropPipeSinkStatement; @@ -445,4 +446,8 @@ public abstract class StatementVisitor<R, C> { DropSchemaTemplateStatement dropSchemaTemplateStatement, C context) { return visitStatement(dropSchemaTemplateStatement, context); } + + public R visitTracing(TracingStatement tracingStatement, C context) { + return visitStatement(tracingStatement, context); + } } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/TracingStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/TracingStatement.java new file mode 100644 index 0000000000..15adf675bb --- /dev/null +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/sys/TracingStatement.java @@ -0,0 +1,60 @@ +/* + * 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.mpp.plan.statement.sys; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.mpp.plan.analyze.QueryType; +import org.apache.iotdb.db.mpp.plan.constant.StatementType; +import org.apache.iotdb.db.mpp.plan.statement.IConfigStatement; +import org.apache.iotdb.db.mpp.plan.statement.Statement; +import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; + +import java.util.Collections; +import java.util.List; + +public class TracingStatement extends Statement implements IConfigStatement { + + private final boolean enableTracing; + + public TracingStatement(boolean enableTracing) { + super(); + statementType = StatementType.TRACING; + this.enableTracing = enableTracing; + } + + public boolean isEnableTracing() { + return enableTracing; + } + + @Override + public QueryType getQueryType() { + return QueryType.WRITE; + } + + @Override + public List<? extends PartialPath> getPaths() { + return Collections.emptyList(); + } + + @Override + public <R, C> R accept(StatementVisitor<R, C> visitor, C context) { + return visitor.visitTracing(this, context); + } +} diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/statistics/QueryStatistics.java b/server/src/main/java/org/apache/iotdb/db/mpp/statistics/QueryStatistics.java index e61e22f3ff..df2340e335 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/statistics/QueryStatistics.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/statistics/QueryStatistics.java @@ -78,12 +78,12 @@ public class QueryStatistics { } } - public void traceOff() { + public void disableTracing() { tracing.set(false); operationStatistics.clear(); } - public void tradeOn() { + public void enableTracing() { tracing.set(true); operationStatistics.clear(); }
