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 48076d2  RANGER-2753: Using DB query to access user group mappings 
while generating user store information
48076d2 is described below

commit 48076d2055ccdc9dbf7cfb46a368c1e0b7d20e6f
Author: Sailaja Polavarapu <[email protected]>
AuthorDate: Mon Mar 9 09:15:11 2020 -0700

    RANGER-2753: Using DB query to access user group mappings while generating 
user store information
---
 .../apache/ranger/plugin/util/RangerUserStore.java | 12 ++++------
 .../main/java/org/apache/ranger/biz/XUserMgr.java  |  4 ++++
 .../apache/ranger/common/RangerUserStoreCache.java | 11 ++++++---
 .../main/java/org/apache/ranger/db/XXUserDao.java  | 26 ++++++++++++++++++++++
 .../main/resources/META-INF/jpa_named_queries.xml  |  7 ++++++
 5 files changed, 49 insertions(+), 11 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerUserStore.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerUserStore.java
index dfe742f..2916ae7 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerUserStore.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/util/RangerUserStore.java
@@ -32,10 +32,7 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 @JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY)
 @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@@ -54,11 +51,12 @@ public class RangerUserStore implements Serializable {
     private Map<String, String>              userCloudIdMapping;
     private Map<String, String>              groupCloudIdMapping;
 
-    public RangerUserStore() {this(-1L, null, null);}
+    public RangerUserStore() {this(-1L, null, null, null);}
 
-    public RangerUserStore(Long userStoreVersion, Set<UserInfo> users, 
Set<GroupInfo> groups ) {
+    public RangerUserStore(Long userStoreVersion, Set<UserInfo> users, 
Set<GroupInfo> groups, Map<String, Set<String>> userGroups) {
         setUserStoreVersion(userStoreVersion);
         setUserStoreUpdateTime(new Date());
+        setUserGroupMapping(userGroups);
         buildMap(users, groups);
     }
     public Long getUserStoreVersion() {
@@ -153,7 +151,6 @@ public class RangerUserStore implements Serializable {
         if (CollectionUtils.isNotEmpty(users)) {
             userAttrMapping = new HashMap<>();
             userCloudIdMapping = new HashMap<>();
-            userGroupMapping = new HashMap<>();
             for (UserInfo user : users) {
                 String username = user.getName();
                 Map<String, String> userAttrs = user.getOtherAttributes();
@@ -164,7 +161,6 @@ public class RangerUserStore implements Serializable {
                         userCloudIdMapping.put(cloudId, username);
                     }
                 }
-                userGroupMapping.put(username, user.getGroups());
             }
         }
         if (CollectionUtils.isNotEmpty(groups)) {
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 88a4330..6a5ca7b 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
@@ -2567,6 +2567,10 @@ public class XUserMgr extends XUserMgrBase {
                return  new HashSet<>(xGroupService.getGroups());
        }
 
+       public Map<String, Set<String>> getUserGroups() {
+               return daoManager.getXXUser().findGroupsByUserIds();
+       }
+
        public RangerUserStore getRangerUserStore(Long 
lastKnownUserStoreVersion) throws Exception {
                RangerUserStore ret                   = null;
                Long        rangerUserStoreVersionInDB = getUserStoreVersion();
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/RangerUserStoreCache.java
 
b/security-admin/src/main/java/org/apache/ranger/common/RangerUserStoreCache.java
index 8ffc98c..198e3d6 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/common/RangerUserStoreCache.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/common/RangerUserStoreCache.java
@@ -19,7 +19,6 @@
 
 package org.apache.ranger.common;
 
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ranger.authorization.hadoop.config.RangerAdminConfig;
@@ -90,14 +89,20 @@ public class RangerUserStoreCache {
                        if (lockResult) {
                                final Set<UserInfo> rangerUsersInDB = 
xUserMgr.getUsers();
                                final Set<GroupInfo> rangerGroupsInDB = 
xUserMgr.getGroups();
-                               if 
(CollectionUtils.isNotEmpty(rangerUsersInDB)) {
+                               final Map<String, Set<String>> userGroups = 
xUserMgr.getUserGroups();
+                               /*if 
(CollectionUtils.isNotEmpty(rangerUsersInDB)) {
                                        for (UserInfo userInfo : 
rangerUsersInDB) {
                                                //Get user group mapping from 
DB and update userInfo object.
                                                
userInfo.setGroups(xUserMgr.getGroupsForUser(userInfo.getName()));
                                        }
+                               }*/
+
+                               if (LOG.isDebugEnabled()) {
+                                       LOG.debug("No. of users from DB = " + 
rangerUsersInDB.size() + " and no. of groups from DB = " + 
rangerGroupsInDB.size());
+                                       LOG.debug("No. of userGroupMappings = " 
+ userGroups.size());
                                }
 
-                               ret = new 
RangerUserStore(rangerUserStoreVersionInDB, rangerUsersInDB, rangerGroupsInDB);
+                               ret = new 
RangerUserStore(rangerUserStoreVersionInDB, rangerUsersInDB, rangerGroupsInDB, 
userGroups);
                                rangerUserStore = ret;
                        } else {
                                if (LOG.isDebugEnabled()) {
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java
index cea90c1..0a9c640 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXUserDao.java
@@ -26,6 +26,8 @@ import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXUser;
 import org.springframework.stereotype.Service;
 
+import java.util.*;
+
 @Service
 public class XXUserDao extends BaseDao<XXUser> {
        private static final Logger logger = 
Logger.getLogger(XXResourceDao.class);
@@ -62,4 +64,28 @@ public class XXUserDao extends BaseDao<XXUser> {
                }
        }
 
+       public Map<String, Set<String>> findGroupsByUserIds() {
+               Map<String, Set<String>> userGroups = new HashMap<>();
+
+               try {
+                       List<Object[]> rows = (List<Object[]>) 
getEntityManager()
+                                       
.createNamedQuery("XXUser.findGroupsByUserIds")
+                                       .getResultList();
+                       if (rows != null) {
+                               for (Object[] row : rows) {
+                                       if 
(userGroups.containsKey((String)row[0])) {
+                                               
userGroups.get((String)row[0]).add((String)row[1]);
+                                       } else {
+                                               Set<String> groups = new 
HashSet<>();
+                                               groups.add((String)row[1]);
+                                               userGroups.put((String)row[0], 
groups);
+                                       }
+                               }
+                       }
+               } catch (NoResultException e) {
+                       //Ignore
+               }
+               return userGroups;
+       }
+
 }
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml 
b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index f23bf2e..182a038 100755
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -127,6 +127,13 @@
                </query>
        </named-query>
 
+       <!-- XXGroup -->
+       <named-query name="XXUser.findGroupsByUserIds">
+               <query>SELECT user.name, group.name FROM XXUser user, XXGroup 
group, XXGroupUser groupUser
+                       WHERE user.id=groupUser.userId and 
group.name=groupUser.name
+               </query>
+       </named-query>
+
        <!-- XXPermMap -->
        <named-query name="XXPermMap.findByResourceId">
                <query>SELECT obj FROM XXPermMap obj WHERE obj.resourceId = 
:resourceId

Reply via email to