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
commit e05ab29e88cdd823e55d0e53202bf9da3811d425 Author: prashant <prashantsatam...@gmail.com> AuthorDate: Tue Nov 7 16:20:53 2023 +0530 RANGER-4480: fixed pagination issues in GDS REST APIs Signed-off-by: Madhan Neethiraj <mad...@apache.org> --- .../apache/ranger/plugin/util/SearchFilter.java | 1 + .../java/org/apache/ranger/biz/GdsDBStore.java | 22 +++++++--------------- .../org/apache/ranger/common/RangerSearchUtil.java | 6 ++++-- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java index 93bd7f73d..e64a7395b 100755 --- a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java @@ -123,6 +123,7 @@ public class SearchFilter { public static final String UPDATE_TIME_START = "updatedTimeStart"; // search public static final String UPDATE_TIME_END = "updatedTimeEnd"; // search public static final String IS_DISTINCT = "isDistinct"; // search, sort + public static final String RETRIEVE_ALL_PAGES = "retrieveAllPages"; // search private Map<String, String> params; private int startIndex; 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 ac9f12f3e..c8dd235e9 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 @@ -558,9 +558,6 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); - GdsPermission gdsPermission = getGdsPermissionFromFilter(filter); RangerProjectList result = projectService.searchProjects(filter); List<RangerProject> projects = new ArrayList<>(); @@ -923,12 +920,13 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); final String resourceContains = filter.getParam(SearchFilter.RESOURCE_CONTAINS); filter.removeParam(SearchFilter.RESOURCE_CONTAINS); + if (StringUtils.isNotEmpty(resourceContains)) { + filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true"); + } RangerSharedResourceList result = sharedResourceService.searchSharedResources(filter); List<RangerSharedResource> sharedResources = new ArrayList<>(); @@ -1052,8 +1050,6 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); List<RangerDataShareInDataset> dataShareInDatasets = new ArrayList<>(); RangerDataShareInDatasetList result = dataShareInDatasetService.searchDataShareInDatasets(filter); @@ -1156,8 +1152,6 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); List<RangerDatasetInProject> datasetInProjects = new ArrayList<>(); RangerDatasetInProjectList result = datasetInProjectService.searchDatasetInProjects(filter); @@ -1388,13 +1382,12 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); - + filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true"); GdsPermission gdsPermission = getGdsPermissionFromFilter(filter); RangerDatasetList result = datasetService.searchDatasets(filter); List<RangerDataset> datasets = new ArrayList<>(); + for (RangerDataset dataset : result.getList()) { if (dataset != null && validator.hasPermission(dataset.getAcl(), gdsPermission)) { datasets.add(dataset); @@ -1408,13 +1401,12 @@ public class GdsDBStore extends AbstractGdsStore { int maxRows = filter.getMaxRows(); int startIndex = filter.getStartIndex(); - filter.setStartIndex(0); - filter.setMaxRows(0); - + filter.setParam(SearchFilter.RETRIEVE_ALL_PAGES, "true"); 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); diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java index f8b7837c5..ecb48e251 100755 --- a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java +++ b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java @@ -258,7 +258,9 @@ public class RangerSearchUtil extends SearchUtil { Query query = em.createQuery(queryStr + queryClause); resolveQueryParams(query, searchCriteria, searchFields); - if (!isCountQuery) { + final boolean skipPagination = isCountQuery || Boolean.parseBoolean(searchCriteria.getParam(SearchFilter.RETRIEVE_ALL_PAGES)); + + if (!skipPagination) { query.setFirstResult(searchCriteria.getStartIndex()); updateQueryPageSize(query, searchCriteria); } @@ -289,7 +291,7 @@ public class RangerSearchUtil extends SearchUtil { Integer paramVal = restErrorUtil.parseInt(searchCriteria.getParam(searchField.getClientFieldName()), "Invalid value for " + searchField.getClientFieldName(), MessageEnums.INVALID_INPUT_DATA, null, searchField.getClientFieldName()); - + Number intFieldValue = paramVal != null ? (Number) paramVal : null; if (intFieldValue != null) { if (searchField.getCustomCondition() == null) {