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

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 53dd5cce3f [#7683]fix: fix fileset location resolution code (#7725)
53dd5cce3f is described below

commit 53dd5cce3fcb9731c6684806ed8a6d92b6452c1f
Author: Jackeyzhe <jackeyzh...@163.com>
AuthorDate: Wed Jul 16 09:37:42 2025 +0800

    [#7683]fix: fix fileset location resolution code (#7725)
    
    ### What changes were proposed in this pull request?
    
    Fix fileset location resolution code so that catalog-level locations are
    correctly read from the catalog properties instead of the schema
    properties.
    
    ### Why are the changes needed?
    
    Fix: #7683
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    
    add a test which can cover the change code
    
    Co-authored-by: jackeyzhe <jackeyzh...@gmail.com>
---
 .../authorization/AuthorizationUtils.java          |  2 +-
 .../authorization/TestAuthorizationUtils.java      | 42 ++++++++++++++++++++++
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java 
b/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java
index 9037d660ed..ff0c220c1a 100644
--- 
a/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java
+++ 
b/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java
@@ -495,7 +495,7 @@ public class AuthorizationUtils {
                   if (StringUtils.isNotBlank(schemaLocation)) {
                     locations.add(schemaLocation);
                   } else if 
(catalogObj.properties().containsKey(FILESET_CATALOG_LOCATION)) {
-                    String catalogLocation = 
schema.properties().get(FILESET_CATALOG_LOCATION);
+                    String catalogLocation = 
catalogObj.properties().get(FILESET_CATALOG_LOCATION);
                     if (StringUtils.isNotBlank(catalogLocation)) {
                       schemaLocation = catalogLocation + "/" + schema.name();
                       locations.add(schemaLocation);
diff --git 
a/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
 
b/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
index 373785d539..3071e23f9a 100644
--- 
a/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
+++ 
b/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
@@ -18,6 +18,8 @@
  */
 package org.apache.gravitino.authorization;
 
+import static org.apache.gravitino.Catalog.Type.FILESET;
+
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import java.util.List;
@@ -27,7 +29,9 @@ import org.apache.gravitino.Entity;
 import org.apache.gravitino.GravitinoEnv;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Namespace;
+import org.apache.gravitino.Schema;
 import org.apache.gravitino.catalog.CatalogDispatcher;
+import org.apache.gravitino.catalog.SchemaDispatcher;
 import org.apache.gravitino.catalog.TableDispatcher;
 import org.apache.gravitino.exceptions.IllegalNameIdentifierException;
 import org.apache.gravitino.exceptions.IllegalNamespaceException;
@@ -226,6 +230,7 @@ class TestAuthorizationUtils {
     TableDispatcher tableDispatcher = Mockito.mock(TableDispatcher.class);
     Catalog catalog = Mockito.mock(Catalog.class);
     Table table = Mockito.mock(Table.class);
+    AccessControlDispatcher accessControlDispatcher = 
Mockito.mock(AccessControlDispatcher.class);
 
     Mockito.when(table.properties()).thenReturn(ImmutableMap.of("location", 
"gs://bucket/1"));
     Mockito.when(catalog.provider()).thenReturn("hive");
@@ -234,6 +239,8 @@ class TestAuthorizationUtils {
 
     FieldUtils.writeField(GravitinoEnv.getInstance(), "catalogDispatcher", 
catalogDispatcher, true);
     FieldUtils.writeField(GravitinoEnv.getInstance(), "tableDispatcher", 
tableDispatcher, true);
+    FieldUtils.writeField(
+        GravitinoEnv.getInstance(), "accessControlDispatcher", 
accessControlDispatcher, true);
 
     List<String> locations =
         AuthorizationUtils.getMetadataObjectLocation(
@@ -247,4 +254,39 @@ class TestAuthorizationUtils {
     Assertions.assertEquals(1, locations.size());
     Assertions.assertEquals("gs://bucket/1", locations.get(0));
   }
+
+  @Test
+  void testGetSchemaTypeMetadataObjectLocation() throws IllegalAccessException 
{
+    AccessControlDispatcher accessControlDispatcher = 
Mockito.mock(AccessControlDispatcher.class);
+    SchemaDispatcher schemaDispatcher = Mockito.mock(SchemaDispatcher.class);
+    CatalogDispatcher catalogDispatcher = 
Mockito.mock(CatalogDispatcher.class);
+    Catalog catalog = Mockito.mock(Catalog.class);
+    Schema schema = Mockito.mock(Schema.class);
+
+    Mockito.when(schema.properties()).thenReturn(ImmutableMap.of("location", 
""));
+    Mockito.when(schema.name()).thenReturn("testSchema");
+    Mockito.when(catalog.properties()).thenReturn(ImmutableMap.of("location", 
"catalogLocation"));
+    Mockito.when(catalog.provider()).thenReturn("fileset");
+    Mockito.when(catalog.type()).thenReturn(FILESET);
+    
Mockito.when(schemaDispatcher.loadSchema(Mockito.any())).thenReturn(schema);
+    
Mockito.when(catalogDispatcher.loadCatalog(Mockito.any())).thenReturn(catalog);
+
+    FieldUtils.writeField(
+        GravitinoEnv.getInstance(), "accessControlDispatcher", 
accessControlDispatcher, true);
+    FieldUtils.writeField(GravitinoEnv.getInstance(), "catalogDispatcher", 
catalogDispatcher, true);
+    FieldUtils.writeField(GravitinoEnv.getInstance(), "schemaDispatcher", 
schemaDispatcher, true);
+
+    List<String> locations =
+        AuthorizationUtils.getMetadataObjectLocation(
+            NameIdentifier.of("catalog", "schema", "fileset"), 
Entity.EntityType.SCHEMA);
+    Assertions.assertEquals(1, locations.size());
+    Assertions.assertEquals("catalogLocation/testSchema", locations.get(0));
+
+    Mockito.when(schema.properties()).thenReturn(ImmutableMap.of("location", 
"schemaLocation"));
+    locations =
+        AuthorizationUtils.getMetadataObjectLocation(
+            NameIdentifier.of("catalog", "schema", "fileset"), 
Entity.EntityType.SCHEMA);
+    Assertions.assertEquals(1, locations.size());
+    Assertions.assertEquals("schemaLocation", locations.get(0));
+  }
 }

Reply via email to