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;