You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ra...@apache.org on 2022/04/06 14:46:46 UTC
[ozone] branch master updated: HDDS-6523. Refine OMClientRequest Classes to handle bucket layout better. (#3265)
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 15a09aa127 HDDS-6523. Refine OMClientRequest Classes to handle bucket layout better. (#3265)
15a09aa127 is described below
commit 15a09aa12725660713f612d951bb43020be4649e
Author: Jyotinder Singh <jy...@gmail.com>
AuthorDate: Wed Apr 6 20:16:38 2022 +0530
HDDS-6523. Refine OMClientRequest Classes to handle bucket layout better. (#3265)
---
.../apache/hadoop/ozone/om/OzoneManagerUtils.java | 2 +-
.../om/ratis/utils/OzoneManagerRatisUtils.java | 77 ++++-
.../BucketLayoutAwareOMKeyRequestFactory.java | 315 +++++++++++++++++++++
.../ozone/om/request/OMClientRequestUtils.java | 50 ++++
.../ozone/om/request/OMKeyRequestFactory.java | 141 ---------
.../om/request/file/OMDirectoryCreateRequest.java | 15 -
.../ozone/om/request/file/OMFileCreateRequest.java | 14 -
.../om/request/key/OMAllocateBlockRequest.java | 14 -
.../ozone/om/request/key/OMKeyCommitRequest.java | 14 -
.../ozone/om/request/key/OMKeyCreateRequest.java | 14 -
.../ozone/om/request/key/OMKeyDeleteRequest.java | 15 -
.../ozone/om/request/key/OMKeyRenameRequest.java | 15 -
.../hadoop/ozone/om/request/key/OMKeyRequest.java | 7 +
.../ozone/om/request/key/OMKeysDeleteRequest.java | 19 +-
.../ozone/om/request/key/OMKeysRenameRequest.java | 5 +-
.../S3InitiateMultipartUploadRequest.java | 15 -
.../multipart/S3MultipartUploadAbortRequest.java | 15 -
.../S3MultipartUploadCommitPartRequest.java | 15 -
.../S3MultipartUploadCompleteRequest.java | 15 -
.../request/TestBucketLayoutAwareOMKeyFactory.java | 166 +++++++++++
.../file/TestOMDirectoryCreateRequestWithFSO.java | 16 +-
.../om/request/file/TestOMFileCreateRequest.java | 4 +-
.../file/TestOMFileCreateRequestWithFSO.java | 2 +-
.../om/request/key/TestOMKeyCreateRequest.java | 7 +-
.../om/request/key/TestOMKeysDeleteRequest.java | 5 +-
.../key/TestOMKeysDeleteRequestWithFSO.java | 11 +-
.../om/request/key/TestOMKeysRenameRequest.java | 4 +-
.../TestS3InitiateMultipartUploadRequest.java | 2 +-
...estS3InitiateMultipartUploadRequestWithFSO.java | 2 +-
.../TestS3MultipartUploadAbortRequest.java | 4 +-
.../TestS3MultipartUploadAbortRequestWithFSO.java | 5 +
.../TestS3MultipartUploadCommitPartRequest.java | 6 +-
.../TestS3MultipartUploadCompleteRequest.java | 10 +-
...estS3MultipartUploadCompleteRequestWithFSO.java | 7 +-
34 files changed, 663 insertions(+), 365 deletions(-)
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 43fc316d97..b86249dd61 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
@@ -54,7 +54,7 @@ public final class OzoneManagerUtils {
* OzoneManagerStateMachine#runCommand ->
* OzoneManagerRequestHandler#handleWriteRequest ->
* OzoneManagerRatisUtils#createClientRequest ->
- * OMKeyRequestFactory#createRequest ->
+ * BucketLayoutAwareOMKeyRequestFactory#createRequest ->
* ...
* OzoneManagerUtils#getBucketLayout ->
* OzoneManagerUtils#getOmBucketInfo ->
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
index 47c2eb83ea..0f4778f8b5 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java
@@ -36,7 +36,7 @@ import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.exceptions.OMLeaderNotReadyException;
import org.apache.hadoop.ozone.om.exceptions.OMNotLeaderException;
import org.apache.hadoop.ozone.om.ratis.OzoneManagerRatisServer.RaftServerStatus;
-import org.apache.hadoop.ozone.om.request.OMKeyRequestFactory;
+import org.apache.hadoop.ozone.om.request.BucketLayoutAwareOMKeyRequestFactory;
import org.apache.hadoop.ozone.om.request.bucket.OMBucketCreateRequest;
import org.apache.hadoop.ozone.om.request.bucket.OMBucketDeleteRequest;
import org.apache.hadoop.ozone.om.request.bucket.OMBucketSetOwnerRequest;
@@ -45,6 +45,8 @@ import org.apache.hadoop.ozone.om.request.OMClientRequest;
import org.apache.hadoop.ozone.om.request.bucket.acl.OMBucketAddAclRequest;
import org.apache.hadoop.ozone.om.request.bucket.acl.OMBucketRemoveAclRequest;
import org.apache.hadoop.ozone.om.request.bucket.acl.OMBucketSetAclRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeyPurgeRequest;
+import org.apache.hadoop.ozone.om.request.key.OMPathsPurgeRequestWithFSO;
import org.apache.hadoop.ozone.om.request.key.OMTrashRecoverRequest;
import org.apache.hadoop.ozone.om.request.key.acl.OMKeyAddAclRequest;
import org.apache.hadoop.ozone.om.request.key.acl.OMKeyAddAclRequestWithFSO;
@@ -118,6 +120,9 @@ public final class OzoneManagerRatisUtils {
Type cmdType = omRequest.getCmdType();
OzoneManagerProtocolProtos.KeyArgs keyArgs;
BucketLayout bucketLayout = BucketLayout.DEFAULT;
+ String volumeName = "";
+ String bucketName = "";
+
switch (cmdType) {
case CreateVolume:
return new OMVolumeCreateRequest(omRequest);
@@ -171,30 +176,90 @@ public final class OzoneManagerRatisUtils {
return new OMCancelPrepareRequest(omRequest);
case RevokeS3Secret:
return new S3RevokeSecretRequest(omRequest);
+ case PurgeKeys:
+ return new OMKeyPurgeRequest(omRequest);
+ case PurgePaths:
+ return new OMPathsPurgeRequestWithFSO(omRequest);
- /**
- * Following key requests will be created in {@link OMKeyRequestFactory}.
+ /*
+ * Key requests that can have multiple variants based on the bucket layout
+ * should be created using {@link BucketLayoutAwareOMKeyRequestFactory}.
*/
case CreateDirectory:
+ keyArgs = omRequest.getCreateDirectoryRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case CreateFile:
+ keyArgs = omRequest.getCreateFileRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case CreateKey:
+ keyArgs = omRequest.getCreateKeyRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case AllocateBlock:
+ keyArgs = omRequest.getAllocateBlockRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case CommitKey:
+ keyArgs = omRequest.getCommitKeyRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case DeleteKey:
+ keyArgs = omRequest.getDeleteKeyRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case DeleteKeys:
+ OzoneManagerProtocolProtos.DeleteKeyArgs deleteKeyArgs =
+ omRequest.getDeleteKeysRequest()
+ .getDeleteKeys();
+ volumeName = deleteKeyArgs.getVolumeName();
+ bucketName = deleteKeyArgs.getBucketName();
+ break;
case RenameKey:
+ keyArgs = omRequest.getRenameKeyRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case RenameKeys:
- case PurgeKeys:
- case PurgePaths:
+ OzoneManagerProtocolProtos.RenameKeysArgs renameKeysArgs =
+ omRequest.getRenameKeysRequest().getRenameKeysArgs();
+ volumeName = renameKeysArgs.getVolumeName();
+ bucketName = renameKeysArgs.getBucketName();
+ break;
case InitiateMultiPartUpload:
+ keyArgs = omRequest.getInitiateMultiPartUploadRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case CommitMultiPartUpload:
+ keyArgs = omRequest.getCommitMultiPartUploadRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case AbortMultiPartUpload:
+ keyArgs = omRequest.getAbortMultiPartUploadRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
case CompleteMultiPartUpload:
- return OMKeyRequestFactory.createRequest(omRequest, ozoneManager);
+ keyArgs = omRequest.getCompleteMultiPartUploadRequest().getKeyArgs();
+ volumeName = keyArgs.getVolumeName();
+ bucketName = keyArgs.getBucketName();
+ break;
default:
throw new IllegalStateException("Unrecognized write command " +
"type request" + cmdType);
}
+
+ return BucketLayoutAwareOMKeyRequestFactory.createRequest(
+ volumeName, bucketName, omRequest, ozoneManager);
}
private static OMClientRequest getOMAclRequest(OMRequest omRequest,
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/BucketLayoutAwareOMKeyRequestFactory.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/BucketLayoutAwareOMKeyRequestFactory.java
new file mode 100644
index 0000000000..cb05b23771
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/BucketLayoutAwareOMKeyRequestFactory.java
@@ -0,0 +1,315 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.hadoop.ozone.om.request;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequest;
+import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.file.OMFileCreateRequest;
+import org.apache.hadoop.ozone.om.request.file.OMFileCreateRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeyCreateRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeyCreateRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeyDeleteRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeyDeleteRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeyRenameRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeyRenameRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
+import org.apache.hadoop.ozone.om.request.key.OMAllocateBlockRequest;
+import org.apache.hadoop.ozone.om.request.key.OMAllocateBlockRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeyCommitRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeyCommitRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.key.OMKeysDeleteRequest;
+import org.apache.hadoop.ozone.om.request.key.OMKeysRenameRequest;
+import org.apache.hadoop.ozone.om.request.key.OmKeysDeleteRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCompleteRequest;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCompleteRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3InitiateMultipartUploadRequest;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3InitiateMultipartUploadRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCommitPartRequest;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCommitPartRequestWithFSO;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadAbortRequest;
+import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadAbortRequestWithFSO;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
+import org.jetbrains.annotations.NotNull;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import static org.apache.hadoop.ozone.om.OzoneManagerUtils.getBucketLayout;
+
+
+/**
+ * Factory class to instantiate bucket layout aware request classes.
+ */
+public final class BucketLayoutAwareOMKeyRequestFactory {
+ private static final Logger LOG =
+ LoggerFactory.getLogger(BucketLayoutAwareOMKeyRequestFactory.class);
+
+ static final HashMap<String, Class<? extends OMKeyRequest>>
+ OM_KEY_REQUEST_CLASSES = new HashMap<>();
+
+ static {
+ // CreateDirectory
+ addRequestClass(Type.CreateDirectory,
+ OMDirectoryCreateRequest.class,
+ BucketLayout.OBJECT_STORE
+ );
+ addRequestClass(Type.CreateDirectory,
+ OMDirectoryCreateRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // CreateFile
+ addRequestClass(Type.CreateFile,
+ OMFileCreateRequest.class,
+ BucketLayout.OBJECT_STORE
+ );
+ addRequestClass(Type.CreateFile,
+ OMFileCreateRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED
+ );
+
+ // CreateKey
+ addRequestClass(Type.CreateKey,
+ OMKeyCreateRequest.class,
+ BucketLayout.OBJECT_STORE
+ );
+ addRequestClass(Type.CreateKey,
+ OMKeyCreateRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // AllocateBlock
+ addRequestClass(Type.AllocateBlock,
+ OMAllocateBlockRequest.class,
+ BucketLayout.OBJECT_STORE
+ );
+ addRequestClass(Type.AllocateBlock,
+ OMAllocateBlockRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED
+ );
+
+ // CommitKey
+ addRequestClass(Type.CommitKey,
+ OMKeyCommitRequest.class,
+ BucketLayout.OBJECT_STORE
+ );
+ addRequestClass(Type.CommitKey,
+ OMKeyCommitRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED
+ );
+
+ // DeleteKey
+ addRequestClass(Type.DeleteKey,
+ OMKeyDeleteRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.DeleteKey,
+ OMKeyDeleteRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // DeleteKeys
+ addRequestClass(Type.DeleteKeys,
+ OMKeysDeleteRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.DeleteKeys,
+ OmKeysDeleteRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // RenameKey
+ addRequestClass(Type.RenameKey,
+ OMKeyRenameRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.RenameKey,
+ OMKeyRenameRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // RenameKeys
+ addRequestClass(Type.RenameKeys,
+ OMKeysRenameRequest.class,
+ BucketLayout.OBJECT_STORE);
+
+ // InitiateMultiPartUpload
+ addRequestClass(Type.InitiateMultiPartUpload,
+ S3InitiateMultipartUploadRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.InitiateMultiPartUpload,
+ S3InitiateMultipartUploadRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // CommitMultiPartUpload
+ addRequestClass(Type.CommitMultiPartUpload,
+ S3MultipartUploadCommitPartRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.CommitMultiPartUpload,
+ S3MultipartUploadCommitPartRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // AbortMultiPartUpload
+ addRequestClass(Type.AbortMultiPartUpload,
+ S3MultipartUploadAbortRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.AbortMultiPartUpload,
+ S3MultipartUploadAbortRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ // CompleteMultiPartUpload
+ addRequestClass(Type.CompleteMultiPartUpload,
+ S3MultipartUploadCompleteRequest.class,
+ BucketLayout.OBJECT_STORE);
+ addRequestClass(Type.CompleteMultiPartUpload,
+ S3MultipartUploadCompleteRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ }
+
+ private BucketLayoutAwareOMKeyRequestFactory() {
+ // Utility class.
+ }
+
+ /**
+ * Generates a request object for the given request based on the bucket
+ * layout.
+ *
+ * @param volumeName volume name
+ * @param bucketName bucket name
+ * @param omRequest OMRequest object
+ * @param ozoneManager ozone manager instance
+ * @return OMKeyRequest object
+ * @throws IOException if the request type is not supported.
+ */
+ public static OMKeyRequest createRequest(String volumeName, String bucketName,
+ OMRequest omRequest,
+ OzoneManager ozoneManager)
+
+ throws IOException {
+ if (StringUtils.isBlank(volumeName)) {
+ throw new OMException("Invalid, volume name is empty",
+ OMException.ResultCodes.INVALID_VOLUME_NAME);
+ }
+
+ if (StringUtils.isBlank(bucketName)) {
+ throw new OMException("Invalid, Bucket name is empty",
+ OMException.ResultCodes.INVALID_BUCKET_NAME);
+ }
+
+ // Get the bucket layout of the bucket being accessed by this request.
+ // While doing this we make sure we are resolving the real bucket in case of
+ // link buckets.
+ BucketLayout bucketLayout =
+ getBucketLayout(volumeName, bucketName, ozoneManager, new HashSet<>());
+
+ // Get the CmdType.
+ Type requestType = omRequest.getCmdType();
+
+ // If the request class is associated to FSO bucket layout,
+ // we add a suffix to its key in the map.
+ String classKey = getKey(requestType, bucketLayout);
+
+ // Check if the key is present in the map.
+ if (OM_KEY_REQUEST_CLASSES.containsKey(classKey)) {
+ try {
+ return getRequestInstanceFromMap(omRequest, classKey, bucketLayout);
+ } catch (NoSuchMethodException | InvocationTargetException |
+ InstantiationException | IllegalAccessException e) {
+ String errMsg = "Exception while instantiating OMKeyRequest of type " +
+ requestType + " for bucket layout " + bucketLayout +
+ ". Please check the OMKeyRequest class constructor.";
+ LOG.error(errMsg, e);
+ throw new OMException(errMsg,
+ OMException.ResultCodes.INTERNAL_ERROR);
+ }
+ }
+
+ // We did not find this key in the map, it means this request type is not
+ // supported.
+ throw new OMException(
+ "Request type " + requestType + " not supported with bucket layout " +
+ bucketLayout, OMException.ResultCodes.INTERNAL_ERROR);
+
+ }
+
+ /**
+ * Helper method to add a request class to the omKeyReqClasses map.
+ *
+ * @param requestType type of the request
+ * @param requestClass Request class to be added.
+ * @param associatedBucketLayout BucketLayout the request class is associated
+ * with.
+ */
+ static void addRequestClass(Type requestType,
+ Class<? extends OMKeyRequest>
+ requestClass,
+ BucketLayout associatedBucketLayout) {
+ // If the request class is associated to FSO bucket layout,
+ // we add a suffix to its key in the map.
+ OM_KEY_REQUEST_CLASSES.put(getKey(requestType, associatedBucketLayout),
+ requestClass);
+ }
+
+ /**
+ * Finds the Request class associated with the given OMRequest and bucket
+ * layout, and returns an instance of the same.
+ *
+ * @param omRequest OMRequest object
+ * @param classKey key to be looked up in the map.
+ * @param bucketLayout Bucket layout of the bucket associated with the
+ * request.
+ * @return OMKeyRequest object
+ * @throws NoSuchMethodException if the request class does not have a
+ * constructor that takes OMRequest and
+ * BucketLayout as arguments.
+ * @throws InstantiationException if the request class is abstract.
+ * @throws IllegalAccessException if the request class is not public.
+ * @throws InvocationTargetException if the request class constructor throws
+ * an exception.
+ */
+ @NotNull
+ static OMKeyRequest getRequestInstanceFromMap(OMRequest omRequest,
+ String classKey,
+ BucketLayout bucketLayout)
+ throws NoSuchMethodException, InstantiationException,
+ IllegalAccessException, InvocationTargetException {
+ // Get the constructor of the request class.
+ // The constructor takes OMRequest and BucketLayout as parameters.
+ Constructor<? extends OMKeyRequest> declaredConstructor =
+ OM_KEY_REQUEST_CLASSES.get(classKey)
+ .getDeclaredConstructor(OMRequest.class, BucketLayout.class);
+
+ // Invoke the constructor.
+ return declaredConstructor.newInstance(omRequest, bucketLayout);
+ }
+
+ /**
+ * Generates a key name for a request type and bucket layout.
+ *
+ * @param requestType type of the request
+ * @param bucketLayout Flavor of the request types based on the bucket
+ * layout.
+ * @return key name for the request type.
+ */
+ static String getKey(Type requestType, BucketLayout bucketLayout) {
+ return requestType.toString() +
+ (bucketLayout.isFileSystemOptimized() ? bucketLayout : "");
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java
new file mode 100644
index 0000000000..c791aed020
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMClientRequestUtils.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.hadoop.ozone.om.request;
+
+import org.apache.hadoop.ozone.om.exceptions.OMException;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Utility class for OMClientRequest. Validates that the bucket layout expected
+ * by the Request class is the same as the layout of the bucket being worked on.
+ */
+public final class OMClientRequestUtils {
+ private static final Logger LOG =
+ LoggerFactory.getLogger(OMClientRequestUtils.class);
+
+ private OMClientRequestUtils() {
+ }
+
+ public static void checkClientRequestPrecondition(
+ BucketLayout dbBucketLayout, BucketLayout reqClassBucketLayout)
+ throws OMException {
+ if (dbBucketLayout.isFileSystemOptimized() !=
+ reqClassBucketLayout.isFileSystemOptimized()) {
+ String errMsg =
+ "BucketLayout mismatch. DB BucketLayout " + dbBucketLayout +
+ " and OMRequestClass BucketLayout " + reqClassBucketLayout;
+ LOG.error(errMsg);
+ throw new OMException(
+ errMsg,
+ OMException.ResultCodes.INTERNAL_ERROR);
+ }
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMKeyRequestFactory.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMKeyRequestFactory.java
deleted file mode 100644
index b4adc6e092..0000000000
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/OMKeyRequestFactory.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with this
- * work for additional information regarding copyright ownership. The ASF
- * licenses this file to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.apache.hadoop.ozone.om.request;
-
-import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.request.file.OMDirectoryCreateRequest;
-import org.apache.hadoop.ozone.om.request.file.OMFileCreateRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeysDeleteRequest;
-import org.apache.hadoop.ozone.om.request.key.OMAllocateBlockRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyCommitRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyCreateRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyDeleteRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyPurgeRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeyRenameRequest;
-import org.apache.hadoop.ozone.om.request.key.OMKeysRenameRequest;
-import org.apache.hadoop.ozone.om.request.key.OMPathsPurgeRequestWithFSO;
-import org.apache.hadoop.ozone.om.request.s3.multipart.S3InitiateMultipartUploadRequest;
-import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadAbortRequest;
-import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCommitPartRequest;
-import org.apache.hadoop.ozone.om.request.s3.multipart.S3MultipartUploadCompleteRequest;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
-import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.KeyArgs;
-
-import java.io.IOException;
-
-/**
- * OM Key factory to create key, file om requests.
- */
-public final class OMKeyRequestFactory {
-
- private OMKeyRequestFactory() {
- }
-
- /**
- * Create OM request based on the bucket layout type.
- *
- * @param omRequest om key request
- * @param ozoneManager ozone manager
- * @return omKeyRequest
- * @throws IOException
- */
- public static OMKeyRequest createRequest(OMRequest omRequest,
- OzoneManager ozoneManager) throws IOException {
-
- Type cmdType = omRequest.getCmdType();
- KeyArgs keyArgs;
- OMKeyRequest omKeyRequest = null;
-
- switch (cmdType) {
- case CreateDirectory:
- keyArgs = omRequest.getCreateDirectoryRequest().getKeyArgs();
- omKeyRequest = OMDirectoryCreateRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case CreateFile:
- keyArgs = omRequest.getCreateFileRequest().getKeyArgs();
- omKeyRequest =
- OMFileCreateRequest.getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case CreateKey:
- keyArgs = omRequest.getCreateKeyRequest().getKeyArgs();
- omKeyRequest =
- OMKeyCreateRequest.getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case AllocateBlock:
- keyArgs = omRequest.getAllocateBlockRequest().getKeyArgs();
- omKeyRequest = OMAllocateBlockRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case CommitKey:
- keyArgs = omRequest.getCommitKeyRequest().getKeyArgs();
- omKeyRequest =
- OMKeyCommitRequest.getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case DeleteKey:
- keyArgs = omRequest.getDeleteKeyRequest().getKeyArgs();
- omKeyRequest =
- OMKeyDeleteRequest.getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case DeleteKeys:
- return OMKeysDeleteRequest
- .getInstance(omRequest.getDeleteKeysRequest().getDeleteKeys(),
- omRequest, ozoneManager);
- case RenameKey:
- keyArgs = omRequest.getRenameKeyRequest().getKeyArgs();
- omKeyRequest =
- OMKeyRenameRequest.getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case RenameKeys:
- return new OMKeysRenameRequest(omRequest);
- case PurgeKeys:
- omKeyRequest = new OMKeyPurgeRequest(omRequest);
- break;
- case PurgePaths:
- omKeyRequest = new OMPathsPurgeRequestWithFSO(omRequest);
- break;
- case InitiateMultiPartUpload:
- keyArgs = omRequest.getInitiateMultiPartUploadRequest().getKeyArgs();
- omKeyRequest = S3InitiateMultipartUploadRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case CommitMultiPartUpload:
- keyArgs = omRequest.getCommitMultiPartUploadRequest().getKeyArgs();
- omKeyRequest = S3MultipartUploadCommitPartRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case AbortMultiPartUpload:
- keyArgs = omRequest.getAbortMultiPartUploadRequest().getKeyArgs();
- omKeyRequest = S3MultipartUploadAbortRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- case CompleteMultiPartUpload:
- keyArgs = omRequest.getCompleteMultiPartUploadRequest().getKeyArgs();
- omKeyRequest = S3MultipartUploadCompleteRequest
- .getInstance(keyArgs, omRequest, ozoneManager);
- break;
- default:
- // not required to handle here, its handled by the caller of
- // #createRequest() method.
- break;
- }
- return omKeyRequest;
- }
-}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
index 8f35555b0d..223986b5ec 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java
@@ -23,7 +23,6 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -31,7 +30,6 @@ import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import org.apache.hadoop.hdds.client.ReplicationConfig;
import org.apache.hadoop.ozone.OzoneAcl;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
import org.apache.hadoop.ozone.om.helpers.OzoneAclUtil;
import org.apache.hadoop.ozone.om.helpers.OzoneFSUtils;
@@ -369,17 +367,4 @@ public class OMDirectoryCreateRequest extends OMKeyRequest {
static long getMaxNumOfRecursiveDirs() {
return MAX_NUM_OF_RECURSIVE_DIRS;
}
-
- public static OMDirectoryCreateRequest getInstance(
- KeyArgs keyArgs, OMRequest omRequest, OzoneManager ozoneManager)
- throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMDirectoryCreateRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMDirectoryCreateRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
index 8a0c99601e..0b4f943da8 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.ozone.om.request.file;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -45,7 +44,6 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
@@ -387,16 +385,4 @@ public class OMFileCreateRequest extends OMKeyRequest {
OMException.ResultCodes.DIRECTORY_NOT_FOUND);
}
}
-
- public static OMFileCreateRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMFileCreateRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMFileCreateRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
index ea4192c750..39f090bcdd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMAllocateBlockRequest.java
@@ -20,13 +20,11 @@ package org.apache.hadoop.ozone.om.request.key;
import java.io.IOException;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
-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.ratis.utils.OzoneManagerDoubleBufferHelper;
@@ -252,16 +250,4 @@ public class OMAllocateBlockRequest extends OMKeyRequest {
return omClientResponse;
}
-
- public static OMAllocateBlockRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMAllocateBlockRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMAllocateBlockRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
index 7909c233d1..3195e92893 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.ozone.om.request.key;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -48,7 +47,6 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.om.response.key.OMKeyCommitResponse;
@@ -324,16 +322,4 @@ public class OMKeyCommitRequest extends OMKeyRequest {
commitKeyRequest);
}
}
-
- public static OMKeyCommitRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMKeyCommitRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMKeyCommitRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
index fd48f240b0..6e41211b98 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.ozone.om.request.key;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@@ -47,7 +46,6 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
@@ -371,16 +369,4 @@ public class OMKeyCreateRequest extends OMKeyRequest {
createKeyRequest);
}
}
-
- public static OMKeyCreateRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMKeyCreateRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMKeyCreateRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
index 0cdeb9f189..d54e4ebddd 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyDeleteRequest.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.ozone.om.request.key;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Map;
import com.google.common.base.Optional;
@@ -38,7 +37,6 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -211,17 +209,4 @@ public class OMKeyDeleteRequest extends OMKeyRequest {
return omClientResponse;
}
-
- public static OMKeyDeleteRequest getInstance(
- OzoneManagerProtocolProtos.KeyArgs keyArgs, OMRequest omRequest,
- OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMKeyDeleteRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMKeyDeleteRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
index 6768e26db7..1dce210a53 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.ozone.om.request.key;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Map;
import com.google.common.base.Optional;
@@ -40,7 +39,6 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
@@ -243,17 +241,4 @@ public class OMKeyRenameRequest extends OMKeyRequest {
auditMap.put(OzoneConsts.DST_KEY, renameKeyRequest.getToKeyName());
return auditMap;
}
-
- public static OMKeyRenameRequest getInstance(
- OzoneManagerProtocolProtos.KeyArgs keyArgs, OMRequest omRequest,
- OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OMKeyRenameRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMKeyRenameRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
index 1b327d28e6..26a68b89f4 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRequest.java
@@ -51,6 +51,7 @@ import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
import org.apache.hadoop.ozone.om.helpers.OzoneAclUtil;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
+import org.apache.hadoop.ozone.om.request.OMClientRequestUtils;
import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
import org.apache.hadoop.ozone.protocolPB.OMPBHelper;
import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
@@ -203,6 +204,12 @@ public abstract class OMKeyRequest extends OMClientRequest {
// exception
throw new OMException("Bucket not found " + bucketName, BUCKET_NOT_FOUND);
}
+
+ // Make sure associated bucket's layout matches the one associated with
+ // the request.
+ OMClientRequestUtils.checkClientRequestPrecondition(
+ omMetadataManager.getBucketTable().get(bucketKey).getBucketLayout(),
+ getBucketLayout());
}
// For keys batch delete and rename only
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
index ba30094ce3..9c34242f26 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysDeleteRequest.java
@@ -26,7 +26,6 @@ import org.apache.hadoop.ozone.audit.AuditLogger;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.ResolvedBucket;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
@@ -49,7 +48,6 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -71,8 +69,8 @@ public class OMKeysDeleteRequest extends OMKeyRequest {
private static final Logger LOG =
LoggerFactory.getLogger(OMKeysDeleteRequest.class);
- public OMKeysDeleteRequest(OMRequest omRequest, BucketLayout layout) {
- super(omRequest, layout);
+ public OMKeysDeleteRequest(OMRequest omRequest, BucketLayout bucketLayout) {
+ super(omRequest, bucketLayout);
}
@Override @SuppressWarnings("methodlength")
@@ -297,17 +295,4 @@ public class OMKeysDeleteRequest extends OMKeyRequest {
auditMap.put(UNDELETED_KEYS_LIST, String.join(",", unDeletedKeys));
}
- public static OMKeysDeleteRequest getInstance(
- OzoneManagerProtocolProtos.DeleteKeyArgs keyArgs,
- OzoneManagerProtocolProtos.OMRequest omRequest, OzoneManager ozoneManager)
- throws IOException {
-
- BucketLayout bucketLayout = OzoneManagerUtils
- .getBucketLayout(keyArgs.getVolumeName(), keyArgs.getBucketName(),
- ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new OmKeysDeleteRequestWithFSO(omRequest, bucketLayout);
- }
- return new OMKeysDeleteRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
index c480d3fd24..4427e6d64e 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeysRenameRequest.java
@@ -28,6 +28,7 @@ import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OMMetrics;
import org.apache.hadoop.ozone.om.ResolvedBucket;
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.helpers.OmRenameKeys;
import org.apache.hadoop.ozone.om.OzoneManager;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
@@ -68,8 +69,8 @@ public class OMKeysRenameRequest extends OMKeyRequest {
private static final Logger LOG =
LoggerFactory.getLogger(OMKeysRenameRequest.class);
- public OMKeysRenameRequest(OMRequest omRequest) {
- super(omRequest);
+ public OMKeysRenameRequest(OMRequest omRequest, BucketLayout bucketLayout) {
+ super(omRequest, bucketLayout);
}
@Override
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
index 63f9747d6e..c54faf6815 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequest.java
@@ -24,7 +24,6 @@ import org.apache.hadoop.hdds.client.ReplicationConfig;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -53,7 +52,6 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.Map;
import java.util.UUID;
@@ -269,17 +267,4 @@ public class S3InitiateMultipartUploadRequest extends OMKeyRequest {
multipartInfoInitiateRequest);
}
}
-
- public static S3InitiateMultipartUploadRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new S3InitiateMultipartUploadRequestWithFSO(omRequest,
- bucketLayout);
- }
- return new S3InitiateMultipartUploadRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
index b7cf656136..f5242755f1 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadAbortRequest.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.ozone.om.request.s3.multipart;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
@@ -36,7 +35,6 @@ import org.slf4j.LoggerFactory;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
import org.apache.hadoop.ozone.om.helpers.OmMultipartKeyInfo;
@@ -256,17 +254,4 @@ public class S3MultipartUploadAbortRequest extends OMKeyRequest {
volumeName, bucketName, keyName, multipartUploadID);
return multipartKey;
}
-
- public static S3MultipartUploadAbortRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new S3MultipartUploadAbortRequestWithFSO(omRequest,
- bucketLayout);
- }
- return new S3MultipartUploadAbortRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
index 717be05897..517a46ff61 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCommitPartRequest.java
@@ -24,7 +24,6 @@ import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.BucketLayout;
@@ -57,7 +56,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
-import java.util.HashSet;
import java.util.Map;
import java.util.stream.Collectors;
@@ -336,18 +334,5 @@ public class S3MultipartUploadCommitPartRequest extends OMKeyRequest {
return omMetadataManager.getMultipartKey(volumeName, bucketName,
keyName, uploadID);
}
-
- public static S3MultipartUploadCommitPartRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new S3MultipartUploadCommitPartRequestWithFSO(omRequest,
- bucketLayout);
- }
- return new S3MultipartUploadCommitPartRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
index d727f5727c..d963a4341f 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3MultipartUploadCompleteRequest.java
@@ -25,7 +25,6 @@ import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -38,7 +37,6 @@ import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.audit.OMAction;
import org.apache.hadoop.ozone.om.OMMetadataManager;
import org.apache.hadoop.ozone.om.OzoneManager;
-import org.apache.hadoop.ozone.om.OzoneManagerUtils;
import org.apache.hadoop.ozone.om.exceptions.OMException;
import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
@@ -567,18 +565,5 @@ public class S3MultipartUploadCompleteRequest extends OMKeyRequest {
new CacheValue<>(Optional.of(omBucketInfo), transactionLogIndex));
}
}
-
- public static S3MultipartUploadCompleteRequest getInstance(KeyArgs keyArgs,
- OMRequest omRequest, OzoneManager ozoneManager) throws IOException {
-
- BucketLayout bucketLayout =
- OzoneManagerUtils.getBucketLayout(keyArgs.getVolumeName(),
- keyArgs.getBucketName(), ozoneManager, new HashSet<>());
- if (bucketLayout.isFileSystemOptimized()) {
- return new S3MultipartUploadCompleteRequestWithFSO(omRequest,
- bucketLayout);
- }
- return new S3MultipartUploadCompleteRequest(omRequest, bucketLayout);
- }
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestBucketLayoutAwareOMKeyFactory.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestBucketLayoutAwareOMKeyFactory.java
new file mode 100644
index 0000000000..3af9e66461
--- /dev/null
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestBucketLayoutAwareOMKeyFactory.java
@@ -0,0 +1,166 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.hadoop.ozone.om.request;
+
+import org.apache.hadoop.ozone.om.helpers.BucketLayout;
+import org.apache.hadoop.ozone.om.request.key.OMKeyRequest;
+import org.apache.hadoop.ozone.om.request.key.OMPathsPurgeRequestWithFSO;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.hadoop.ozone.om.request.BucketLayoutAwareOMKeyRequestFactory.getKey;
+import static org.apache.hadoop.ozone.om.request.BucketLayoutAwareOMKeyRequestFactory.getRequestInstanceFromMap;
+import static org.apache.hadoop.ozone.om.request.BucketLayoutAwareOMKeyRequestFactory.OM_KEY_REQUEST_CLASSES;
+import static org.apache.hadoop.ozone.om.request.BucketLayoutAwareOMKeyRequestFactory.addRequestClass;
+import static org.junit.Assert.fail;
+
+/**
+ * Validates functionality of {@link BucketLayoutAwareOMKeyRequestFactory}.
+ */
+public class TestBucketLayoutAwareOMKeyFactory {
+ private static final Logger LOG =
+ LoggerFactory.getLogger(TestBucketLayoutAwareOMKeyFactory.class);
+
+ /**
+ * Validates instantiation of each OMKeyRequest present inside the
+ * (CmdType + BucketLayout) -> RequestClass Mapping.
+ */
+ @Test
+ public void testGetRequestInstanceFromMap() {
+ // Lists to count the number of times each OMKeyRequest is instantiated.
+ List<OMKeyRequest> omKeyReqsFSO = new ArrayList<>();
+ List<OMKeyRequest> omKeyReqsLegacy = new ArrayList<>();
+ List<OMKeyRequest> omKeyReqsOBS = new ArrayList<>();
+
+ // Iterate over each OMKeyRequest present in the mapping.
+ OM_KEY_REQUEST_CLASSES.forEach(
+ (k, v) -> {
+ // Check if this key is associated with an FSO class.
+ if (k.contains(BucketLayout.FILE_SYSTEM_OPTIMIZED.toString())) {
+ try {
+ // Get the declared constructor.
+ OMKeyRequest omKeyRequest =
+ getRequestInstanceFromMap(
+ getDummyOMRequest(), k,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+
+ Assert.assertEquals(BucketLayout.FILE_SYSTEM_OPTIMIZED,
+ omKeyRequest.getBucketLayout());
+ omKeyReqsFSO.add(omKeyRequest);
+ } catch (NoSuchMethodException e) {
+ fail("No valid constructor found for " + k);
+ e.printStackTrace();
+ } catch (InvocationTargetException | InstantiationException
+ | IllegalAccessException e) {
+ fail("Exception while creating instance of " + k);
+ e.printStackTrace();
+ }
+ } else {
+ // This is a LEGACY / OBS Request class.
+ try {
+ OMKeyRequest omKeyRequest1 =
+ getRequestInstanceFromMap(
+ getDummyOMRequest(), k, BucketLayout.LEGACY);
+
+ Assert.assertEquals(BucketLayout.LEGACY,
+ omKeyRequest1.getBucketLayout());
+ omKeyReqsLegacy.add(omKeyRequest1);
+
+ OMKeyRequest omKeyRequest2 =
+ getRequestInstanceFromMap(
+ getDummyOMRequest(), k, BucketLayout.OBJECT_STORE);
+
+ Assert.assertEquals(BucketLayout.OBJECT_STORE,
+ omKeyRequest2.getBucketLayout());
+ omKeyReqsOBS.add(omKeyRequest2);
+ } catch (NoSuchMethodException e) {
+ fail("No valid constructor found for " + k);
+ e.printStackTrace();
+ } catch (InvocationTargetException | InstantiationException
+ | IllegalAccessException e) {
+ fail("Exception while creating instance of " + k);
+ e.printStackTrace();
+ }
+ }
+
+ LOG.info("Validated request class instantiation for cmdType " + k);
+ });
+
+ Assert.assertEquals(12, omKeyReqsFSO.size());
+ Assert.assertEquals(13, omKeyReqsLegacy.size());
+ Assert.assertEquals(13, omKeyReqsOBS.size());
+ // Check if the number of instantiated OMKeyRequest classes is equal to
+ // the number of keys in the mapping.
+ Assert.assertEquals(
+ OM_KEY_REQUEST_CLASSES.size(),
+ omKeyReqsFSO.size() + omKeyReqsOBS.size());
+ }
+
+ /**
+ * Tests behaviour with invalid OMKeyRequest classes.
+ *
+ * @throws InvocationTargetException if the constructor throws an exception.
+ * @throws InstantiationException if the class is abstract.
+ * @throws IllegalAccessException if the constructor is not accessible.
+ */
+ @Test
+ public void testAddInvalidRequestClass()
+ throws InvocationTargetException,
+ InstantiationException, IllegalAccessException {
+ // Add an OMKeyRequest class that does not have a constructor compatible
+ // with the Factory class.
+ addRequestClass(Type.PurgePaths, OMPathsPurgeRequestWithFSO.class,
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ try {
+ // This should fail, since this class does not have a valid constructor -
+ // one that takes an OMRequest and a BucketLayout as parameters.
+ getRequestInstanceFromMap(
+ OMRequest.newBuilder()
+ .setCmdType(Type.PurgeKeys)
+ .setClientId("xyz")
+ .build(),
+ getKey(Type.PurgePaths, BucketLayout.FILE_SYSTEM_OPTIMIZED),
+ BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ fail("No exception thrown for invalid OMKeyRequest class");
+ } catch (NoSuchMethodException ex) {
+ // expected exception.
+ LOG.info("Expected exception thrown for invalid OMKeyRequest class", ex);
+ }
+ }
+
+ /**
+ * Generates a dummy OMRequest.
+ *
+ * @return OMRequest
+ */
+ private OMRequest getDummyOMRequest() {
+ return OMRequest.newBuilder()
+ // Set random type.
+ .setCmdType(Type.CreateKey)
+ .setClientId("xyz")
+ .build();
+ }
+}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
index beea90f909..f0becb9064 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMDirectoryCreateRequestWithFSO.java
@@ -115,7 +115,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
String keyName = "a/b/c";
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMRequest omRequest = createDirectoryRequest(volumeName, bucketName,
keyName);
@@ -139,7 +139,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
@@ -242,7 +242,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
@@ -294,7 +294,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
@@ -357,7 +357,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
omMetadataManager.getBucketTable().get(bucketKey);
@@ -507,7 +507,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
omMetadataManager.getBucketTable().get(bucketKey);
@@ -546,7 +546,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMRequest omRequest = createDirectoryRequest(volumeName, bucketName,
OzoneFSUtils.addTrailingSlashIfNeeded(keyName));
@@ -582,7 +582,7 @@ public class TestOMDirectoryCreateRequestWithFSO {
// Add volume and bucket entries to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
omMetadataManager.getBucketTable().get(bucketKey);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
index ef88a4c621..47f2934a3a 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequest.java
@@ -119,7 +119,7 @@ public class TestOMFileCreateRequest extends TestOMKeyRequest {
false, true);
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMFileCreateRequest omFileCreateRequest = getOMFileCreateRequest(omRequest);
OMRequest modifiedOmRequest = omFileCreateRequest.preExecute(ozoneManager);
@@ -309,7 +309,7 @@ public class TestOMFileCreateRequest extends TestOMKeyRequest {
overWrite, recursive);
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMFileCreateRequest omFileCreateRequest = getOMFileCreateRequest(omRequest);
OMRequest modifiedOmRequest = omFileCreateRequest.preExecute(ozoneManager);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequestWithFSO.java
index eb7e995a26..0c4d10fb12 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/file/TestOMFileCreateRequestWithFSO.java
@@ -98,7 +98,7 @@ public class TestOMFileCreateRequestWithFSO extends TestOMFileCreateRequest {
String fileName = "f";
String key = parentDir + "/" + fileName;
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
// Create parent dirs for the path
long parentId = OMRequestTestUtils.addParentsToDirTable(volumeName,
bucketName, parentDir, omMetadataManager);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
index 5bc9d45484..cb5bb230c9 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCreateRequest.java
@@ -79,7 +79,7 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
// Add volume and bucket entries to DB.
addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
long id = modifiedOmRequest.getCreateKeyRequest().getClientID();
@@ -206,7 +206,7 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
// Add volume and bucket entries to DB.
addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
long id = modifiedOmRequest.getCreateKeyRequest().getClientID();
@@ -424,8 +424,7 @@ public class TestOMKeyCreateRequest extends TestOMKeyRequest {
// Add volume and bucket entries to DB.
addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
-
+ omMetadataManager, getBucketLayout());
keyName = "dir1/dir2/dir3/file1";
createAndCheck(keyName);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequest.java
index 52bb313a78..4d233c5930 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequest.java
@@ -19,7 +19,6 @@
package org.apache.hadoop.ozone.om.request.key;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
-import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
import org.apache.hadoop.ozone.om.response.OMClientResponse;
import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -51,7 +50,7 @@ public class TestOMKeysDeleteRequest extends TestOMKeyRequest {
createPreRequisites();
OMKeysDeleteRequest omKeysDeleteRequest =
- new OMKeysDeleteRequest(omRequest, BucketLayout.LEGACY);
+ new OMKeysDeleteRequest(omRequest, getBucketLayout());
checkDeleteKeysResponse(omKeysDeleteRequest);
}
@@ -95,7 +94,7 @@ public class TestOMKeysDeleteRequest extends TestOMKeyRequest {
.addAllKeys(deleteKeyList).addKeys("dummy"))).build();
OMKeysDeleteRequest omKeysDeleteRequest =
- new OMKeysDeleteRequest(omRequest, BucketLayout.LEGACY);
+ new OMKeysDeleteRequest(omRequest, getBucketLayout());
checkDeleteKeysResponseForFailure(omKeysDeleteRequest);
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequestWithFSO.java
index 47109f503b..e3545487e6 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysDeleteRequestWithFSO.java
@@ -40,7 +40,7 @@ public class TestOMKeysDeleteRequestWithFSO extends TestOMKeysDeleteRequest {
createPreRequisites();
OmKeysDeleteRequestWithFSO omKeysDeleteRequest =
new OmKeysDeleteRequestWithFSO(getOmRequest(),
- BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ getBucketLayout());
checkDeleteKeysResponse(omKeysDeleteRequest);
}
@@ -56,7 +56,7 @@ public class TestOMKeysDeleteRequestWithFSO extends TestOMKeysDeleteRequest {
OmKeysDeleteRequestWithFSO omKeysDeleteRequest =
new OmKeysDeleteRequestWithFSO(getOmRequest(),
- BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ getBucketLayout());
checkDeleteKeysResponseForFailure(omKeysDeleteRequest);
}
@@ -66,7 +66,7 @@ public class TestOMKeysDeleteRequestWithFSO extends TestOMKeysDeleteRequest {
// Add volume, bucket and key entries to OM DB.
OMRequestTestUtils
.addVolumeAndBucketToDB(volumeName, bucketName, omMetadataManager,
- BucketLayout.FILE_SYSTEM_OPTIMIZED);
+ getBucketLayout());
OzoneManagerProtocolProtos.DeleteKeyArgs.Builder deleteKeyArgs =
OzoneManagerProtocolProtos.DeleteKeyArgs.newBuilder()
@@ -101,4 +101,9 @@ public class TestOMKeysDeleteRequestWithFSO extends TestOMKeysDeleteRequest {
OzoneManagerProtocolProtos.DeleteKeysRequest.newBuilder()
.setDeleteKeys(deleteKeyArgs).build()).build());
}
+
+ @Override
+ public BucketLayout getBucketLayout() {
+ return BucketLayout.FILE_SYSTEM_OPTIMIZED;
+ }
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysRenameRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysRenameRequest.java
index 24fd138fdf..b1336bbc5d 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysRenameRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeysRenameRequest.java
@@ -48,7 +48,7 @@ public class TestOMKeysRenameRequest extends TestOMKeyRequest {
OMRequest modifiedOmRequest = createRenameKeyRequest(false);
OMKeysRenameRequest omKeysRenameRequest =
- new OMKeysRenameRequest(modifiedOmRequest);
+ new OMKeysRenameRequest(modifiedOmRequest, getBucketLayout());
OMClientResponse omKeysRenameResponse =
omKeysRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
@@ -78,7 +78,7 @@ public class TestOMKeysRenameRequest extends TestOMKeyRequest {
OMRequest modifiedOmRequest = createRenameKeyRequest(true);
OMKeysRenameRequest omKeysRenameRequest =
- new OMKeysRenameRequest(modifiedOmRequest);
+ new OMKeysRenameRequest(modifiedOmRequest, getBucketLayout());
OMClientResponse omKeysRenameResponse =
omKeysRenameRequest.validateAndUpdateCache(ozoneManager, 100L,
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
index 78a2346aeb..d473bf9621 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequest.java
@@ -50,7 +50,7 @@ public class TestS3InitiateMultipartUploadRequest
// Add volume and bucket to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMRequest modifiedRequest = doPreExecuteInitiateMPU(volumeName,
bucketName, keyName);
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequestWithFSO.java
index 1f6b08c3cd..2256593da3 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3InitiateMultipartUploadRequestWithFSO.java
@@ -56,7 +56,7 @@ public class TestS3InitiateMultipartUploadRequestWithFSO
// Add volume and bucket to DB.
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String bucketKey = omMetadataManager.getBucketKey(volumeName, bucketName);
OmBucketInfo omBucketInfo =
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
index 85afa62651..5c8c121152 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequest.java
@@ -53,7 +53,7 @@ public class TestS3MultipartUploadAbortRequest extends TestS3MultipartRequest {
String keyName = getKeyName();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
createParentPath(volumeName, bucketName);
@@ -105,7 +105,7 @@ public class TestS3MultipartUploadAbortRequest extends TestS3MultipartRequest {
String keyName = UUID.randomUUID().toString();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
String multipartUploadID = "randomMPU";
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequestWithFSO.java
index 440830c1bc..21b96405d9 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadAbortRequestWithFSO.java
@@ -69,4 +69,9 @@ public class TestS3MultipartUploadAbortRequestWithFSO
return omMetadataManager.getMultipartKey(parentID, fileName,
multipartUploadID);
}
+
+ @Override
+ public BucketLayout getBucketLayout() {
+ return BucketLayout.FILE_SYSTEM_OPTIMIZED;
+ }
}
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
index a017764ef3..9e205896bc 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCommitPartRequest.java
@@ -55,7 +55,7 @@ public class TestS3MultipartUploadCommitPartRequest
String keyName = getKeyName();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
createParentPath(volumeName, bucketName);
@@ -117,7 +117,7 @@ public class TestS3MultipartUploadCommitPartRequest
String keyName = getKeyName();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
createParentPath(volumeName, bucketName);
@@ -156,7 +156,7 @@ public class TestS3MultipartUploadCommitPartRequest
String keyName = getKeyName();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
long clientID = Time.now();
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequest.java
index 36a382bf6e..d465c7f198 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequest.java
@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
-import org.apache.hadoop.ozone.om.helpers.BucketLayout;
import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
import org.junit.Assert;
@@ -59,7 +58,8 @@ public class TestS3MultipartUploadCompleteRequest
String volumeName = UUID.randomUUID().toString();
String bucketName = UUID.randomUUID().toString();
String keyName = getKeyName();
- addVolumeAndBucket(volumeName, bucketName);
+ OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
+ omMetadataManager, getBucketLayout());
checkValidateAndUpdateCacheSuccess(volumeName, bucketName, keyName);
checkDeleteTableCount(volumeName, bucketName, keyName, 0);
@@ -153,7 +153,7 @@ public class TestS3MultipartUploadCompleteRequest
protected void addVolumeAndBucket(String volumeName, String bucketName)
throws Exception {
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager, BucketLayout.DEFAULT);
+ omMetadataManager, getBucketLayout());
}
@Test
@@ -163,7 +163,7 @@ public class TestS3MultipartUploadCompleteRequest
String keyName = getKeyName();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
OMRequest initiateMPURequest = doPreExecuteInitiateMPU(volumeName,
bucketName, keyName);
@@ -273,7 +273,7 @@ public class TestS3MultipartUploadCompleteRequest
String keyName = UUID.randomUUID().toString();
OMRequestTestUtils.addVolumeAndBucketToDB(volumeName, bucketName,
- omMetadataManager);
+ omMetadataManager, getBucketLayout());
List<Part> partList = new ArrayList<>();
OMRequest completeMultipartRequest = doPreExecuteCompleteMPU(volumeName,
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequestWithFSO.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequestWithFSO.java
index f0a1dfb682..0824a324d5 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequestWithFSO.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/multipart/TestS3MultipartUploadCompleteRequestWithFSO.java
@@ -139,5 +139,8 @@ public class TestS3MultipartUploadCompleteRequestWithFSO
BucketLayout.FILE_SYSTEM_OPTIMIZED);
}
-}
-
+ @Override
+ public BucketLayout getBucketLayout() {
+ return BucketLayout.FILE_SYSTEM_OPTIMIZED;
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org