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]

Reply via email to