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]