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 <[email protected]>
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.");
                }
 

Reply via email to