This is an automated email from the ASF dual-hosted git repository.
chungen0126 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 4bd4b980d69 HDDS-16995. Use isSupportedBy for bucket tagging version
checks (#11532)
4bd4b980d69 is described below
commit 4bd4b980d69bd64d597bd731e1c5e875b22a09e9
Author: Andy Huang <[email protected]>
AuthorDate: Thu Oct 15 09:37:26 2026 +0800
HDDS-16995. Use isSupportedBy for bucket tagging version checks (#11532)
---
.../apache/hadoop/ozone/client/rpc/RpcClient.java | 6 +--
.../hadoop/ozone/client/rpc/TestRpcClient.java | 55 +++++++++++++++++++++-
2 files changed, 57 insertions(+), 4 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 21e430e75b3..37240037f61 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
@@ -3147,7 +3147,7 @@ public void deleteLifecycleConfiguration(String
volumeName, String bucketName) t
@Override
public Map<String, String> getBucketTagging(String volumeName, String
bucketName)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_BUCKET_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_BUCKET_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 bucket tagging
API");
}
@@ -3163,7 +3163,7 @@ public Map<String, String> getBucketTagging(String
volumeName, String bucketName
@Override
public void putBucketTagging(String volumeName, String bucketName,
Map<String, String> tags) throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_BUCKET_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_BUCKET_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 bucket tagging
API");
}
@@ -3180,7 +3180,7 @@ public void putBucketTagging(String volumeName, String
bucketName,
@Override
public void deleteBucketTagging(String volumeName, String bucketName)
throws IOException {
- if (omVersion.compareTo(OzoneManagerVersion.S3_BUCKET_TAGGING_API) < 0) {
+ if (!OzoneManagerVersion.S3_BUCKET_TAGGING_API.isSupportedBy(omVersion)) {
throw new IOException("OzoneManager does not support S3 bucket tagging
API");
}
diff --git
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
index 21a31808f06..30e89a0c731 100644
---
a/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
+++
b/hadoop-ozone/client/src/test/java/org/apache/hadoop/ozone/client/rpc/TestRpcClient.java
@@ -41,9 +41,15 @@
import org.apache.hadoop.ozone.om.helpers.ServiceInfo;
import org.apache.hadoop.ozone.om.helpers.ServiceInfoEx;
import org.apache.hadoop.ozone.om.protocolPB.OmTransport;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMRequest;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.OMResponse;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.ServiceListResponse;
+import
org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Status;
+import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos.Type;
import org.apache.ozone.test.GenericTestUtils;
import org.apache.ozone.test.GenericTestUtils.LogCapturer;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.function.Executable;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.EnumSource;
@@ -342,6 +348,49 @@ public void testListMultipartUploadsValidatesNames(String
volume, String bucket,
}
}
+ @ParameterizedTest
+ @EnumSource(value = OzoneManagerVersion.class, names = {
+ "ATOMIC_CREATE_IF_NOT_EXISTS", "S3_BUCKET_TAGGING_API",
"GET_FILE_STATUS_REJECTS_OBS", "UNKNOWN_VERSION"
+ })
+ public void testBucketTaggingVersionChecks(OzoneManagerVersion version)
throws IOException {
+ List<Type> requests = new LinkedList<>();
+ OmTransport transport = new MockOmTransport() {
+ @Override
+ public OMResponse submitRequest(OMRequest request) {
+ OMResponse.Builder response = OMResponse.newBuilder()
+
.setCmdType(request.getCmdType()).setSuccess(true).setStatus(Status.OK);
+ if (request.getCmdType() == Type.ServiceList) {
+
response.setServiceListResponse(ServiceListResponse.newBuilder().addServiceInfo(om(version).getProtobuf()));
+ } else {
+ requests.add(request.getCmdType());
+ }
+ return response.build();
+ }
+ };
+ RpcClient client = createRpcClient(transport);
+ try {
+ List<Executable> operations = Arrays.asList(
+ () -> assertThat(client.getBucketTagging("volume1",
"bucket1")).isEmpty(),
+ () -> client.putBucketTagging("volume1", "bucket1",
Collections.singletonMap("tag", "value")),
+ () -> client.deleteBucketTagging("volume1", "bucket1"));
+ for (Executable operation : operations) {
+ if (version == OzoneManagerVersion.ATOMIC_CREATE_IF_NOT_EXISTS) {
+ IOException error = assertThrows(IOException.class, operation);
+ assertThat(error).hasMessage("OzoneManager does not support S3
bucket tagging API");
+ } else {
+ assertDoesNotThrow(operation);
+ }
+ }
+ if (version == OzoneManagerVersion.ATOMIC_CREATE_IF_NOT_EXISTS) {
+ assertThat(requests).isEmpty();
+ } else {
+ assertThat(requests).containsExactly(Type.GetBucketTagging,
Type.PutBucketTagging, Type.DeleteBucketTagging);
+ }
+ } finally {
+ client.close();
+ }
+ }
+
private static ServiceInfo om(OzoneManagerVersion version) {
return new ServiceInfo.Builder()
.setNodeType(HddsProtos.NodeType.OM)
@@ -355,11 +404,15 @@ private static ServiceInfoEx serviceInfoEx(ServiceInfo...
serviceInfos) {
}
private static RpcClient createRpcClient() throws IOException {
+ return createRpcClient(new MockOmTransport());
+ }
+
+ private static RpcClient createRpcClient(OmTransport transport) throws
IOException {
OzoneConfiguration config = new OzoneConfiguration();
return new RpcClient(config, null) {
@Override
protected OmTransport createOmTransport(String omServiceId) {
- return new MockOmTransport();
+ return transport;
}
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]