You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2023/04/18 18:46:54 UTC

[ozone] branch master updated: HDDS-8270. Measure checkAccess latency for Ozone objects (#4467)

This is an automated email from the ASF dual-hosted git repository.

adoroszlai 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 d58d529d8d HDDS-8270. Measure checkAccess latency for Ozone objects (#4467)
d58d529d8d is described below

commit d58d529d8d3374bb5e430965b7da44808dc0aec0
Author: tanvipenumudy <46...@users.noreply.github.com>
AuthorDate: Wed Apr 19 00:16:48 2023 +0530

    HDDS-8270. Measure checkAccess latency for Ozone objects (#4467)
---
 .../src/main/java/org/apache/hadoop/util/MetricUtil.java     | 12 ++++++++++++
 .../org/apache/hadoop/ozone/om/OMPerformanceMetrics.java     |  6 ++++++
 .../java/org/apache/hadoop/ozone/om/OmMetadataReader.java    |  3 ++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/util/MetricUtil.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/util/MetricUtil.java
index 48dfc7a533..029158e066 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/util/MetricUtil.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/util/MetricUtil.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.util;
 import org.apache.hadoop.metrics2.lib.MutableRate;
 
 import java.io.IOException;
+import java.util.function.Consumer;
 
 /**
  * Encloses helpers to deal with metrics.
@@ -49,4 +50,15 @@ public final class MetricUtil {
       metric.add(Time.monotonicNowNanos() - start);
     }
   }
+
+  public static <T, E extends IOException> T captureLatencyNs(
+      Consumer<Long> latencySetter,
+      CheckedSupplier<T, E> block) throws E {
+    long start = Time.monotonicNowNanos();
+    try {
+      return block.get();
+    } finally {
+      latencySetter.accept(Time.monotonicNowNanos() - start);
+    }
+  }
 }
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMPerformanceMetrics.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMPerformanceMetrics.java
index ffeb827c59..a511549dee 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMPerformanceMetrics.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMPerformanceMetrics.java
@@ -83,6 +83,8 @@ public class OMPerformanceMetrics {
   @Metric(about = "Client requests forcing container info cache refresh")
   private MutableRate forceContainerCacheRefresh;
 
+  @Metric(about = "checkAccess latency in nanoseconds")
+  private MutableRate checkAccessLatencyNs;
 
   public void addLookupLatency(long latencyInNs) {
     lookupLatencyNs.add(latencyInNs);
@@ -140,4 +142,8 @@ public class OMPerformanceMetrics {
   public void setForceContainerCacheRefresh(boolean value) {
     forceContainerCacheRefresh.add(value ? 1L : 0L);
   }
+
+  public void setCheckAccessLatencyNs(long latencyInNs) {
+    checkAccessLatencyNs.add(latencyInNs);
+  }
 }
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataReader.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataReader.java
index 3b59f6e46f..0d25596f9a 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataReader.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataReader.java
@@ -485,7 +485,8 @@ public class OmMetadataReader implements IOmMetadataReader, Auditor {
   public boolean checkAcls(OzoneObj obj, RequestContext context,
       boolean throwIfPermissionDenied) throws OMException {
 
-    if (!accessAuthorizer.checkAccess(obj, context)) {
+    if (!captureLatencyNs(perfMetrics::setCheckAccessLatencyNs,
+        () -> accessAuthorizer.checkAccess(obj, context))) {
       if (throwIfPermissionDenied) {
         String volumeName = obj.getVolumeName() != null ?
                 "Volume:" + obj.getVolumeName() + " " : "";


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org