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]