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 1cf5934dd RANGER-4387: optimize loading of userstore from database
1cf5934dd is described below

commit 1cf5934dd3e4e10096af72bfb82253e8b81d2b8c
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Tue Aug 29 23:53:43 2023 -0700

    RANGER-4387: optimize loading of userstore from database
---
 .../main/java/org/apache/ranger/db/XXGroupDao.java | 50 ++++++++++++++++++++++
 .../main/java/org/apache/ranger/db/XXUserDao.java  | 47 +++++++++++++++++++-
 .../apache/ranger/service/XGroupServiceBase.java   | 18 +-------
 .../apache/ranger/service/XUserServiceBase.java    | 18 +-------
 .../main/resources/META-INF/jpa_named_queries.xml  | 14 ++++++
 5 files changed, 112 insertions(+), 35 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java
index 08e96f839..942d2514c 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXGroupDao.java
@@ -25,12 +25,23 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXGroup;
+import org.apache.ranger.plugin.model.GroupInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.NoResultException;
+
 @Service
 public class XXGroupDao extends BaseDao<XXGroup> {
+       private static final Logger logger = 
LoggerFactory.getLogger(XXGroupDao.class);
+
+       private static final Gson gsonBuilder = new GsonBuilder().create();
 
        public XXGroupDao(RangerDaoManagerBase daoManager) {
                super(daoManager);
@@ -82,4 +93,43 @@ public class XXGroupDao extends BaseDao<XXGroup> {
                }
                return groups;
        }
+
+
+       public List<GroupInfo> getAllGroupsInfo() {
+               List<GroupInfo> ret = new ArrayList<>();
+
+               try {
+                       List<Object[]> rows = 
getEntityManager().createNamedQuery("XXGroup.getAllGroupsInfo", 
Object[].class).getResultList();
+
+                       if (rows != null) {
+                               for (Object[] row : rows) {
+
+                                       ret.add(toGroupInfo(row));
+                               }
+                       }
+               } catch (NoResultException excp) {
+                       if (logger.isDebugEnabled()) {
+                               logger.debug(excp.getMessage());
+                       }
+               }
+
+               return ret;
+       }
+
+       private GroupInfo toGroupInfo(Object[] row) {
+               String              name        = (String) row[0];
+               String              description = (String) row[1];
+               String              attributes  = (String) row[2];
+               Map<String, String> attrMap     = null;
+
+               if (StringUtils.isNotBlank(attributes)) {
+                       try {
+                               attrMap = gsonBuilder.fromJson(attributes, 
Map.class);
+                       } catch (Exception excp) {
+                               // ignore
+                       }
+               }
+
+               return new GroupInfo(name, description, attrMap);
+       }
 }
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 283d84fe1..eb6028825 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
@@ -21,8 +21,12 @@ package org.apache.ranger.db;
 
 import javax.persistence.NoResultException;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXUser;
+import org.apache.ranger.plugin.model.UserInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -34,9 +38,12 @@ import java.util.Map;
 import java.util.ArrayList;
 import java.util.HashMap;
 
+
 @Service
 public class XXUserDao extends BaseDao<XXUser> {
-       private static final Logger logger = 
LoggerFactory.getLogger(XXResourceDao.class);
+       private static final Logger logger = 
LoggerFactory.getLogger(XXUserDao.class);
+
+       private static final Gson gsonBuilder = new GsonBuilder().create();
 
        public XXUserDao(RangerDaoManagerBase daoManager) {
                super(daoManager);
@@ -122,4 +129,42 @@ public class XXUserDao extends BaseDao<XXUser> {
                }
                return users;
        }
+
+       public List<UserInfo> getAllUsersInfo() {
+               List<UserInfo> ret = new ArrayList<>();
+
+               try {
+                       List<Object[]> rows = 
getEntityManager().createNamedQuery("XXUser.getAllUsersInfo", 
Object[].class).getResultList();
+
+                       if (rows != null) {
+                               for (Object[] row : rows) {
+
+                                       ret.add(toUserInfo(row));
+                               }
+                       }
+               } catch (NoResultException excp) {
+                       if (logger.isDebugEnabled()) {
+                               logger.debug(excp.getMessage());
+                       }
+               }
+
+               return ret;
+       }
+
+       private UserInfo toUserInfo(Object[] row) {
+               String              name        = (String) row[0];
+               String              description = (String) row[1];
+               String              attributes  = (String) row[2];
+               Map<String, String> attrMap     = null;
+
+               if (StringUtils.isNotBlank(attributes)) {
+                       try {
+                               attrMap = gsonBuilder.fromJson(attributes, 
Map.class);
+                       } catch (Exception excp) {
+                               // ignore
+                       }
+               }
+
+               return new UserInfo(name, description, attrMap);
+       }
 }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java 
