You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by di...@apache.org on 2020/04/03 18:52:58 UTC

[hadoop-ozone] branch master updated: HDDS-3224. Enforce volume and bucket name rule at create time. (#718)

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

dineshc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hadoop-ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 065d443  HDDS-3224. Enforce volume and bucket name rule at create time. (#718)
065d443 is described below

commit 065d4434c45d0701feadf41b6214aa09db21a703
Author: Siddharth <sw...@apache.org>
AuthorDate: Fri Apr 3 11:52:51 2020 -0700

    HDDS-3224. Enforce volume and bucket name rule at create time. (#718)
---
 .../apache/hadoop/ozone/client/rpc/RpcClient.java  |  9 ++-----
 .../main/java/org/apache/hadoop/ozone/OmUtils.java | 28 ++++++++++++++++++++++
 .../hadoop/ozone/om/exceptions/OMException.java    |  2 ++
 .../src/main/proto/OzoneManagerProtocol.proto      |  2 ++
 .../dist/src/main/compose/ozone-mr/common-config   |  2 +-
 .../src/main/compose/ozone-om-ha/docker-config     |  2 +-
 .../dist/src/main/compose/ozonesecure-mr/README.md | 12 +++++-----
 .../src/main/compose/ozonesecure-mr/docker-config  |  2 +-
 .../dist/src/main/smoketest/createbucketenv.robot  |  2 +-
 .../dist/src/main/smoketest/createmrenv.robot      |  4 ++--
 .../dist/src/main/smoketest/mapreduce.robot        |  4 ++--
 .../src/main/smoketest/ozonefs/hadoopo3fs.robot    |  4 ++--
 .../om/request/bucket/OMBucketCreateRequest.java   |  4 ++++
 .../request/s3/bucket/S3BucketCreateRequest.java   | 13 +++-------
 .../om/request/volume/OMVolumeCreateRequest.java   |  6 +++--
 .../request/bucket/TestOMBucketCreateRequest.java  |  5 ++++
 .../s3/bucket/TestS3BucketCreateRequest.java       |  4 ++--
 .../request/volume/TestOMVolumeCreateRequest.java  |  5 ++++
 .../hadoop/ozone/freon/BaseFreonGenerator.java     |  2 +-
 19 files changed, 74 insertions(+), 38 deletions(-)

diff --git a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
index ab930e8..5836017 100644
--- a/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
+++ b/hadoop-ozone/client/src/main/java/org/apache/hadoop/ozone/client/rpc/RpcClient.java
@@ -33,6 +33,7 @@ import org.apache.hadoop.hdds.protocol.datanode.proto.ContainerProtos
 import org.apache.hadoop.hdds.scm.client.HddsClientUtils;
 import org.apache.hadoop.hdds.tracing.TracingUtil;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.ozone.OzoneConfigKeys;
 import org.apache.hadoop.ozone.OzoneConsts;
 import org.apache.hadoop.ozone.OzoneSecurityUtil;
@@ -47,7 +48,6 @@ import org.apache.hadoop.ozone.client.io.LengthInputStream;
 import org.apache.hadoop.ozone.client.io.OzoneInputStream;
 import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
 import org.apache.hadoop.ozone.client.protocol.ClientProtocol;
-import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.ha.OMFailoverProxyProvider;
 import org.apache.hadoop.ozone.om.helpers.BucketEncryptionKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.OmBucketArgs;
@@ -763,12 +763,7 @@ public class RpcClient implements ClientProtocol {
 
     Preconditions.checkArgument(Strings.isNotBlank(s3BucketName), "bucket " +
         "name cannot be null or empty.");
-    try {
-      HddsClientUtils.verifyResourceName(s3BucketName);
-    } catch (IllegalArgumentException exception) {
-      throw new OMException("Invalid bucket name: " + s3BucketName,
-          OMException.ResultCodes.INVALID_BUCKET_NAME);
-    }
+    OmUtils.validateBucketName(s3BucketName);
     ozoneManagerClient.createS3Bucket(userName, s3BucketName);
   }
 
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
index 3552e79..44333c6 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/OmUtils.java
@@ -49,8 +49,10 @@ import org.apache.commons.compress.compressors.CompressorStreamFactory;
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdds.scm.client.HddsClientUtils;
 import org.apache.hadoop.hdds.utils.db.DBCheckpoint;
 import org.apache.hadoop.net.NetUtils;
+import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.helpers.OmKeyInfo;
 import org.apache.hadoop.ozone.om.helpers.RepeatedOmKeyInfo;
 import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
@@ -528,4 +530,30 @@ public final class OmUtils {
 
     return repeatedOmKeyInfo;
   }
+
+  /**
+   * Verify volume name is a valid DNS name.
+   */
+  public static void validateVolumeName(String volumeName) throws OMException {
+    try {
+      HddsClientUtils.verifyResourceName(volumeName);
+    } catch (IllegalArgumentException e) {
+      throw new OMException("Invalid volume name: " + volumeName,
+          OMException.ResultCodes.INVALID_VOLUME_NAME);
+    }
+  }
+
+  /**
+   * Verify bucket name is a valid DNS name.
+   */
+  public static void validateBucketName(String bucketName)
+      throws OMException {
+    try {
+      HddsClientUtils.verifyResourceName(bucketName);
+    } catch (IllegalArgumentException e) {
+      throw new OMException("Invalid bucket name: " + bucketName,
+          OMException.ResultCodes.INVALID_BUCKET_NAME);
+    }
+  }
+
 }
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
index 279fda7..cb01c81 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/exceptions/OMException.java
@@ -227,6 +227,8 @@ public class OMException extends IOException {
 
     DIRECTORY_ALREADY_EXISTS,
 
+    INVALID_VOLUME_NAME,
+
     REPLAY // When ratis logs are replayed.
   }
 }
diff --git a/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto b/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto
index 5237136..21a0b31 100644
--- a/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto
+++ b/hadoop-ozone/common/src/main/proto/OzoneManagerProtocol.proto
@@ -315,6 +315,8 @@ enum Status {
     CANNOT_CREATE_DIRECTORY_AT_ROOT = 59;
     DIRECTORY_ALREADY_EXISTS = 60;
 
+    INVALID_VOLUME_NAME = 61;
+
     // When transactions are replayed
     REPLAY = 100;
 }
diff --git a/hadoop-ozone/dist/src/main/compose/ozone-mr/common-config b/hadoop-ozone/dist/src/main/compose/ozone-mr/common-config
index a356c92..46e7527 100644
--- a/hadoop-ozone/dist/src/main/compose/ozone-mr/common-config
+++ b/hadoop-ozone/dist/src/main/compose/ozone-mr/common-config
@@ -30,7 +30,7 @@ OZONE-SITE.XML_hdds.datanode.dir=/data/hdds
 HDFS-SITE.XML_dfs.datanode.address=0.0.0.0:1019
 HDFS-SITE.XML_dfs.datanode.http.address=0.0.0.0:1012
 
-CORE-SITE.xml_fs.defaultFS=o3fs://bucket1.vol1/
+CORE-SITE.xml_fs.defaultFS=o3fs://bucket1.volume1/
 
 MAPRED-SITE.XML_mapreduce.framework.name=yarn
 MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=$HADOOP_HOME
diff --git a/hadoop-ozone/dist/src/main/compose/ozone-om-ha/docker-config b/hadoop-ozone/dist/src/main/compose/ozone-om-ha/docker-config
index feafda9..d589210 100644
--- a/hadoop-ozone/dist/src/main/compose/ozone-om-ha/docker-config
+++ b/hadoop-ozone/dist/src/main/compose/ozone-om-ha/docker-config
@@ -15,7 +15,7 @@
 # limitations under the License.
 
 CORE-SITE.XML_fs.o3fs.impl=org.apache.hadoop.fs.ozone.OzoneFileSystem
-CORE-SITE.XML_fs.defaultFS=o3fs://bucket.volume.omservice
+CORE-SITE.XML_fs.defaultFS=o3fs://bucket1.volume1.omservice
 OZONE-SITE.XML_ozone.om.service.ids=omservice
 OZONE-SITE.XML_ozone.om.nodes.omservice=om1,om2,om3
 OZONE-SITE.XML_ozone.om.address.omservice.om1=om1
diff --git a/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/README.md b/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/README.md
index 1426270..63a09a9 100644
--- a/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/README.md
+++ b/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/README.md
@@ -31,13 +31,13 @@ docker-compose exec om bash
 
 kinit -kt /etc/security/keytabs/testuser.keytab testuser/om@EXAMPLE.COM
 
-ozone sh volume create /vol1
+ozone sh volume create /volume1
 
-ozone sh bucket create /vol1/bucket1
+ozone sh bucket create /volume1/bucket1
 
-ozone sh key put /vol1/bucket1/key1 LICENSE.txt
+ozone sh key put /volume1/bucket1/key1 LICENSE.txt
 
-ozone fs -ls o3fs://bucket1.vol1/
+ozone fs -ls o3fs://bucket1.volume1/
 ```
 
 ## Yarn Resource Manager Setup
@@ -57,7 +57,7 @@ hadoop fs -mkdir /user/hadoop
 
 ### WordCount
 ```
-yarn jar $HADOOP_MAPRED_HOME/hadoop-mapreduce-examples-*.jar wordcount o3fs://bucket1.vol1/key1 o3fs://bucket1.vol1/key1.count
+yarn jar $HADOOP_MAPRED_HOME/hadoop-mapreduce-examples-*.jar wordcount o3fs://bucket1.volume1/key1 o3fs://bucket1.volume1/key1.count
 
 hadoop fs -cat /key1.count/part-r-00000
 ```
@@ -69,5 +69,5 @@ yarn jar $HADOOP_MAPRED_HOME/hadoop-mapreduce-examples-*.jar pi 10 100
 
 ### RandomWrite
 ```
-yarn jar $HADOOP_MAPRED_HOME/hadoop-mapreduce-examples-*.jar randomwriter -Dtest.randomwrite.total_bytes=10000000  o3fs://bucket1.vol1/randomwrite.out
+yarn jar $HADOOP_MAPRED_HOME/hadoop-mapreduce-examples-*.jar randomwriter -Dtest.randomwrite.total_bytes=10000000  o3fs://bucket1.volume1/randomwrite.out
 ```
diff --git a/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/docker-config b/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/docker-config
index f0b7f5c..0b08316 100644
--- a/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/docker-config
+++ b/hadoop-ozone/dist/src/main/compose/ozonesecure-mr/docker-config
@@ -64,7 +64,7 @@ HDFS-SITE.XML_rpc.metrics.quantile.enable=true
 HDFS-SITE.XML_rpc.metrics.percentiles.intervals=60,300
 
 CORE-SITE.XML_fs.AbstractFileSystem.o3fs.impl=org.apache.hadoop.fs.ozone.OzFs
-CORE-SITE.XML_fs.defaultFS=o3fs://bucket1.vol1/
+CORE-SITE.XML_fs.defaultFS=o3fs://bucket1.volume1/
 
 MAPRED-SITE.XML_mapreduce.framework.name=yarn
 MAPRED-SITE.XML_yarn.app.mapreduce.am.env=HADOOP_MAPRED_HOME=$HADOOP_HOME
diff --git a/hadoop-ozone/dist/src/main/smoketest/createbucketenv.robot b/hadoop-ozone/dist/src/main/smoketest/createbucketenv.robot
index da97001..c89abfc 100644
--- a/hadoop-ozone/dist/src/main/smoketest/createbucketenv.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/createbucketenv.robot
@@ -21,7 +21,7 @@ Test Timeout        2 minute
 
 
 *** Variables ***
-${volume}       vol1
+${volume}       volume1
 ${bucket}       bucket1
 
 
diff --git a/hadoop-ozone/dist/src/main/smoketest/createmrenv.robot b/hadoop-ozone/dist/src/main/smoketest/createmrenv.robot
index 2f93e6c..579fdde 100644
--- a/hadoop-ozone/dist/src/main/smoketest/createmrenv.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/createmrenv.robot
@@ -21,7 +21,7 @@ Test Timeout        2 minute
 
 
 *** Variables ***
-${volume}       vol1
+${volume}       volume1
 ${bucket}       bucket1
 
 
@@ -40,7 +40,7 @@ Create test volume, bucket and key
                     Run Keyword if      "BUCKET_NOT_FOUND" in """${result}"""       Create bucket
     ${result} =     Execute             ozone sh bucket info /${volume}/${bucket}
                     Should not contain  ${result}  NOT_FOUND
-                    Execute             ozone sh key put /vol1/bucket1/key1 LICENSE.txt
+                    Execute             ozone sh key put /volume1/bucket1/key1 LICENSE.txt
 
 Create user dir for hadoop
          Execute        ozone fs -mkdir /user
diff --git a/hadoop-ozone/dist/src/main/smoketest/mapreduce.robot b/hadoop-ozone/dist/src/main/smoketest/mapreduce.robot
index 789ec4f..c1e3285 100644
--- a/hadoop-ozone/dist/src/main/smoketest/mapreduce.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/mapreduce.robot
@@ -21,7 +21,7 @@ Test Timeout        4 minute
 
 
 *** Variables ***
-${volume}          vol1
+${volume}          volume1
 ${bucket}          bucket1
 ${hadoop.version}  3.2.0
 
@@ -33,5 +33,5 @@ Execute PI calculation
 
 Execute WordCount
                     ${random}        Generate Random String  2   [NUMBERS]
-                    ${output} =      Execute                 yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-${hadoop.version}.jar wordcount o3fs://bucket1.vol1/key1 o3fs://bucket1.vol1/key1-${random}.count
+                    ${output} =      Execute                 yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-${hadoop.version}.jar wordcount o3fs://bucket1.volume1/key1 o3fs://bucket1.volume1/key1-${random}.count
                     Should Contain   ${output}               completed successfully
diff --git a/hadoop-ozone/dist/src/main/smoketest/ozonefs/hadoopo3fs.robot b/hadoop-ozone/dist/src/main/smoketest/ozonefs/hadoopo3fs.robot
index 3336b39..df9f3af 100644
--- a/hadoop-ozone/dist/src/main/smoketest/ozonefs/hadoopo3fs.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/ozonefs/hadoopo3fs.robot
@@ -28,6 +28,6 @@ ${PREFIX}               ozone
 
 Test hadoop dfs
     ${random} =        Generate Random String  5  [NUMBERS]
-    ${result} =        Execute                    hdfs dfs -put /opt/hadoop/NOTICE.txt o3fs://bucket1.vol1/${PREFIX}-${random}
-    ${result} =        Execute                    hdfs dfs -ls o3fs://bucket1.vol1/
+    ${result} =        Execute                    hdfs dfs -put /opt/hadoop/NOTICE.txt o3fs://bucket1.volume1/${PREFIX}-${random}
+    ${result} =        Execute                    hdfs dfs -ls o3fs://bucket1.volume1/
                        Should contain             ${result}   ${PREFIX}-${random}
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 95ead23..185f260 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
@@ -24,6 +24,8 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import com.google.common.base.Optional;
+
+import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.ozone.OzoneAcl;
 import org.apache.hadoop.ozone.om.helpers.OmVolumeArgs;
 import org.apache.hadoop.ozone.om.helpers.OzoneAclUtil;
@@ -88,6 +90,8 @@ public class OMBucketCreateRequest extends OMClientRequest {
     CreateBucketRequest createBucketRequest =
         getOmRequest().getCreateBucketRequest();
     BucketInfo bucketInfo = createBucketRequest.getBucketInfo();
+    // Verify resource name
+    OmUtils.validateBucketName(bucketInfo.getBucketName());
 
     // Get KMS provider.
     KeyProviderCryptoExtension kmsProvider =
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
index 9f916ef..d28f107 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/s3/bucket/S3BucketCreateRequest.java
@@ -26,6 +26,8 @@ import java.util.Map;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
+
+import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.ozone.OzoneAcl;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
 import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
@@ -64,8 +66,6 @@ import org.apache.hadoop.hdds.utils.db.cache.CacheKey;
 import org.apache.hadoop.hdds.utils.db.cache.CacheValue;
 
 import static org.apache.hadoop.ozone.OzoneConsts.OM_S3_VOLUME_PREFIX;
-import static org.apache.hadoop.ozone.OzoneConsts.S3_BUCKET_MAX_LENGTH;
-import static org.apache.hadoop.ozone.OzoneConsts.S3_BUCKET_MIN_LENGTH;
 import static org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.BUCKET_LOCK;
 import static org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.S3_BUCKET_LOCK;
 import static org.apache.hadoop.ozone.om.lock.OzoneManagerLock.Resource.USER_LOCK;
@@ -98,14 +98,7 @@ public class S3BucketCreateRequest extends OMVolumeRequest {
     // TODO: Do we need to enforce the bucket rules in this code path?
     // https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html
 
-    // For now only checked the length.
-    int bucketLength = s3CreateBucketRequest.getS3Bucketname().length();
-    if (bucketLength < S3_BUCKET_MIN_LENGTH ||
-        bucketLength >= S3_BUCKET_MAX_LENGTH) {
-      throw new OMException("S3BucketName must be at least 3 and not more " +
-          "than 63 characters long",
-          OMException.ResultCodes.S3_BUCKET_INVALID_LENGTH);
-    }
+    OmUtils.validateBucketName(s3CreateBucketRequest.getS3Bucketname());
 
     return getOmRequest().toBuilder()
         .setCreateS3BucketRequest(newS3CreateBucketRequest)
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
index cfa1ec3..363a092 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/volume/OMVolumeCreateRequest.java
@@ -24,6 +24,8 @@ import java.util.HashMap;
 import java.util.Map;
 
 import com.google.common.base.Preconditions;
+
+import org.apache.hadoop.ozone.OmUtils;
 import org.apache.hadoop.ozone.om.ratis.utils.OzoneManagerDoubleBufferHelper;
 import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
 import org.slf4j.Logger;
@@ -71,17 +73,17 @@ public class OMVolumeCreateRequest extends OMVolumeRequest {
 
     VolumeInfo volumeInfo  =
         getOmRequest().getCreateVolumeRequest().getVolumeInfo();
+    // Verify resource name
+    OmUtils.validateVolumeName(volumeInfo.getVolume());
 
     // Set creation time
     VolumeInfo updatedVolumeInfo =
         volumeInfo.toBuilder().setCreationTime(Time.now()).build();
 
-
     return getOmRequest().toBuilder().setCreateVolumeRequest(
         CreateVolumeRequest.newBuilder().setVolumeInfo(updatedVolumeInfo))
         .setUserInfo(getUserInfo())
         .build();
-
   }
 
   @Override
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 561bd14..ab5ad6b 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.ozone.om.exceptions.OMException;
+import org.apache.hadoop.test.LambdaTestUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -48,6 +50,9 @@ public class TestOMBucketCreateRequest extends TestBucketRequest {
     String volumeName = UUID.randomUUID().toString();
     String bucketName = UUID.randomUUID().toString();
     doPreExecute(volumeName, bucketName);
+    // Verify invalid bucket name throws exception
+    LambdaTestUtils.intercept(OMException.class, "Invalid bucket name: b1",
+        () -> doPreExecute("volume1", "b1"));
   }
 
 
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
index 9ad27ea..30bf121 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/s3/bucket/TestS3BucketCreateRequest.java
@@ -60,7 +60,7 @@ public class TestS3BucketCreateRequest extends TestS3BucketRequest {
       doPreExecute(userName, s3BucketName);
       fail("testPreExecuteInvalidBucketLength failed");
     } catch (OMException ex) {
-      GenericTestUtils.assertExceptionContains("S3_BUCKET_INVALID_LENGTH", ex);
+      GenericTestUtils.assertExceptionContains("INVALID_BUCKET_NAME", ex);
     }
 
     // set bucket name which is greater than 63 characters length
@@ -70,7 +70,7 @@ public class TestS3BucketCreateRequest extends TestS3BucketRequest {
       doPreExecute(userName, s3BucketName);
       fail("testPreExecuteInvalidBucketLength failed");
     } catch (OMException ex) {
-      GenericTestUtils.assertExceptionContains("S3_BUCKET_INVALID_LENGTH", ex);
+      GenericTestUtils.assertExceptionContains("INVALID_BUCKET_NAME", ex);
     }
   }
 
diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
index 481304e..05d0eba 100644
--- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
+++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/volume/TestOMVolumeCreateRequest.java
@@ -20,9 +20,11 @@ package org.apache.hadoop.ozone.om.request.volume;
 
 import java.util.UUID;
 
+import org.apache.hadoop.ozone.om.exceptions.OMException;
 import org.apache.hadoop.ozone.om.request.file.OMFileRequest;
 import org.apache.hadoop.ozone.om.response.volume.OMVolumeCreateResponse;
 import org.apache.hadoop.test.GenericTestUtils;
+import org.apache.hadoop.test.LambdaTestUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -49,6 +51,9 @@ public class TestOMVolumeCreateRequest extends TestOMVolumeRequest {
     String adminName = UUID.randomUUID().toString();
     String ownerName = UUID.randomUUID().toString();
     doPreExecute(volumeName, adminName, ownerName);
+    // Verify exception thrown on invalid volume name
+    LambdaTestUtils.intercept(OMException.class, "Invalid volume name: v1",
+        () -> doPreExecute("v1", adminName, ownerName));
   }
 
   @Test
diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/BaseFreonGenerator.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/BaseFreonGenerator.java
index 6b73963..6ffbc0d 100644
--- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/BaseFreonGenerator.java
+++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/freon/BaseFreonGenerator.java
@@ -237,7 +237,7 @@ public class BaseFreonGenerator {
     attemptCounter = new AtomicLong(0);
 
     if (prefix.length() == 0) {
-      prefix = RandomStringUtils.randomAlphanumeric(10);
+      prefix = RandomStringUtils.randomAlphanumeric(10).toLowerCase();
     } else {
       //replace environment variables to support multi-node execution
       prefix = resolvePrefix(prefix);


---------------------------------------------------------------------
To unsubscribe, e-mail: ozone-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: ozone-commits-help@hadoop.apache.org