You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by sp...@apache.org on 2021/08/23 22:29:41 UTC
[ranger] branch master updated: RANGER-3374: Creating new DB
transaction for add/update of user group mapping from Ranger Usersync
This is an automated email from the ASF dual-hosted git repository.
spolavarapu 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 f91d702 RANGER-3374: Creating new DB transaction for add/update of user group mapping from Ranger Usersync
f91d702 is described below
commit f91d70266332b0c4a7c5bfb55985c5b93c859cd9
Author: Sailaja Polavarapu <sp...@cloudera.com>
AuthorDate: Mon Aug 23 15:24:38 2021 -0700
RANGER-3374: Creating new DB transaction for add/update of user group mapping from Ranger Usersync
---
.../main/java/org/apache/ranger/biz/XUserMgr.java | 13 +++-
.../apache/ranger/service/XGroupUserService.java | 74 ++++++++++++++--------
2 files changed, 58 insertions(+), 29 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 7b29f3d..546345a 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
@@ -2689,6 +2689,7 @@ public class XUserMgr extends XUserMgrBase {
}
checkAccess(vXUser.getName());
TransactionTemplate txTemplate = new TransactionTemplate(txManager);
+ txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
try {
txTemplate.execute(new TransactionCallback<Object>() {
@Override
@@ -2726,7 +2727,7 @@ public class XUserMgr extends XUserMgrBase {
}
TransactionTemplate txTemplate = new TransactionTemplate(txManager);
-
+ txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
try {
txTemplate.execute(new TransactionCallback<Void>() {
@Override
@@ -2862,6 +2863,9 @@ public class XUserMgr extends XUserMgrBase {
}
Set<String> groupUsers = groupUserInfo.getAddUsers();
if (CollectionUtils.isNotEmpty(groupUsers)) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("No. of new users in group" + groupName + " = " + groupUsers.size());
+ }
xGroupUserService.createOrUpdateXGroupUsers(groupName, groupUsers, usersFromDB);
}
@@ -2881,12 +2885,17 @@ public class XUserMgr extends XUserMgrBase {
}
}
- @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public int createOrDeleteXGroupUserList(List<GroupUserInfo> groupUserInfoList) {
int updatedGroups = 0;
if (CollectionUtils.isNotEmpty(groupUserInfoList)) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("No. of groups to be updated = " + groupUserInfoList.size());
+ }
Map<String, Long> usersFromDB = daoManager.getXXUser().getAllUserIds();
if (MapUtils.isNotEmpty(usersFromDB)) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("No. of users in DB = " + usersFromDB.size());
+ }
for (GroupUserInfo groupUserInfo : groupUserInfoList) {
createOrDeleteXGroupUsers(groupUserInfo, usersFromDB);
}
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 6c0289c..2b863b0 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
@@ -40,8 +40,14 @@ import org.apache.ranger.entity.XXUser;
import org.apache.ranger.util.RangerEnumUtil;
import org.apache.ranger.view.VXGroupUser;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
@Service
@Scope("singleton")
@@ -52,6 +58,10 @@ public class XGroupUserService extends
@Autowired
RangerEnumUtil xaEnumUtil;
+
+ @Autowired
+ @Qualifier(value = "transactionManager")
+ PlatformTransactionManager txManager;
static HashMap<String, VTrxLogAttr> trxLogAttrs = new HashMap<String, VTrxLogAttr>();
static {
@@ -118,36 +128,46 @@ public class XGroupUserService extends
return;
}
Map<String, XXGroupUser> groupUsers = daoManager.getXXGroupUser().findUsersByGroupName(groupName);
- XXPortalUser xXPortalUser = daoManager.getXXPortalUser().getById(createdByUserId);
for (String username : users) {
if (usersFromDB.containsKey(username)) {
// Add or update group user mapping only if the user exists in x_user table.
- XXGroupUser xxGroupUser = groupUsers.get(username);
- boolean groupUserMappingExists = true;
- if (xxGroupUser == null) {
- xxGroupUser = new XXGroupUser();
- groupUserMappingExists = false;
- }
+ TransactionTemplate txTemplate = new TransactionTemplate(txManager);
+ txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
+ try {
+ txTemplate.execute(new TransactionCallback<Object>() {
+ @Override
+ public Object doInTransaction(TransactionStatus status) {
+ XXGroupUser xxGroupUser = groupUsers.get(username);
+ boolean groupUserMappingExists = true;
+ if (xxGroupUser == null) {
+ xxGroupUser = new XXGroupUser();
+ groupUserMappingExists = false;
+ }
+ xxGroupUser.setAddedByUserId(createdByUserId);
+ xxGroupUser.setUpdatedByUserId(createdByUserId);
- if (xXPortalUser != null) {
- xxGroupUser.setAddedByUserId(createdByUserId);
- xxGroupUser.setUpdatedByUserId(createdByUserId);
- }
-
- if (groupUserMappingExists) {
- xxGroupUser = getDao().update(xxGroupUser);
- } else {
- VXGroupUser vXGroupUser = new VXGroupUser();
- vXGroupUser.setUserId(usersFromDB.get(username));
- vXGroupUser.setName(groupName);
- vXGroupUser.setParentGroupId(xxGroup.getId());
- xxGroupUser = mapViewToEntityBean(vXGroupUser, xxGroupUser, 0);
- xxGroupUser = getDao().create(xxGroupUser);
- }
- VXGroupUser vXGroupUser = postCreate(xxGroupUser);
- if (logger.isDebugEnabled()) {
- logger.debug(String.format("createOrUpdateXGroupUsers(): Create or update group user mapping with groupname = " + vXGroupUser.getName()
- + " username = %s userId = %d", username, vXGroupUser.getUserId()));
+ if (groupUserMappingExists) {
+ xxGroupUser = getDao().update(xxGroupUser);
+ } else {
+ VXGroupUser vXGroupUser = new VXGroupUser();
+ vXGroupUser.setUserId(usersFromDB.get(username));
+ vXGroupUser.setName(groupName);
+ vXGroupUser.setParentGroupId(xxGroup.getId());
+ xxGroupUser = mapViewToEntityBean(vXGroupUser, xxGroupUser, 0);
+ xxGroupUser = getDao().create(xxGroupUser);
+ }
+ VXGroupUser vXGroupUser = postCreate(xxGroupUser);
+ if (logger.isDebugEnabled()) {
+ logger.debug(String.format("createOrUpdateXGroupUsers(): Create or update group user mapping with groupname = " + vXGroupUser.getName()
+ + " username = %s userId = %d", username, vXGroupUser.getUserId()));
+ }
+ return null;
+ }
+ });
+ } catch (Throwable ex) {
+ logger.error("XGroupUserService.createOrUpdateXGroupUsers: Failed to update DB for group users: ", ex);
+ throw restErrorUtil.createRESTException("Failed to create or update group users ",
+ MessageEnums.ERROR_CREATING_OBJECT);
}
}
}
@@ -158,7 +178,7 @@ public class XGroupUserService extends
if (resource == null) {
// Returns code 400 with DATA_NOT_FOUND as the error message
throw restErrorUtil.createRESTException(getResourceName()
- + " not found", MessageEnums.DATA_NOT_FOUND, id, null,
+ + " not found", MessageEnums.DATA_NOT_FOUND, id, null,
"preRead: " + id + " not found.");
}