RANGER-4695: updated API to find zones for a resource to handle deleted services
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
index 8ad3e12..9707239 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/ServiceStore.java
@@ -59,6 +59,8 @@
void deleteService(Long id) throws Exception;
+ boolean serviceExists(String name) throws Exception;
+
RangerService getService(Long id) throws Exception;
RangerService getServiceByName(String name) throws Exception;
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyAdminCache.java b/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyAdminCache.java
index a64e427..5bd3a09 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyAdminCache.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/RangerPolicyAdminCache.java
@@ -68,6 +68,20 @@
return null;
}
+ try {
+ if (!svcStore.serviceExists(serviceName)) {
+ LOG.warn("Service:[" + serviceName + "] does not exist in service-store. Returning null policy-engine!");
+
+ policyAdminCache.remove(serviceName);
+
+ return null;
+ }
+ } catch (Exception exception) {
+ LOG.error("Failed to check if service:[" + serviceName + "] exists in service-store", exception);
+
+ return null;
+ }
+
long policyVersion;
long roleVersion;
RangerRoles roles;
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 00a3d9c..cccc47f 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -1934,6 +1934,25 @@
}
@Override
+ public boolean serviceExists(String name) {
+ boolean ret = false;
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.serviceExists({})", name);
+ }
+
+ Long id = daoMgr.getXXService().findIdByName(name);
+
+ ret = id != null;
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.serviceExists({}): ret={}", name, ret);
+ }
+
+ return ret;
+ }
+
+ @Override
public RangerService getService(Long id) throws Exception {
if(LOG.isDebugEnabled()) {
LOG.debug("==> ServiceDBStore.getService()");