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