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 <[email protected]>
AuthorDate: Sun Oct 8 19:42:48 2023 -0700
RANGER-4464: added API to get DataShare summary
Signed-off-by: Madhan Neethiraj <[email protected]>
---
.../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