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;