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()");