You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by sp...@apache.org on 2023/03/20 01:42:37 UTC

[iotdb] branch rel/1.1 updated: [IOTDB-5697] Only record engine cost for DataRegion in Performance Overview Dashboard (#9366) (#9377)

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

spricoder pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/1.1 by this push:
     new 93682ec187 [IOTDB-5697] Only record engine cost for DataRegion in Performance Overview Dashboard (#9366) (#9377)
93682ec187 is described below

commit 93682ec187ecf76478b9d319d5fc16db5e2795f3
Author: Potato <ta...@apache.org>
AuthorDate: Mon Mar 20 09:42:30 2023 +0800

    [IOTDB-5697] Only record engine cost for DataRegion in Performance Overview Dashboard (#9366) (#9377)
    
    * finish
    
    
    
    * Fix SimpleSonsensus
    
    
    
    * fix code smell
    
    
    
    ---------
    
    Signed-off-by: OneSizeFitQuorum <ta...@apache.org>
---
 .../ratis/ApplicationStateMachineProxy.java        | 23 +++++++++++--------
 .../iotdb/consensus/ratis/RatisConsensus.java      |  4 ++--
 .../org/apache/iotdb/consensus/ratis/Utils.java    |  4 ++--
 .../ratis/metrics/IoTDBMetricRegistry.java         |  2 +-
 .../ratis/metrics/RatisMetricsManager.java         | 21 ++++++++++-------
 .../iotdb/consensus/simple/SimpleConsensus.java    | 26 +++++++++++++---------
 .../statemachine/DataRegionStateMachine.java       |  3 ++-
 7 files changed, 50 insertions(+), 33 deletions(-)

diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
index b256079623..aacb0743be 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/ApplicationStateMachineProxy.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.consensus.ratis;
 
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.service.metric.enums.Metric;
@@ -56,12 +57,13 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 
 public class ApplicationStateMachineProxy extends BaseStateMachine {
+
   private final Logger logger = LoggerFactory.getLogger(ApplicationStateMachineProxy.class);
   private final IStateMachine applicationStateMachine;
   private final IStateMachine.RetryPolicy retryPolicy;
   private final SnapshotStorage snapshotStorage;
   private final RaftGroupId groupId;
-  private final String consensusGroupType;
+  private final TConsensusGroupType consensusGroupType;
 
   public ApplicationStateMachineProxy(IStateMachine stateMachine, RaftGroupId id) {
     applicationStateMachine = stateMachine;
@@ -173,14 +175,17 @@ public class ApplicationStateMachineProxy extends BaseStateMachine {
       }
     } while (shouldRetry);
     if (isLeader) {
-      MetricService.getInstance()
-          .timer(
-              System.nanoTime() - writeToStateMachineStartTime,
-              TimeUnit.NANOSECONDS,
-              Metric.PERFORMANCE_OVERVIEW_STORAGE_DETAIL.toString(),
-              MetricLevel.IMPORTANT,
-              Tag.STAGE.toString(),
-              PerformanceOverviewMetrics.ENGINE);
+      // only record time cost for data region in Performance Overview Dashboard
+      if (consensusGroupType == TConsensusGroupType.DataRegion) {
+        MetricService.getInstance()
+            .timer(
+                System.nanoTime() - writeToStateMachineStartTime,
+                TimeUnit.NANOSECONDS,
+                Metric.PERFORMANCE_OVERVIEW_STORAGE_DETAIL.toString(),
+                MetricLevel.IMPORTANT,
+                Tag.STAGE.toString(),
+                PerformanceOverviewMetrics.ENGINE);
+      }
       // statistic the time of write stateMachine
       RatisMetricsManager.getInstance()
           .recordWriteStateMachineCost(
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
index 38242b56d4..7cac28eb17 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.consensus.ratis;
 
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.client.ClientManager;
@@ -125,8 +126,7 @@ class RatisConsensus implements IConsensus {
   private final ConcurrentHashMap<File, MemorizedFileSizeCalc> calcMap = new ConcurrentHashMap<>();
 
   private final RatisMetricSet ratisMetricSet;
-
-  private String consensusGroupType = null;
+  private TConsensusGroupType consensusGroupType = null;
 
   public RatisConsensus(ConsensusConfig config, IStateMachine.Registry registry)
       throws IOException {
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/Utils.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/Utils.java
index 7d7954a530..639d7e2c15 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/Utils.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/Utils.java
@@ -177,7 +177,7 @@ public class Utils {
     return TermIndex.valueOf(Long.parseLong(items[0]), Long.parseLong(items[1]));
   }
 
-  public static String getConsensusGroupTypeFromPrefix(String prefix) {
+  public static TConsensusGroupType getConsensusGroupTypeFromPrefix(String prefix) {
     TConsensusGroupType consensusGroupType;
     if (prefix.contains(DATA_REGION_GROUP)) {
       consensusGroupType = TConsensusGroupType.DataRegion;
@@ -186,7 +186,7 @@ public class Utils {
     } else {
       consensusGroupType = TConsensusGroupType.ConfigRegion;
     }
-    return consensusGroupType.toString();
+    return consensusGroupType;
   }
 
   public static void initRatisConfig(RaftProperties properties, RatisConfig config) {
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/IoTDBMetricRegistry.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/IoTDBMetricRegistry.java
index 7846c61b89..065809b0ea 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/IoTDBMetricRegistry.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/IoTDBMetricRegistry.java
@@ -94,7 +94,7 @@ public class IoTDBMetricRegistry implements RatisMetricRegistry {
     this.metricService = service;
     prefix =
         MetricRegistry.name(
-            Utils.getConsensusGroupTypeFromPrefix(info.getPrefix()),
+            Utils.getConsensusGroupTypeFromPrefix(info.getPrefix()).toString(),
             info.getApplicationName(),
             info.getMetricsComponentName());
   }
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/RatisMetricsManager.java b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/RatisMetricsManager.java
index b7d11a732f..a519caa1df 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/RatisMetricsManager.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/ratis/metrics/RatisMetricsManager.java
@@ -18,6 +18,7 @@
  */
 package org.apache.iotdb.consensus.ratis.metrics;
 
+import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType;
 import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.service.metric.enums.Metric;
 import org.apache.iotdb.commons.service.metric.enums.Tag;
@@ -27,44 +28,48 @@ import java.util.concurrent.TimeUnit;
 
 public class RatisMetricsManager {
   private final MetricService metricService = MetricService.getInstance();
+
   /** Record the time cost in write locally stage. */
-  public void recordWriteLocallyCost(long costTimeInNanos, String consensusGroupType) {
+  public void recordWriteLocallyCost(long costTimeInNanos, TConsensusGroupType consensusGroupType) {
     metricService.timer(
         costTimeInNanos,
         TimeUnit.NANOSECONDS,
-        consensusGroupType + "_" + Metric.RATIS_CONSENSUS_WRITE,
+        consensusGroupType.toString() + "_" + Metric.RATIS_CONSENSUS_WRITE,
         MetricLevel.IMPORTANT,
         Tag.STAGE.toString(),
         RatisMetricSet.WRITE_LOCALLY);
   }
 
   /** Record the time cost in write remotely stage. */
-  public void recordWriteRemotelyCost(long costTimeInNanos, String consensusGroupType) {
+  public void recordWriteRemotelyCost(
+      long costTimeInNanos, TConsensusGroupType consensusGroupType) {
     metricService.timer(
         costTimeInNanos,
         TimeUnit.NANOSECONDS,
-        consensusGroupType + "_" + Metric.RATIS_CONSENSUS_WRITE,
+        consensusGroupType.toString() + "_" + Metric.RATIS_CONSENSUS_WRITE,
         MetricLevel.IMPORTANT,
         Tag.STAGE.toString(),
         RatisMetricSet.WRITE_REMOTELY);
   }
+
   /** Record the time cost in submit read request stage. */
-  public void recordReadRequestCost(long costTimeInNanos, String consensusGroupType) {
+  public void recordReadRequestCost(long costTimeInNanos, TConsensusGroupType consensusGroupType) {
     metricService.timer(
         costTimeInNanos,
         TimeUnit.NANOSECONDS,
-        consensusGroupType + "_" + Metric.RATIS_CONSENSUS_READ,
+        consensusGroupType.toString() + "_" + Metric.RATIS_CONSENSUS_READ,
         MetricLevel.IMPORTANT,
         Tag.STAGE.toString(),
         RatisMetricSet.SUBMIT_READ_REQUEST);
   }
 
   /** Record the time cost in write state machine stage. */
-  public void recordWriteStateMachineCost(long costTimeInNanos, String consensusGroupType) {
+  public void recordWriteStateMachineCost(
+      long costTimeInNanos, TConsensusGroupType consensusGroupType) {
     metricService.timer(
         costTimeInNanos,
         TimeUnit.NANOSECONDS,
-        consensusGroupType + "_" + Metric.RATIS_CONSENSUS_WRITE,
+        consensusGroupType.toString() + "_" + Metric.RATIS_CONSENSUS_WRITE,
         MetricLevel.IMPORTANT,
         Tag.STAGE.toString(),
         RatisMetricSet.WRITE_STATE_MACHINE);
diff --git a/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java b/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
index e5db5ba9fd..27a1687e90 100644
--- a/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
+++ b/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.consensus.simple;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.consensus.ConsensusGroupId;
+import org.apache.iotdb.commons.consensus.DataRegionId;
 import org.apache.iotdb.commons.service.metric.MetricService;
 import org.apache.iotdb.commons.service.metric.enums.Metric;
 import org.apache.iotdb.commons.service.metric.enums.PerformanceOverviewMetrics;
@@ -127,16 +128,21 @@ class SimpleConsensus implements IConsensus {
       status = new TSStatus(TSStatusCode.SYSTEM_READ_ONLY.getStatusCode());
       status.setMessage("Fail to do non-query operations because system is read-only.");
     } else {
-      long startWriteTime = System.nanoTime();
-      status = impl.write(request);
-      MetricService.getInstance()
-          .timer(
-              System.nanoTime() - startWriteTime,
-              TimeUnit.NANOSECONDS,
-              Metric.PERFORMANCE_OVERVIEW_STORAGE_DETAIL.toString(),
-              MetricLevel.IMPORTANT,
-              Tag.STAGE.toString(),
-              PerformanceOverviewMetrics.ENGINE);
+      if (groupId instanceof DataRegionId) {
+        long startWriteTime = System.nanoTime();
+        status = impl.write(request);
+        // only record time cost for data region in Performance Overview Dashboard
+        MetricService.getInstance()
+            .timer(
+                System.nanoTime() - startWriteTime,
+                TimeUnit.NANOSECONDS,
+                Metric.PERFORMANCE_OVERVIEW_STORAGE_DETAIL.toString(),
+                MetricLevel.IMPORTANT,
+                Tag.STAGE.toString(),
+                PerformanceOverviewMetrics.ENGINE);
+      } else {
+        status = impl.write(request);
+      }
     }
     return ConsensusWriteResponse.newBuilder().setStatus(status).build();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
index 4ce6d3fd9d..41b54c50df 100644
--- a/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
+++ b/server/src/main/java/org/apache/iotdb/db/consensus/statemachine/DataRegionStateMachine.java
@@ -181,7 +181,8 @@ public class DataRegionStateMachine extends BaseStateMachine {
     }
 
     InsertNode result;
-    if (insertNodes.get(0) instanceof InsertTabletNode) { // merge to InsertMultiTabletsNode
+    // merge to InsertMultiTabletsNode
+    if (insertNodes.get(0) instanceof InsertTabletNode) {
       List<Integer> index = new ArrayList<>(size);
       List<InsertTabletNode> insertTabletNodes = new ArrayList<>(size);
       int i = 0;