You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2026/04/06 04:43:50 UTC
(ranger) branch master updated: RANGER-5463: Update userstore version after group-user mapping changes in createOrDeleteXGroupUserList
This is an automated email from the ASF dual-hosted git repository.
madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new 160674812 RANGER-5463: Update userstore version after group-user mapping changes in createOrDeleteXGroupUserList
160674812 is described below
commit 16067481201487c156c10fec3c72c813bbcec376
Author: hayden <se...@a-bly.com>
AuthorDate: Sun Apr 5 21:15:32 2026 -0700
RANGER-5463: Update userstore version after group-user mapping changes in createOrDeleteXGroupUserList
Signed-off-by: Madhan Neethiraj <ma...@apache.org>
---
.../main/java/org/apache/ranger/biz/XUserMgr.java | 10 ++++-
.../apache/ranger/service/XGroupUserService.java | 8 ++--
...stXGroupUserServiceGroupUserMappingUpdator.java | 45 +++++++++++++++++++++-
3 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index 1d9ab6ca6..429da84f3 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -2959,10 +2959,16 @@ public int createOrDeleteXGroupUserList(List<GroupUserInfo> groupUserInfoList) {
}
for (GroupUserInfo groupUserInfo : groupUserInfoList) {
- xGroupUserService.createOrDeleteXGroupUsers(groupUserInfo, usersFromDB);
+ if (xGroupUserService.createOrDeleteXGroupUsers(groupUserInfo, usersFromDB)) {
+ updatedGroups++;
+ }
}
- updatedGroups = groupUserInfoList.size();
+ logger.debug("No. of groups actually updated = {}", updatedGroups);
+ }
+
+ if (updatedGroups > 0) {
+ updateUserStoreVersion("createOrDeleteXGroupUserList(updatedGroups=" + updatedGroups + ")");
}
}
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
index 61b0c95ee..96b7c1be1 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XGroupUserService.java
@@ -84,7 +84,7 @@ public VXGroupUser createXGroupUserWithOutLogin(VXGroupUser vxGroupUser) {
return vxGroupUser;
}
- public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, Long> usersFromDB) {
+ public boolean createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, Long> usersFromDB) {
if (logger.isDebugEnabled()) {
logger.debug("==>> createOrDeleteXGroupUsers for {}", groupUserInfo.getGroupName());
@@ -98,7 +98,7 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, L
if (CollectionUtils.isEmpty(groupUserInfo.getAddUsers()) && CollectionUtils.isEmpty(groupUserInfo.getDelUsers())) {
logger.info("Group memberships for source are empty for {}", groupName);
- return;
+ return false;
}
XXGroup xxGroup = daoManager.getXXGroup().findByGroupName(groupName);
@@ -106,7 +106,7 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, L
if (xxGroup == null) {
logger.debug("createOrDeleteXGroupUsers(): groupName = {} doesn't exist in database. Hence ignoring group membership updates", groupName);
- return;
+ return false;
}
/* findUsersByGroupName returns all the entries from x_group_users table for a given group name and corresponding usernames from x_user table.
@@ -148,6 +148,8 @@ public void createOrDeleteXGroupUsers(GroupUserInfo groupUserInfo, Map<String, L
logger.debug("<<== createOrDeleteXGroupUsers: Max memory = {} Free memory = {} Total memory = {}", Runtime.getRuntime().maxMemory() / mb, Runtime.getRuntime().freeMemory() / mb, Runtime.getRuntime().totalMemory() / mb);
}
+
+ return true;
}
public VXGroupUser readResourceWithOutLogin(Long id) {
diff --git a/security-admin/src/test/java/org/apache/ranger/service/TestXGroupUserServiceGroupUserMappingUpdator.java b/security-admin/src/test/java/org/apache/ranger/service/TestXGroupUserServiceGroupUserMappingUpdator.java
index 108a43907..573871d5f 100644
--- a/security-admin/src/test/java/org/apache/ranger/service/TestXGroupUserServiceGroupUserMappingUpdator.java
+++ b/security-admin/src/test/java/org/apache/ranger/service/TestXGroupUserServiceGroupUserMappingUpdator.java
@@ -40,6 +40,8 @@
import java.util.HashSet;
import java.util.Map;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
@@ -104,10 +106,51 @@ public void testCreateOrDeleteXGroupUsersSchedulesCreateAndDelete() {
Map<String, Long> users = new HashMap<>();
users.put("u1", 11L);
users.put("u2", 22L);
- svc.createOrDeleteXGroupUsers(info, users);
+
+ boolean result = svc.createOrDeleteXGroupUsers(info, users);
+
+ assertTrue(result);
verify(entityDao).create(any(XXGroupUser.class));
} finally {
svc.entityDao = previousDao;
}
}
+
+ @Test
+ public void testCreateOrDeleteXGroupUsers_EmptyUsers() {
+ GroupUserInfo info = new GroupUserInfo();
+
+ info.setGroupName("group1");
+ info.setAddUsers(new HashSet<>());
+ info.setDelUsers(new HashSet<>());
+
+ Map<String, Long> users = new HashMap<>();
+
+ users.put("u1", 11L);
+
+ boolean result = svc.createOrDeleteXGroupUsers(info, users);
+
+ assertFalse(result);
+ }
+
+ @Test
+ public void testCreateOrDeleteXGroupUsers_GroupNotFound() {
+ GroupUserInfo info = new GroupUserInfo();
+
+ info.setGroupName("nonExistentGroup");
+ info.setAddUsers(new HashSet<>(Collections.singletonList("u1")));
+
+ XXGroupDao xGroupDao = mock(XXGroupDao.class);
+
+ when(daoMgr.getXXGroup()).thenReturn(xGroupDao);
+ when(xGroupDao.findByGroupName("nonExistentGroup")).thenReturn(null);
+
+ Map<String, Long> users = new HashMap<>();
+
+ users.put("u1", 11L);
+
+ boolean result = svc.createOrDeleteXGroupUsers(info, users);
+
+ assertFalse(result);
+ }
}