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

szetszwo 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 5ae810a7d8 HDDS-7855. Add hsync metrics in OM. (#4479)
5ae810a7d8 is described below

commit 5ae810a7d865140c7df7dc65a5674adebbf7a4a3
Author: Tsz-Wo Nicholas Sze <[email protected]>
AuthorDate: Wed Mar 29 07:53:58 2023 +0800

    HDDS-7855. Add hsync metrics in OM. (#4479)
---
 .../java/org/apache/hadoop/ozone/om/OMMetrics.java | 29 ++++++++++++++++++++++
 .../om/request/key/OMKeyCommitRequestWithFSO.java  |  4 ++-
 .../ozone/om/service/OpenKeyCleanupService.java    | 21 ++++++++++++----
 .../om/service/TestOpenKeyCleanupService.java      | 24 +++++++++++++++---
 4 files changed, 69 insertions(+), 9 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMetrics.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMetrics.java
index faeaae6885..a93db3d92e 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMetrics.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OMMetrics.java
@@ -63,6 +63,7 @@ public class OMMetrics implements OmMetadataReaderMetrics {
   private @Metric MutableCounterLong numTrashKeyLists;
   private @Metric MutableCounterLong numVolumeLists;
   private @Metric MutableCounterLong numKeyCommits;
+  private @Metric MutableCounterLong numKeyHSyncs;
   private @Metric MutableCounterLong numBlockAllocations;
   private @Metric MutableCounterLong numGetServiceLists;
   private @Metric MutableCounterLong numBucketS3Lists;
@@ -81,6 +82,8 @@ public class OMMetrics implements OmMetadataReaderMetrics {
   private @Metric MutableCounterLong numOpenKeyDeleteRequests;
   private @Metric MutableCounterLong numOpenKeysSubmittedForDeletion;
   private @Metric MutableCounterLong numOpenKeysDeleted;
+  private @Metric MutableCounterLong numOpenKeysCleaned;
+  private @Metric MutableCounterLong numOpenKeysHSyncCleaned;
 
   private @Metric MutableCounterLong numAddAcl;
   private @Metric MutableCounterLong numSetAcl;
@@ -746,6 +749,11 @@ public class OMMetrics implements OmMetadataReaderMetrics {
     numKeyCommits.incr();
   }
 
+  public void incNumKeyHSyncs() {
+    numKeyOps.incr();
+    numKeyHSyncs.incr();
+  }
+
   public void incNumKeyCommitFails() {
     numKeyCommitFails.incr();
   }
@@ -791,6 +799,14 @@ public class OMMetrics implements OmMetadataReaderMetrics {
     numOpenKeysDeleted.incr();
   }
 
+  public void incNumOpenKeysCleaned(int delta) {
+    numOpenKeysCleaned.incr(delta);
+  }
+
+  public void incNumOpenKeysHSyncCleaned() {
+    numOpenKeysHSyncCleaned.incr();
+  }
+
   public void incNumOpenKeyDeleteRequestFails() {
     numOpenKeyDeleteRequestFails.incr();
   }
@@ -1028,6 +1044,11 @@ public class OMMetrics implements 
OmMetadataReaderMetrics {
     return numKeyCommits.value();
   }
 
+  @VisibleForTesting
+  public long getNumKeyHSyncs() {
+    return numKeyHSyncs.value();
+  }
+
   @VisibleForTesting
   public long getNumKeyCommitFails() {
     return numKeyCommitFails.value();
@@ -1091,6 +1112,14 @@ public class OMMetrics implements 
OmMetadataReaderMetrics {
     return numOpenKeysDeleted.value();
   }
 
+  public long getNumOpenKeysCleaned() {
+    return numOpenKeysCleaned.value();
+  }
+
+  public long getNumOpenKeysHSyncCleaned() {
+    return numOpenKeysHSyncCleaned.value();
+  }
+
   public long getNumOpenKeyDeleteRequestFails() {
     return numOpenKeyDeleteRequestFails.value();
   }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
index 909104f99e..4ca4f71652 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequestWithFSO.java
@@ -97,7 +97,9 @@ public class OMKeyCommitRequestWithFSO extends 
OMKeyCommitRequest {
     Result result;
     boolean isHSync = commitKeyRequest.hasHsync() &&
         commitKeyRequest.getHsync();
-    if (!isHSync) {
+    if (isHSync) {
+      omMetrics.incNumKeyHSyncs();
+    } else {
       omMetrics.incNumKeyCommits();
     }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/OpenKeyCleanupService.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/OpenKeyCleanupService.java
index f4d09875e1..960f49acbc 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/OpenKeyCleanupService.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/OpenKeyCleanupService.java
@@ -35,6 +35,7 @@ import 
org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.CommitKeyRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.DeleteOpenKeysRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OpenKeyBucket;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
 import org.apache.hadoop.util.Time;
@@ -196,7 +197,10 @@ public class OpenKeyCleanupService extends 
BackgroundService {
         // delete non-hsync'ed keys
         final OMRequest omRequest = createDeleteOpenKeysRequest(
             openKeyBuckets.stream());
-        submitRequest(omRequest);
+        final OMResponse response = submitRequest(omRequest);
+        if (response != null && response.getSuccess()) {
+          ozoneManager.getMetrics().incNumOpenKeysCleaned(numOpenKeys);
+        }
       }
 
       final List<CommitKeyRequest.Builder> hsyncKeys
@@ -204,7 +208,12 @@ public class OpenKeyCleanupService extends 
BackgroundService {
       final int numHsyncKeys = hsyncKeys.size();
       if (!hsyncKeys.isEmpty()) {
         // commit hsync'ed keys
-        hsyncKeys.forEach(b -> submitRequest(createCommitKeyRequest(b)));
+        hsyncKeys.forEach(b -> {
+          final OMResponse response = submitRequest(createCommitKeyRequest(b));
+          if (response != null && response.getSuccess()) {
+            ozoneManager.getMetrics().incNumOpenKeysHSyncCleaned();
+          }
+        });
       }
 
       if (LOG.isDebugEnabled()) {
@@ -242,7 +251,7 @@ public class OpenKeyCleanupService extends 
BackgroundService {
       return omRequest;
     }
 
-    private void submitRequest(OMRequest omRequest) {
+    private OMResponse submitRequest(OMRequest omRequest) {
       try {
         if (isRatisEnabled()) {
           OzoneManagerRatisServer server = ozoneManager.getOmRatisServer();
@@ -257,14 +266,16 @@ public class OpenKeyCleanupService extends 
BackgroundService {
               .setType(RaftClientRequest.writeRequestType())
               .build();
 
-          server.submitRequest(omRequest, raftClientRequest);
+          return server.submitRequest(omRequest, raftClientRequest);
         } else {
-          ozoneManager.getOmServerProtocol().submitRequest(null, omRequest);
+          return ozoneManager.getOmServerProtocol().submitRequest(
+              null, omRequest);
         }
       } catch (ServiceException e) {
         LOG.error("Open key " + omRequest.getCmdType()
             + " request failed. Will retry at next run.", e);
       }
+      return null;
     }
   }
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestOpenKeyCleanupService.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestOpenKeyCleanupService.java
index 54939f956b..6140de8910 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestOpenKeyCleanupService.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/service/TestOpenKeyCleanupService.java
@@ -29,6 +29,7 @@ import org.apache.hadoop.hdds.utils.db.DBConfigFromFile;
 import org.apache.hadoop.ozone.om.ExpiredOpenKeys;
 import org.apache.hadoop.ozone.om.KeyManager;
 import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OMMetrics;
 import org.apache.hadoop.ozone.om.OmTestManagers;
 import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -130,6 +131,8 @@ public class TestOpenKeyCleanupService {
   @Timeout(300)
   public void testCleanupExpiredOpenKeys(
       int numDEFKeys, int numFSOKeys, boolean hsync) throws Exception {
+    LOG.info("numDEFKeys={}, numFSOKeys={}, hsync? {}",
+        numDEFKeys, numFSOKeys, hsync);
 
     OpenKeyCleanupService openKeyCleanupService =
         (OpenKeyCleanupService) keyManager.getOpenKeyCleanupService();
@@ -139,15 +142,21 @@ public class TestOpenKeyCleanupService {
     Thread.sleep(SERVICE_INTERVAL.toMillis());
     final long oldkeyCount = openKeyCleanupService.getSubmittedOpenKeyCount();
     final long oldrunCount = openKeyCleanupService.getRunCount();
+    LOG.info("oldkeyCount={}, oldrunCount={}", oldkeyCount, oldrunCount);
+    assertEquals(0, oldkeyCount);
 
+    final OMMetrics metrics = om.getMetrics();
+    assertEquals(0, metrics.getNumKeyHSyncs());
+    assertEquals(0, metrics.getNumOpenKeysCleaned());
+    assertEquals(0, metrics.getNumOpenKeysHSyncCleaned());
     final int keyCount = numDEFKeys + numFSOKeys;
-    createOpenKeys(numDEFKeys, hsync, BucketLayout.DEFAULT);
+    createOpenKeys(numDEFKeys, false, BucketLayout.DEFAULT);
     createOpenKeys(numFSOKeys, hsync, BucketLayout.FILE_SYSTEM_OPTIMIZED);
 
     // wait for open keys to expire
     Thread.sleep(EXPIRE_THRESHOLD.toMillis());
 
-    assertExpiredOpenKeys(numDEFKeys == 0, hsync, BucketLayout.DEFAULT);
+    assertExpiredOpenKeys(numDEFKeys == 0, false, BucketLayout.DEFAULT);
     assertExpiredOpenKeys(numFSOKeys == 0, hsync,
         BucketLayout.FILE_SYSTEM_OPTIMIZED);
 
@@ -164,9 +173,18 @@ public class TestOpenKeyCleanupService {
 
     assertTrue(openKeyCleanupService.getSubmittedOpenKeyCount() >=
         oldkeyCount + keyCount);
-    assertExpiredOpenKeys(true, hsync, BucketLayout.DEFAULT);
+    assertExpiredOpenKeys(true, false, BucketLayout.DEFAULT);
     assertExpiredOpenKeys(true, hsync,
         BucketLayout.FILE_SYSTEM_OPTIMIZED);
+    if (hsync) {
+      assertEquals(numDEFKeys, metrics.getNumOpenKeysCleaned());
+      assertTrue(metrics.getNumOpenKeysHSyncCleaned() >= numFSOKeys);
+      assertEquals(numFSOKeys, metrics.getNumKeyHSyncs());
+    } else {
+      assertEquals(keyCount, metrics.getNumOpenKeysCleaned());
+      assertEquals(0, metrics.getNumOpenKeysHSyncCleaned());
+      assertEquals(0, metrics.getNumKeyHSyncs());
+    }
   }
 
   void assertExpiredOpenKeys(boolean expectedToEmpty, boolean hsync,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to