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 3c8ded2e7 RANGER-4464: added API to get DataShare summary 3c8ded2e7 is described below commit 3c8ded2e713a39a6e0abb236f1b893bbbc625207 Author: Subhrat Chaudhary <such...@yahoo.com> AuthorDate: Sun Oct 8 19:42:48 2023 -0700 RANGER-4464: added API to get DataShare summary Signed-off-by: Madhan Neethiraj <mad...@apache.org> --- .../org/apache/ranger/plugin/model/RangerGds.java | 180 ++++++++++++++------ .../java/org/apache/ranger/biz/GdsDBStore.java | 184 +++++++++++++++++---- .../main/java/org/apache/ranger/rest/GdsREST.java | 80 +++++---- .../ranger/security/context/RangerAPIList.java | 11 +- .../ranger/service/RangerGdsDataShareService.java | 4 +- .../ranger/service/RangerGdsDatasetService.java | 2 +- .../ranger/service/RangerGdsProjectService.java | 4 +- .../service/RangerGdsSharedResourceService.java | 4 +- 8 files changed, 337 insertions(+), 132 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 ec75d63bb..105044f08 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 @@ -572,13 +572,103 @@ public class RangerGds { } } + @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) + @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) + @JsonIgnoreProperties(ignoreUnknown = true) + public static class DataShareSummary extends RangerBaseModelObject implements java.io.Serializable { + private static final long serialVersionUID = 1L; + + private String name; + private String description; + private GdsPermission permissionForCaller; + private Long resourceCount; + private Long serviceId; + private String serviceName; + private String serviceType; + private Long zoneId; + private String zoneName; + private List<DataShareInDatasetSummary> datasets; + + public DataShareSummary() { + super(); + } + + public String getName() { return name; } + + public void setName(String name) { this.name = name; } + + public String getDescription() { return description; } + + public void setDescription(String description) { this.description = description; } + + public GdsPermission getPermissionForCaller() { return permissionForCaller; } + + public void setPermissionForCaller(GdsPermission permissionForCaller) { this.permissionForCaller = permissionForCaller; } + + public Long getResourceCount() { return resourceCount; } + + public void setResourceCount(Long resourceCount) { this.resourceCount = resourceCount; } + + public Long getServiceId() { return serviceId; } + + public void setServiceId(Long serviceId) { this.serviceId = serviceId; } + + public String getServiceName() { return serviceName; } + + public void setServiceName(String serviceName) { this.serviceName = serviceName; } + + public String getServiceType() { return serviceType; } + + public void setServiceType(String serviceType) { this.serviceType = serviceType; } + + public Long getZoneId() { return zoneId; } + + public void setZoneId(Long zoneId) { this.zoneId = zoneId; } + + public String getZoneName() { return zoneName; } + + public void setZoneName(String zoneName) { this.zoneName = zoneName; } + + public List<DataShareInDatasetSummary> getDatasets() { return datasets; } + + public void setDatasets(List<DataShareInDatasetSummary> datasets) { this.datasets = datasets; } + + @Override + public String toString() { + return toString(new StringBuilder()).toString(); + } + + public StringBuilder toString(StringBuilder sb) { + sb.append("DataShareSummary={"); + + super.toString(sb); + + sb.append("name={").append(name).append("} ") + .append("description={").append(description).append("} ") + .append("permissionForCaller={").append(permissionForCaller).append("} ") + .append("resourceCount={").append(resourceCount).append("} ") + .append("serviceId={").append(serviceId).append("} ") + .append("serviceName={").append(serviceName).append("} ") + .append("serviceType={").append(serviceType).append("} ") + .append("zoneName={").append(zoneName).append("} ") + .append("zoneId={").append(zoneId).append("} ") + .append("datasets={").append(datasets).append("} ") + .append("}"); + + return sb; + } + } + @JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) @JsonSerialize(include = JsonSerialize.Inclusion.NON_EMPTY) @JsonIgnoreProperties(ignoreUnknown = true) public static class DataShareInDatasetSummary extends RangerBaseModelObject implements java.io.Serializable { private static final long serialVersionUID = 1L; - private String name; + private Long datasetId; + private String datasetName; + private Long dataShareId; + private String dataShareName; private Long serviceId; private String serviceName; private Long zoneId; @@ -591,81 +681,63 @@ public class RangerGds { super(); } - public String getName() { - return name; - } + public String getDatasetName() { return datasetName; } - public void setName(String name) { - this.name = name; - } + public void setDatasetName(String datasetName) { this.datasetName = datasetName; } - public Long getServiceId() { - return serviceId; - } + public Long getDatasetId() { return datasetId; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; - } + public void setDatasetId(Long datasetId) { this.datasetId = datasetId; } - public String getServiceName() { - return serviceName; - } + public Long getDataShareId() { return dataShareId; } - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } + public void setDataShareId(Long dataShareId) { this.dataShareId = dataShareId; } - public Long getZoneId() { - return zoneId; - } + public String getDataShareName() { return dataShareName; } - public void setZoneId(Long zoneId) { - this.zoneId = zoneId; - } + public void setDataShareName(String dataShareName) { this.dataShareName = dataShareName; } - public String getZoneName() { - return zoneName; - } + public Long getServiceId() { return serviceId; } - public void setZoneName(String zoneName) { - this.zoneName = zoneName; - } + public void setServiceId(Long serviceId) { this.serviceId = serviceId; } - public Long getResourceCount() { - return resourceCount; - } + public String getServiceName() { return serviceName; } - public void setResourceCount(Long resourceCount) { - this.resourceCount = resourceCount; - } + public void setServiceName(String serviceName) { this.serviceName = serviceName; } - public GdsShareStatus getShareStatus() { - return shareStatus; - } + public Long getZoneId() { return zoneId; } - public void setShareStatus(GdsShareStatus shareStatus) { - this.shareStatus = shareStatus; - } + public void setZoneId(Long zoneId) { this.zoneId = zoneId; } - public String getApprover() { - return approver; - } + public String getZoneName() { return zoneName; } - public void setApprover(String approver) { - this.approver = approver; - } + public void setZoneName(String zoneName) { this.zoneName = zoneName; } + + public Long getResourceCount() { return resourceCount; } + + public void setResourceCount(Long resourceCount) { this.resourceCount = resourceCount; } + + public GdsShareStatus getShareStatus() { return shareStatus; } + + public void setShareStatus(GdsShareStatus shareStatus) { this.shareStatus = shareStatus; } + + public String getApprover() { return approver; } + + public void setApprover(String approver) { this.approver = approver; } @Override - public String toString() { - return toString(new StringBuilder()).toString(); - } + public String toString() {return toString(new StringBuilder()).toString(); } public StringBuilder toString(StringBuilder sb) { - sb.append("DatasetSummary={"); + sb.append("DataShareInDatasetSummary={"); super.toString(sb); - sb.append("name={").append(name).append("} ") + sb.append("name={").append(datasetName).append("} ") + .append("datasetId={").append(datasetId).append("} ") + .append("datasetName={").append(datasetName).append("} ") + .append("dataShareId={").append(dataShareId).append("} ") + .append("dataShareName={").append(dataShareName).append("} ") .append("serviceId={").append(serviceId).append("} ") .append("serviceName={").append(serviceName).append("} ") .append("zoneId={").append(zoneId).append("} ") 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 60636430d..58b2d3ca0 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 @@ -40,6 +40,7 @@ import org.apache.ranger.entity.XXSecurityZone; import org.apache.ranger.entity.XXGdsProject; import org.apache.ranger.entity.XXGdsProjectPolicyMap; import org.apache.ranger.plugin.model.RangerGds.DatasetSummary; +import org.apache.ranger.plugin.model.RangerGds.DataShareSummary; import org.apache.ranger.plugin.model.RangerGds.DataShareInDatasetSummary; import org.apache.ranger.plugin.model.RangerPolicy; import org.apache.ranger.plugin.model.RangerGds.GdsPermission; @@ -163,6 +164,20 @@ public class GdsDBStore extends AbstractGdsStore { return ret; } + public PList<DataShareSummary> getDataShareSummary(SearchFilter filter) { + LOG.debug("==> getDataShareSummary({})", filter); + + PList<RangerDataShare> dataShares = getUnscrubbedDataShares(filter); + List<DataShareSummary> dataShareSummary = toDataShareSummary(dataShares.getList(), getGdsPermissionFromFilter(filter)); + PList<DataShareSummary> ret = new PList<>(dataShareSummary, dataShares.getStartIndex(), dataShares.getPageSize(), dataShares.getTotalCount(), dataShares.getResultSize(), dataShares.getSortType(), dataShares.getSortBy()); + + ret.setQueryTimeMS(dataShares.getQueryTimeMS()); + + LOG.debug("<== getDataShareSummary({}): ret={}", filter, ret); + + return ret; + } + @Override public RangerDataset createDataset(RangerDataset dataset) { LOG.debug("==> createDataset({})", dataset); @@ -849,21 +864,15 @@ public class GdsDBStore extends AbstractGdsStore { public PList<RangerDataShare> searchDataShares(SearchFilter filter) { LOG.debug("==> searchDataShares({})", filter); - int maxRows = filter.getMaxRows(); - int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); - - RangerDataShareList result = dataShareService.searchDataShares(filter); - List<RangerDataShare> dataShares = new ArrayList<>(); + PList<RangerDataShare> ret = getUnscrubbedDataShares(filter); + List<RangerDataShare> dataShares = ret.getList(); + GdsPermission gdsPermission = getGdsPermissionFromFilter(filter); - for (RangerDataShare dataShare : result.getList()) { - // TODO: enforce RangerDataShare.acl - - dataShares.add(dataShare); - } - - PList<RangerDataShare> ret = getPList(dataShares, startIndex, maxRows, result.getSortBy(), result.getSortType()); + for (RangerDataShare dataShare : dataShares) { + if (gdsPermission.equals(GdsPermission.LIST)) { + scrubDataShareForListing(dataShare); + } + } LOG.debug("<== searchDataShares({}): ret={}", filter, ret); @@ -1217,10 +1226,12 @@ public class GdsDBStore extends AbstractGdsStore { datasetSummary.setProjectsCount(getDIPCountForDataset(dataset.getId())); datasetSummary.setPrincipalsCount(getPrincipalCountForDataset(dataset.getId())); - List<DataShareInDatasetSummary> dshInDsSummaryList = getDshInDsSummaryList(dataset.getId()); + SearchFilter filter = new SearchFilter(SearchFilter.DATASET_ID, dataset.getId().toString()); + RangerDataShareList dataShares = dataShareService.searchDataShares(filter); + List<DataShareInDatasetSummary> dataSharesSummary = getDataSharesSummary(dataShares, filter); - datasetSummary.setDataShares(dshInDsSummaryList); - datasetSummary.setTotalResourceCount(dshInDsSummaryList.stream() + datasetSummary.setDataShares(dataSharesSummary); + datasetSummary.setTotalResourceCount(dataSharesSummary.stream() .map(DataShareInDatasetSummary::getResourceCount) .mapToLong(Long::longValue) .sum()); @@ -1232,12 +1243,48 @@ public class GdsDBStore extends AbstractGdsStore { return ret; } - private Map<GdsShareStatus, Long> getDataSharesInDatasetCountByStatus(Long datasetId) { - Map<GdsShareStatus, Long> ret = new HashMap<>(); - Map<Short, Long> countsByStatus = daoMgr.getXXGdsDataShareInDataset().getDataSharesInDatasetCountByStatus(datasetId); + private List<DataShareSummary> toDataShareSummary(List<RangerDataShare> dataShares, GdsPermission gdsPermission) { + List<DataShareSummary> ret = new ArrayList<>(); + String currentUser = bizUtil.getCurrentUserLoginId(); + + for (RangerDataShare dataShare : dataShares) { + GdsPermission permissionForCaller = validator.getGdsPermissionForUser(dataShare.getAcl(), currentUser); - for (Map.Entry<Short, Long> entry : countsByStatus.entrySet()) { - ret.put(RangerGdsDatasetInProjectService.toShareStatus(entry.getKey()), entry.getValue()); + if (permissionForCaller.equals(GdsPermission.NONE)) { + continue; + } + + DataShareSummary dataShareSummary = new DataShareSummary(); + + dataShareSummary.setId(dataShare.getId()); + dataShareSummary.setName(dataShare.getName()); + dataShareSummary.setDescription(dataShare.getDescription()); + dataShareSummary.setCreateTime(dataShare.getCreateTime()); + dataShareSummary.setUpdateTime(dataShare.getUpdateTime()); + dataShareSummary.setCreatedBy(dataShare.getCreatedBy()); + dataShareSummary.setUpdatedBy(dataShare.getUpdatedBy()); + dataShareSummary.setIsEnabled(dataShare.getIsEnabled()); + dataShareSummary.setGuid(dataShare.getGuid()); + dataShareSummary.setVersion(dataShare.getVersion()); + dataShareSummary.setPermissionForCaller(permissionForCaller); + + dataShareSummary.setZoneName(dataShare.getZone()); + dataShareSummary.setZoneId(getZoneId(dataShare.getZone())); + + dataShareSummary.setServiceName(dataShare.getService()); + dataShareSummary.setServiceId(getServiceId(dataShare.getService())); + dataShareSummary.setServiceType(getServiceType(dataShare.getService())); + + if (!gdsPermission.equals(GdsPermission.LIST)) { + SearchFilter filter = new SearchFilter(SearchFilter.DATA_SHARE_ID, dataShare.getId().toString()); + RangerDatasetList datasets = datasetService.searchDatasets(filter); + List<DataShareInDatasetSummary> datasetsSummary = getDatasetsSummary(datasets, filter); + + dataShareSummary.setDatasets(datasetsSummary); + dataShareSummary.setResourceCount(sharedResourceService.getResourceCountForDataShare(dataShare.getId())); + } + + ret.add(dataShareSummary); } return ret; @@ -1288,6 +1335,26 @@ public class GdsDBStore extends AbstractGdsStore { return getPList(datasets, startIndex, maxRows, result.getSortBy(), result.getSortType()); } + private PList<RangerDataShare> getUnscrubbedDataShares(SearchFilter filter) { + int maxRows = filter.getMaxRows(); + int startIndex = filter.getStartIndex(); + + filter.setStartIndex(0); + filter.setMaxRows(0); + + GdsPermission gdsPermission = getGdsPermissionFromFilter(filter); + RangerDataShareList result = dataShareService.searchDataShares(filter); + List<RangerDataShare> dataShares = new ArrayList<>(); + + for (RangerDataShare dataShare : result.getList()) { + if (dataShare != null && validator.hasPermission(dataShare.getAcl(), gdsPermission)) { + dataShares.add(dataShare); + } + } + + return getPList(dataShares, startIndex, maxRows, result.getSortBy(), result.getSortType()); + } + 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(); @@ -1325,6 +1392,12 @@ public class GdsDBStore extends AbstractGdsStore { project.setAdditionalInfo(null); } + private void scrubDataShareForListing(RangerDataShare dataShare) { + dataShare.setAcl(null); + dataShare.setOptions(null); + dataShare.setAdditionalInfo(null); + } + private void removeDshInDsForDataShare(Long dataShareId) { SearchFilter filter = new SearchFilter(SearchFilter.DATA_SHARE_ID, dataShareId.toString()); RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter); @@ -1464,19 +1537,31 @@ public class GdsDBStore extends AbstractGdsStore { } } - private List<DataShareInDatasetSummary> getDshInDsSummaryList(Long datasetId) { - List<DataShareInDatasetSummary> ret = new ArrayList<>(); - SearchFilter filter = new SearchFilter(SearchFilter.DATASET_ID, datasetId.toString()); - RangerDataShareList dataShares = dataShareService.searchDataShares(filter); + private List<DataShareInDatasetSummary> getDataSharesSummary(RangerDataShareList dataShares, SearchFilter filter) { + List<DataShareInDatasetSummary> ret = new ArrayList<>(); if (CollectionUtils.isNotEmpty(dataShares.getList())) { RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter); if (CollectionUtils.isNotEmpty(dshInDsList.getList())) { for (RangerDataShare dataShare : dataShares.getList()) { - DataShareInDatasetSummary summary = toDshInDsSummary(dataShare, dshInDsList.getList()); + ret.add(toDshInDsSummary(dataShare, dshInDsList.getList())); + } + } + } + + return ret; + } + + private List<DataShareInDatasetSummary> getDatasetsSummary(RangerDatasetList datasets, SearchFilter filter) { + List<DataShareInDatasetSummary> ret = new ArrayList<>(); - ret.add(summary); + if (CollectionUtils.isNotEmpty(datasets.getList())) { + RangerDataShareInDatasetList dshInDsList = dataShareInDatasetService.searchDataShareInDatasets(filter); + + if (CollectionUtils.isNotEmpty(dshInDsList.getList())) { + for (RangerDataset dataset : datasets.getList()) { + ret.add(toDshInDsSummary(dataset, dshInDsList.getList())); } } } @@ -1488,12 +1573,14 @@ public class GdsDBStore extends AbstractGdsStore { Optional<RangerDataShareInDataset> dshInDs = dshInDsList.stream().filter(d -> d.getDataShareId().equals(dataShare.getId())).findFirst(); if (!dshInDs.isPresent()) { - throw restErrorUtil.createRESTException("RequestStatus for DataShareInDataset not found", MessageEnums.DATA_NOT_FOUND, dataShare.getId(), "SharedResourceId", null, HttpStatus.SC_NOT_FOUND); + throw restErrorUtil.createRESTException("DataShareInDataset not found", MessageEnums.DATA_NOT_FOUND, dataShare.getId(), "SharedResourceId", null, HttpStatus.SC_NOT_FOUND); } DataShareInDatasetSummary summary = new DataShareInDatasetSummary(); - summary.setId(dataShare.getId()); + summary.setId(dshInDs.get().getId()); + summary.setDataShareId(dataShare.getId()); + summary.setDataShareName(dataShare.getName()); summary.setCreatedBy(dataShare.getCreatedBy()); summary.setCreateTime(dataShare.getCreateTime()); summary.setUpdatedBy(dataShare.getUpdatedBy()); @@ -1502,7 +1589,6 @@ public class GdsDBStore extends AbstractGdsStore { summary.setIsEnabled(dataShare.getIsEnabled()); summary.setVersion(dataShare.getVersion()); - summary.setName(dataShare.getName()); summary.setServiceId(getServiceId(dataShare.getService())); summary.setServiceName(dataShare.getService()); summary.setZoneId(getZoneId(dataShare.getZone())); @@ -1514,6 +1600,32 @@ public class GdsDBStore extends AbstractGdsStore { return summary; } + private DataShareInDatasetSummary toDshInDsSummary(RangerDataset dataset, List<RangerDataShareInDataset> dshInDsList) { + Optional<RangerDataShareInDataset> dshInDs = dshInDsList.stream().filter(d -> d.getDatasetId().equals(dataset.getId())).findFirst(); + + if (!dshInDs.isPresent()) { + throw restErrorUtil.createRESTException("DataShareInDataset not found", MessageEnums.DATA_NOT_FOUND, dataset.getId(), "DatasetId", null, HttpStatus.SC_NOT_FOUND); + } + + DataShareInDatasetSummary summary = new DataShareInDatasetSummary(); + + summary.setId(dshInDs.get().getId()); + summary.setDatasetId(dataset.getId()); + summary.setDatasetName(dataset.getName()); + summary.setCreatedBy(dataset.getCreatedBy()); + summary.setCreateTime(dataset.getCreateTime()); + summary.setUpdatedBy(dataset.getUpdatedBy()); + summary.setUpdateTime(dataset.getUpdateTime()); + summary.setGuid(dataset.getGuid()); + summary.setIsEnabled(dataset.getIsEnabled()); + summary.setVersion(dataset.getVersion()); + + summary.setShareStatus(dshInDs.get().getStatus()); + summary.setApprover(dshInDs.get().getApprover()); + + return summary; + } + private Long getServiceId(String serviceName) { XXService xService = daoMgr.getXXService().findByName(serviceName); @@ -1524,6 +1636,16 @@ public class GdsDBStore extends AbstractGdsStore { return xService.getId(); } + private String getServiceType(String serviceName) { + String serviceTpe = daoMgr.getXXServiceDef().findServiceDefTypeByServiceName(serviceName); + + if (StringUtils.isEmpty(serviceTpe)) { + throw restErrorUtil.createRESTException("Service type not found", MessageEnums.DATA_NOT_FOUND, null, "ServiceName", null, HttpStatus.SC_NOT_FOUND); + } + + return serviceTpe; + } + private Long getZoneId(String zoneName) { Long ret = null; diff --git a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java index cc09506f3..18e4cc451 100755 --- a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java @@ -31,6 +31,7 @@ import org.apache.ranger.plugin.model.RangerGds.RangerProject; import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource; import org.apache.ranger.plugin.model.RangerPolicy; import org.apache.ranger.plugin.model.RangerGds.DatasetSummary; +import org.apache.ranger.plugin.model.RangerGds.DataShareSummary; import org.apache.ranger.plugin.store.PList; import org.apache.ranger.plugin.util.RangerPerfTracer; import org.apache.ranger.plugin.util.SearchFilter; @@ -298,17 +299,21 @@ public class GdsREST { LOG.debug("==> GdsREST.getDatasetSummary()"); PList<DatasetSummary> ret; + RangerPerfTracer perf = null; + SearchFilter filter = null; try { - SearchFilter filter = searchUtil.getSearchFilter(request, datasetService.sortFields); + filter = searchUtil.getSearchFilter(request, datasetService.sortFields); ret = gdsStore.getDatasetSummary(filter); } catch (WebApplicationException we) { throw we; } catch (Throwable ex) { - LOG.error("getDatasetSummary() failed", ex); + LOG.error("getDatasetSummary({}) failed", filter, ex); throw restErrorUtil.createRESTException(ex.getMessage()); + } finally { + RangerPerfTracer.log(perf); } LOG.debug("<== GdsREST.getDatasetSummary(): {}", ret); @@ -588,14 +593,10 @@ public class GdsREST { LOG.debug("==> GdsREST.searchProjects()"); PList<RangerProject> ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchProjects()");; SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchProjects()"); - } - filter = searchUtil.getSearchFilter(request, projectService.sortFields); ret = gdsStore.searchProjects(filter); @@ -622,14 +623,10 @@ public class GdsREST { LOG.debug("==> GdsREST.listProjectNames()"); PList<String> ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchProjects()"); SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchProjects()"); - } - filter = searchUtil.getSearchFilter(request, projectService.sortFields); ret = gdsStore.getProjectNames(filter); @@ -923,14 +920,10 @@ public class GdsREST { LOG.debug("==> GdsREST.searchDataShares()"); PList<RangerDataShare> ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShares()"); SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShares()"); - } - filter = searchUtil.getSearchFilter(request, dataShareService.sortFields); ret = gdsStore.searchDataShares(filter); @@ -949,6 +942,35 @@ public class GdsREST { return ret; } + @GET + @Path("/datashare/summary") + @Produces({ "application/json" }) + @PreAuthorize("@rangerPreAuthSecurityHandler.isAPIAccessible(\"" + RangerAPIList.GET_DATA_SHARE_SUMMARY + "\")") + public PList<DataShareSummary> getDataShareSummary(@Context HttpServletRequest request) { + LOG.debug("==> GdsREST.getDataShareSummary()"); + + PList<DataShareSummary> ret; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.getDataShareSummary()"); + + try { + SearchFilter filter = searchUtil.getSearchFilter(request, dataShareService.sortFields); + + ret = gdsStore.getDataShareSummary(filter); + } catch (WebApplicationException we) { + throw we; + } catch (Throwable ex) { + LOG.error("getDataShareSummary() failed", ex); + + throw restErrorUtil.createRESTException(ex.getMessage()); + } finally { + RangerPerfTracer.log(perf); + } + + LOG.debug("<== GdsREST.getDataShareSummary(): {}", ret); + + return ret; + } + @POST @Path("/resource") @Consumes({ "application/json" }) @@ -1085,14 +1107,10 @@ public class GdsREST { LOG.debug("==> GdsREST.searchSharedResources()"); PList<RangerSharedResource> ret; - RangerPerfTracer perf = null; - SearchFilter filter = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchSharedResources()"); + SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchSharedResources()"); - } - filter = searchUtil.getSearchFilter(request, sharedResourceService.sortFields); ret = gdsStore.searchSharedResources(filter); @@ -1120,7 +1138,7 @@ public class GdsREST { LOG.debug("==> GdsREST.addDataShareInDataset({})", datasetData); RangerDataShareInDataset ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = null; try { if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { @@ -1152,7 +1170,7 @@ public class GdsREST { LOG.debug("==> GdsREST.updateDataShareInDataset({}, {})", id, dataShareInDataset); RangerDataShareInDataset ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = null; try { if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { @@ -1244,14 +1262,10 @@ public class GdsREST { LOG.debug("==> GdsREST.searchDataShareInDatasets()"); PList<RangerDataShareInDataset> ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShareInDatasets()"); SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDataShareInDatasets()"); - } - filter = searchUtil.getSearchFilter(request, dshidService.sortFields); ret = gdsStore.searchDataShareInDatasets(filter); @@ -1404,14 +1418,10 @@ public class GdsREST { LOG.debug("==> GdsREST.searchDatasetInProjects()"); PList<RangerDatasetInProject> ret; - RangerPerfTracer perf = null; + RangerPerfTracer perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDatasetInProjects()"); SearchFilter filter = null; try { - if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) { - perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "GdsREST.searchDatasetInProjects()"); - } - filter = searchUtil.getSearchFilter(request, dipService.sortFields); ret = gdsStore.searchDatasetInProjects(filter); diff --git a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java index 1c42e93c0..f21d445c4 100755 --- a/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java +++ b/security-admin/src/main/java/org/apache/ranger/security/context/RangerAPIList.java @@ -233,11 +233,12 @@ public class RangerAPIList { public static final String LIST_PROJECT_NAMES = "GdsREST.listProjectNames"; public static final String PROJECT_POLICY = "GdsREST.projectPolicy"; - public static final String CREATE_DATA_SHARE = "GdsREST.createDataShare"; - public static final String UPDATE_DATA_SHARE = "GdsREST.updateDataShare"; - public static final String DELETE_DATA_SHARE = "GdsREST.deleteDataShare"; - public static final String GET_DATA_SHARE = "GdsREST.getDataShare"; - public static final String SEARCH_DATA_SHARES = "GdsREST.searchDataShares"; + public static final String CREATE_DATA_SHARE = "GdsREST.createDataShare"; + public static final String UPDATE_DATA_SHARE = "GdsREST.updateDataShare"; + public static final String DELETE_DATA_SHARE = "GdsREST.deleteDataShare"; + public static final String GET_DATA_SHARE = "GdsREST.getDataShare"; + public static final String SEARCH_DATA_SHARES = "GdsREST.searchDataShares"; + public static final String GET_DATA_SHARE_SUMMARY = "GdsREST.getDataShareSummary"; public static final String ADD_SHARED_RESOURCE = "GdsREST.addSharedResource"; public static final String UPDATE_SHARED_RESOURCE = "GdsREST.updateSharedResource"; diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java index 773fcb873..d4e6ec746 100755 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDataShareService.java @@ -75,8 +75,8 @@ public class RangerGdsDataShareService extends RangerGdsBaseModelService<XXGdsDa sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime")); - sortFields.add(new SortField(SearchFilter.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); - sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name")); + sortFields.add(new SortField(SearchFilter.DATA_SHARE_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); + sortFields.add(new SortField(SearchFilter.DATA_SHARE_NAME, "obj.name")); } @Override diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java index 344b4ec33..d5e2e52bd 100755 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsDatasetService.java @@ -69,7 +69,7 @@ public class RangerGdsDatasetService extends RangerGdsBaseModelService<XXGdsData searchFields.add(new SearchField(SearchFilter.ZONE_NAME_PARTIAL, "z.name", SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); searchFields.add(new SearchField(SearchFilter.ZONE_ID, "dsh.zoneId", SearchField.DATA_TYPE.INTEGER, SearchField.SEARCH_TYPE.FULL, "XXGdsDataShareInDataset dshid, XXGdsDataShare dsh, XXSecurityZone z", "obj.id = dshid.datasetId and dshid.dataShareId = dsh.id and dsh.zoneId = z.id")); searchFields.add(new SearchField(SearchFilter.CREATE_TIME_START, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN)); - searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN)); + searchFields.add(new SearchField(SearchFilter.CREATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN)); searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_START, "obj.updateTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.GREATER_EQUAL_THAN)); searchFields.add(new SearchField(SearchFilter.UPDATE_TIME_END, "obj.createTime", SearchField.DATA_TYPE.DATE, SearchField.SEARCH_TYPE.LESS_EQUAL_THAN)); diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java index 1da1456a6..f800c90b0 100755 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsProjectService.java @@ -71,8 +71,8 @@ public class RangerGdsProjectService extends RangerGdsBaseModelService<XXGdsProj sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime")); - sortFields.add(new SortField(SearchFilter.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); - sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name")); + sortFields.add(new SortField(SearchFilter.PROJECT_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); + sortFields.add(new SortField(SearchFilter.PROJECT_NAME, "obj.name")); } @Override diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java index 35ea2da8c..a96f6e8b3 100755 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerGdsSharedResourceService.java @@ -70,8 +70,8 @@ public class RangerGdsSharedResourceService extends RangerGdsBaseModelService<XX sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime")); sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime")); - sortFields.add(new SortField(SearchFilter.DATASET_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); - sortFields.add(new SortField(SearchFilter.DATASET_NAME, "obj.name")); + sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_ID, "obj.id", true, SortField.SORT_ORDER.ASC)); + sortFields.add(new SortField(SearchFilter.SHARED_RESOURCE_NAME, "obj.name")); } @Override