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

Reply via email to