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

weichiu 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 2ae1f655d13 HDDS-13722. Refactor duplicate code in 
OMDirectoriesPurgeRequestWithFSO (#9102)
2ae1f655d13 is described below

commit 2ae1f655d13e77c957019eeb99868f3b86b970bb
Author: Eric Chang <[email protected]>
AuthorDate: Wed Oct 8 01:02:00 2025 +0800

    HDDS-13722. Refactor duplicate code in OMDirectoriesPurgeRequestWithFSO 
(#9102)
---
 .../key/OMDirectoriesPurgeRequestWithFSO.java      | 92 ++++++++++++++--------
 1 file changed, 57 insertions(+), 35 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMDirectoriesPurgeRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMDirectoriesPurgeRequestWithFSO.java
index e30a66aa124..fb0af869884 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMDirectoriesPurgeRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMDirectoriesPurgeRequestWithFSO.java
@@ -85,7 +85,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager 
ozoneManager, Execut
         purgeDirsRequest.getSnapshotTableKey() : null;
 
     List<OzoneManagerProtocolProtos.PurgePathRequest> purgeRequests =
-            purgeDirsRequest.getDeletedPathList();
+        purgeDirsRequest.getDeletedPathList();
     Map<Pair<String, String>, OmBucketInfo> volBucketInfoMap = new HashMap<>();
     OmMetadataManagerImpl omMetadataManager = (OmMetadataManagerImpl) 
ozoneManager.getMetadataManager();
     Map<String, OmKeyInfo> openKeyInfoMap = new HashMap<>();
@@ -133,56 +133,38 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
       for (OzoneManagerProtocolProtos.PurgePathRequest path : purgeRequests) {
         for (OzoneManagerProtocolProtos.KeyInfo key :
             path.getMarkDeletedSubDirsList()) {
-          OmKeyInfo keyInfo = OmKeyInfo.getFromProtobuf(key);
-          
-          String pathKey = 
omMetadataManager.getOzonePathKey(path.getVolumeId(),
-              path.getBucketId(), keyInfo.getParentObjectID(), 
keyInfo.getFileName());
-          String deleteKey = omMetadataManager.getOzoneDeletePathKey(
-              keyInfo.getObjectID(), pathKey);
-          
-          subDirNames.add(deleteKey);
-
-          String volumeName = keyInfo.getVolumeName();
-          String bucketName = keyInfo.getBucketName();
-          Pair<String, String> volBucketPair = Pair.of(volumeName, bucketName);
+          ProcessedKeyInfo processed = processDeleteKey(key, path, 
omMetadataManager);
+          subDirNames.add(processed.deleteKey);
 
           omMetrics.decNumKeys();
           OmBucketInfo omBucketInfo = getBucketInfo(omMetadataManager,
-              volumeName, bucketName);
+              processed.volumeName, processed.bucketName);
           // bucketInfo can be null in case of delete volume or bucket
           // or key does not belong to bucket as bucket is recreated
           if (null != omBucketInfo
               && omBucketInfo.getObjectID() == path.getBucketId()) {
             omBucketInfo.incrUsedNamespace(-1L);
             String ozoneDbKey = 
omMetadataManager.getOzonePathKey(path.getVolumeId(),
-                path.getBucketId(), keyInfo.getParentObjectID(), 
keyInfo.getFileName());
+                path.getBucketId(), processed.keyInfo.getParentObjectID(),
+                processed.keyInfo.getFileName());
             omMetadataManager.getDirectoryTable().addCacheEntry(new 
CacheKey<>(ozoneDbKey),
                 CacheValue.get(context.getIndex()));
-            volBucketInfoMap.putIfAbsent(volBucketPair, omBucketInfo);
+            volBucketInfoMap.putIfAbsent(processed.volBucketPair, 
omBucketInfo);
           }
         }
 
         for (OzoneManagerProtocolProtos.KeyInfo key :
             path.getDeletedSubFilesList()) {
-          OmKeyInfo keyInfo = OmKeyInfo.getFromProtobuf(key);
-
-          String pathKey = 
omMetadataManager.getOzonePathKey(path.getVolumeId(),
-              path.getBucketId(), keyInfo.getParentObjectID(), 
keyInfo.getFileName());
-          String deleteKey = omMetadataManager.getOzoneDeletePathKey(
-              keyInfo.getObjectID(), pathKey);
-          subFileNames.add(deleteKey);
-
-          String volumeName = keyInfo.getVolumeName();
-          String bucketName = keyInfo.getBucketName();
-          Pair<String, String> volBucketPair = Pair.of(volumeName, bucketName);
+          ProcessedKeyInfo processed = processDeleteKey(key, path, 
omMetadataManager);
+          subFileNames.add(processed.deleteKey);
 
           // If omKeyInfo has hsync metadata, delete its corresponding open 
key as well
           String dbOpenKey;
-          String hsyncClientId = 
keyInfo.getMetadata().get(OzoneConsts.HSYNC_CLIENT_ID);
+          String hsyncClientId = 
processed.keyInfo.getMetadata().get(OzoneConsts.HSYNC_CLIENT_ID);
           if (hsyncClientId != null) {
-            long parentId = keyInfo.getParentObjectID();
+            long parentId = processed.keyInfo.getParentObjectID();
             dbOpenKey = omMetadataManager.getOpenFileName(path.getVolumeId(), 
path.getBucketId(),
-                parentId, keyInfo.getFileName(), hsyncClientId);
+                parentId, processed.keyInfo.getFileName(), hsyncClientId);
             OmKeyInfo openKeyInfo = 
omMetadataManager.getOpenKeyTable(getBucketLayout()).get(dbOpenKey);
             if (openKeyInfo != null) {
               openKeyInfo.getMetadata().put(DELETED_HSYNC_KEY, "true");
@@ -193,18 +175,19 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
           omMetrics.decNumKeys();
           numSubFilesMoved++;
           OmBucketInfo omBucketInfo = getBucketInfo(omMetadataManager,
-              volumeName, bucketName);
+              processed.volumeName, processed.bucketName);
           // bucketInfo can be null in case of delete volume or bucket
           // or key does not belong to bucket as bucket is recreated
           if (null != omBucketInfo
               && omBucketInfo.getObjectID() == path.getBucketId()) {
-            omBucketInfo.incrUsedBytes(-sumBlockLengths(keyInfo));
+            omBucketInfo.incrUsedBytes(-sumBlockLengths(processed.keyInfo));
             omBucketInfo.incrUsedNamespace(-1L);
             String ozoneDbKey = 
omMetadataManager.getOzonePathKey(path.getVolumeId(),
-                path.getBucketId(), keyInfo.getParentObjectID(), 
keyInfo.getFileName());
+                path.getBucketId(), processed.keyInfo.getParentObjectID(),
+                processed.keyInfo.getFileName());
             omMetadataManager.getFileTable().addCacheEntry(new 
CacheKey<>(ozoneDbKey),
                 CacheValue.get(context.getIndex()));
-            volBucketInfoMap.putIfAbsent(volBucketPair, omBucketInfo);
+            volBucketInfoMap.putIfAbsent(processed.volBucketPair, 
omBucketInfo);
           }
         }
         if (path.hasDeletedDir()) {
@@ -212,7 +195,7 @@ public OMClientResponse validateAndUpdateCache(OzoneManager 
ozoneManager, Execut
           numDirsDeleted++;
         }
       }
