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]