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 f500c9edd92e..f6366a58a015 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 @@ private OmKeyInfo readKeyInfo(OmKeyArgs args) throws IOException { 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 List listStatus(OmKeyArgs args, boolean recursive, String keyArgs = OzoneFSUtils.addTrailingSlashIfNeeded( metadataManager.getOzoneKey(volumeName, bucketName, keyName)); + TableIterator> iterator; + Table keyTable; metadataManager.getLock().acquireReadLock(BUCKET_LOCK, volumeName, bucketName); - Table keyTable = metadataManager - .getKeyTable(getBucketLayout(metadataManager, volName, buckName)); - try (TableIterator> - 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 List listStatus(OmKeyArgs args, boolean recursive, TreeMap cacheKeyMap, String keyArgs, Table keyTable) throws IOException { TableIterator> iterator; - try { - Iterator, CacheValue>> - 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, CacheValue>> + 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 7558ab85bd4b..cd1ad7483cfe 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 @@ private static class MinHeapIterator implements ClosableIterator { 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 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 215f0e5daec0..e484efb8022f 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 @@ -2387,12 +2387,12 @@ public String getBucketOwner(String volume, String bucket, ACLType type, 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 4e6e79d043fb..abc08db49f68 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 void releaseWriteLock(OMMetadataManager omMetadataManager, 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 41dfa0b5c15e..dd12b1349d06 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 void releaseWriteLock(OMMetadataManager omMetadataManager, 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 void releaseReadLock(OMMetadataManager omMetadataManager, String keyName) { omMetadataManager.getLock() .releaseReadLock(BUCKET_LOCK, volumeName, bucketName); - - return; } }