This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch performace_overview_dashboard_cp in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 11987e962c60764cfe10582df07b8119e538684c Author: Potato <[email protected]> AuthorDate: Sat Mar 18 18:08:47 2023 +0800 [IOTDB-5697] Only record engine cost for DataRegion in Performance Overview Dashboard (#9366) * finish Signed-off-by: OneSizeFitQuorum <[email protected]> * Fix SimpleSonsensus Signed-off-by: OneSizeFitQuorum <[email protected]> * fix code smell Signed-off-by: OneSizeFitQuorum <[email protected]> --------- Signed-off-by: OneSizeFitQuorum <[email protected]> --- .../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;
