This is an automated email from the ASF dual-hosted git repository.

yuqi1129 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 887088f6a4 [#12969] refactor(core): Extract a shared 
requireMetalakeByName metalake lookup (#14327)
887088f6a4 is described below

commit 887088f6a4a3a3074865fb54b289f3250dbc2207
Author: li jie <[email protected]>
AuthorDate: Wed Oct 28 22:21:42 2026 +0800

    [#12969] refactor(core): Extract a shared requireMetalakeByName metalake 
lookup (#14327)
    
    ### What changes were proposed in this pull request?
    
    - Add `MetalakeMetaService.requireMetalakeByName(String)`, a shared
    helper that looks up a metalake by name and throws
    `NoSuchEntityException` when it is missing.
    - Replace the seven verbatim copies of the "select the metalake by name,
    throw if absent" block with calls to the new helper: the insert paths of
    `CatalogMetaService`, `PolicyMetaService`, `RoleMetaService`,
    `TagMetaService`, `UserMetaService` and `GroupMetaService`, plus the
    internal usages in `MetalakeMetaService` (`getMetalakeByIdentifier`,
    `updateMetalake`, `deleteMetalake`).
    - Remove the `MetalakeMetaMapper` imports that became unused in
    `UserMetaService` and `GroupMetaService`.
    
    Per
    https://github.com/apache/gravitino/issues/12969#issuecomment-6464513436,
    the first item of the issue (backfilling
    `OccWriteSupport.updateWithVersion`) is dropped from the scope, so this
    PR only covers the shared metalake lookup.
    
    ### Why are the changes needed?
    
    The same ten-line "look up the metalake by name, throw
    `NoSuchEntityException` if missing" block was duplicated across seven
    services. A future change to this error handling would have to be
    applied seven times, and any missed copy would reintroduce exactly the
    divergence the issue set out to remove. Centralising it keeps every
    caller in sync with one implementation.
    
    This is a pure refactor with no behavioural change: a metalake
    identifier has no namespace, so `ident.toString()` equals `ident.name()`
    and the exception messages are unchanged.
    
    Fix: #12969
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    - `./gradlew :core:test -PskipITs` `--tests
    org.apache.gravitino.storage.relational.service.TestMetalakeMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestCatalogMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestPolicyMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestRoleMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestTagMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestUserMetaService`
    `--tests
    org.apache.gravitino.storage.relational.service.TestGroupMetaService`
    (embedded H2 mode, all pass)
    - `./gradlew :core:spotlessCheck :core:compileJava`
    - MySQL/PostgreSQL are covered by CI via the docker-test profile
    
    Co-authored-by: lijie <[email protected]>
---
 .../relational/service/CatalogMetaService.java     | 10 +----
 .../relational/service/GroupMetaService.java       | 11 +----
 .../relational/service/MetalakeMetaService.java    | 47 ++++++++++------------
 .../relational/service/PolicyMetaService.java      | 10 +----
 .../relational/service/RoleMetaService.java        | 10 +----
 .../storage/relational/service/TagMetaService.java | 10 +----
 .../relational/service/UserMetaService.java        | 11 +----
 7 files changed, 27 insertions(+), 82 deletions(-)

diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/CatalogMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/CatalogMetaService.java
index 45b12caf2a..14aed3a43c 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/CatalogMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/CatalogMetaService.java
@@ -188,15 +188,7 @@ public class CatalogMetaService {
       // This read runs before the transaction below, so it only tells us the 
metalake ID and name
       // we start from. The metalake may still be dropped or renamed right 
after it. That is why
       // lockMetalakeForCatalogCreate checks the row again inside the 
transaction.
-      MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalakeName));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalakeName);
-      }
+      MetalakePO metalakePO = 
MetalakeMetaService.getInstance().requireMetalakeByName(metalakeName);
 
       SessionUtils.doMultipleWithCommit(
           () -> lockMetalakeForCatalogCreate(metalakePO),
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/GroupMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/GroupMetaService.java
index df06e6e4b9..d788cf2728 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/GroupMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/GroupMetaService.java
@@ -43,7 +43,6 @@ import org.apache.gravitino.meta.RoleEntity;
 import org.apache.gravitino.metrics.Monitored;
 import org.apache.gravitino.storage.relational.mapper.GroupMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.GroupRoleRelMapper;
-import org.apache.gravitino.storage.relational.mapper.MetalakeMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.OwnerMetaMapper;
 import org.apache.gravitino.storage.relational.po.ExtendedGroupPO;
 import org.apache.gravitino.storage.relational.po.GroupPO;
@@ -183,15 +182,7 @@ public class GroupMetaService {
       NameIdentifier metalakeIdent =
           
NameIdentifier.of(NameIdentifierUtil.getMetalake(groupEntity.nameIdentifier()));
       MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class,
-              mapper -> mapper.selectMetalakeMetaByName(metalakeIdent.name()));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalakeIdent.name());
-      }
+          
MetalakeMetaService.getInstance().requireMetalakeByName(metalakeIdent.name());
 
       GroupPO.Builder builder = 
