RANGER-4605: /assets/resources/count does not return proper count if policies are greater than 200
Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java b/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
index e5ef779..be077e7 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/AssetREST.java
@@ -22,7 +22,9 @@
import java.io.File;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -446,12 +448,39 @@
logger.debug("==> AssetREST.countXResources()");
}
+ SearchFilter filter = searchUtil.getSearchFilterFromLegacyRequest(request, xResourceService.sortFields);
+
+ filter.setMaxRows(Integer.MAX_VALUE);
+
+ List<RangerPolicy> policies = serviceREST.getPolicies(filter);
+ int policiesCount = 0;
+
+ if (policies != null) {
+ Map<String, RangerService> services = new HashMap<>();
+
+ for (RangerPolicy policy : policies) {
+ RangerService service = services.get(policy.getService());
+
+ if (service == null) {
+ service = serviceREST.getServiceByName(policy.getService());
+
+ services.put(policy.getService(), service);
+ }
+
+ VXResource resource = serviceUtil.toVXResource(policy, service);
+
+ if (resource != null) {
+ policiesCount++;
+ }
+ }
+ }
+
VXLong ret = new VXLong();
- ret.setValue(searchXResources(request).getListSize());
+ ret.setValue(policiesCount);
if(logger.isDebugEnabled()) {
- logger.debug("<== AssetREST.countXAssets(): " + ret);
+ logger.debug("<== AssetREST.countXResources(): " + ret);
}
return ret;