This is an automated email from the ASF dual-hosted git repository.
ritesh 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 949d0ea3e0 HDDS-9070. Expose Netty memory used metrics (#5117)
949d0ea3e0 is described below
commit 949d0ea3e0c7c51bd7ae2aef577396b1c8adf25a
Author: Duong Nguyen <[email protected]>
AuthorDate: Wed Jul 26 12:07:15 2023 -0700
HDDS-9070. Expose Netty memory used metrics (#5117)
---
.../common/statemachine/DatanodeStateMachine.java | 7 ++
.../org/apache/hadoop/hdds/utils/NettyMetrics.java | 74 ++++++++++++++++++++++
2 files changed, 81 insertions(+)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
index c988b21867..a3724e0c47 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/statemachine/DatanodeStateMachine.java
@@ -42,6 +42,7 @@ import
org.apache.hadoop.hdds.security.symmetric.SecretKeyClient;
import
org.apache.hadoop.hdds.security.x509.certificate.client.CertificateClient;
import org.apache.hadoop.hdds.upgrade.HDDSLayoutVersionManager;
import org.apache.hadoop.hdds.utils.IOUtils;
+import org.apache.hadoop.hdds.utils.NettyMetrics;
import org.apache.hadoop.ozone.HddsDatanodeStopService;
import org.apache.hadoop.ozone.container.common.DatanodeLayoutStorage;
import org.apache.hadoop.ozone.container.common.report.ReportManager;
@@ -121,6 +122,7 @@ public class DatanodeStateMachine implements Closeable {
private final MeasuredReplicator pullReplicatorWithMetrics;
private final MeasuredReplicator pushReplicatorWithMetrics;
private final ReplicationSupervisorMetrics replicationSupervisorMetrics;
+ private final NettyMetrics nettyMetrics;
private final ECReconstructionMetrics ecReconstructionMetrics;
// This is an instance variable as mockito needs to access it in a test
@SuppressWarnings("FieldCanBeLocal")
@@ -256,6 +258,7 @@ public class DatanodeStateMachine implements Closeable {
.build();
queueMetrics = DatanodeQueueMetrics.create(this);
+ nettyMetrics = NettyMetrics.create();
}
@VisibleForTesting
@@ -434,6 +437,10 @@ public class DatanodeStateMachine implements Closeable {
if (queueMetrics != null) {
DatanodeQueueMetrics.unRegister();
}
+
+ if (nettyMetrics != null) {
+ nettyMetrics.unregister();
+ }
}
private void executorServiceShutdownGraceful(ExecutorService executor) {
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/NettyMetrics.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/NettyMetrics.java
new file mode 100644
index 0000000000..10fba45631
--- /dev/null
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/NettyMetrics.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hdds.utils;
+
+import org.apache.hadoop.metrics2.MetricsCollector;
+import org.apache.hadoop.metrics2.MetricsInfo;
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
+import org.apache.hadoop.metrics2.MetricsSource;
+import org.apache.hadoop.metrics2.MetricsSystem;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
+
+import static
org.apache.ratis.thirdparty.io.netty.util.internal.PlatformDependent.maxDirectMemory;
+import static
org.apache.ratis.thirdparty.io.netty.util.internal.PlatformDependent.usedDirectMemory;
+
+/**
+ * This class emits Netty metrics.
+ */
+public final class NettyMetrics implements MetricsSource {
+ private enum MetricsInfos implements MetricsInfo {
+ USED_DIRECT_MEM("Used direct memory."),
+ MAX_DIRECT_MEM("Max direct memory.");
+
+ private final String desc;
+
+ MetricsInfos(String desc) {
+ this.desc = desc;
+ }
+
+ @Override
+ public String description() {
+ return desc;
+ }
+ }
+
+ public static final String SOURCE_NAME =
+ NettyMetrics.class.getSimpleName();
+
+
+ public static NettyMetrics create() {
+ MetricsSystem ms = DefaultMetricsSystem.instance();
+ NettyMetrics metrics = new NettyMetrics();
+ return ms.register(SOURCE_NAME, "Netty metrics", metrics);
+ }
+
+
+ @Override
+ public void getMetrics(MetricsCollector collector, boolean all) {
+ MetricsRecordBuilder recordBuilder = collector.addRecord(SOURCE_NAME)
+ .setContext("Netty metrics");
+ recordBuilder
+ .addGauge(MetricsInfos.USED_DIRECT_MEM, usedDirectMemory())
+ .addGauge(MetricsInfos.MAX_DIRECT_MEM, maxDirectMemory());
+ }
+
+ public void unregister() {
+ MetricsSystem ms = DefaultMetricsSystem.instance();
+ ms.unregisterSource(SOURCE_NAME);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]