This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch QueryMetricOpt in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 237921e244b961aede12b3d528cd98bd808443f2 Author: JackieTien97 <[email protected]> AuthorDate: Fri May 19 16:52:09 2023 +0800 merge operator metric together --- .../org/apache/iotdb/db/mpp/execution/driver/Driver.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/Driver.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/Driver.java index a214522ca65..67f8ff2c810 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/Driver.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/driver/Driver.java @@ -37,7 +37,9 @@ import org.slf4j.LoggerFactory; import javax.annotation.concurrent.GuardedBy; import java.io.File; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -382,15 +384,20 @@ public abstract class Driver implements IDriver { sink.setNoMoreTsBlocks(); + Map<String, long[]> operatorType2TotalCost = new HashMap<>(); // record operator execution statistics to metrics List<OperatorContext> operatorContexts = driverContext.getOperatorContexts(); for (OperatorContext operatorContext : operatorContexts) { String operatorType = operatorContext.getOperatorType(); - QUERY_METRICS.recordOperatorExecutionCost( - operatorType, operatorContext.getTotalExecutionTimeInNanos()); - QUERY_METRICS.recordOperatorExecutionCount( - operatorType, operatorContext.getNextCalledCount()); + long[] value = operatorType2TotalCost.computeIfAbsent(operatorType, k -> new long[2]); + value[0] += operatorContext.getTotalExecutionTimeInNanos(); + value[1] += operatorContext.getNextCalledCount(); } + for (Map.Entry<String, long[]> entry : operatorType2TotalCost.entrySet()) { + QUERY_METRICS.recordOperatorExecutionCost(entry.getKey(), entry.getValue()[0]); + QUERY_METRICS.recordOperatorExecutionCount(entry.getKey(), entry.getValue()[1]); + } + } catch (InterruptedException t) { // don't record the stack wasInterrupted = true;
