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");

Reply via email to