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 6ff310eedd HDDS-7755. Ensure that acquired locks are always released. 
(#4191)
6ff310eedd is described below

commit 6ff310eeddbfbec7c1f6de3251ee92d41b90e12c
Author: Duong Nguyen <[email protected]>
AuthorDate: Fri Jan 20 07:51:51 2023 -0800

    HDDS-7755. Ensure that acquired locks are always released. (#4191)
---
 .../org/apache/hadoop/ozone/om/KeyManagerImpl.java | 64 ++++++++++++----------
 .../hadoop/ozone/om/OzoneListStatusHelper.java     | 49 +++++++++--------
 .../org/apache/hadoop/ozone/om/OzoneManager.java   |  6 +-
 .../ozone/om/lock/OBSKeyPathLockStrategy.java      | 14 ++---
 .../ozone/om/lock/RegularBucketLockStrategy.java   | 20 ++-----
 5 files changed, 71 insertions(+), 82 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
index f500c9edd9..f6366a58a0 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/KeyManagerImpl.java
@@ -352,18 +352,18 @@ public class KeyManagerImpl implements KeyManager {
     String volumeName = args.getVolumeName();
     String bucketName = args.getBucketName();
     String keyName = args.getKeyName();
+    OmKeyInfo value = null;
+
     metadataManager.getLock().acquireReadLock(BUCKET_LOCK, volumeName,
         bucketName);
-
-    BucketLayout bucketLayout =
-        getBucketLayout(metadataManager, args.getVolumeName(),
-            args.getBucketName());
-    keyName = OMClientRequest
-        .validateAndNormalizeKey(enableFileSystemPaths, keyName,
-            bucketLayout);
-
-    OmKeyInfo value = null;
     try {
+      BucketLayout bucketLayout =
+          getBucketLayout(metadataManager, args.getVolumeName(),
+              args.getBucketName());
+      keyName = OMClientRequest
+          .validateAndNormalizeKey(enableFileSystemPaths, keyName,
+              bucketLayout);
+
       if (bucketLayout.isFileSystemOptimized()) {
         value = getOmKeyInfoFSO(volumeName, bucketName, keyName);
       } else {
@@ -1594,16 +1594,27 @@ public class KeyManagerImpl implements KeyManager {
     String keyArgs = OzoneFSUtils.addTrailingSlashIfNeeded(
         metadataManager.getOzoneKey(volumeName, bucketName, keyName));
 
+    TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
iterator;
+    Table<String, OmKeyInfo> keyTable;
     metadataManager.getLock().acquireReadLock(BUCKET_LOCK, volumeName,
         bucketName);
-    Table<String, OmKeyInfo> keyTable = metadataManager
-        .getKeyTable(getBucketLayout(metadataManager, volName, buckName));
-    try (TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>>
-        iterator = getIteratorForKeyInTableCache(recursive, startKey,
-        volumeName, bucketName, cacheKeyMap, keyArgs, keyTable)) {
+    try {
+      keyTable = metadataManager
+          .getKeyTable(getBucketLayout(metadataManager, volName, buckName));
+      iterator = getIteratorForKeyInTableCache(recursive, startKey,
+          volumeName, bucketName, cacheKeyMap, keyArgs, keyTable);
+    } finally {
+      metadataManager.getLock().releaseReadLock(BUCKET_LOCK, volumeName,
+          bucketName);
+    }
+
+    try {
       findKeyInDbWithIterator(recursive, startKey, numEntries, volumeName,
           bucketName, keyName, cacheKeyMap, keyArgs, keyTable, iterator);
+    } finally {
+      iterator.close();
     }
+
     int countEntries;
 
     countEntries = 0;
@@ -1639,21 +1650,16 @@ public class KeyManagerImpl implements KeyManager {
       TreeMap<String, OzoneFileStatus> cacheKeyMap, String keyArgs,
       Table<String, OmKeyInfo> keyTable) throws IOException {
     TableIterator<String, ? extends Table.KeyValue<String, OmKeyInfo>> 
iterator;
-    try {
-      Iterator<Map.Entry<CacheKey<String>, CacheValue<OmKeyInfo>>>
-          cacheIter = keyTable.cacheIterator();
-      String startCacheKey = OZONE_URI_DELIMITER + volumeName +
-          OZONE_URI_DELIMITER + bucketName + OZONE_URI_DELIMITER +
-          ((startKey.equals(OZONE_URI_DELIMITER)) ? "" : startKey);
-
-      // First, find key in TableCache
-      listStatusFindKeyInTableCache(cacheIter, keyArgs, startCacheKey,
-          recursive, cacheKeyMap);
-      iterator = keyTable.iterator();
-    } finally {
-      metadataManager.getLock().releaseReadLock(BUCKET_LOCK, volumeName,
-          bucketName);
-    }
+    Iterator<Map.Entry<CacheKey<String>, CacheValue<OmKeyInfo>>>
+        cacheIter = keyTable.cacheIterator();
+    String startCacheKey = OZONE_URI_DELIMITER + volumeName +
+        OZONE_URI_DELIMITER + bucketName + OZONE_URI_DELIMITER +
+        ((startKey.equals(OZONE_URI_DELIMITER)) ? "" : startKey);
+
+    // First, find key in TableCache
+    listStatusFindKeyInTableCache(cacheIter, keyArgs, startCacheKey,
+        recursive, cacheKeyMap);
+    iterator = keyTable.iterator();
     return iterator;
   }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
index 7558ab85bd..cd1ad7483c 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
@@ -507,30 +507,31 @@ public class OzoneListStatusHelper {
 
       omMetadataManager.getLock().acquireReadLock(BUCKET_LOCK, volumeName,
           bucketName);
-
-      // Initialize all the iterators
-      iterators.add(EntryType.DIR_CACHE.ordinal(),
-          new CacheIter<>(EntryType.DIR_CACHE,
-              omMetadataManager.getDirectoryTable().cacheIterator(),
-              startKey, prefixKey));
-
-      iterators.add(EntryType.FILE_CACHE.ordinal(),
-          new CacheIter<>(EntryType.FILE_CACHE,
-              omMetadataManager.getKeyTable(bucketLayout).cacheIterator(),
-              startKey, prefixKey));
-
-      iterators.add(EntryType.RAW_DIR_DB.ordinal(),
-          new RawIter<>(EntryType.RAW_DIR_DB,
-              omMetadataManager.getDirectoryTable(),
-              prefixKey, startKey));
-
-      iterators.add(EntryType.RAW_FILE_DB.ordinal(),
-          new RawIter<>(EntryType.RAW_FILE_DB,
-              omMetadataManager.getKeyTable(bucketLayout),
-              prefixKey, startKey));
-
-      omMetadataManager.getLock().releaseReadLock(BUCKET_LOCK, volumeName,
-          bucketName);
+      try {
+        // Initialize all the iterators
+        iterators.add(EntryType.DIR_CACHE.ordinal(),
+            new CacheIter<>(EntryType.DIR_CACHE,
+                omMetadataManager.getDirectoryTable().cacheIterator(),
+                startKey, prefixKey));
+
+        iterators.add(EntryType.FILE_CACHE.ordinal(),
+            new CacheIter<>(EntryType.FILE_CACHE,
+                omMetadataManager.getKeyTable(bucketLayout).cacheIterator(),
+                startKey, prefixKey));
+
+        iterators.add(EntryType.RAW_DIR_DB.ordinal(),
+            new RawIter<>(EntryType.RAW_DIR_DB,
+                omMetadataManager.getDirectoryTable(),
+                prefixKey, startKey));
+
+        iterators.add(EntryType.RAW_FILE_DB.ordinal(),
+            new RawIter<>(EntryType.RAW_FILE_DB,
+                omMetadataManager.getKeyTable(bucketLayout),
+                prefixKey, startKey));
+      } finally {
+        omMetadataManager.getLock().releaseReadLock(BUCKET_LOCK, volumeName,
+            bucketName);
+      }
 
       // Insert the element from each of the iterator
       for (Iterator<HeapEntry> iter : iterators) {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index fbcedcf0b4..4890d5e42f 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -2408,12 +2408,12 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
 
   private String getBucketOwner(String volume, String bucket)
       throws OMException {
+    OmBucketInfo bucketInfo = null;
 
-    Boolean lockAcquired = metadataManager.getLock().acquireReadLock(
+    boolean lockAcquired = metadataManager.getLock().acquireReadLock(
             BUCKET_LOCK, volume, bucket);
-    String dbBucketKey = metadataManager.getBucketKey(volume, bucket);
-    OmBucketInfo bucketInfo = null;
     try {
+      String dbBucketKey = metadataManager.getBucketKey(volume, bucket);
       bucketInfo = metadataManager.getBucketTable().get(dbBucketKey);
     } catch (IOException ioe) {
       if (ioe instanceof OMException) {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
index 4e6e79d043..abc08db49f 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/OBSKeyPathLockStrategy.java
@@ -43,12 +43,10 @@ public class OBSKeyPathLockStrategy implements 
OzoneLockStrategy {
   public boolean acquireWriteLock(OMMetadataManager omMetadataManager,
                                   String volumeName, String bucketName,
                                   String keyName) throws IOException {
-    boolean acquiredLock;
-
-    acquiredLock = omMetadataManager.getLock().acquireReadLock(BUCKET_LOCK,
-        volumeName, bucketName);
     OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
 
+    boolean acquiredLock = omMetadataManager.getLock().acquireReadLock(
+        BUCKET_LOCK, volumeName, bucketName);
 
     Preconditions.checkArgument(acquiredLock,
         "BUCKET_LOCK should be acquired!");
@@ -75,20 +73,16 @@ public class OBSKeyPathLockStrategy implements 
OzoneLockStrategy {
 
     omMetadataManager.getLock()
         .releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
-
-    return;
   }
 
   @Override
   public boolean acquireReadLock(OMMetadataManager omMetadataManager,
                                  String volumeName, String bucketName,
                                  String keyName) throws IOException {
-    boolean acquiredLock;
-
-    acquiredLock = omMetadataManager.getLock()
-        .acquireReadLock(BUCKET_LOCK, volumeName, bucketName);
     OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
 
+    boolean acquiredLock = omMetadataManager.getLock().acquireReadLock(
+        BUCKET_LOCK, volumeName, bucketName);
 
     Preconditions.checkArgument(acquiredLock,
         "BUCKET_LOCK should be acquired!");
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
index 41dfa0b5c1..dd12b1349d 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/lock/RegularBucketLockStrategy.java
@@ -34,13 +34,9 @@ public class RegularBucketLockStrategy implements 
OzoneLockStrategy {
   public boolean acquireWriteLock(OMMetadataManager omMetadataManager,
                                   String volumeName, String bucketName,
                                   String keyName) throws IOException {
-    boolean acquiredLock;
-
-    acquiredLock = omMetadataManager.getLock()
-        .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName);
     OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
-
-    return acquiredLock;
+    return omMetadataManager.getLock()
+        .acquireWriteLock(BUCKET_LOCK, volumeName, bucketName);
   }
 
   @Override
@@ -49,21 +45,15 @@ public class RegularBucketLockStrategy implements 
OzoneLockStrategy {
                                String keyName) {
     omMetadataManager.getLock()
         .releaseWriteLock(BUCKET_LOCK, volumeName, bucketName);
-
-    return;
   }
 
   @Override
   public boolean acquireReadLock(OMMetadataManager omMetadataManager,
                                  String volumeName, String bucketName,
                                  String keyName) throws IOException {
-    boolean acquiredLock;
-
-    acquiredLock = omMetadataManager.getLock()
-        .acquireReadLock(BUCKET_LOCK, volumeName, bucketName);
     OMFileRequest.validateBucket(omMetadataManager, volumeName, bucketName);
-
-    return acquiredLock;
+    return omMetadataManager.getLock()
+        .acquireReadLock(BUCKET_LOCK, volumeName, bucketName);
   }
 
   @Override
@@ -72,7 +62,5 @@ public class RegularBucketLockStrategy implements 
OzoneLockStrategy {
                               String keyName) {
     omMetadataManager.getLock()
         .releaseReadLock(BUCKET_LOCK, volumeName, bucketName);
-
-    return;
   }
 }


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

Reply via email to