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 <[email protected]>
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 <[email protected]>
---
.../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));
+ }
}