GroupPO.builder().withMetalakeId(metalakePO.getMetalakeId());
       GroupPO groupPO = POConverters.initializeGroupPOWithVersion(groupEntity, 
builder);
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/MetalakeMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/MetalakeMetaService.java
index 1cdbc5b854..f4280ceb8a 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/MetalakeMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/MetalakeMetaService.java
@@ -114,21 +114,32 @@ public class MetalakeMetaService {
     return metalakeId;
   }
 
-  @Monitored(
-      metricsSource = GRAVITINO_RELATIONAL_STORE_METRIC_NAME,
-      baseMetricName = "getMetalakeByIdentifier")
-  public BaseMetalake getMetalakeByIdentifier(NameIdentifier ident) {
-    NameIdentifierUtil.checkMetalake(ident);
+  /**
+   * Returns the metalake PO for the given name.
+   *
+   * @param metalakeName the metalake name
+   * @return the metalake PO
+   * @throws NoSuchEntityException if the metalake does not exist
+   */
+  public MetalakePO requireMetalakeByName(String metalakeName) {
     MetalakePO metalakePO =
         SessionUtils.getWithoutCommit(
-            MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(ident.name()));
+            MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalakeName));
     if (metalakePO == null) {
       throw new NoSuchEntityException(
           NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
           Entity.EntityType.METALAKE.name().toLowerCase(),
-          ident.toString());
+          metalakeName);
     }
-    return POConverters.fromMetalakePO(metalakePO);
+    return metalakePO;
+  }
+
+  @Monitored(
+      metricsSource = GRAVITINO_RELATIONAL_STORE_METRIC_NAME,
+      baseMetricName = "getMetalakeByIdentifier")
+  public BaseMetalake getMetalakeByIdentifier(NameIdentifier ident) {
+    NameIdentifierUtil.checkMetalake(ident);
+    return POConverters.fromMetalakePO(requireMetalakeByName(ident.name()));
   }
 
   @Monitored(
@@ -160,15 +171,7 @@ public class MetalakeMetaService {
   public <E extends Entity & HasIdentifier> BaseMetalake updateMetalake(
       NameIdentifier ident, Function<E, E> updater) throws IOException {
     NameIdentifierUtil.checkMetalake(ident);
-    MetalakePO oldMetalakePO =
-        SessionUtils.getWithoutCommit(
-            MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(ident.name()));
-    if (oldMetalakePO == null) {
-      throw new NoSuchEntityException(
-          NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-          Entity.EntityType.METALAKE.name().toLowerCase(),
-          ident.toString());
-    }
+    MetalakePO oldMetalakePO = requireMetalakeByName(ident.name());
 
     BaseMetalake oldMetalakeEntity = 
POConverters.fromMetalakePO(oldMetalakePO);
     BaseMetalake newMetalakeEntity = (BaseMetalake) updater.apply((E) 
oldMetalakeEntity);
@@ -208,15 +211,7 @@ public class MetalakeMetaService {
       baseMetricName = "deleteMetalake")
   public boolean deleteMetalake(NameIdentifier ident, boolean cascade) {
     NameIdentifierUtil.checkMetalake(ident);
-    MetalakePO metalakePO =
-        SessionUtils.getWithoutCommit(
-            MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(ident.name()));
-    if (metalakePO == null) {
-      throw new NoSuchEntityException(
-          NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-          Entity.EntityType.METALAKE.name().toLowerCase(),
-          ident.toString());
-    }
+    MetalakePO metalakePO = requireMetalakeByName(ident.name());
     Long metalakeId = metalakePO.getMetalakeId();
     Long currentVersion = metalakePO.getCurrentVersion();
     if (metalakeId != null) {
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/PolicyMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/PolicyMetaService.java
index 0327b97bfb..713b55b2b5 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/PolicyMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/PolicyMetaService.java
@@ -121,15 +121,7 @@ public class PolicyMetaService {
     String metalakeName = ns.level(0);
 
     try {
-      MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalakeName));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalakeName);
-      }
+      MetalakePO metalakePO = 
MetalakeMetaService.getInstance().requireMetalakeByName(metalakeName);
 
       PolicyPO.Builder builder = 
PolicyPO.builder().withMetalakeId(metalakePO.getMetalakeId());
       PolicyPO policyPO = 
POConverters.initializePolicyPOWithVersion(policyEntity, builder);
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/RoleMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/RoleMetaService.java
index 6a720db477..d6b4528d7b 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/RoleMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/RoleMetaService.java
@@ -166,15 +166,7 @@ public class RoleMetaService {
       AuthorizationUtils.checkRole(roleEntity.nameIdentifier());
 
       String metalake = 
NameIdentifierUtil.getMetalake(roleEntity.nameIdentifier());
-      MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalake));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalake);
-      }
+      MetalakePO metalakePO = 
MetalakeMetaService.getInstance().requireMetalakeByName(metalake);
 
       RolePO.Builder builder = 
