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 <[email protected]>
AuthorDate: Sun Oct 8 10:15:45 2023 -0700
RANGER-4463: fix for incorrect principalsCount in DatasetSummary
Signed-off-by: Madhan Neethiraj <[email protected]>
---
.../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) {