This is an automated email from the ASF dual-hosted git repository.

sodonnell 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 e9592d2654 HDDS-8273. EC: Validate replication config at server-side 
(#4507)
e9592d2654 is described below

commit e9592d2654e86ebc64648195e1578578eda3f389
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Fri Mar 31 22:16:19 2023 +0200

    HDDS-8273. EC: Validate replication config at server-side (#4507)
---
 .../dist/src/main/smoketest/ec/basic.robot         |  9 +++
 .../java/org/apache/hadoop/fs/ozone/TestHSync.java |  2 +-
 .../hadoop/fs/ozone/TestOzoneFSInputStream.java    |  2 +-
 .../hadoop/fs/ozone/TestRootedOzoneFileSystem.java |  2 +-
 .../rpc/TestOzoneClientMultipartUploadWithFSO.java |  2 +-
 .../client/rpc/TestOzoneRpcClientAbstract.java     |  3 +-
 .../org/apache/hadoop/ozone/om/TestOmMetrics.java  |  4 +-
 .../apache/hadoop/ozone/om/OzoneConfigUtil.java    |  7 +-
 .../org/apache/hadoop/ozone/om/OzoneManager.java   | 20 ++++++
 .../om/request/bucket/OMBucketCreateRequest.java   |  7 ++
 .../ozone/om/request/file/OMFileCreateRequest.java |  4 +-
 .../request/file/OMFileCreateRequestWithFSO.java   |  2 +-
 .../ozone/om/request/key/OMKeyCreateRequest.java   |  4 +-
 .../om/request/key/OMKeyCreateRequestWithFSO.java  |  2 +-
 .../S3InitiateMultipartUploadRequest.java          |  2 +-
 .../S3InitiateMultipartUploadRequestWithFSO.java   |  2 +-
 .../hadoop/ozone/om/TestOzoneConfigUtil.java       | 32 ++++++---
 ...TestOzoneManagerDoubleBufferWithOMResponse.java |  8 ++-
 .../ozone/om/request/OMRequestTestUtils.java       | 83 ++++++++++------------
 .../request/TestOMClientRequestWithUserInfo.java   | 14 ++--
 .../ozone/om/request/bucket/TestBucketRequest.java |  4 ++
 .../request/bucket/TestOMBucketCreateRequest.java  | 54 +++++++++++---
 .../bucket/TestOMBucketCreateRequestWithFSO.java   | 19 ++---
 .../om/request/key/TestOMKeyCreateRequest.java     | 10 +++
 .../ozone/om/request/key/TestOMKeyRequest.java     |  3 +
 25 files changed, 207 insertions(+), 94 deletions(-)

diff --git a/hadoop-ozone/dist/src/main/smoketest/ec/basic.robot 
b/hadoop-ozone/dist/src/main/smoketest/ec/basic.robot
index 6deccaf374..3e6ca30b0f 100644
--- a/hadoop-ozone/dist/src/main/smoketest/ec/basic.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/ec/basic.robot
@@ -99,3 +99,12 @@ Test Invalid Replication Parameters
     ${message} =    Execute And Ignore Error    ozone sh key put 
--replication=rs-3-2-1024k --type=STAND_ALONE /${VOLUME}/foo/bar /tmp/1mb
                     Should contain              ${message}          STAND_ALONE
                     Should contain              ${message}          Invalid 
value
+
+Invalid Replication With Misconfigured Client
+    # client disabled replication config validation
+    # 2-1 is unsupported EC scheme
+    ${message} =    Execute And Ignore Error    ozone sh 
-Dozone.replication.allowed-configs="" bucket create --replication=rs-2-1-1024k 
--type=EC /${VOLUME}/invalid
+                    Should contain              ${message}          
INVALID_REQUEST Invalid replication config
+    # 1024 is unsupported EC chunk size
+    ${message} =    Execute And Ignore Error    ozone sh 
-Dozone.replication.allowed-configs="" key put --replication=rs-3-2-1024 
--type=EC /${VOLUME}/ecbucket/invalid /tmp/1mb
+                    Should contain              ${message}          
INVALID_REQUEST Invalid replication config
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
index e637291167..69d529fe1d 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestHSync.java
@@ -258,7 +258,7 @@ public class TestHSync {
     builder.setDefaultReplicationConfig(
         new DefaultReplicationConfig(
             new ECReplicationConfig(
-                3, 2, ECReplicationConfig.EcCodec.RS, 1024)));
+                3, 2, ECReplicationConfig.EcCodec.RS, (int) OzoneConsts.MB)));
     BucketArgs omBucketArgs = builder.build();
     String ecBucket = UUID.randomUUID().toString();
     TestDataUtil.createBucket(client, bucket.getVolumeName(), omBucketArgs,
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSInputStream.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSInputStream.java
index 53f26d49b6..045911e460 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSInputStream.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFSInputStream.java
@@ -119,7 +119,7 @@ public class TestOzoneFSInputStream {
     builder.setDefaultReplicationConfig(
         new DefaultReplicationConfig(
             new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS,
-                1024)));
+                (int) OzoneConsts.MB)));
     BucketArgs omBucketArgs = builder.build();
     String ecBucket = UUID.randomUUID().toString();
     TestDataUtil.createBucket(client, bucket.getVolumeName(), omBucketArgs,
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
index ae6acc3324..d1a556f7f9 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestRootedOzoneFileSystem.java
@@ -2130,7 +2130,7 @@ public class TestRootedOzoneFileSystem {
     long length = contentSummary.getLength();
     long spaceConsumed = contentSummary.getSpaceConsumed();
     long expectDiskUsage = QuotaUtil.getReplicatedSize(length,
-            new ECReplicationConfig(3, 2, RS, 1024));
+        new ECReplicationConfig(3, 2, RS, (int) OzoneConsts.MB));
     Assert.assertEquals(expectDiskUsage, spaceConsumed);
     //clean up
     ofs.delete(filePath, true);
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
index 2a34d5c5bb..6bea20df33 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneClientMultipartUploadWithFSO.java
@@ -332,7 +332,7 @@ public class TestOzoneClientMultipartUploadWithFSO {
     bucketArgs.setDefaultReplicationConfig(
         new DefaultReplicationConfig(
             new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS,
-                1024)));
+                (int) OzoneConsts.MB)));
 
     volume.createBucket(myBucket, bucketArgs.build());
     return volume.getBucket(myBucket);
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
index c7a37f3f47..78acd0094a 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestOzoneRpcClientAbstract.java
@@ -41,6 +41,7 @@ import java.util.stream.Stream;
 import org.apache.hadoop.conf.StorageUnit;
 import org.apache.hadoop.hdds.client.DefaultReplicationConfig;
 import org.apache.hadoop.hdds.client.ECReplicationConfig;
