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 2732792e07 [#6061] fix(core): Fix the issues of list user or group
details (#6067)
2732792e07 is described below
commit 2732792e07e73b539c5905df95f18f0bf6a858f3
Author: roryqi <[email protected]>
AuthorDate: Fri Jan 3 18:23:41 2025 +0800
[#6061] fix(core): Fix the issues of list user or group details (#6067)
### What changes were proposed in this pull request?
Fix the issues of list user or group details
### Why are the changes needed?
Fix: #6061
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Added UT.
---
.../test/authorization/AccessControlIT.java | 8 +++++++
.../provider/base/GroupMetaBaseSQLProvider.java | 15 +++++++-----
.../provider/base/UserMetaBaseSQLProvider.java | 15 +++++++-----
.../mapper/provider/h2/GroupMetaH2Provider.java | 15 +++++++-----
.../mapper/provider/h2/UserMetaH2Provider.java | 15 +++++++-----
.../postgresql/GroupMetaPostgreSQLProvider.java | 15 +++++++-----
.../postgresql/UserMetaPostgreSQLProvider.java | 15 +++++++-----
.../relational/service/TestGroupMetaService.java | 28 ++++++++++++++++++++++
.../relational/service/TestUserMetaService.java | 28 ++++++++++++++++++++++
9 files changed, 118 insertions(+), 36 deletions(-)
diff --git
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/AccessControlIT.java
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/AccessControlIT.java
index 78c2943343..268ed20f3c 100644
---
a/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/AccessControlIT.java
+++
b/clients/client-java/src/test/java/org/apache/gravitino/client/integration/test/authorization/AccessControlIT.java
@@ -121,6 +121,10 @@ public class AccessControlIT extends BaseIT {
users.stream().map(User::name).collect(Collectors.toList()));
Assertions.assertEquals(Lists.newArrayList("role1"), users.get(2).roles());
+ // ISSUE-6061: Test listUsers with revoked users
+ metalake.revokeRolesFromUser(Lists.newArrayList("role1"), username);
+ Assertions.assertEquals(3, metalake.listUsers().length);
+
// Get a not-existed user
Assertions.assertThrows(NoSuchUserException.class, () ->
metalake.getUser("not-existed"));
@@ -176,6 +180,10 @@ public class AccessControlIT extends BaseIT {
groups.stream().map(Group::name).collect(Collectors.toList()));
Assertions.assertEquals(Lists.newArrayList("role2"),
groups.get(0).roles());
+ // ISSUE-6061: Test listGroups with revoked groups
+ metalake.revokeRolesFromGroup(Lists.newArrayList("role2"), groupName);
+ Assertions.assertEquals(2, metalake.listGroups().length);
+
Assertions.assertTrue(metalake.removeGroup(groupName));
Assertions.assertFalse(metalake.removeGroup(groupName));
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java
index a52e1b8614..1f28b771c2 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java
@@ -57,16 +57,19 @@ public class GroupMetaBaseSQLProvider {
+ " JSON_ARRAYAGG(rot.role_id) as roleIds"
+ " FROM "
+ GROUP_TABLE_NAME
- + " gt LEFT OUTER JOIN "
+ + " gt LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ GROUP_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.group_id = gt.group_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.group_id = gt.group_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " gt.deleted_at = 0 AND"
- + " (rot.deleted_at = 0 OR rot.deleted_at is NULL) AND"
- + " (rt.deleted_at = 0 OR rt.deleted_at is NULL) AND gt.metalake_id =
#{metalakeId}"
+ + " gt.metalake_id = #{metalakeId}"
+ " GROUP BY gt.group_id";
}
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java
index 2a211c24f5..4e81ae35df 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java
@@ -165,16 +165,19 @@ public class UserMetaBaseSQLProvider {
+ " JSON_ARRAYAGG(rot.role_id) as roleIds"
+ " FROM "
+ USER_TABLE_NAME
- + " ut LEFT OUTER JOIN "
+ + " ut LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ USER_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.user_id = ut.user_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.user_id = ut.user_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " ut.deleted_at = 0 AND"
- + " (rot.deleted_at = 0 OR rot.deleted_at is NULL) AND"
- + " (rt.deleted_at = 0 OR rt.deleted_at is NULL) AND ut.metalake_id =
#{metalakeId}"
+ + " ut.metalake_id = #{metalakeId}"
+ " GROUP BY ut.user_id";
}
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/GroupMetaH2Provider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/GroupMetaH2Provider.java
index 175d9d8ae9..e975131e09 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/GroupMetaH2Provider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/GroupMetaH2Provider.java
@@ -37,16 +37,19 @@ public class GroupMetaH2Provider extends
GroupMetaBaseSQLProvider {
+ " '[' || GROUP_CONCAT('\"' || rot.role_id || '\"') || ']' as roleIds"
+ " FROM "
+ GROUP_TABLE_NAME
- + " gt LEFT OUTER JOIN "
+ + " gt LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ GROUP_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.group_id = gt.group_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.group_id = gt.group_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " gt.deleted_at = 0 AND"
- + " (rot.deleted_at = 0 OR rot.deleted_at is NULL) AND"
- + " (rt.deleted_at = 0 OR rt.deleted_at is NULL) AND gt.metalake_id =
#{metalakeId}"
+ + " gt.metalake_id = #{metalakeId}"
+ " GROUP BY gt.group_id";
}
}
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/UserMetaH2Provider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/UserMetaH2Provider.java
index be17138ce4..b4fb161490 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/UserMetaH2Provider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/UserMetaH2Provider.java
@@ -37,16 +37,19 @@ public class UserMetaH2Provider extends
UserMetaBaseSQLProvider {
+ " '[' || GROUP_CONCAT('\"' || rot.role_id || '\"') || ']' as roleIds"
+ " FROM "
+ USER_TABLE_NAME
- + " ut LEFT OUTER JOIN "
+ + " ut LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ USER_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.user_id = ut.user_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.user_id = ut.user_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " ut.deleted_at = 0 AND "
- + "(rot.deleted_at = 0 OR rot.deleted_at is NULL) AND "
- + "(rt.deleted_at = 0 OR rt.deleted_at is NULL) AND ut.metalake_id =
#{metalakeId}"
+ + " ut.metalake_id = #{metalakeId}"
+ " GROUP BY ut.user_id";
}
}
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/GroupMetaPostgreSQLProvider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/GroupMetaPostgreSQLProvider.java
index 51cf47bf7d..3ace33f6f8 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/GroupMetaPostgreSQLProvider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/GroupMetaPostgreSQLProvider.java
@@ -80,16 +80,19 @@ public class GroupMetaPostgreSQLProvider extends
GroupMetaBaseSQLProvider {
+ " JSON_AGG(rot.role_id) as roleIds"
+ " FROM "
+ GROUP_TABLE_NAME
- + " gt LEFT OUTER JOIN "
+ + " gt LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ GROUP_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.group_id = gt.group_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.group_id = gt.group_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " gt.deleted_at = 0 AND"
- + " (rot.deleted_at = 0 OR rot.deleted_at is NULL) AND"
- + " (rt.deleted_at = 0 OR rt.deleted_at is NULL) AND gt.metalake_id =
#{metalakeId}"
+ + " gt.metalake_id = #{metalakeId}"
+ " GROUP BY gt.group_id";
}
}
diff --git
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/UserMetaPostgreSQLProvider.java
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/UserMetaPostgreSQLProvider.java
index b6ac62b2b8..84ab965582 100644
---
a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/UserMetaPostgreSQLProvider.java
+++
b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/UserMetaPostgreSQLProvider.java
@@ -80,16 +80,19 @@ public class UserMetaPostgreSQLProvider extends
UserMetaBaseSQLProvider {
+ " JSON_AGG(rot.role_id) as roleIds"
+ " FROM "
+ USER_TABLE_NAME
- + " ut LEFT OUTER JOIN "
+ + " ut LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ USER_ROLE_RELATION_TABLE_NAME
- + " rt ON rt.user_id = ut.user_id"
- + " LEFT OUTER JOIN "
+ + " WHERE deleted_at = 0)"
+ + " AS rt ON rt.user_id = ut.user_id"
+ + " LEFT OUTER JOIN ("
+ + " SELECT * FROM "
+ ROLE_TABLE_NAME
- + " rot ON rot.role_id = rt.role_id"
+ + " WHERE deleted_at = 0)"
+ + " AS rot ON rot.role_id = rt.role_id"
+ " WHERE "
+ " ut.deleted_at = 0 AND"
- + " (rot.deleted_at = 0 OR rot.deleted_at is NULL) AND"
- + " (rt.deleted_at = 0 OR rt.deleted_at is NULL) AND ut.metalake_id =
#{metalakeId}"
+ + " ut.metalake_id = #{metalakeId}"
+ " GROUP BY ut.user_id";
}
}
diff --git
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestGroupMetaService.java
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestGroupMetaService.java
index 77cd9d110b..5e90f0eb89 100644
---
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestGroupMetaService.java
+++
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestGroupMetaService.java
@@ -27,6 +27,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.Instant;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@@ -189,6 +190,33 @@ class TestGroupMetaService extends TestJDBCBackend {
}
}
}
+
+ // ISSUE-6061: Test listGroupsByNamespace with revoked users
+ Function<GroupEntity, GroupEntity> revokeUpdater =
+ group -> {
+ AuditInfo updateAuditInfo =
+ AuditInfo.builder()
+ .withCreator(group.auditInfo().creator())
+ .withCreateTime(group.auditInfo().createTime())
+ .withLastModifier("revokeGroup")
+ .withLastModifiedTime(Instant.now())
+ .build();
+
+ return GroupEntity.builder()
+ .withNamespace(group.namespace())
+ .withId(group.id())
+ .withName(group.name())
+ .withRoleNames(Collections.emptyList())
+ .withRoleIds(Collections.emptyList())
+ .withAuditInfo(updateAuditInfo)
+ .build();
+ };
+
+
Assertions.assertNotNull(groupMetaService.updateGroup(group2.nameIdentifier(),
revokeUpdater));
+ actualGroups =
+ groupMetaService.listGroupsByNamespace(
+ AuthorizationUtils.ofGroupNamespace(metalakeName), true);
+ Assertions.assertEquals(expectGroups.size(), actualGroups.size());
}
@Test
diff --git
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestUserMetaService.java
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestUserMetaService.java
index 0efd886ee4..e93a83bafd 100644
---
a/core/src/test/java/org/apache/gravitino/storage/relational/service/TestUserMetaService.java
+++
b/core/src/test/java/org/apache/gravitino/storage/relational/service/TestUserMetaService.java
@@ -27,6 +27,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.Instant;
+import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@@ -188,6 +189,33 @@ class TestUserMetaService extends TestJDBCBackend {
}
}
}
+
+ // ISSUE-6061: Test listUsersByNamespace with revoked users
+ Function<UserEntity, UserEntity> revokeUpdater =
+ user -> {
+ AuditInfo updateAuditInfo =
+ AuditInfo.builder()
+ .withCreator(user.auditInfo().creator())
+ .withCreateTime(user.auditInfo().createTime())
+ .withLastModifier("revokeUser")
+ .withLastModifiedTime(Instant.now())
+ .build();
+
+ return UserEntity.builder()
+ .withNamespace(user.namespace())
+ .withId(user.id())
+ .withName(user.name())
+ .withRoleNames(Collections.emptyList())
+ .withRoleIds(Collections.emptyList())
+ .withAuditInfo(updateAuditInfo)
+ .build();
+ };
+
+
Assertions.assertNotNull(userMetaService.updateUser(user1.nameIdentifier(),
revokeUpdater));
+ actualUsers =
+ userMetaService.listUsersByNamespace(
+ AuthorizationUtils.ofUserNamespace(metalakeName), true);
+ Assertions.assertEquals(expectUsers.size(), actualUsers.size());
}
@Test