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

siyao 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 fc61fbd87b HDDS-8549. Restore client-side validation of bucket names 
(#4691)
fc61fbd87b is described below

commit fc61fbd87be34a0bf362fad20bd12a809ac06326
Author: DaveTeng0 <[email protected]>
AuthorDate: Wed May 10 15:20:47 2023 -0700

    HDDS-8549. Restore client-side validation of bucket names (#4691)
---
 .../apache/hadoop/ozone/client/rpc/RpcClient.java  | 35 +++++++++++++++++++++-
 .../hadoop/fs/ozone/TestRootedOzoneFileSystem.java |  2 +-
 .../client/rpc/TestOzoneRpcClientAbstract.java     |  2 +-
 3 files changed, 36 insertions(+), 3 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 268f333d8f..1f206211ee 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
@@ -620,6 +620,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, BucketArgs bucketArgs)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(bucketArgs);
     verifyCountsQuota(bucketArgs.getQuotaInNamespace());
     verifySpaceQuota(bucketArgs.getQuotaInBytes());
@@ -714,6 +715,15 @@ public class RpcClient implements ClientProtocol {
     }
   }
 
+  private static void verifyBucketName(String bucketName) throws OMException {
+    try {
+      HddsClientUtils.verifyResourceName(bucketName, false);
+    } catch (IllegalArgumentException e) {
+      throw new OMException(e.getMessage(),
+          OMException.ResultCodes.INVALID_BUCKET_NAME);
+    }
+  }
+
   private static void verifyCountsQuota(long quota) throws OMException {
     if (quota < OzoneConsts.QUOTA_RESET || quota == 0) {
       throw new IllegalArgumentException("Invalid values for quota : " +
@@ -1071,6 +1081,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, Boolean versioning)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(versioning);
     OmBucketArgs.Builder builder = OmBucketArgs.newBuilder();
     builder.setVolumeName(volumeName)
@@ -1084,6 +1095,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, StorageType storageType)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(storageType);
     OmBucketArgs.Builder builder = OmBucketArgs.newBuilder();
     builder.setVolumeName(volumeName)
@@ -1096,6 +1108,7 @@ public class RpcClient implements ClientProtocol {
   public void setBucketQuota(String volumeName, String bucketName,
       long quotaInNamespace, long quotaInBytes) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     verifyCountsQuota(quotaInNamespace);
     verifySpaceQuota(quotaInBytes);
     OmBucketArgs.Builder builder = OmBucketArgs.newBuilder();
@@ -1122,6 +1135,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, ReplicationConfig 
replicationConfig)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(replicationConfig);
     if (omVersion
         .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
@@ -1144,6 +1158,7 @@ public class RpcClient implements ClientProtocol {
   public void deleteBucket(
       String volumeName, String bucketName) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     ozoneManagerClient.deleteBucket(volumeName, bucketName);
   }
 
@@ -1157,6 +1172,7 @@ public class RpcClient implements ClientProtocol {
   public OzoneBucket getBucketDetails(
       String volumeName, String bucketName) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     OmBucketInfo bucketInfo =
         ozoneManagerClient.getBucketInfo(volumeName, bucketName);
     return OzoneBucket.newBuilder(conf, this)
@@ -1230,6 +1246,7 @@ public class RpcClient implements ClientProtocol {
       Map<String, String> metadata)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     if (checkKeyNameEnabled) {
       HddsClientUtils.verifyKeyName(keyName);
     }
@@ -1287,6 +1304,7 @@ public class RpcClient implements ClientProtocol {
       Map<String, String> metadata)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     if (checkKeyNameEnabled) {
       HddsClientUtils.verifyKeyName(keyName);
     }
@@ -1361,6 +1379,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, String keyName)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(keyName);
     OmKeyInfo keyInfo = getKeyInfo(volumeName, bucketName, keyName, false);
     return getInputStreamWithRetryFunction(keyInfo);
@@ -1376,6 +1395,7 @@ public class RpcClient implements ClientProtocol {
         = new LinkedHashMap<>();
 
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     OmKeyInfo keyInfo = getKeyInfo(volumeName, bucketName, keyName, true);
     List<OmKeyLocationInfo> keyLocationInfos
         = keyInfo.getLatestVersionLocations().getBlocksLatestVersionOnly();
@@ -1444,6 +1464,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, String keyName, boolean recursive)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(keyName);
     OmKeyArgs keyArgs = new OmKeyArgs.Builder()
         .setVolumeName(volumeName)
@@ -1458,7 +1479,8 @@ public class RpcClient implements ClientProtocol {
   public void deleteKeys(
           String volumeName, String bucketName, List<String> keyNameList)
           throws IOException {
-    HddsClientUtils.verifyResourceName(volumeName, bucketName);
+    verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(keyNameList);
     OmDeleteKeys omDeleteKeys = new OmDeleteKeys(volumeName, bucketName,
         keyNameList);
@@ -1469,6 +1491,7 @@ public class RpcClient implements ClientProtocol {
   public void renameKey(String volumeName, String bucketName,
       String fromKeyName, String toKeyName) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     if (checkKeyNameEnabled) {
       HddsClientUtils.verifyKeyName(toKeyName);
     }
@@ -1486,6 +1509,7 @@ public class RpcClient implements ClientProtocol {
   public void renameKeys(String volumeName, String bucketName,
                          Map<String, String> keyMap) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     HddsClientUtils.checkNotNull(keyMap);
     OmRenameKeys omRenameKeys =
         new OmRenameKeys(volumeName, bucketName, keyMap, null);
@@ -1574,6 +1598,7 @@ public class RpcClient implements ClientProtocol {
   @NotNull
   private OmKeyInfo getS3KeyInfo(
       String bucketName, String keyName, boolean isHeadOp) throws IOException {
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(keyName);
 
     OmKeyArgs keyArgs = new OmKeyArgs.Builder()
@@ -1649,6 +1674,7 @@ public class RpcClient implements ClientProtocol {
       ReplicationConfig replicationConfig)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     HddsClientUtils.checkNotNull(keyName);
     if (omVersion
         .compareTo(OzoneManagerVersion.ERASURE_CODED_STORAGE_SUPPORT) < 0) {
@@ -1680,6 +1706,7 @@ public class RpcClient implements ClientProtocol {
                                               String uploadID)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     if (checkKeyNameEnabled) {
       HddsClientUtils.verifyKeyName(keyName);
     }
@@ -1732,6 +1759,7 @@ public class RpcClient implements ClientProtocol {
       String uploadID)
       throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     if (checkKeyNameEnabled) {
       HddsClientUtils.verifyKeyName(keyName);
     }
@@ -1790,6 +1818,7 @@ public class RpcClient implements ClientProtocol {
       String volumeName, String bucketName, String keyName, String uploadID,
       Map<Integer, String> partsMap) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     HddsClientUtils.checkNotNull(keyName, uploadID);
 
     OmKeyArgs keyArgs = new OmKeyArgs.Builder()
@@ -1816,6 +1845,7 @@ public class RpcClient implements ClientProtocol {
   public void abortMultipartUpload(String volumeName,
        String bucketName, String keyName, String uploadID) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     HddsClientUtils.checkNotNull(keyName, uploadID);
     OmKeyArgs omKeyArgs = new OmKeyArgs.Builder()
         .setVolumeName(volumeName)
@@ -1831,6 +1861,7 @@ public class RpcClient implements ClientProtocol {
       String bucketName, String keyName, String uploadID, int partNumberMarker,
       int maxParts)  throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     HddsClientUtils.checkNotNull(uploadID);
     Preconditions.checkArgument(maxParts > 0, "Max Parts Should be greater " +
         "than zero");
@@ -2275,6 +2306,7 @@ public class RpcClient implements ClientProtocol {
   public OzoneKey headObject(String volumeName, String bucketName,
       String keyName) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(keyName);
     OmKeyArgs keyArgs = new OmKeyArgs.Builder()
         .setVolumeName(volumeName)
@@ -2316,6 +2348,7 @@ public class RpcClient implements ClientProtocol {
   public boolean setBucketOwner(String volumeName, String bucketName,
       String owner) throws IOException {
     verifyVolumeName(volumeName);
+    verifyBucketName(bucketName);
     Preconditions.checkNotNull(owner);
     OmBucketArgs.Builder builder = OmBucketArgs.newBuilder();
     builder.setVolumeName(volumeName)
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 753e4d16bc..25f3dff3c1 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
@@ -2284,7 +2284,7 @@ public class TestRootedOzoneFileSystem {
     String bucketNameLocal = RandomStringUtils.randomNumeric(5);
     Path volume = new Path("/" + volumeNameLocal);
     ofs.mkdirs(volume);
-    LambdaTestUtils.intercept(FileNotFoundException.class,
+    LambdaTestUtils.intercept(OMException.class,
         () -> ofs.getFileStatus(new Path(volume, bucketNameLocal)));
     // Cleanup
     ofs.delete(volume, true);
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 2597664774..55a857ee70 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
@@ -704,7 +704,7 @@ public abstract class TestOzoneRpcClientAbstract {
     store.createVolume(volumeName);
     OzoneVolume volume = store.getVolume(volumeName);
     LambdaTestUtils.intercept(OMException.class,
-        "Invalid bucket name: invalid#bucket",
+        "Bucket or Volume name has an unsupported character : #",
         () -> volume.createBucket(bucketName));
   }
 


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

Reply via email to