This is an automated email from the ASF dual-hosted git repository.
nanda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 9e0f9677d4 HDDS-10967. Do Not Depend on Contiguous IDs for Proto Enum
Initialization. (#6775)
9e0f9677d4 is described below
commit 9e0f9677d497ac444bcee029a593c27c3a65f989
Author: XiChen <[email protected]>
AuthorDate: Fri Jun 7 13:37:35 2024 +0800
HDDS-10967. Do Not Depend on Contiguous IDs for Proto Enum Initialization.
(#6775)
---
.../hadoop/hdds/scm/XceiverClientMetrics.java | 58 +++++++++-----------
.../container/common/helpers/ContainerMetrics.java | 61 +++++++++-------------
.../common/transport/server/ratis/CSMMetrics.java | 16 +++---
3 files changed, 59 insertions(+), 76 deletions(-)
diff --git
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientMetrics.java
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientMetrics.java
index c750493675..d6a2faf3bb 100644
---
a/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientMetrics.java
+++
b/hadoop-hdds/client/src/main/java/org/apache/hadoop/hdds/scm/XceiverClientMetrics.java
@@ -33,6 +33,9 @@ import org.apache.hadoop.metrics2.lib.MutableCounterLong;
import org.apache.hadoop.ozone.OzoneConfigKeys;
import org.apache.hadoop.util.PerformanceMetrics;
+import java.util.EnumMap;
+
+
/**
* The client metrics for the Storage Container protocol.
*/
@@ -46,9 +49,9 @@ public class XceiverClientMetrics implements MetricsSource {
private @Metric MutableCounterLong totalOps;
private @Metric MutableCounterLong ecReconstructionTotal;
private @Metric MutableCounterLong ecReconstructionFailsTotal;
- private MutableCounterLong[] pendingOpsArray;
- private MutableCounterLong[] opsArray;
- private PerformanceMetrics[] containerOpsLatency;
+ private EnumMap<ContainerProtos.Type, MutableCounterLong> pendingOpsArray;
+ private EnumMap<ContainerProtos.Type, MutableCounterLong> opsArray;
+ private EnumMap<ContainerProtos.Type, PerformanceMetrics>
containerOpsLatency;
private MetricsRegistry registry;
private OzoneConfiguration conf = new OzoneConfiguration();
private int[] intervals = conf.getInts(OzoneConfigKeys
@@ -59,26 +62,18 @@ public class XceiverClientMetrics implements MetricsSource {
}
public void init() {
- int numEnumEntries = ContainerProtos.Type.values().length;
this.registry = new MetricsRegistry(SOURCE_NAME);
- this.pendingOpsArray = new MutableCounterLong[numEnumEntries];
- this.opsArray = new MutableCounterLong[numEnumEntries];
- this.containerOpsLatency = new PerformanceMetrics[numEnumEntries];
- for (int i = 0; i < numEnumEntries; i++) {
- pendingOpsArray[i] = registry.newCounter(
- "numPending" + ContainerProtos.Type.forNumber(i + 1),
- "number of pending" + ContainerProtos.Type.forNumber(i + 1) + " ops",
- (long) 0);
- opsArray[i] = registry
- .newCounter("opCount" + ContainerProtos.Type.forNumber(i + 1),
- "number of" + ContainerProtos.Type.forNumber(i + 1) + " ops",
- (long) 0);
- containerOpsLatency[i] =
- new PerformanceMetrics(registry,
- ContainerProtos.Type.forNumber(i + 1) + "Latency",
- "latency of " + ContainerProtos.Type.forNumber(i + 1),
- "Ops", "Time", intervals);
+ this.pendingOpsArray = new EnumMap<>(ContainerProtos.Type.class);
+ this.opsArray = new EnumMap<>(ContainerProtos.Type.class);
+ this.containerOpsLatency = new EnumMap<>(ContainerProtos.Type.class);
+ for (ContainerProtos.Type type : ContainerProtos.Type.values()) {
+ pendingOpsArray.put(type, registry.newCounter("numPending" + type,
+ "number of pending" + type + " ops", (long) 0));
+ opsArray.put(type, registry.newCounter("opCount" + type,
+ "number of" + type + " ops", (long) 0));
+ containerOpsLatency.put(type, new PerformanceMetrics(registry,
+ type + "Latency", "latency of " + type, "Ops", "Time", intervals));
}
}
@@ -92,22 +87,22 @@ public class XceiverClientMetrics implements MetricsSource {
public void incrPendingContainerOpsMetrics(ContainerProtos.Type type) {
pendingOps.incr();
totalOps.incr();
- opsArray[type.ordinal()].incr();
- pendingOpsArray[type.ordinal()].incr();
+ opsArray.get(type).incr();
+ pendingOpsArray.get(type).incr();
}
public void decrPendingContainerOpsMetrics(ContainerProtos.Type type) {
pendingOps.incr(-1);
- pendingOpsArray[type.ordinal()].incr(-1);
+ pendingOpsArray.get(type).incr(-1);
}
public void addContainerOpsLatency(ContainerProtos.Type type,
long latencyMillis) {
- containerOpsLatency[type.ordinal()].add(latencyMillis);
+ containerOpsLatency.get(type).add(latencyMillis);
}
public long getPendingContainerOpCountMetrics(ContainerProtos.Type type) {
- return pendingOpsArray[type.ordinal()].value();
+ return pendingOpsArray.get(type).value();
}
public void incECReconstructionTotal() {
@@ -125,7 +120,7 @@ public class XceiverClientMetrics implements MetricsSource {
@VisibleForTesting
public long getContainerOpCountMetrics(ContainerProtos.Type type) {
- return opsArray[type.ordinal()].value();
+ return opsArray.get(type).value();
}
@VisibleForTesting
@@ -147,11 +142,10 @@ public class XceiverClientMetrics implements
MetricsSource {
ecReconstructionTotal.snapshot(recordBuilder, true);
ecReconstructionFailsTotal.snapshot(recordBuilder, true);
- int numEnumEntries = ContainerProtos.Type.values().length;
- for (int i = 0; i < numEnumEntries; i++) {
- pendingOpsArray[i].snapshot(recordBuilder, true);
- opsArray[i].snapshot(recordBuilder, true);
- containerOpsLatency[i].snapshot(recordBuilder, true);
+ for (ContainerProtos.Type type : ContainerProtos.Type.values()) {
+ pendingOpsArray.get(type).snapshot(recordBuilder, b);
+ opsArray.get(type).snapshot(recordBuilder, b);
+ containerOpsLatency.get(type).snapshot(recordBuilder, b);
}
}
}
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/ContainerMetrics.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/ContainerMetrics.java
index 337e4e3e29..4efa935bc8 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/ContainerMetrics.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/ContainerMetrics.java
@@ -31,6 +31,8 @@ import org.apache.hadoop.metrics2.lib.MutableCounterLong;
import org.apache.hadoop.metrics2.lib.MutableQuantiles;
import org.apache.hadoop.metrics2.lib.MutableRate;
+import java.util.EnumMap;
+
/**
*
* This class is for maintaining the various Storage Container
@@ -56,40 +58,35 @@ public class ContainerMetrics {
@Metric private MutableCounterLong bytesReadStateMachine;
- private MutableCounterLong[] numOpsArray;
- private MutableCounterLong[] opsBytesArray;
- private MutableRate[] opsLatency;
- private MutableQuantiles[][] opsLatQuantiles;
+ private final EnumMap<ContainerProtos.Type, MutableCounterLong> numOpsArray;
+ private final EnumMap<ContainerProtos.Type, MutableCounterLong>
opsBytesArray;
+ private final EnumMap<ContainerProtos.Type, MutableRate> opsLatency;
+ private final EnumMap<ContainerProtos.Type, MutableQuantiles[]>
opsLatQuantiles;
private MetricsRegistry registry = null;
public ContainerMetrics(int[] intervals) {
- int numEnumEntries = ContainerProtos.Type.values().length;
final int len = intervals.length;
- this.numOpsArray = new MutableCounterLong[numEnumEntries];
- this.opsBytesArray = new MutableCounterLong[numEnumEntries];
- this.opsLatency = new MutableRate[numEnumEntries];
- this.opsLatQuantiles = new MutableQuantiles[numEnumEntries][len];
+ MutableQuantiles[] latQuantiles = new MutableQuantiles[len];
+ this.numOpsArray = new EnumMap<>(ContainerProtos.Type.class);
+ this.opsBytesArray = new EnumMap<>(ContainerProtos.Type.class);
+ this.opsLatency = new EnumMap<>(ContainerProtos.Type.class);
+ this.opsLatQuantiles = new EnumMap<>(ContainerProtos.Type.class);
this.registry = new MetricsRegistry("StorageContainerMetrics");
- for (int i = 0; i < numEnumEntries; i++) {
- numOpsArray[i] = registry.newCounter(
- "num" + ContainerProtos.Type.forNumber(i + 1),
- "number of " + ContainerProtos.Type.forNumber(i + 1) + " ops",
- (long) 0);
- opsBytesArray[i] = registry.newCounter(
- "bytes" + ContainerProtos.Type.forNumber(i + 1),
- "bytes used by " + ContainerProtos.Type.forNumber(i + 1) + "op",
- (long) 0);
- opsLatency[i] = registry.newRate(
- "latency" + ContainerProtos.Type.forNumber(i + 1),
- ContainerProtos.Type.forNumber(i + 1) + " op");
+
+ for (ContainerProtos.Type type : ContainerProtos.Type.values()) {
+ numOpsArray.put(type, registry.newCounter(
+ "num" + type, "number of " + type + " ops", (long) 0));
+ opsBytesArray.put(type, registry.newCounter(
+ "bytes" + type, "bytes used by " + type + "op", (long) 0));
+ opsLatency.put(type, registry.newRate("latency" + type, type + " op"));
for (int j = 0; j < len; j++) {
int interval = intervals[j];
- String quantileName = ContainerProtos.Type.forNumber(i + 1) + "Nanos"
- + interval + "s";
- opsLatQuantiles[i][j] = registry.newQuantiles(quantileName,
+ String quantileName = type + "Nanos" + interval + "s";
+ latQuantiles[j] = registry.newQuantiles(quantileName,
"latency of Container ops", "ops", "latency", interval);
}
+ opsLatQuantiles.put(type, latQuantiles);
}
}
@@ -110,27 +107,19 @@ public class ContainerMetrics {
public void incContainerOpsMetrics(ContainerProtos.Type type) {
numOps.incr();
- numOpsArray[type.ordinal()].incr();
- }
-
- public long getContainerOpsMetrics(ContainerProtos.Type type) {
- return numOpsArray[type.ordinal()].value();
+ numOpsArray.get(type).incr();
}
public void incContainerOpsLatencies(ContainerProtos.Type type,
long latencyMillis) {
- opsLatency[type.ordinal()].add(latencyMillis);
- for (MutableQuantiles q: opsLatQuantiles[type.ordinal()]) {
+ opsLatency.get(type).add(latencyMillis);
+ for (MutableQuantiles q: opsLatQuantiles.get(type)) {
q.add(latencyMillis);
}
}
public void incContainerBytesStats(ContainerProtos.Type type, long bytes) {
- opsBytesArray[type.ordinal()].incr(bytes);
- }
-
- public long getContainerBytesMetrics(ContainerProtos.Type type) {
- return opsBytesArray[type.ordinal()].value();
+ opsBytesArray.get(type).incr(bytes);
}
public void incContainerDeleteFailedBlockCountNotZero() {
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/CSMMetrics.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/CSMMetrics.java
index 87572768e4..6bd1594618 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/CSMMetrics.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/transport/server/ratis/CSMMetrics.java
@@ -19,6 +19,7 @@ package
org.apache.hadoop.ozone.container.common.transport.server.ratis;
import org.apache.hadoop.hdds.annotation.InterfaceAudience;
import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos;
+import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos.Type;
import org.apache.hadoop.metrics2.MetricsSystem;
import org.apache.hadoop.metrics2.annotation.Metric;
import org.apache.hadoop.metrics2.annotation.Metrics;
@@ -28,6 +29,8 @@ import org.apache.hadoop.metrics2.lib.MutableRate;
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
import org.apache.ratis.protocol.RaftGroupId;
+import java.util.EnumMap;
+
/**
* This class is for maintaining Container State Machine statistics.
*/
@@ -46,7 +49,7 @@ public class CSMMetrics {
private @Metric MutableCounterLong numBytesCommittedCount;
private @Metric MutableRate transactionLatencyMs;
- private MutableRate[] opsLatencyMs;
+ private final EnumMap<Type, MutableRate> opsLatencyMs;
private MetricsRegistry registry = null;
// Failure Metrics
@@ -66,13 +69,10 @@ public class CSMMetrics {
private @Metric MutableRate writeStateMachineDataNs;
public CSMMetrics() {
- int numCmdTypes = ContainerProtos.Type.values().length;
- this.opsLatencyMs = new MutableRate[numCmdTypes];
+ this.opsLatencyMs = new EnumMap<>(ContainerProtos.Type.class);
this.registry = new MetricsRegistry(CSMMetrics.class.getSimpleName());
- for (int i = 0; i < numCmdTypes; i++) {
- opsLatencyMs[i] = registry.newRate(
- ContainerProtos.Type.forNumber(i + 1).toString() + "Ms",
- ContainerProtos.Type.forNumber(i + 1) + " op");
+ for (ContainerProtos.Type type : ContainerProtos.Type.values()) {
+ opsLatencyMs.put(type, registry.newRate(type.toString() + "Ms", type + "
op"));
}
}
@@ -185,7 +185,7 @@ public class CSMMetrics {
public void incPipelineLatencyMs(ContainerProtos.Type type,
long latencyMillis) {
- opsLatencyMs[type.ordinal()].add(latencyMillis);
+ opsLatencyMs.get(type).add(latencyMillis);
transactionLatencyMs.add(latencyMillis);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]