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