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) {