This is an automated email from the ASF dual-hosted git repository.
roryqi 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 97b61ca0d6 [#6349] fix(core,hive-catalog): Fix bugs in
AuthorizationUtils and remove protobuf-java from catalog hive (#6351)
97b61ca0d6 is described below
commit 97b61ca0d6c7c46affae64e568301a4e6bf31337
Author: Qi Yu <[email protected]>
AuthorDate: Wed Jan 22 18:59:21 2025 +0800
[#6349] fix(core,hive-catalog): Fix bugs in AuthorizationUtils and remove
protobuf-java from catalog hive (#6351)
### What changes were proposed in this pull request?
- Fix some working not null judge logic in AuthorizationUtils
- Remove `protobuf-java` jar from hive distribution package
### Why are the changes needed?
It's bug that need to fix
Fix: #6349
### Does this PR introduce _any_ user-facing change?
N/A
### How was this patch tested?
UT.
---
catalogs/catalog-hive/build.gradle.kts | 2 ++
.../authorization/AuthorizationUtils.java | 5 +--
.../authorization/TestAuthorizationUtils.java | 37 ++++++++++++++++++++++
3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/catalogs/catalog-hive/build.gradle.kts
b/catalogs/catalog-hive/build.gradle.kts
index 6a8b815ab9..b5593c6f7e 100644
--- a/catalogs/catalog-hive/build.gradle.kts
+++ b/catalogs/catalog-hive/build.gradle.kts
@@ -158,6 +158,8 @@ tasks {
exclude("guava-*.jar")
exclude("log4j-*.jar")
exclude("slf4j-*.jar")
+ // Exclude the following jars to avoid conflict with the jars in
authorization-gcp
+ exclude("protobuf-java-*.jar")
}
into("$rootDir/distribution/package/catalogs/hive/libs")
}
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 499ba5cbf1..60ffe3e83c 100644
---
a/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java
+++
b/core/src/main/java/org/apache/gravitino/authorization/AuthorizationUtils.java
@@ -29,6 +29,7 @@ import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
import org.apache.gravitino.Catalog;
import org.apache.gravitino.Entity;
import org.apache.gravitino.GravitinoEnv;
@@ -476,7 +477,7 @@ public class AuthorizationUtils {
Schema schema =
GravitinoEnv.getInstance().schemaDispatcher().loadSchema(ident);
if (schema.properties().containsKey(HiveConstants.LOCATION)) {
String schemaLocation =
schema.properties().get(HiveConstants.LOCATION);
- if (schemaLocation != null && schemaLocation.isEmpty()) {
+ if (StringUtils.isNotBlank(schemaLocation)) {
locations.add(schemaLocation);
} else {
LOG.warn("Schema %s location is not found", ident);
@@ -497,7 +498,7 @@ public class AuthorizationUtils {
Table table =
GravitinoEnv.getInstance().tableDispatcher().loadTable(ident);
if (table.properties().containsKey(HiveConstants.LOCATION)) {
String tableLocation =
table.properties().get(HiveConstants.LOCATION);
- if (tableLocation != null && tableLocation.isEmpty()) {
+ if (StringUtils.isNotBlank(tableLocation)) {
locations.add(tableLocation);
} else {
LOG.warn("Table %s location is not found", ident);
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 b602471c4d..373785d539 100644
---
a/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
+++
b/core/src/test/java/org/apache/gravitino/authorization/TestAuthorizationUtils.java
@@ -18,16 +18,25 @@
*/
package org.apache.gravitino.authorization;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import java.util.List;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.gravitino.Catalog;
+import org.apache.gravitino.Entity;
+import org.apache.gravitino.GravitinoEnv;
import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
+import org.apache.gravitino.catalog.CatalogDispatcher;
+import org.apache.gravitino.catalog.TableDispatcher;
import org.apache.gravitino.exceptions.IllegalNameIdentifierException;
import org.apache.gravitino.exceptions.IllegalNamespaceException;
import org.apache.gravitino.meta.AuditInfo;
import org.apache.gravitino.meta.RoleEntity;
+import org.apache.gravitino.rel.Table;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
class TestAuthorizationUtils {
@@ -210,4 +219,32 @@ class TestAuthorizationUtils {
Assertions.assertTrue(filteredRole.securableObjects().contains(schema2Object));
Assertions.assertTrue(filteredRole.securableObjects().contains(table2Object));
}
+
+ @Test
+ void testGetMetadataObjectLocation() throws IllegalAccessException {
+ CatalogDispatcher catalogDispatcher =
Mockito.mock(CatalogDispatcher.class);
+ TableDispatcher tableDispatcher = Mockito.mock(TableDispatcher.class);
+ Catalog catalog = Mockito.mock(Catalog.class);
+ Table table = Mockito.mock(Table.class);
+
+ Mockito.when(table.properties()).thenReturn(ImmutableMap.of("location",
"gs://bucket/1"));
+ Mockito.when(catalog.provider()).thenReturn("hive");
+
Mockito.when(catalogDispatcher.loadCatalog(Mockito.any())).thenReturn(catalog);
+ Mockito.when(tableDispatcher.loadTable(Mockito.any())).thenReturn(table);
+
+ FieldUtils.writeField(GravitinoEnv.getInstance(), "catalogDispatcher",
catalogDispatcher, true);
+ FieldUtils.writeField(GravitinoEnv.getInstance(), "tableDispatcher",
tableDispatcher, true);
+
+ List<String> locations =
+ AuthorizationUtils.getMetadataObjectLocation(
+ NameIdentifier.of("catalog", "schema", "table"),
Entity.EntityType.TABLE);
+ Assertions.assertEquals(1, locations.size());
+ Assertions.assertEquals("gs://bucket/1", locations.get(0));
+
+ locations =
+ AuthorizationUtils.getMetadataObjectLocation(
+ NameIdentifier.of("catalog", "schema", "fileset"),
Entity.EntityType.TABLE);
+ Assertions.assertEquals(1, locations.size());
+ Assertions.assertEquals("gs://bucket/1", locations.get(0));
+ }
}