-      
+
       // Remove deletedDirNames from subDirNames to avoid duplication
       subDirNames.removeAll(deletedDirNames);
       numSubDirMoved = subDirNames.size();
@@ -254,6 +237,45 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
         getBucketLayout(), volBucketInfoMap, fromSnapshotInfo, openKeyInfoMap);
   }
 
+  /**
+   * Helper class to hold processed key information.
+   */
+  private static class ProcessedKeyInfo {
+    private final OmKeyInfo keyInfo;
+    private final String deleteKey;
+    private final String volumeName;
+    private final String bucketName;
+    private final Pair<String, String> volBucketPair;
+
+    ProcessedKeyInfo(OmKeyInfo keyInfo, String deleteKey, String volumeName, 
String bucketName) {
+      this.keyInfo = keyInfo;
+      this.deleteKey = deleteKey;
+      this.volumeName = volumeName;
+      this.bucketName = bucketName;
+      this.volBucketPair = Pair.of(volumeName, bucketName);
+    }
+  }
+
+  /**
+   * Process delete key info.
+   * Returns ProcessedKeyInfo containing all the processed information.
+   */
+  private ProcessedKeyInfo processDeleteKey(OzoneManagerProtocolProtos.KeyInfo 
key,
+                                            
OzoneManagerProtocolProtos.PurgePathRequest path,
+                                            OmMetadataManagerImpl 
omMetadataManager) {
+    OmKeyInfo keyInfo = OmKeyInfo.getFromProtobuf(key);
+
+    String pathKey = omMetadataManager.getOzonePathKey(path.getVolumeId(),
+        path.getBucketId(), keyInfo.getParentObjectID(), 
keyInfo.getFileName());
+    String deleteKey = omMetadataManager.getOzoneDeletePathKey(
+        keyInfo.getObjectID(), pathKey);
+
+    String volumeName = keyInfo.getVolumeName();
+    String bucketName = keyInfo.getBucketName();
+
+    return new ProcessedKeyInfo(keyInfo, deleteKey, volumeName, bucketName);
+  }
+
   private List<String[]> getBucketLockKeySet(PurgeDirectoriesRequest 
purgeDirsRequest) {
     if (!purgeDirsRequest.getBucketNameInfosList().isEmpty()) {
       return purgeDirsRequest.getBucketNameInfosList().stream()


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

Reply via email to