149149import java .io .IOException ;
150150import java .io .InputStream ;
151151import java .security .SecureRandom ;
152- import java .util .ArrayList ;
153- import java .util .Arrays ;
154- import java .util .Collection ;
155- import java .util .Comparator ;
156- import java .util .HashMap ;
157- import java .util .HashSet ;
158- import java .util .LinkedHashMap ;
159- import java .util .List ;
160- import java .util .ListIterator ;
161- import java .util .Map ;
152+ import java .util .*;
162153import java .util .Map .Entry ;
163- import java .util .Objects ;
164- import java .util .Set ;
165- import java .util .TreeMap ;
166154import java .util .stream .IntStream ;
167155
168156import static org .apache .ranger .plugin .store .EmbeddedServiceDefsUtil .EMBEDDED_SERVICEDEF_GDS_NAME ;
@@ -3729,6 +3717,8 @@ private List<RangerPolicy> getAllFilteredPolicyList(SearchFilter filter, HttpSer
37293717 List <String > serviceTypeList = null ;
37303718 List <String > serviceNameInServiceTypeList = new ArrayList <>();
37313719 boolean isServiceExists ;
3720+ int begin = 0 ;
3721+ int offset = -1 ;
37323722
37333723 if (request .getParameter (PARAM_SERVICE_NAME ) != null ) {
37343724 serviceNames = request .getParameter (PARAM_SERVICE_NAME );
@@ -3750,6 +3740,9 @@ private List<RangerPolicy> getAllFilteredPolicyList(SearchFilter filter, HttpSer
37503740 List <RangerPolicy > policyListByServiceName = new ArrayList <>();
37513741
37523742 if (filter != null ) {
3743+ begin = filter .getBeginIndex ();
3744+ offset = filter .getOffset ();
3745+ LOG .info ("==> beginIndex: {}, offset: {}" , begin , offset );
37533746 filter .setStartIndex (0 );
37543747 filter .setMaxRows (Integer .MAX_VALUE );
37553748
@@ -3830,7 +3823,12 @@ private List<RangerPolicy> getAllFilteredPolicyList(SearchFilter filter, HttpSer
38303823 policyLists .addAll (orderedPolicies .values ());
38313824 }
38323825 }
3826+ LOG .info ("<==policyLists size:{}" , policyLists .size ());
38333827
3828+ if (begin >=0 && offset >0 ) {
3829+ policyLists = getRangerPoliciesInRange (policyLists , filter );
3830+ LOG .info ("<==policyLists size after cut:{}" , policyLists .size ());
3831+ }
38343832 return policyLists ;
38353833 }
38363834
@@ -4298,6 +4296,39 @@ private RangerPolicyList toRangerPolicyList(List<RangerPolicy> policyList, Searc
42984296 return ret ;
42994297 }
43004298
4299+ private List <RangerPolicy > getRangerPoliciesInRange (List <RangerPolicy > policyList , SearchFilter filter ) {
4300+ if (CollectionUtils .isEmpty (policyList )) {
4301+ return Collections .emptyList ();
4302+ }
4303+
4304+ int totalCount = policyList .size ();
4305+ int startIndex = filter .getBeginIndex ();
4306+ int offset = filter .getOffset ();
4307+ int toIndex = Math .min (startIndex + offset , totalCount );
4308+ LOG .info ("==>totalCount: {}, startIndex:{}, offsetSize: {}, toIndex: {}" , totalCount , startIndex , offset , toIndex );
4309+ String sortType = filter .getSortType ();
4310+ String sortBy = filter .getSortBy ();
4311+
4312+ if (StringUtils .isNotEmpty (sortBy ) && StringUtils .isNotEmpty (sortType )) {
4313+ // By default policyList is sorted by policyId in asc order, So handling only desc case.
4314+ if (SearchFilter .POLICY_ID .equalsIgnoreCase (sortBy )) {
4315+ if (SORT_ORDER .DESC .name ().equalsIgnoreCase (sortType )) {
4316+ policyList .sort (this .getPolicyComparator (sortBy , sortType ));
4317+ }
4318+ } else if (SearchFilter .POLICY_NAME .equalsIgnoreCase (sortBy )) {
4319+ if (SORT_ORDER .ASC .name ().equalsIgnoreCase (sortType ) || SORT_ORDER .DESC .name ().equalsIgnoreCase (sortType )) {
4320+ policyList .sort (this .getPolicyComparator (sortBy , sortType ));
4321+ } else {
4322+ LOG .info ("Invalid or Unsupported sortType : {}" , sortType );
4323+ }
4324+ } else {
4325+ LOG .info ("Invalid or Unsupported sortBy property : {}" , sortBy );
4326+ }
4327+ }
4328+
4329+ return new ArrayList <>(policyList .subList (startIndex , toIndex ));
4330+ }
4331+
43014332 private Comparator <RangerPolicy > getPolicyComparator (String sortBy , String sortType ) {
43024333 return (RangerPolicy me , RangerPolicy other ) -> {
43034334 int ret = 0 ;
0 commit comments