This is an automated email from the ASF dual-hosted git repository. liuxun pushed a commit to branch fix-cache in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit 2213574683616d9a231d4e81167b2b56d4fcb6db Author: Xun <[email protected]> AuthorDate: Fri Aug 22 14:56:29 2025 +0800 fix: issue-7797 --- .../gravitino/cache/CaffeineEntityCache.java | 35 ++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/gravitino/cache/CaffeineEntityCache.java b/core/src/main/java/org/apache/gravitino/cache/CaffeineEntityCache.java index 030ee44557..cb8e6dd756 100644 --- a/core/src/main/java/org/apache/gravitino/cache/CaffeineEntityCache.java +++ b/core/src/main/java/org/apache/gravitino/cache/CaffeineEntityCache.java @@ -45,15 +45,19 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; import java.util.function.Supplier; import java.util.stream.Collectors; + +import org.apache.commons.lang3.ArrayUtils; import org.apache.gravitino.Config; import org.apache.gravitino.Configs; import org.apache.gravitino.Entity; import org.apache.gravitino.HasIdentifier; +import org.apache.gravitino.MetadataObject; import org.apache.gravitino.NameIdentifier; import org.apache.gravitino.Namespace; import org.apache.gravitino.SupportsRelationOperations; import org.apache.gravitino.meta.GroupEntity; import org.apache.gravitino.meta.ModelVersionEntity; +import org.apache.gravitino.meta.RoleEntity; import org.apache.gravitino.meta.UserEntity; import org.apache.gravitino.utils.NamespaceUtil; import org.slf4j.Logger; @@ -335,7 +339,7 @@ public class CaffeineEntityCache extends BaseEntityCache { if (userEntity.roleNames() != null) { userEntity.roleNames().forEach( role -> { - Namespace ns = NamespaceUtil.ofRole(userEntity.namespace().level(0)); + Namespace ns = NamespaceUtil.ofUser(userEntity.namespace().level(0)); NameIdentifier nameIdentifier = NameIdentifier.of(ns, role); putReverseIndex(nameIdentifier, Entity.EntityType.ROLE, key); }); @@ -346,11 +350,38 @@ public class CaffeineEntityCache extends BaseEntityCache { if (groupEntity.roleNames() != null) { groupEntity.roleNames().forEach( role -> { - Namespace ns = NamespaceUtil.ofRole(groupEntity.namespace().level(0)); + Namespace ns = NamespaceUtil.ofGroup(groupEntity.namespace().level(0)); NameIdentifier nameIdentifier = NameIdentifier.of(ns, role); putReverseIndex(nameIdentifier, Entity.EntityType.ROLE, key); }); } + } else if (entity instanceof RoleEntity) { + // UserEntity is not supported in the cache, skip it. + RoleEntity roleEntity = (RoleEntity) entity; + if (roleEntity.securableObjects() != null) { + roleEntity.securableObjects().forEach( + securableObject -> { + Namespace namespace = Namespace.empty(); +// Namespace nsParent = Namespace.fromString(securableObject.parent()); + Entity.EntityType entityType = Entity.EntityType.METALAKE; + switch (securableObject.type()){ + case CATALOG: + entityType = Entity.EntityType.CATALOG; + namespace = NamespaceUtil.ofCatalog(roleEntity.namespace().level(0)); + break; + case FILESET: + entityType = Entity.EntityType.FILESET; + Namespace nsParent = Namespace.fromString(securableObject.parent()); + namespace = NamespaceUtil.ofFileset(roleEntity.namespace().level(0), nsParent.level(0), nsParent.level(1)); + break; + default: + throw new IllegalStateException("Unprocessed securable object type: " + securableObject.type()); + } + Namespace so_namespace = Namespace.of(ArrayUtils.add(namespace.levels(), securableObject.name())); + NameIdentifier nameIdentifier = NameIdentifier.of(so_namespace, securableObject.name()); + putReverseIndex(nameIdentifier, entityType, key); + }); + } }