+import org.apache.hadoop.hdds.client.ECReplicationConfig.EcCodec;
 import org.apache.hadoop.hdds.client.OzoneQuota;
 import org.apache.hadoop.hdds.client.RatisReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
@@ -4087,7 +4088,7 @@ public abstract class TestOzoneRpcClientAbstract {
             HddsProtos.ReplicationFactor.ONE),
         currentReplicationConfig);
     ECReplicationConfig ecReplicationConfig =
-        new ECReplicationConfig(3, 2, ECReplicationConfig.EcCodec.RS, 1024);
+        new ECReplicationConfig(3, 2, EcCodec.RS, (int) OzoneConsts.MB);
     bucket.setReplicationConfig(ecReplicationConfig);
 
     // Get the bucket and check the updated config.
diff --git 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java
 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java
index 141bb1baa7..610d7ad236 100644
--- 
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java
+++ 
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/om/TestOmMetrics.java
@@ -323,14 +323,14 @@ public class TestOmMetrics {
     writeClient.deleteKey(keyArgs);
 
     keyArgs = createKeyArgs(volumeName, bucketName,
-        new ECReplicationConfig("rs-6-4-1024K"));
+        new ECReplicationConfig("rs-6-3-1024K"));
     try {
       keySession = writeClient.openKey(keyArgs);
       writeClient.commitKey(keyArgs, keySession.getId());
     } catch (Exception e) {
       //Expected Failure in preExecute due to not enough datanode
       Assertions.assertTrue(e.getMessage()
-          .contains("No enough datanodes to choose"));
+          .contains("No enough datanodes to choose"), e::getMessage);
     }
 
     omMetrics = getMetrics("OMMetrics");
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneConfigUtil.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneConfigUtil.java
index ce6c59dd72..7a54a9e211 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneConfigUtil.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneConfigUtil.java
@@ -21,6 +21,7 @@ import org.apache.hadoop.hdds.client.DefaultReplicationConfig;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.security.UserGroupInformation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -98,18 +99,20 @@ public final class OzoneConfigUtil {
       HddsProtos.ReplicationFactor clientFactor,
       HddsProtos.ECReplicationConfig clientECReplicationConfig,
       DefaultReplicationConfig bucketDefaultReplicationConfig,
-      ReplicationConfig omDefaultReplicationConfig) {
+      OzoneManager ozoneManager) throws OMException {
     ReplicationConfig replicationConfig = null;
     if (clientType != HddsProtos.ReplicationType.NONE) {
       // Client passed the replication config, so let's use it.
       replicationConfig = ReplicationConfig
           .fromProto(clientType, clientFactor, clientECReplicationConfig);
+
+      ozoneManager.validateReplicationConfig(replicationConfig);
     } else if (bucketDefaultReplicationConfig != null) {
       // type is NONE, so, let's look for the bucket defaults.
       replicationConfig = 
bucketDefaultReplicationConfig.getReplicationConfig();
     } else {
       // if bucket defaults also not available, then use server defaults.
-      replicationConfig = omDefaultReplicationConfig;
+      replicationConfig = ozoneManager.getDefaultReplicationConfig();
     }
     return replicationConfig;
   }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index cb76e91645..4de1120a44 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -67,6 +67,7 @@ import org.apache.hadoop.hdds.HddsConfigKeys;
 import org.apache.hadoop.hdds.HddsUtils;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.ReplicationConfigValidator;
 import org.apache.hadoop.hdds.client.ReplicationType;
 import org.apache.hadoop.hdds.conf.ConfigurationException;
 import org.apache.hadoop.hdds.conf.ConfigurationSource;
