Repository: incubator-ranger
Updated Branches:
  refs/heads/master acfccc4a8 -> 60ec33789


RANGER-396: fix for failure in updating service.policyVersion


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/60ec3378
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/60ec3378
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/60ec3378

Branch: refs/heads/master
Commit: 60ec3378913308825f428f73f3b56db5e363d2fd
Parents: acfccc4
Author: Madhan Neethiraj <[email protected]>
Authored: Tue Apr 14 13:45:04 2015 -0700
Committer: Madhan Neethiraj <[email protected]>
Committed: Tue Apr 14 13:45:04 2015 -0700

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 57 +++++++++++++-------
 1 file changed, 37 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/60ec3378/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
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 239723a..59295d3 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
@@ -1514,29 +1514,27 @@ public class ServiceDBStore extends 
AbstractServiceStore {
 
                ServicePolicies ret = null;
 
-               RangerService service = getServiceByName(serviceName);
+               XXService serviceDbObj = 
daoMgr.getXXService().findByName(serviceName);
 
-               if(service == null) {
-                       throw new Exception("service does not exist - name=" + 
serviceName);
+               if(serviceDbObj == null) {
+                       throw new Exception("service does not exist. name=" + 
serviceName);
                }
 
-               RangerServiceDef serviceDef = 
getServiceDefByName(service.getType());
-
-               if(serviceDef == null) {
-                       throw new Exception(service.getType() + ": unknown 
service-def)");
-               }
+               if(lastKnownVersion == null || serviceDbObj.getPolicyVersion() 
== null || !lastKnownVersion.equals(serviceDbObj.getPolicyVersion())) {
+                       RangerServiceDef serviceDef = 
getServiceDef(serviceDbObj.getType());
 
-               if(lastKnownVersion == null || service.getPolicyVersion() == 
null || lastKnownVersion.longValue() != service.getPolicyVersion().longValue()) 
{
-                       SearchFilter filter = new 
SearchFilter(SearchFilter.SERVICE_NAME, serviceName);
+                       if(serviceDef == null) {
+                               throw new Exception("service-def does not 
exist. id=" + serviceDbObj.getType());
+                       }
 
-                       List<RangerPolicy> policies = 
getServicePolicies(serviceName, filter);
+                       List<RangerPolicy> policies = 
getServicePolicies(serviceName, null);
 
                        ret = new ServicePolicies();
 
-                       ret.setServiceId(service.getId());
-                       ret.setServiceName(service.getName());
-                       ret.setPolicyVersion(service.getPolicyVersion());
-                       ret.setPolicyUpdateTime(service.getPolicyUpdateTime());
+                       ret.setServiceId(serviceDbObj.getId());
+                       ret.setServiceName(serviceDbObj.getName());
+                       ret.setPolicyVersion(serviceDbObj.getPolicyVersion());
+                       
ret.setPolicyUpdateTime(serviceDbObj.getPolicyUpdateTime());
                        ret.setPolicies(policies);
                        ret.setServiceDef(serviceDef);
                }
@@ -1544,6 +1542,7 @@ public class ServiceDBStore extends AbstractServiceStore {
                if(LOG.isDebugEnabled()) {
                        LOG.debug("<== 
ServiceDBStore.getServicePoliciesIfUpdated(" + serviceName + ", " + 
lastKnownVersion + "): count=" + ((ret == null || ret.getPolicies() == null) ? 
0 : ret.getPolicies().size()));
                }
+
                return ret;
        }
        
@@ -1635,10 +1634,24 @@ public class ServiceDBStore extends 
AbstractServiceStore {
        }
        
        private void handlePolicyUpdate(RangerService service) throws Exception 
{
-               if(service == null) {
+               updatePolicyVersion(service);
+       }
+
+       private void updatePolicyVersion(RangerService service) throws 
Exception {
+               if(service == null || service.getId() == null) {
                        return;
                }
-               
+
+               XXServiceDao serviceDao = daoMgr.getXXService();
+
+               XXService serviceDbObj = serviceDao.getById(service.getId());
+
+               if(serviceDbObj == null) {
+                       LOG.warn("updatePolicyVersion(serviceId=" + 
service.getId() + "): service not found");
+
+                       return;
+               }
+
                Long policyVersion = service.getPolicyVersion();
 
                if(policyVersion == null) {
@@ -1646,12 +1659,16 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                } else {
                        policyVersion = new Long(policyVersion.longValue() + 1);
                }
-               
+
                service.setPolicyVersion(policyVersion);
                service.setPolicyUpdateTime(new Date());
-               service = updateService(service);
+
+               serviceDbObj.setPolicyVersion(service.getPolicyVersion());
+               serviceDbObj.setPolicyUpdateTime(service.getPolicyUpdateTime());
+
+               serviceDao.update(serviceDbObj);
        }
-       
+
        private void createNewPolicyItemsForPolicy(RangerPolicy policy, 
XXPolicy xPolicy, List<RangerPolicyItem> policyItems, XXServiceDef xServiceDef) 
{
                
                for (int itemOrder = 0; itemOrder < policyItems.size(); 
itemOrder++) {

Reply via email to