This is an automated email from the ASF dual-hosted git repository.
jerryshao 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 147c04316c [Cherry-pick to branch-1.3] [MINOR] fix(auth): Handle
missing parent catalog during metadata id resolution (#12214) (#12408)
147c04316c is described below
commit 147c04316c442c42d9e4930c6cd7e963e0855a15
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Aug 12 13:47:27 2026 +0800
[Cherry-pick to branch-1.3] [MINOR] fix(auth): Handle missing parent
catalog during metadata id resolution (#12214) (#12408)
**Cherry-pick Information:**
- Original commit: a98f018253d511824eecb4e408fc65f26cd07ed0
- Target branch: `branch-1.3`
- Status: ✅ Clean cherry-pick (no conflicts)
Co-authored-by: jarred0214 <[email protected]>
---
.../server/authorization/MetadataIdConverter.java | 10 ++++++--
.../authorization/TestMetadataIdConverter.java | 30 ++++++++++++++++++++++
2 files changed, 38 insertions(+), 2 deletions(-)
diff --git
a/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataIdConverter.java
b/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataIdConverter.java
index 5f7a5695a2..220acba819 100644
---
a/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataIdConverter.java
+++
b/server-common/src/main/java/org/apache/gravitino/server/authorization/MetadataIdConverter.java
@@ -35,6 +35,7 @@ import org.apache.gravitino.catalog.CapabilityHelpers;
import org.apache.gravitino.catalog.CatalogManager;
import org.apache.gravitino.connector.capability.Capability;
import org.apache.gravitino.exceptions.NoSuchEntityException;
+import org.apache.gravitino.exceptions.NotFoundException;
import org.apache.gravitino.utils.EntityClassMapper;
import org.apache.gravitino.utils.MetadataObjectUtil;
@@ -68,8 +69,13 @@ public class MetadataIdConverter {
MetadataObject.Type metadataType = metadataObject.type();
NameIdentifier ident = MetadataObjectUtil.toEntityIdent(metalake,
metadataObject);
- NameIdentifier normalizedIdent =
- normalizeCaseSensitive(ident,
METADATA_SCOPE_MAPPING.get(metadataType), catalogManager);
+ NameIdentifier normalizedIdent;
+ try {
+ normalizedIdent =
+ normalizeCaseSensitive(ident,
METADATA_SCOPE_MAPPING.get(metadataType), catalogManager);
+ } catch (NotFoundException e) {
+ return Optional.empty();
+ }
Entity.EntityType entityType =
MetadataObjectUtil.toEntityType(metadataType);
diff --git
a/server-common/src/test/java/org/apache/gravitino/server/authorization/TestMetadataIdConverter.java
b/server-common/src/test/java/org/apache/gravitino/server/authorization/TestMetadataIdConverter.java
index 4a11a0a152..3adfa55f02 100644
---
a/server-common/src/test/java/org/apache/gravitino/server/authorization/TestMetadataIdConverter.java
+++
b/server-common/src/test/java/org/apache/gravitino/server/authorization/TestMetadataIdConverter.java
@@ -41,6 +41,7 @@ import org.apache.gravitino.NameIdentifier;
import org.apache.gravitino.Namespace;
import org.apache.gravitino.catalog.CatalogManager;
import org.apache.gravitino.connector.capability.Capability;
+import org.apache.gravitino.exceptions.NoSuchCatalogException;
import org.apache.gravitino.file.Fileset;
import org.apache.gravitino.meta.AuditInfo;
import org.apache.gravitino.meta.BaseMetalake;
@@ -200,6 +201,35 @@ public class TestMetadataIdConverter {
}
}
+ @Test
+ void testConvertReturnsEmptyWhenParentCatalogDoesNotExist() throws
IllegalAccessException {
+ CatalogManager mockCatalogManager = mock(CatalogManager.class);
+ Object originalCatalogManager =
+ FieldUtils.readDeclaredField(GravitinoEnv.getInstance(),
"catalogManager", true);
+ Object originalEntityStore =
+ FieldUtils.readDeclaredField(GravitinoEnv.getInstance(),
"entityStore", true);
+
+ FieldUtils.writeDeclaredField(
+ GravitinoEnv.getInstance(), "catalogManager", mockCatalogManager,
true);
+ FieldUtils.writeDeclaredField(GravitinoEnv.getInstance(), "entityStore",
mockStore, true);
+
+ MetadataObject fileset =
+ MetadataObjects.of(
+ ImmutableList.of("missing_catalog", "schema", "fileset"),
MetadataObject.Type.FILESET);
+ when(mockCatalogManager.loadCatalogAndWrap(NameIdentifier.of("metalake",
"missing_catalog")))
+ .thenThrow(
+ new NoSuchCatalogException("Catalog %s does not exist",
"metalake.missing_catalog"));
+
+ try {
+ Assertions.assertEquals(Optional.empty(),
MetadataIdConverter.getID(fileset, "metalake"));
+ } finally {
+ FieldUtils.writeDeclaredField(
+ GravitinoEnv.getInstance(), "catalogManager",
originalCatalogManager, true);
+ FieldUtils.writeDeclaredField(
+ GravitinoEnv.getInstance(), "entityStore", originalEntityStore,
true);
+ }
+ }
+
private void initTestNameIdentifier() {
ident1 = NameIdentifier.of("metalake");
ident2 = NameIdentifier.of("metalake", "catalog");