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]

Reply via email to