@@ -396,6 +397,8 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
       CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH;
   private OMLayoutVersionManager versionManager;
 
+  private final ReplicationConfigValidator replicationConfigValidator;
+
   private boolean allowListAllVolumes;
   // Adding parameters needed for VolumeRequests here, so that during request
   // execution, we can get from ozoneManager.
@@ -482,6 +485,8 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
 
     versionManager = new OMLayoutVersionManager(omStorage.getLayoutVersion());
     upgradeFinalizer = new OMUpgradeFinalizer(versionManager);
+    replicationConfigValidator =
+        conf.getObject(ReplicationConfigValidator.class);
 
     exitManager = new ExitManager();
 
@@ -4580,4 +4585,19 @@ public final class OzoneManager extends 
ServiceRuntimeInfoImpl
         newVal, admins);
     return String.valueOf(newVal);
   }
+
+  public void validateReplicationConfig(ReplicationConfig replicationConfig)
+      throws OMException {
+    try {
+      getReplicationConfigValidator().validate(replicationConfig);
+    } catch (IllegalArgumentException e) {
+      throw new OMException("Invalid replication config: " + replicationConfig,
+          OMException.ResultCodes.INVALID_REQUEST);
+    }
+  }
+
+  @VisibleForTesting
+  public ReplicationConfigValidator getReplicationConfigValidator() {
+    return replicationConfigValidator;
+  }
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
index defd716e15..3502616a92 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/bucket/OMBucketCreateRequest.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.crypto.CipherSuite;
 import org.apache.hadoop.crypto.key.KeyProvider;
 import org.apache.hadoop.crypto.key.KeyProviderCryptoExtension;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
+import org.apache.hadoop.hdds.client.DefaultReplicationConfig;
 import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
 import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 import org.apache.hadoop.ozone.ClientVersion;
@@ -127,6 +128,12 @@ public class OMBucketCreateRequest extends OMClientRequest 
{
           OMException.ResultCodes.INVALID_REQUEST);
     }
 
+    if (bucketInfo.hasDefaultReplicationConfig()) {
+      DefaultReplicationConfig drc = DefaultReplicationConfig.fromProto(
+          bucketInfo.getDefaultReplicationConfig());
+      ozoneManager.validateReplicationConfig(drc.getReplicationConfig());
+    }
+
     newCreateBucketRequest.setBucketInfo(newBucketInfo.build());
 
     return getOmRequest().toBuilder().setUserInfo(getUserInfo())
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 a7fea52cbd..9c4e5b64db 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
@@ -127,7 +127,7 @@ public class OMFileCreateRequest extends OMKeyRequest {
         .resolveReplicationConfigPreference(type, factor,
             keyArgs.getEcReplicationConfig(),
             bucketInfo.getDefaultReplicationConfig(),
-            ozoneManager.getDefaultReplicationConfig());
+            ozoneManager);
 
     // TODO: Here we are allocating block with out any check for
     //  bucket/key/volume or not and also with out any authorization checks.
