This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch RANGER-3923
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/RANGER-3923 by this push:
     new 39b6d672a RANGER-4463: fix for incorrect principalsCount in 
DatasetSummary
39b6d672a is described below

commit 39b6d672a5a2933b67d37b1b85d95c3e08d55f5b
Author: Subhrat Chaudhary <such...@yahoo.com>
AuthorDate: Sun Oct 8 10:15:45 2023 -0700

    RANGER-4463: fix for incorrect principalsCount in DatasetSummary
    
    Signed-off-by: Madhan Neethiraj <mad...@apache.org>
---
 .../org/apache/ranger/plugin/model/RangerGds.java  |  6 +-
 .../java/org/apache/ranger/biz/GdsDBStore.java     | 85 ++++++++--------------
 2 files changed, 33 insertions(+), 58 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java 
b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
index cf67d74fd..ec75d63bb 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerGds.java
@@ -490,7 +490,7 @@ public class RangerGds {
         private String                          name;
         private String                          description;
         private GdsPermission                   permissionForCaller;
-        private Map<PrincipalType, Long>        principalsCount;
+        private Map<PrincipalType, Integer>     principalsCount;
         private Long                            projectsCount;
         private Long                            totalResourceCount;
         private List<DataShareInDatasetSummary> dataShares;
@@ -517,11 +517,11 @@ public class RangerGds {
             this.permissionForCaller = permissionForCaller;
         }
 
-        public Map<PrincipalType, Long> getPrincipalsCount() {
+        public Map<PrincipalType, Integer> getPrincipalsCount() {
             return principalsCount;
         }
 
-        public void setPrincipalsCount(Map<PrincipalType, Long> 
principalsCount) {
+        public void setPrincipalsCount(Map<PrincipalType, Integer> 
principalsCount) {
             this.principalsCount = principalsCount;
         }
 
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
index dce45729f..60636430d 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java
@@ -35,7 +35,6 @@ import org.apache.ranger.entity.XXGdsDataShareInDataset;
 import org.apache.ranger.entity.XXGdsDataset;
 import org.apache.ranger.entity.XXGdsDatasetInProject;
 import org.apache.ranger.entity.XXGdsDatasetPolicyMap;
-import org.apache.ranger.entity.XXPolicy;
 import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXSecurityZone;
 import org.apache.ranger.entity.XXGdsProject;
@@ -65,7 +64,6 @@ import org.apache.ranger.service.RangerGdsDatasetService;
 import org.apache.ranger.service.RangerGdsDatasetInProjectService;
 import org.apache.ranger.service.RangerGdsProjectService;
 import org.apache.ranger.service.RangerGdsSharedResourceService;
-import org.apache.ranger.service.RangerPolicyService;
 import org.apache.ranger.service.RangerServiceService;
 import org.apache.ranger.validation.RangerGdsValidator;
 import org.apache.ranger.view.RangerGdsVList.RangerDataShareList;
@@ -131,9 +129,6 @@ public class GdsDBStore extends AbstractGdsStore {
     @Autowired
     GUIDUtil guidUtil;
 
-    @Autowired
-    RangerPolicyService policyService;
-
     @Autowired
     RangerBizUtil bizUtil;
 
@@ -435,15 +430,14 @@ public class GdsDBStore extends AbstractGdsStore {
     public List<RangerPolicy> getDatasetPolicies(Long datasetId) throws 
Exception {
         LOG.debug("==> getDatasetPolicies({})", datasetId);
 
-        List<RangerPolicy> ret = null;
-
         RangerDataset dataset = datasetService.read(datasetId);
 
         if (!validator.hasPermission(dataset.getAcl(), GdsPermission.AUDIT)) {
             throw 
restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_DATASET_POLICIES);
         }
 
-        List<Long> policyIds = 
daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyIds(datasetId);
+        List<RangerPolicy> ret;
+        List<Long>         policyIds = 
daoMgr.getXXGdsDatasetPolicyMap().getDatasetPolicyIds(datasetId);
 
         if (policyIds != null) {
             ret = new ArrayList<>(policyIds.size());
@@ -451,6 +445,8 @@ public class GdsDBStore extends AbstractGdsStore {
             for (Long policyId : policyIds) {
                 ret.add(svcStore.getPolicy(policyId));
             }
+        } else {
+            ret = Collections.emptyList();
         }
 
         LOG.debug("<== getDatasetPolicies({}): ret={}", datasetId, ret);
@@ -615,9 +611,7 @@ public class GdsDBStore extends AbstractGdsStore {
             projects.add(project);
         }
 
-        int endIndex = Math.min((startIndex + maxRows), projects.size());
-        List<RangerProject> paginatedProjects = projects.subList(startIndex, 
endIndex);
-        PList<RangerProject> ret = new PList<>(paginatedProjects, startIndex, 
maxRows, projects.size(), paginatedProjects.size(), result.getSortBy(), 
result.getSortType());
+        PList<RangerProject> ret = getPList(projects, startIndex, maxRows, 
result.getSortBy(), result.getSortType());
 
         LOG.debug("<== searchProjects({}): ret={}", filter, ret);
 
@@ -869,9 +863,7 @@ public class GdsDBStore extends AbstractGdsStore {
             dataShares.add(dataShare);
         }
 
-        int endIndex = Math.min((startIndex + maxRows), dataShares.size());
-        List<RangerDataShare> paginatedDataShares = 
dataShares.subList(startIndex, endIndex);
-        PList<RangerDataShare> ret = new PList<>(paginatedDataShares, 
startIndex, maxRows, dataShares.size(), paginatedDataShares.size(), 
result.getSortBy(), result.getSortType());
+        PList<RangerDataShare> ret = getPList(dataShares, startIndex, maxRows, 
result.getSortBy(), result.getSortType());
 
         LOG.debug("<== searchDataShares({}): ret={}", filter, ret);
 
@@ -975,9 +967,7 @@ public class GdsDBStore extends AbstractGdsStore {
             sharedResources.add(dataShare);
         }
 
-        int endIndex = Math.min((startIndex + maxRows), 
sharedResources.size());
-        List<RangerSharedResource> paginatedSharedResources = 
sharedResources.subList(startIndex, endIndex);
-        PList<RangerSharedResource> ret = new 
PList<>(paginatedSharedResources, startIndex, maxRows, sharedResources.size(), 
paginatedSharedResources.size(), result.getSortBy(), result.getSortType());
+        PList<RangerSharedResource> ret = getPList(sharedResources, 
startIndex, maxRows, result.getSortBy(), result.getSortType());
 
         LOG.debug("<== searchSharedResources({}): ret={}", filter, ret);
 
@@ -1072,9 +1062,7 @@ public class GdsDBStore extends AbstractGdsStore {
             dataShareInDatasets.add(dataShareInDataset);
         }
 
-        int endIndex = Math.min((startIndex + maxRows), 
dataShareInDatasets.size());
-        List<RangerDataShareInDataset> paginatedDataShareInDatasets = 
dataShareInDatasets.subList(startIndex, endIndex);
-        PList<RangerDataShareInDataset> ret = new 
PList<>(paginatedDataShareInDatasets, startIndex, maxRows, 
dataShareInDatasets.size(), paginatedDataShareInDatasets.size(), 
result.getSortBy(), result.getSortType());
+        PList<RangerDataShareInDataset> ret = getPList(dataShareInDatasets, 
startIndex, maxRows, result.getSortBy(), result.getSortType());
 
         LOG.debug("<== searchDataShareInDatasets({}): ret={}", filter, ret);
 
@@ -1170,9 +1158,7 @@ public class GdsDBStore extends AbstractGdsStore {
             datasetInProjects.add(datasetInProject);
         }
 
-        int endIndex = Math.min((startIndex + maxRows), 
datasetInProjects.size());
-        List<RangerDatasetInProject> paginatedDatasetInProjects = 
datasetInProjects.subList(startIndex, endIndex);
-        PList<RangerDatasetInProject> ret = new 
PList<>(paginatedDatasetInProjects, startIndex, maxRows, 
datasetInProjects.size(), paginatedDatasetInProjects.size(), 
result.getSortBy(), result.getSortType());
+        PList<RangerDatasetInProject> ret = getPList(datasetInProjects, 
startIndex, maxRows, result.getSortBy(), result.getSortType());
 
         LOG.debug("<== searchDatasetInProjects({}): ret={}", filter, ret);
 
@@ -1202,7 +1188,7 @@ public class GdsDBStore extends AbstractGdsStore {
         }
     }
 
-    private List<DatasetSummary> toDatasetSummary(List<RangerDataset> 
datasets, GdsPermission gdsPermission) {
+    private List<DatasetSummary> toDatasetSummary(List<RangerDataset> 
datasets, GdsPermission gdsPermission) throws Exception {
         List<DatasetSummary> ret         = new ArrayList<>();
         String               currentUser = bizUtil.getCurrentUserLoginId();
 
@@ -1229,7 +1215,7 @@ public class GdsDBStore extends AbstractGdsStore {
 
             if (!gdsPermission.equals(GdsPermission.LIST)) {
                 
datasetSummary.setProjectsCount(getDIPCountForDataset(dataset.getId()));
-                
datasetSummary.setPrincipalsCount(getPrincipalCountForDataset(dataset.getName()));
+                
datasetSummary.setPrincipalsCount(getPrincipalCountForDataset(dataset.getId()));
 
                 List<DataShareInDatasetSummary> dshInDsSummaryList = 
getDshInDsSummaryList(dataset.getId());
 
@@ -1261,36 +1247,23 @@ public class GdsDBStore extends AbstractGdsStore {
         return datasetInProjectService.getDatasetsInProjectCount(datasetId);
     }
 
-    private Map<PrincipalType, Long> getPrincipalCountForDataset(String 
datasetName) {
-        Map<PrincipalType, Long> ret    = new HashMap<>();
-        Set<String>              users  = new HashSet<>();
-        Set<String>              groups = new HashSet<>();
-        Set<String>              roles  = new HashSet<>();
-
-        if (StringUtils.isNotEmpty(datasetName)) {
-            List<XXPolicy> policies = 
daoMgr.getXXPolicy().findByServiceType(EMBEDDED_SERVICEDEF_GDS_NAME);
-
-            for (XXPolicy policyFromDb : policies) {
-                RangerPolicy                     policy    = 
policyService.getPopulatedViewObject(policyFromDb);
-                Collection<RangerPolicyResource> resources = 
policy.getResources().values();
+    private Map<PrincipalType, Integer> getPrincipalCountForDataset(Long 
datasetId) throws Exception {
+        Map<PrincipalType, Integer> ret    = new HashMap<>();
+        Set<String>                 users  = new HashSet<>();
+        Set<String>                 groups = new HashSet<>();
+        Set<String>                 roles  = new HashSet<>();
 
-                for (RangerPolicyResource resource : resources) {
-                    if (resource.getValues().contains(datasetName)){
-                        List<RangerPolicyItem> policyItems = 
policy.getPolicyItems();
-
-                        for (RangerPolicyItem policyItem : policyItems) {
-                            users.addAll(policyItem.getUsers());
-                            groups.addAll(policyItem.getGroups());
-                            roles.addAll(policyItem.getRoles());
-                        }
-                    }
-                }
+        for (RangerPolicy policy : getDatasetPolicies(datasetId)) {
+            for (RangerPolicyItem policyItem : policy.getPolicyItems()) {
+                users.addAll(policyItem.getUsers());
+                groups.addAll(policyItem.getGroups());
+                roles.addAll(policyItem.getRoles());
             }
         }
 
-        ret.put(PrincipalType.USER,  (long) users.size());
-        ret.put(PrincipalType.GROUP, (long) groups.size());
-        ret.put(PrincipalType.ROLE,  (long) roles.size());
+        ret.put(PrincipalType.USER,  users.size());
+        ret.put(PrincipalType.GROUP, groups.size());
+        ret.put(PrincipalType.ROLE,  roles.size());
 
         return ret;
     }
@@ -1312,11 +1285,13 @@ public class GdsDBStore extends AbstractGdsStore {
             }
         }
 
-        int                  endIndex          = Math.min((startIndex + 
maxRows), datasets.size());
-        List<RangerDataset>  paginatedDatasets = datasets.subList(startIndex, 
endIndex);
-        PList<RangerDataset> ret               = new 
PList<>(paginatedDatasets, startIndex, maxRows, datasets.size(), 
paginatedDatasets.size(), result.getSortBy(), result.getSortType());
+        return getPList(datasets, startIndex, maxRows, result.getSortBy(), 
result.getSortType());
+    }
 
-        return ret;
+    private <T> PList<T> getPList(List<T> list, int startIndex, int 
maxEntries, String sortBy, String sortType) {
+        List<T> subList = startIndex < list.size() ? list.subList(startIndex, 
Math.min(startIndex + maxEntries, list.size())) : Collections.emptyList();
+
+        return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortBy, sortType);
     }
 
     private GdsPermission getGdsPermissionFromFilter(SearchFilter filter) {

Reply via email to