b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
index 5404eab38..3b50ed5fe 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/XGroupServiceBase.java
@@ -25,10 +25,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import com.google.gson.Gson;
 
-import com.google.gson.GsonBuilder;
 import org.apache.ranger.common.SearchCriteria;
 import org.apache.ranger.entity.XXGroup;
 import org.apache.ranger.plugin.model.GroupInfo;
@@ -40,7 +37,6 @@ import javax.persistence.Query;
 public abstract class XGroupServiceBase<T extends XXGroup, V extends VXGroup>
                extends AbstractBaseResourceService<T, V> {
        public static final String NAME = "XGroup";
-       private static final Gson gsonBuilder = new GsonBuilder().create();
 
        public XGroupServiceBase() {
 
@@ -108,18 +104,6 @@ public abstract class XGroupServiceBase<T extends XXGroup, 
V extends VXGroup>
        }
 
        public List<GroupInfo> getGroups() {
-               List<GroupInfo> returnList = new ArrayList<>();
-
-               @SuppressWarnings("unchecked")
-               List<XXGroup> resultList = daoManager.getXXGroup().getAll();
-
-               // Iterate over the result list and create the return list
-               for (XXGroup gjXGroup : resultList) {
-                       GroupInfo groupInfo = new GroupInfo(gjXGroup.getName(), 
gjXGroup.getDescription(), gsonBuilder.fromJson(gjXGroup.getOtherAttributes(), 
Map.class));
-                       returnList.add(groupInfo);
-               }
-
-               return returnList;
+               return daoManager.getXXGroup().getAllGroupsInfo();
        }
-
 }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java 
b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
index 2fe54a919..ffeb19c73 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/service/XUserServiceBase.java
@@ -25,10 +25,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import com.google.gson.Gson;
 
-import com.google.gson.GsonBuilder;
 import org.apache.ranger.common.SearchCriteria;
 import org.apache.ranger.entity.XXUser;
 import org.apache.ranger.plugin.model.UserInfo;
@@ -40,7 +37,6 @@ import javax.persistence.Query;
 public abstract class XUserServiceBase<T extends XXUser, V extends VXUser>
                extends AbstractBaseResourceService<T, V> {
        public static final String NAME = "XUser";
-       private static final Gson gsonBuilder = new GsonBuilder().create();
 
        public XUserServiceBase() {
 
@@ -109,18 +105,6 @@ public abstract class XUserServiceBase<T extends XXUser, V 
extends VXUser>
        }
 
        public List<UserInfo> getUsers() {
-               List<UserInfo> returnList = new ArrayList<>();
-
-               @SuppressWarnings("unchecked")
-               List<XXUser> resultList = daoManager.getXXUser().getAll();
-
-               // Iterate over the result list and create the return list
-               for (XXUser gjXUser : resultList) {
-                       UserInfo userInfo = new UserInfo(gjXUser.getName(), 
gjXUser.getDescription(), gsonBuilder.fromJson(gjXUser.getOtherAttributes(), 
Map.class));
-                       returnList.add(userInfo);
-               }
-
-               return returnList;
+               return daoManager.getXXUser().getAllUsersInfo();
        }
-
 }
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 3718b051a..a099c4b9c 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
@@ -161,6 +161,13 @@
                </query>
        </named-query>
 
+       <named-query name="XXGroup.getAllGroupsInfo">
+               <query>SELECT group.name, group.description, 
group.otherAttributes
+                        FROM XXGroup group
+                       WHERE group.isVisible = 1
+               </query>
+       </named-query>
+
        <!-- XXGroup -->
        <named-query name="XXUser.findGroupsByUserIds">
                <query>SELECT user.name, group.name FROM XXUser user, XXGroup 
group, XXGroupUser groupUser
@@ -178,6 +185,13 @@
                </query>
        </named-query>
 
+       <named-query name="XXUser.getAllUsersInfo">
+               <query>SELECT user.name, user.description, user.otherAttributes
+                        FROM XXUser user
+                       WHERE user.isVisible = 1
+               </query>
+       </named-query>
+
        <named-query name="XXGroupUser.findUsersByGroupIds">
                <query>SELECT group.name, user.name FROM XXUser user, XXGroup 
group, XXGroupUser groupUser
                        WHERE user.id=groupUser.userId and 
group.id=groupUser.parentGroupId

Reply via email to