@@ -248,7 +248,7 @@ public class OMFileCreateRequest extends OMKeyRequest {
           .resolveReplicationConfigPreference(keyArgs.getType(),
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               omBucketInfo.getDefaultReplicationConfig(),
-              ozoneManager.getDefaultReplicationConfig());
+              ozoneManager);
 
       omKeyInfo = prepareKeyInfo(omMetadataManager, keyArgs, dbKeyInfo,
           keyArgs.getDataSize(), locations, getFileEncryptionInfo(keyArgs),
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
index 64dc695911..279d564b94 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequestWithFSO.java
@@ -171,7 +171,7 @@ public class OMFileCreateRequestWithFSO extends 
OMFileCreateRequest {
           .resolveReplicationConfigPreference(keyArgs.getType(),
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               bucketInfo.getDefaultReplicationConfig(),
-              ozoneManager.getDefaultReplicationConfig());
+              ozoneManager);
 
       OmKeyInfo omFileInfo = prepareFileInfo(omMetadataManager, keyArgs,
               dbFileInfo, keyArgs.getDataSize(), locations,
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 73e5586808..7159c728c2 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
@@ -134,7 +134,7 @@ public class OMKeyCreateRequest extends OMKeyRequest {
           .resolveReplicationConfigPreference(type, factor,
               keyArgs.getEcReplicationConfig(),
               bucketInfo.getDefaultReplicationConfig(),
-              ozoneManager.getDefaultReplicationConfig());
+              ozoneManager);
 
       // TODO: Here we are allocating block with out any check for
       //  bucket/key/volume or not and also with out any authorization checks.
@@ -271,7 +271,7 @@ public class OMKeyCreateRequest extends OMKeyRequest {
           .resolveReplicationConfigPreference(keyArgs.getType(),
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               bucketInfo.getDefaultReplicationConfig(),
-              ozoneManager.getDefaultReplicationConfig());
+              ozoneManager);
 
       omKeyInfo = prepareKeyInfo(omMetadataManager, keyArgs, dbKeyInfo,
           keyArgs.getDataSize(), locations, getFileEncryptionInfo(keyArgs),
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
index d8d567ed91..89f42bf85c 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequestWithFSO.java
@@ -157,7 +157,7 @@ public class OMKeyCreateRequestWithFSO extends 
OMKeyCreateRequest {
           .resolveReplicationConfigPreference(keyArgs.getType(),
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               bucketInfo.getDefaultReplicationConfig(),
-              ozoneManager.getDefaultReplicationConfig());
+              ozoneManager);
 
       OmKeyInfo omFileInfo = prepareFileInfo(omMetadataManager, keyArgs,
               dbFileInfo, keyArgs.getDataSize(), locations,
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 26646ddbe9..c753fb4c62 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
@@ -182,7 +182,7 @@ public class S3InitiateMultipartUploadRequest extends 
OMKeyRequest {
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               bucketInfo != null ?
                   bucketInfo.getDefaultReplicationConfig() :
-                  null, ozoneManager.getDefaultReplicationConfig());
+                  null, ozoneManager);
 
       multipartKeyInfo = new OmMultipartKeyInfo.Builder()
           .setUploadID(keyArgs.getMultipartUploadID())
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
index f6b30c63b5..bcfaa8e6a0 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/multipart/S3InitiateMultipartUploadRequestWithFSO.java
@@ -163,7 +163,7 @@ public class S3InitiateMultipartUploadRequestWithFSO
               keyArgs.getFactor(), keyArgs.getEcReplicationConfig(),
               bucketInfo != null ?
                   bucketInfo.getDefaultReplicationConfig() :
-                  null, ozoneManager.getDefaultReplicationConfig());
+                  null, ozoneManager);
 
       multipartKeyInfo = new OmMultipartKeyInfo.Builder()
           .setUploadID(keyArgs.getMultipartUploadID())
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneConfigUtil.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneConfigUtil.java
index 48a6f69676..6efaf575a9 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneConfigUtil.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/TestOzoneConfigUtil.java
@@ -24,11 +24,15 @@ import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
 import java.util.Arrays;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
 /**
  * Tests the server side replication config preference logic.
  */
@@ -44,14 +48,23 @@ public class TestOzoneConfigUtil {
       new DefaultReplicationConfig(
           new ECReplicationConfig(clientECReplicationConfig));
 
+  private OzoneManager ozoneManager;
+
+  @Before
+  public void setup() {
+    ozoneManager = mock(OzoneManager.class);
+    when(ozoneManager.getDefaultReplicationConfig())
+        .thenReturn(ratis3ReplicationConfig);
+  }
+
   /**
    * Tests EC bucket defaults.
    */
   @Test
-  public void testResolveClientSideRepConfigWhenBucketHasEC() {
+  public void testResolveClientSideRepConfigWhenBucketHasEC() throws Exception 
{
     ReplicationConfig replicationConfig = OzoneConfigUtil
         .resolveReplicationConfigPreference(noneType, zeroFactor,
-            clientECReplicationConfig, bucketECConfig, 
ratis3ReplicationConfig);
+            clientECReplicationConfig, bucketECConfig, ozoneManager);
     // Client has no preference, so we should bucket defaults as we passed.
     Assert.assertEquals(bucketECConfig.getReplicationConfig(),
         replicationConfig);
@@ -61,10 +74,11 @@ public class TestOzoneConfigUtil {
    * Tests server defaults.
    */
   @Test
-  public void testResolveClientSideRepConfigWithNoClientAndBucketDefaults() {
+  public void testResolveClientSideRepConfigWithNoClientAndBucketDefaults()
+      throws Exception {
     ReplicationConfig replicationConfig = OzoneConfigUtil
         .resolveReplicationConfigPreference(noneType, zeroFactor,
-            clientECReplicationConfig, null, ratis3ReplicationConfig);
+            clientECReplicationConfig, null, ozoneManager);
     // Client has no preference, no bucket defaults, so it should return server
     // defaults.
     Assert.assertEquals(ratis3ReplicationConfig, replicationConfig);
@@ -74,11 +88,12 @@ public class TestOzoneConfigUtil {
    * Tests client preference of EC.
    */
   @Test
-  public void testResolveClientSideRepConfigWhenClientPassEC() {
+  public void testResolveClientSideRepConfigWhenClientPassEC()
+      throws Exception {
     ReplicationConfig replicationConfig = OzoneConfigUtil
         .resolveReplicationConfigPreference(HddsProtos.ReplicationType.EC,
             zeroFactor, clientECReplicationConfig, null,
-            ratis3ReplicationConfig);
+            ozoneManager);
     // Client has preference of type EC, no bucket defaults, so it should 
return
     // client preference.
     Assert.assertEquals(new ECReplicationConfig("rs-3-2-1024K"),
@@ -89,7 +104,8 @@ public class TestOzoneConfigUtil {
    * Tests bucket ratis defaults.
    */
   @Test
-  public void testResolveClientSideRepConfigWhenBucketHasEC3() {
+  public void testResolveClientSideRepConfigWhenBucketHasEC3()
+      throws Exception {
     ReplicationConfig ratisReplicationConfig =
         RatisReplicationConfig.getInstance(HddsProtos.ReplicationFactor.THREE);
     DefaultReplicationConfig ratisBucketDefaults =
@@ -97,7 +113,7 @@ public class TestOzoneConfigUtil {
     ReplicationConfig replicationConfig = OzoneConfigUtil
         .resolveReplicationConfigPreference(noneType, zeroFactor,
             clientECReplicationConfig, ratisBucketDefaults,
-            ratis3ReplicationConfig);
+            ozoneManager);
     // Client has no preference of type and bucket has ratis defaults, so it
     // should return ratis.
     Assert.assertEquals(ratisReplicationConfig, replicationConfig);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
index 83d3602cb7..a182e0c948 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/ratis/TestOzoneManagerDoubleBufferWithOMResponse.java
@@ -39,6 +39,7 @@ import 
org.apache.hadoop.ozone.om.request.bucket.OMBucketDeleteRequest;
 import org.apache.hadoop.ozone.om.request.volume.OMVolumeCreateRequest;
 import org.apache.hadoop.ozone.om.response.OMClientResponse;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
+import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.BucketInfo;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -63,6 +64,7 @@ import org.apache.hadoop.util.Daemon;
 import org.mockito.Mockito;
 
 import static org.apache.hadoop.ozone.OzoneConsts.TRANSACTION_INFO_KEY;
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newBucketInfoBuilder;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
@@ -467,9 +469,11 @@ public class TestOzoneManagerDoubleBufferWithOMResponse {
   private OMBucketCreateResponse createBucket(String volumeName,
       String bucketName, long transactionID)  {
 
+    BucketInfo.Builder bucketInfo =
+        newBucketInfoBuilder(bucketName, volumeName)
+            .setStorageType(OzoneManagerProtocolProtos.StorageTypeProto.DISK);
     OzoneManagerProtocolProtos.OMRequest omRequest =
-        OMRequestTestUtils.createBucketRequest(bucketName, volumeName, false,
-            OzoneManagerProtocolProtos.StorageTypeProto.DISK);
+        OMRequestTestUtils.newCreateBucketRequest(bucketInfo).build();
 
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(omRequest);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
index de5f93735d..5ba1d51c32 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/OMRequestTestUtils.java
@@ -28,6 +28,8 @@ import java.util.UUID;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.client.BlockID;
 import org.apache.hadoop.hdds.client.ReplicationConfig;
+import org.apache.hadoop.hdds.client.ReplicationConfigValidator;
+import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
 import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
@@ -37,6 +39,8 @@ import org.apache.hadoop.ozone.OzoneAcl;
 import org.apache.hadoop.ozone.OzoneConsts;
 import org.apache.hadoop.ozone.om.OMConfigKeys;
 import org.apache.hadoop.ozone.om.OMMetadataManager;
+import org.apache.hadoop.ozone.om.OzoneManager;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
@@ -48,6 +52,7 @@ import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.BucketLayout;
 import org.apache.hadoop.ozone.om.helpers.SnapshotInfo;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
+import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.BucketInfo;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.CreateTenantRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.DeleteTenantRequest;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.GetS3VolumeContextRequest;
@@ -90,6 +95,10 @@ import org.apache.hadoop.util.Time;
 import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
 import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.when;
+
 /**
  * Helper class to test OMClientRequest classes.
  */
@@ -581,47 +590,26 @@ public final class OMRequestTestUtils {
         CacheValue.get(1L, omBucketInfo));
   }
 
-  public static OzoneManagerProtocolProtos.OMRequest createBucketRequest(
-      String bucketName, String volumeName, boolean isVersionEnabled,
-      OzoneManagerProtocolProtos.StorageTypeProto storageTypeProto) {
-    OzoneManagerProtocolProtos.BucketInfo bucketInfo =
-        OzoneManagerProtocolProtos.BucketInfo.newBuilder()
-            .setBucketName(bucketName)
-            .setVolumeName(volumeName)
-            .setIsVersionEnabled(isVersionEnabled)
-            .setStorageType(storageTypeProto)
-            .addAllMetadata(getMetadataList()).build();
+  public static BucketInfo.Builder newBucketInfoBuilder(
+      String bucketName, String volumeName) {
+    return BucketInfo.newBuilder()
+        .setBucketName(bucketName)
+        .setVolumeName(volumeName)
+        .setStorageType(OzoneManagerProtocolProtos.StorageTypeProto.SSD)
+        .setIsVersionEnabled(false)
+        .addAllMetadata(getMetadataList());
+  }
+
+  public static OMRequest.Builder newCreateBucketRequest(
+      BucketInfo.Builder bucketInfo) {
     OzoneManagerProtocolProtos.CreateBucketRequest.Builder req =
         OzoneManagerProtocolProtos.CreateBucketRequest.newBuilder();
     req.setBucketInfo(bucketInfo);
-    return OzoneManagerProtocolProtos.OMRequest.newBuilder()
+    return OMRequest.newBuilder()
         .setCreateBucketRequest(req)
         .setVersion(ClientVersion.CURRENT_VERSION)
         .setCmdType(OzoneManagerProtocolProtos.Type.CreateBucket)
-        .setClientId(UUID.randomUUID().toString()).build();
-  }
-
-  public static OzoneManagerProtocolProtos.OMRequest createBucketReqFSO(
-          String bucketName, String volumeName, boolean isVersionEnabled,
-          OzoneManagerProtocolProtos.StorageTypeProto storageTypeProto) {
-    OzoneManagerProtocolProtos.BucketInfo bucketInfo =
-        OzoneManagerProtocolProtos.BucketInfo.newBuilder()
-            .setBucketName(bucketName)
-            .setVolumeName(volumeName)
-            .setIsVersionEnabled(isVersionEnabled)
-            .setStorageType(storageTypeProto)
-            .addAllMetadata(getMetadataListFSO()).setBucketLayout(
-                OzoneManagerProtocolProtos.BucketLayoutProto.
-                    FILE_SYSTEM_OPTIMIZED)
-            .build();
-    OzoneManagerProtocolProtos.CreateBucketRequest.Builder req =
-            OzoneManagerProtocolProtos.CreateBucketRequest.newBuilder();
-    req.setBucketInfo(bucketInfo);
-    return OzoneManagerProtocolProtos.OMRequest.newBuilder()
-            .setCreateBucketRequest(req)
-            .setVersion(ClientVersion.CURRENT_VERSION)
-            .setCmdType(OzoneManagerProtocolProtos.Type.CreateBucket)
-            .setClientId(UUID.randomUUID().toString()).build();
+        .setClientId(UUID.randomUUID().toString());
   }
 
   public static List< HddsProtos.KeyValue> getMetadataList() {
@@ -633,16 +621,11 @@ public final class OMRequestTestUtils {
     return metadataList;
   }
 
-  public static List< HddsProtos.KeyValue> getMetadataListFSO() {
-    List<HddsProtos.KeyValue> metadataList = new ArrayList<>();
-    metadataList.add(HddsProtos.KeyValue.newBuilder().setKey("key1").setValue(
-            "value1").build());
-    metadataList.add(HddsProtos.KeyValue.newBuilder().setKey("key2").setValue(
-            "value2").build());
-    metadataList.add(HddsProtos.KeyValue.newBuilder().setKey(
-            OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS).setValue(
-            "false").build());
-    return metadataList;
+  public static HddsProtos.KeyValue fsoMetadata() {
+    return HddsProtos.KeyValue.newBuilder()
+        .setKey(OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM_PATHS)
+        .setValue(Boolean.FALSE.toString())
+        .build();
   }
 
   /**
@@ -1350,4 +1333,14 @@ public final class OMRequestTestUtils {
   private static BucketLayout getDefaultBucketLayout() {
     return BucketLayout.DEFAULT;
   }
+
+  public static void setupReplicationConfigValidation(
+      OzoneManager ozoneManager, ConfigurationSource ozoneConfiguration)
+      throws OMException {
+    ReplicationConfigValidator validator =
+        ozoneConfiguration.getObject(ReplicationConfigValidator.class);
+    when(ozoneManager.getReplicationConfigValidator())
+        .thenReturn(validator);
+    doCallRealMethod().when(ozoneManager).validateReplicationConfig(any());
+  }
 }
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
index c31bf00933..df53dc972d 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/TestOMClientRequestWithUserInfo.java
@@ -24,6 +24,8 @@ import java.util.UUID;
 
 import mockit.Mock;
 import mockit.MockUp;
+import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.BucketInfo;
+import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -42,6 +44,8 @@ import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.hadoop.ozone.om.request.bucket.OMBucketCreateRequest;
 import org.apache.hadoop.security.UserGroupInformation;
 
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newBucketInfoBuilder;
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newCreateBucketRequest;
 import static org.mockito.Mockito.when;
 
 /**
@@ -93,16 +97,18 @@ public class TestOMClientRequestWithUserInfo {
 
     String bucketName = UUID.randomUUID().toString();
     String volumeName = UUID.randomUUID().toString();
-    OzoneManagerProtocolProtos.OMRequest omRequest =
-        OMRequestTestUtils.createBucketRequest(bucketName, volumeName, true,
-            OzoneManagerProtocolProtos.StorageTypeProto.DISK);
+    BucketInfo.Builder bucketInfo =
+        newBucketInfoBuilder(bucketName, volumeName)
+            .setIsVersionEnabled(true)
+            .setStorageType(OzoneManagerProtocolProtos.StorageTypeProto.DISK);
+    OMRequest omRequest = newCreateBucketRequest(bucketInfo).build();
 
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(omRequest);
 
     Assert.assertFalse(omRequest.hasUserInfo());
 
-    OzoneManagerProtocolProtos.OMRequest modifiedRequest =
+    OMRequest modifiedRequest =
         omBucketCreateRequest.preExecute(ozoneManager);
 
     Assert.assertTrue(modifiedRequest.hasUserInfo());
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
index 1f5565aa34..1b6923ed44 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestBucketRequest.java
@@ -38,6 +38,7 @@ import org.apache.hadoop.ozone.om.OzoneManager;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
 
 
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.setupReplicationConfigValidation;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -78,6 +79,9 @@ public class TestBucketRequest {
     when(ozoneManager.getOMDefaultBucketLayout()).thenReturn(
         BucketLayout.fromString(
             OMConfigKeys.OZONE_DEFAULT_BUCKET_LAYOUT_DEFAULT));
+
+    setupReplicationConfigValidation(ozoneManager, ozoneConfiguration);
+
     OMLayoutVersionManager lvm = mock(OMLayoutVersionManager.class);
     when(lvm.getMetadataLayoutVersion()).thenReturn(0);
     when(ozoneManager.getVersionManager()).thenReturn(lvm);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
index d48086f0ad..f860b559a0 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequest.java
@@ -21,6 +21,8 @@ package org.apache.hadoop.ozone.om.request.bucket;
 
 import java.util.UUID;
 
+import org.apache.hadoop.hdds.client.DefaultReplicationConfig;
+import org.apache.hadoop.hdds.client.ECReplicationConfig;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.helpers.BucketLayout;
 import org.apache.ozone.test.LambdaTestUtils;
@@ -41,6 +43,10 @@ import org.apache.hadoop.ozone.om.response.OMClientResponse;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import org.apache.hadoop.util.Time;
 
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newBucketInfoBuilder;
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newCreateBucketRequest;
+import static org.junit.Assert.assertThrows;
+
 /**
  * Tests OMBucketCreateRequest class, which handles CreateBucket request.
  */
@@ -51,6 +57,10 @@ public class TestOMBucketCreateRequest extends 
TestBucketRequest {
     String volumeName = UUID.randomUUID().toString();
     String bucketName = UUID.randomUUID().toString();
     doPreExecute(volumeName, bucketName);
+  }
+
+  @Test
+  public void preExecuteRejectsInvalidBucketName() throws Exception {
     // Verify invalid bucket name throws exception
     LambdaTestUtils.intercept(OMException.class, "Invalid bucket name: b1",
         () -> doPreExecute("volume1", "b1"));
@@ -75,8 +85,9 @@ public class TestOMBucketCreateRequest extends 
TestBucketRequest {
     String volumeName = UUID.randomUUID().toString();
     String bucketName = UUID.randomUUID().toString();
 
-    OMRequest originalRequest = OMRequestTestUtils.createBucketRequest(
-        bucketName, volumeName, false, StorageTypeProto.SSD);
+    OMRequest originalRequest = newCreateBucketRequest(
+        newBucketInfoBuilder(bucketName, volumeName))
+        .build();
 
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(originalRequest);
@@ -124,6 +135,25 @@ public class TestOMBucketCreateRequest extends 
TestBucketRequest {
         omResponse.getStatus());
   }
 
+  @Test
+  public void preExecuteRejectsInvalidReplication() {
+    String volumeName = UUID.randomUUID().toString();
+    String bucketName = UUID.randomUUID().toString();
+
+    OzoneManagerProtocolProtos.BucketInfo.Builder bucketInfo =
+        newBucketInfoBuilder(bucketName, volumeName);
+
+    ECReplicationConfig invalidReplication = new ECReplicationConfig(1, 2);
+    bucketInfo.setDefaultReplicationConfig(
+        new DefaultReplicationConfig(invalidReplication).toProto());
+
+    OMException e = assertThrows(OMException.class,
+        () -> doPreExecute(bucketInfo));
+
+    Assert.assertEquals(OMException.ResultCodes.INVALID_REQUEST,
+        e.getResult());
+  }
+
   @Test
   public void testValidateAndUpdateCacheVerifyBucketLayout() throws Exception {
     String volumeName = UUID.randomUUID().toString();
@@ -195,9 +225,9 @@ public class TestOMBucketCreateRequest extends 
TestBucketRequest {
     OMRequestTestUtils.addVolumeToDB(volumeName, omMetadataManager, 1000L);
 
     // create a bucket with no quota
-    OMRequest originalRequest =
-        OMRequestTestUtils.createBucketRequest(bucketName, volumeName, false,
-            StorageTypeProto.SSD);
+    OMRequest originalRequest = newCreateBucketRequest(
+        newBucketInfoBuilder(bucketName, volumeName))
+        .build();
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(originalRequest);
     OMRequest modifiedRequest = omBucketCreateRequest.preExecute(ozoneManager);
@@ -212,10 +242,16 @@ public class TestOMBucketCreateRequest extends 
TestBucketRequest {
 
   private OMBucketCreateRequest doPreExecute(String volumeName,
       String bucketName) throws Exception {
-    addCreateVolumeToTable(volumeName, omMetadataManager);
-    OMRequest originalRequest =
-        OMRequestTestUtils.createBucketRequest(bucketName, volumeName, false,
-            StorageTypeProto.SSD);
+    return doPreExecute(newBucketInfoBuilder(bucketName, volumeName));
+  }
+
+  private OMBucketCreateRequest doPreExecute(
+      OzoneManagerProtocolProtos.BucketInfo.Builder bucketInfo)
+      throws Exception {
+
+    addCreateVolumeToTable(bucketInfo.getVolumeName(), omMetadataManager);
+
+    OMRequest originalRequest = newCreateBucketRequest(bucketInfo).build();
 
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(originalRequest);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequestWithFSO.java
index 7df316c068..230cb73cbc 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/bucket/TestOMBucketCreateRequestWithFSO.java
@@ -24,14 +24,17 @@ import org.apache.hadoop.ozone.om.helpers.BucketLayout;
 import org.apache.hadoop.ozone.om.helpers.OmBucketInfo;
 import org.apache.hadoop.ozone.om.request.OMRequestTestUtils;
 import org.apache.hadoop.ozone.om.response.OMClientResponse;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
-import 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.StorageTypeProto;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.UUID;
 
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newBucketInfoBuilder;
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.newCreateBucketRequest;
+import static 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.BucketLayoutProto.FILE_SYSTEM_OPTIMIZED;
 import static org.mockito.Mockito.when;
 
 /**
@@ -109,18 +112,16 @@ public class TestOMBucketCreateRequestWithFSO
       throws Exception {
     addCreateVolumeToTable(volumeName, omMetadataManager);
 
-    OMRequest originalRequest;
+    OzoneManagerProtocolProtos.BucketInfo.Builder bucketInfo =
+        newBucketInfoBuilder(bucketName, volumeName);
 
     if (layoutFSOFromCli) {
-      originalRequest =
-          OMRequestTestUtils.createBucketReqFSO(bucketName, volumeName,
-              false, StorageTypeProto.SSD);
-    } else {
-      originalRequest = OMRequestTestUtils
-          .createBucketRequest(bucketName, volumeName,
-              false, StorageTypeProto.SSD);
+      bucketInfo
+          .setBucketLayout(FILE_SYSTEM_OPTIMIZED)
+          .addMetadata(OMRequestTestUtils.fsoMetadata());
     }
 
+    OMRequest originalRequest = newCreateBucketRequest(bucketInfo).build();
     OMBucketCreateRequest omBucketCreateRequest =
         new OMBucketCreateRequest(originalRequest);
 
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 fbd4bd9873..9a834a829c 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
@@ -58,6 +58,7 @@ import static 
org.apache.hadoop.ozone.om.OMConfigKeys.OZONE_OM_ENABLE_FILESYSTEM
 import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.addVolumeAndBucketToDB;
 import static 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.NOT_A_FILE;
 import static 
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status.OK;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.when;
 
@@ -123,6 +124,15 @@ public class TestOMKeyCreateRequest extends 
TestOMKeyRequest {
     }
   }
 
+  @Test
+  public void preExecuteRejectsInvalidReplication() {
+    ECReplicationConfig invalidReplication = new ECReplicationConfig(1, 2);
+    OMException e = assertThrows(OMException.class,
+        () -> preExecuteTest(false, 0, invalidReplication));
+
+    Assert.assertEquals(OMException.ResultCodes.INVALID_REQUEST,
+        e.getResult());
+  }
 
   @Test
   public void testValidateAndUpdateCache() throws Exception {
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
index 6b81d5b2eb..63b94313f3 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyRequest.java
@@ -69,6 +69,7 @@ import org.apache.hadoop.ozone.om.ScmClient;
 import org.apache.hadoop.hdds.security.token.OzoneBlockTokenSecretManager;
 import org.apache.hadoop.util.Time;
 
+import static 
org.apache.hadoop.ozone.om.request.OMRequestTestUtils.setupReplicationConfigValidation;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.anyLong;
@@ -143,6 +144,8 @@ public class TestOMKeyRequest {
         new 
OmBucketInfo.Builder().setVolumeName("").setBucketName("").build());
     Mockito.doNothing().when(auditLogger).logWrite(any(AuditMessage.class));
 
+    setupReplicationConfigValidation(ozoneManager, ozoneConfiguration);
+
     scmClient = Mockito.mock(ScmClient.class);
     ozoneBlockTokenSecretManager =
         Mockito.mock(OzoneBlockTokenSecretManager.class);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to