RolePO.builder().withMetalakeId(metalakePO.getMetalakeId());
       RolePO rolePO = POConverters.initializeRolePOWithVersion(roleEntity, 
builder);
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/TagMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/TagMetaService.java
index 1c84f7027e..886bbb085d 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/TagMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/TagMetaService.java
@@ -111,15 +111,7 @@ public class TagMetaService {
     String metalakeName = ns.level(0);
 
     try {
-      MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalakeName));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalakeName);
-      }
+      MetalakePO metalakePO = 
MetalakeMetaService.getInstance().requireMetalakeByName(metalakeName);
 
       TagPO.Builder builder = 
TagPO.builder().withMetalakeId(metalakePO.getMetalakeId());
       TagPO tagPO = POConverters.initializeTagPOWithVersion(tagEntity, 
builder);
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/UserMetaService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/UserMetaService.java
index 344adede9b..2b230e3bc6 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/UserMetaService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/UserMetaService.java
@@ -41,7 +41,6 @@ import org.apache.gravitino.exceptions.NoSuchEntityException;
 import org.apache.gravitino.meta.RoleEntity;
 import org.apache.gravitino.meta.UserEntity;
 import org.apache.gravitino.metrics.Monitored;
-import org.apache.gravitino.storage.relational.mapper.MetalakeMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.OwnerMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.UserMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.UserRoleRelMapper;
@@ -142,15 +141,7 @@ public class UserMetaService {
       AuthorizationUtils.checkUser(userEntity.nameIdentifier());
 
       String metalakeName = userEntity.namespace().level(0);
-      MetalakePO metalakePO =
-          SessionUtils.getWithoutCommit(
-              MetalakeMetaMapper.class, mapper -> 
mapper.selectMetalakeMetaByName(metalakeName));
-      if (metalakePO == null) {
-        throw new NoSuchEntityException(
-            NoSuchEntityException.NO_SUCH_ENTITY_MESSAGE,
-            Entity.EntityType.METALAKE.name().toLowerCase(),
-            metalakeName);
-      }
+      MetalakePO metalakePO = 
MetalakeMetaService.getInstance().requireMetalakeByName(metalakeName);
 
       UserPO.Builder builder = 
UserPO.builder().withMetalakeId(metalakePO.getMetalakeId());
       UserPO userPO = POConverters.initializeUserPOWithVersion(userEntity, 
builder);

Reply via email to