This is an automated email from the ASF dual-hosted git repository.
rakeshr 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 8532e08 HDDS-6078. Move BucketManagerImpl#resolveLinkBucketLayout
into utilit… (#2902)
8532e08 is described below
commit 8532e081d38b90aed8b7efaa53bf6f8c30fdfcbd
Author: Jyotinder Singh <[email protected]>
AuthorDate: Fri Dec 10 10:47:42 2021 +0530
HDDS-6078. Move BucketManagerImpl#resolveLinkBucketLayout into utilit…
(#2902)
---
.../apache/hadoop/ozone/om/BucketManagerImpl.java | 57 +---------------------
.../apache/hadoop/ozone/om/OzoneManagerUtils.java | 55 +++++++++++++++++++++
.../apache/hadoop/ozone/debug/PrefixParser.java | 12 +++--
3 files changed, 64 insertions(+), 60 deletions(-)
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
index dcbb158..058adf3 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/BucketManagerImpl.java
@@ -20,9 +20,7 @@ import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
-import org.apache.commons.lang3.tuple.Pair;
import org.apache.hadoop.crypto.CipherSuite;
import org.apache.hadoop.crypto.CryptoProtocolVersion;
import org.apache.hadoop.crypto.key.KeyProvider;
@@ -48,7 +46,6 @@ import org.slf4j.LoggerFactory;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.BUCKET_NOT_FOUND;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.INTERNAL_ERROR;
-import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.DETECTED_LOOP_IN_BUCKET_LINKS;
import static
org.apache.hadoop.ozone.om.exceptions.OMException.ResultCodes.VOLUME_NOT_FOUND;
import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
import static
org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.VOLUME_LOCK;
@@ -273,7 +270,8 @@ public class BucketManagerImpl implements BucketManager {
}
}
- value = resolveLinkBucketLayout(value, new HashSet<>());
+ value = OzoneManagerUtils.resolveLinkBucketLayout(value, metadataManager,
+ new HashSet<>());
return value;
} catch (IOException ex) {
@@ -289,57 +287,6 @@ public class BucketManagerImpl implements BucketManager {
}
/**
- * Get the source bucket layout for a link bucket.
- *
- * @param bucketInfo
- * @return {@code OmBucketInfo} with
- * @throws IOException
- */
- public OmBucketInfo resolveLinkBucketLayout(OmBucketInfo bucketInfo,
- Set<Pair<String,
- String>> visited)
- throws IOException {
-
- if (bucketInfo.isLink()) {
- if (!visited.add(Pair.of(bucketInfo.getVolumeName(),
- bucketInfo.getBucketName()))) {
- throw new OMException("Detected loop in bucket links. Bucket name: " +
- bucketInfo.getBucketName() + ", Volume name: " +
- bucketInfo.getVolumeName(),
- DETECTED_LOOP_IN_BUCKET_LINKS);
- }
- String sourceBucketKey = metadataManager
- .getBucketKey(bucketInfo.getSourceVolume(),
- bucketInfo.getSourceBucket());
- OmBucketInfo sourceBucketInfo =
- metadataManager.getBucketTable().get(sourceBucketKey);
-
- // If the Link Bucket's source bucket exists, we get its layout.
- if (sourceBucketInfo != null) {
-
- /** If the source bucket is again a link, we recursively resolve the
- * link bucket.
- *
- * For example:
- * buck-link1 -> buck-link2 -> buck-link3 -> buck-src
- * buck-src has the actual BucketLayout that will be used by the links.
- *
- * Finally - we return buck-link1's OmBucketInfo, with buck-src's
- * bucket layout.
- */
- if (sourceBucketInfo.isLink()) {
- sourceBucketInfo = resolveLinkBucketLayout(sourceBucketInfo,
visited);
- }
-
- OmBucketInfo.Builder buckInfoBuilder = bucketInfo.toBuilder();
- buckInfoBuilder.setBucketLayout(sourceBucketInfo.getBucketLayout());
- bucketInfo = buckInfoBuilder.build();
- }
- }
- return bucketInfo;
- }
-
- /**
* Sets bucket property from args.
*
* @param args - BucketArgs.
diff --git
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerUtils.java
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerUtils.java
index 8752c03..4eae6df 100644
---
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerUtils.java
+++
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManagerUtils.java
@@ -122,4 +122,59 @@ public final class OzoneManagerUtils {
}
return BucketLayout.DEFAULT;
}
+
+ /**
+ * Resolve bucket layout for a given link bucket's OmBucketInfo.
+ *
+ * @param bucketInfo
+ * @return {@code OmBucketInfo} with
+ * @throws IOException
+ */
+ public static OmBucketInfo resolveLinkBucketLayout(OmBucketInfo bucketInfo,
+ OMMetadataManager
+ metadataManager,
+ Set<Pair<String,
+ String>> visited)
+ throws IOException {
+
+ if (bucketInfo.isLink()) {
+ if (!visited.add(Pair.of(bucketInfo.getVolumeName(),
+ bucketInfo.getBucketName()))) {
+ throw new OMException("Detected loop in bucket links. Bucket name: " +
+ bucketInfo.getBucketName() + ", Volume name: " +
+ bucketInfo.getVolumeName(),
+ DETECTED_LOOP_IN_BUCKET_LINKS);
+ }
+ String sourceBucketKey = metadataManager
+ .getBucketKey(bucketInfo.getSourceVolume(),
+ bucketInfo.getSourceBucket());
+ OmBucketInfo sourceBucketInfo =
+ metadataManager.getBucketTable().get(sourceBucketKey);
+
+ // If the Link Bucket's source bucket exists, we get its layout.
+ if (sourceBucketInfo != null) {
+
+ /** If the source bucket is again a link, we recursively resolve the
+ * link bucket.
+ *
+ * For example:
+ * buck-link1 -> buck-link2 -> buck-link3 -> buck-src
+ * buck-src has the actual BucketLayout that will be used by the links.
+ *
+ * Finally - we return buck-link1's OmBucketInfo, with buck-src's
+ * bucket layout.
+ */
+ if (sourceBucketInfo.isLink()) {
+ sourceBucketInfo =
+ resolveLinkBucketLayout(sourceBucketInfo, metadataManager,
+ visited);
+ }
+
+ OmBucketInfo.Builder buckInfoBuilder = bucketInfo.toBuilder();
+ buckInfoBuilder.setBucketLayout(sourceBucketInfo.getBucketLayout());
+ bucketInfo = buckInfoBuilder.build();
+ }
+ }
+ return bucketInfo;
+ }
}
diff --git
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java
index ed8d0e8..cabddf9 100644
---
a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java
+++
b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/debug/PrefixParser.java
@@ -35,8 +35,11 @@ import org.apache.hadoop.hdds.utils.db.Table;
import org.apache.hadoop.hdds.utils.db.Table.KeyValue;
import org.apache.hadoop.ozone.om.OMConfigKeys;
import org.apache.hadoop.ozone.om.OmMetadataManagerImpl;
-import org.apache.hadoop.ozone.om.BucketManagerImpl;
-import org.apache.hadoop.ozone.om.helpers.*;
+import org.apache.hadoop.ozone.om.OzoneManagerUtils;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
+import org.apache.hadoop.ozone.om.helpers.WithParentObjectId;
+import org.apache.hadoop.ozone.om.helpers.OmDirectoryInfo;
import org.kohsuke.MetaInfServices;
import picocli.CommandLine;
import picocli.CommandLine.Model.CommandSpec;
@@ -151,9 +154,8 @@ public class PrefixParser implements Callable<Void>,
SubcommandWithParent {
}
BucketLayout bucketLayout =
- new BucketManagerImpl(metadataManager)
- .resolveLinkBucketLayout(info, new HashSet<>())
- .getBucketLayout();
+ OzoneManagerUtils.resolveLinkBucketLayout(info, metadataManager,
+ new HashSet<>()).getBucketLayout();
if (!bucketLayout.isFileSystemOptimized()) {
System.out.println("Prefix tool only works for FileSystem Optimized" +
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]