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]