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

jshao 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 2019fcb9bb [#6004] fix: use fullName instead of names.get(0) when get 
role (#6057)
2019fcb9bb is described below

commit 2019fcb9bb09a7946ae95fc4223761ea49e5a6b5
Author: Cheng-Yi Shih <[email protected]>
AuthorDate: Tue Jan 7 09:27:35 2025 +0800

    [#6004] fix: use fullName instead of names.get(0) when get role (#6057)
    
    What changes were proposed in this pull request?
    use fullName instead of names.get(0) when get role Why are the changes
    needed?
    Fix: #6004
    
    Does this PR introduce any user-facing change?
    NO
    
    How was this patch tested?
    existing ut
---
 .../java/org/apache/gravitino/MetadataObjects.java |  4 +
 .../org/apache/gravitino/TestMetadataObjects.java  | 15 ++++
 .../relational/service/MetadataObjectService.java  |  4 +-
 .../storage/relational/TestJDBCBackend.java        | 93 ++++++++++++++++++++++
 4 files changed, 114 insertions(+), 2 deletions(-)

diff --git a/api/src/main/java/org/apache/gravitino/MetadataObjects.java 
b/api/src/main/java/org/apache/gravitino/MetadataObjects.java
index 74da23c10e..557ccdefc4 100644
--- a/api/src/main/java/org/apache/gravitino/MetadataObjects.java
+++ b/api/src/main/java/org/apache/gravitino/MetadataObjects.java
@@ -21,6 +21,7 @@ package org.apache.gravitino;
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Splitter;
+import java.util.Collections;
 import java.util.List;
 import javax.annotation.Nullable;
 import org.apache.commons.lang3.StringUtils;
@@ -151,6 +152,9 @@ public class MetadataObjects {
         StringUtils.isNotBlank(fullName), "Metadata object full name cannot be 
blank");
 
     List<String> parts = DOT_SPLITTER.splitToList(fullName);
+    if (type == MetadataObject.Type.ROLE) {
+      return MetadataObjects.of(Collections.singletonList(fullName), 
MetadataObject.Type.ROLE);
+    }
 
     return MetadataObjects.of(parts, type);
   }
diff --git a/api/src/test/java/org/apache/gravitino/TestMetadataObjects.java 
b/api/src/test/java/org/apache/gravitino/TestMetadataObjects.java
index bab5c5833f..f792220e18 100644
--- a/api/src/test/java/org/apache/gravitino/TestMetadataObjects.java
+++ b/api/src/test/java/org/apache/gravitino/TestMetadataObjects.java
@@ -84,4 +84,19 @@ public class TestMetadataObjects {
             MetadataObjects.of(
                 Lists.newArrayList("catalog", "schema", "table"), 
MetadataObject.Type.COLUMN));
   }
+
+  @Test
+  public void testRoleObject() {
+    MetadataObject roleObject = MetadataObjects.of(null, "role.test", 
MetadataObject.Type.ROLE);
+    Assertions.assertEquals("role.test", roleObject.fullName());
+
+    MetadataObject roleObject1 = MetadataObjects.of(null, "role", 
MetadataObject.Type.ROLE);
+    Assertions.assertEquals("role", roleObject1.fullName());
+
+    MetadataObject roleObject2 = MetadataObjects.parse("role.test", 
MetadataObject.Type.ROLE);
+    Assertions.assertEquals("role.test", roleObject2.fullName());
+
+    MetadataObject roleObject3 = MetadataObjects.parse("role", 
MetadataObject.Type.ROLE);
+    Assertions.assertEquals("role", roleObject3.fullName());
+  }
 }
diff --git 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/MetadataObjectService.java
 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/MetadataObjectService.java
index 9834bafa0e..e6790a602c 100644
--- 
a/core/src/main/java/org/apache/gravitino/storage/relational/service/MetadataObjectService.java
+++ 
b/core/src/main/java/org/apache/gravitino/storage/relational/service/MetadataObjectService.java
@@ -50,10 +50,10 @@ public class MetadataObjectService {
       return MetalakeMetaService.getInstance().getMetalakeIdByName(fullName);
     }
 
-    List<String> names = DOT_SPLITTER.splitToList(fullName);
     if (type == MetadataObject.Type.ROLE) {
-      return 
RoleMetaService.getInstance().getRoleIdByMetalakeIdAndName(metalakeId, 
names.get(0));
+      return 
RoleMetaService.getInstance().getRoleIdByMetalakeIdAndName(metalakeId, 
fullName);
     }
+    List<String> names = DOT_SPLITTER.splitToList(fullName);
 
     long catalogId =
         
CatalogMetaService.getInstance().getCatalogIdByMetalakeIdAndName(metalakeId, 
names.get(0));
diff --git 
a/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
 
b/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
index 3c9339ff62..8cd2c802e8 100644
--- 
a/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
+++ 
b/core/src/test/java/org/apache/gravitino/storage/relational/TestJDBCBackend.java
@@ -81,6 +81,7 @@ import org.apache.gravitino.meta.UserEntity;
 import org.apache.gravitino.storage.RandomIdGenerator;
 import org.apache.gravitino.storage.relational.mapper.GroupMetaMapper;
 import org.apache.gravitino.storage.relational.mapper.UserMetaMapper;
+import org.apache.gravitino.storage.relational.service.MetalakeMetaService;
 import org.apache.gravitino.storage.relational.service.RoleMetaService;
 import org.apache.gravitino.storage.relational.session.SqlSessionFactoryHelper;
 import org.apache.gravitino.storage.relational.utils.SessionUtils;
@@ -952,6 +953,98 @@ public class TestJDBCBackend {
     assertEquals(1, listFilesetVersions(anotherFileset.id()).size());
   }
 
+  @Test
+  public void testGetRoleIdByMetalakeIdAndName() throws IOException {
+    AuditInfo auditInfo =
+        
AuditInfo.builder().withCreator("creator").withCreateTime(Instant.now()).build();
+    String metalakeName = "testMetalake";
+    String catalogName = "catalog";
+    String roleNameWithDot = "role.with.dot";
+    String roleNameWithoutDot = "roleWithoutDot";
+
+    BaseMetalake metalake =
+        createBaseMakeLake(RandomIdGenerator.INSTANCE.nextId(), metalakeName, 
auditInfo);
+    backend.insert(metalake, false);
+
+    CatalogEntity catalog =
+        createCatalog(
+            RandomIdGenerator.INSTANCE.nextId(),
+            NamespaceUtil.ofCatalog(metalakeName),
+            catalogName,
+            auditInfo);
+    backend.insert(catalog, false);
+
+    RoleEntity roleWithDot =
+        createRoleEntity(
+            RandomIdGenerator.INSTANCE.nextId(),
+            AuthorizationUtils.ofRoleNamespace(metalakeName),
+            roleNameWithDot,
+            auditInfo,
+            catalogName);
+    backend.insert(roleWithDot, false);
+
+    RoleEntity roleWithoutDot =
+        createRoleEntity(
+            RandomIdGenerator.INSTANCE.nextId(),
+            AuthorizationUtils.ofRoleNamespace(metalakeName),
+            roleNameWithoutDot,
+            auditInfo,
+            catalogName);
+    backend.insert(roleWithoutDot, false);
+
+    Long metalakeId = 
MetalakeMetaService.getInstance().getMetalakeIdByName(metalakeName);
+
+    Long roleIdWithDot =
+        RoleMetaService.getInstance().getRoleIdByMetalakeIdAndName(metalakeId, 
roleNameWithDot);
+    assertEquals(roleWithDot.id(), roleIdWithDot);
+
+    Long roleIdWithoutDot =
+        RoleMetaService.getInstance().getRoleIdByMetalakeIdAndName(metalakeId, 
roleNameWithoutDot);
+    assertEquals(roleWithoutDot.id(), roleIdWithoutDot);
+  }
+
+  @Test
+  public void testInsertRelationWithDotInRoleName() throws IOException {
+    AuditInfo auditInfo =
+        
AuditInfo.builder().withCreator("creator").withCreateTime(Instant.now()).build();
+    String metalakeName = "testMetalake";
+    String catalogName = "catalog";
+    String roleNameWithDot = "role.with.dot";
+
+    BaseMetalake metalake =
+        createBaseMakeLake(RandomIdGenerator.INSTANCE.nextId(), metalakeName, 
auditInfo);
+    backend.insert(metalake, false);
+
+    CatalogEntity catalog =
+        createCatalog(
+            RandomIdGenerator.INSTANCE.nextId(),
+            NamespaceUtil.ofCatalog(metalakeName),
+            catalogName,
+            auditInfo);
+    backend.insert(catalog, false);
+
+    RoleEntity role =
+        createRoleEntity(
+            RandomIdGenerator.INSTANCE.nextId(),
+            AuthorizationUtils.ofRoleNamespace(metalakeName),
+            roleNameWithDot,
+            auditInfo,
+            catalogName);
+    backend.insert(role, false);
+
+    UserEntity user =
+        createUserEntity(
+            RandomIdGenerator.INSTANCE.nextId(),
+            AuthorizationUtils.ofUserNamespace(metalakeName),
+            "user",
+            auditInfo);
+    backend.insert(user, false);
+
+    backend.insertRelation(
+        OWNER_REL, role.nameIdentifier(), role.type(), user.nameIdentifier(), 
user.type(), true);
+    assertEquals(1, countActiveOwnerRel(user.id()));
+  }
+
   private boolean legacyRecordExistsInDB(Long id, Entity.EntityType 
entityType) {
     String tableName;
     String idColumnName;

Reply via email to