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

roryqi pushed a commit to branch branch-1.3
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-1.3 by this push:
     new 1c2156fb95 [Cherry-pick to branch-1.3] [#12848] fix(authz): Allow 
getting owner of disabled metalake (#12849) (#12853)
1c2156fb95 is described below

commit 1c2156fb95dc91f53df3b29b7a3f291b7c4ae89b
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Sep 2 21:40:31 2026 +0800

    [Cherry-pick to branch-1.3] [#12848] fix(authz): Allow getting owner of 
disabled metalake (#12849) (#12853)
    
    **Cherry-pick Information:**
    - Original commit: eb8bbed3e618989f00e88b86be55ea8fc6071911
    - Target branch: `branch-1.3`
    - Status: ✅ Clean cherry-pick (no conflicts)
    
    Co-authored-by: roryqi <[email protected]>
---
 .../gravitino/server/web/rest/OwnerOperations.java |  4 ++-
 .../server/web/rest/TestOwnerOperations.java       | 36 ++++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
 
b/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
index d950f47b8b..dbe91956b0 100644
--- 
a/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
+++ 
b/server/src/main/java/org/apache/gravitino/server/web/rest/OwnerOperations.java
@@ -88,7 +88,9 @@ public class OwnerOperations {
       return Utils.doAs(
           httpRequest,
           () -> {
-            MetalakeManager.checkMetalakeInUse(metalake);
+            if (object.type() != MetadataObject.Type.METALAKE) {
+              MetalakeManager.checkMetalakeInUse(metalake);
+            }
             MetadataObjectUtil.checkMetadataObject(metalake, object);
             Optional<Owner> owner = ownerDispatcher.getOwner(metalake, object);
             if (owner.isPresent()) {
diff --git 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
index 5d0c6ff2b0..97eb522374 100644
--- 
a/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
+++ 
b/server/src/test/java/org/apache/gravitino/server/web/rest/TestOwnerOperations.java
@@ -50,6 +50,7 @@ import org.apache.gravitino.dto.responses.ErrorConstants;
 import org.apache.gravitino.dto.responses.ErrorResponse;
 import org.apache.gravitino.dto.responses.OwnerResponse;
 import org.apache.gravitino.dto.responses.SetResponse;
+import org.apache.gravitino.exceptions.MetalakeNotInUseException;
 import org.apache.gravitino.exceptions.NoSuchMetadataObjectException;
 import org.apache.gravitino.exceptions.NoSuchRoleException;
 import org.apache.gravitino.exceptions.NotFoundException;
@@ -210,6 +211,41 @@ class TestOwnerOperations extends BaseOperationsTest {
     Assertions.assertEquals(ErrorConstants.ILLEGAL_ARGUMENTS_CODE, 
errorResponse3.getCode());
   }
 
+  @Test
+  void testGetOwnerForDisabledMetalake() throws IOException {
+    Mockito.doReturn(Optional.empty()).when(manager).getOwner(any(), any());
+    when(metalakeDispatcher.metalakeExists(any())).thenReturn(true);
+
+    BaseMetalake metalake = mock(BaseMetalake.class);
+    PropertiesMetadata propertiesMetadata = mock(PropertiesMetadata.class);
+    when(propertiesMetadata.getOrDefault(any(), any())).thenReturn(false);
+    when(metalake.propertiesMetadata()).thenReturn(propertiesMetadata);
+    when(entityStore.get(any(), any(), any())).thenReturn(metalake);
+
+    Response response =
+        target("/metalakes/metalake1/owners/metalake/metalake1")
+            .request(MediaType.APPLICATION_JSON_TYPE)
+            .accept("application/vnd.gravitino.v1+json")
+            .get();
+
+    Assertions.assertEquals(Response.Status.OK.getStatusCode(), 
response.getStatus());
+    OwnerResponse ownerResponse = response.readEntity(OwnerResponse.class);
+    Assertions.assertEquals(0, ownerResponse.getCode());
+    Assertions.assertNull(ownerResponse.getOwner());
+
+    Response childResponse =
+        target("/metalakes/metalake1/owners/catalog/catalog1")
+            .request(MediaType.APPLICATION_JSON_TYPE)
+            .accept("application/vnd.gravitino.v1+json")
+            .get();
+
+    Assertions.assertEquals(Response.Status.CONFLICT.getStatusCode(), 
childResponse.getStatus());
+    ErrorResponse errorResponse = 
childResponse.readEntity(ErrorResponse.class);
+    Assertions.assertEquals(ErrorConstants.NOT_IN_USE_CODE, 
errorResponse.getCode());
+    Assertions.assertEquals(
+        MetalakeNotInUseException.class.getSimpleName(), 
errorResponse.getType());
+  }
+
   @Test
   void testSetOwnerForObject() throws IOException {
     when(metalakeDispatcher.metalakeExists(any())).thenReturn(true);

Reply via email to