RANGER-2195:TagPolicy not working due to failure to update tag policy version


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

Branch: refs/heads/ranger-1.1
Commit: e8c5935ac1a0b4959797fec6b5093285bb493343
Parents: c9a0afa
Author: rmani <[email protected]>
Authored: Wed Aug 22 11:55:40 2018 -0700
Committer: Mehul Parikh <[email protected]>
Committed: Tue Sep 4 11:49:43 2018 +0530

----------------------------------------------------------------------
 .../org/apache/ranger/biz/ServiceDBStore.java   | 81 +++++++++++---------
 .../ranger/db/XXServiceVersionInfoDao.java      | 13 ++--
 2 files changed, 51 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/e8c5935a/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 cb5f240..32af4cd 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
@@ -2836,31 +2836,26 @@ public class ServiceDBStore extends 
AbstractServiceStore {
                        return;
                }
 
-               Runnable commitWork = new Runnable() {
-                       @Override
-                       public void run() {
-                               persistVersionChange(daoMgr, 
serviceDbObj.getId(), VERSION_TYPE.POLICY_VERSION);
-                       }
-               };
+               final RangerDaoManager daoManager  = daoMgr;
+               final Long                         serviceId   = 
serviceDbObj.getId();
+               final VERSION_TYPE     versionType = 
VERSION_TYPE.POLICY_VERSION;
 
-               
transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork);
+               Runnable serviceVersionUpdater = new 
ServiceVersionUpdater(daoManager, serviceId, versionType);
+               
transactionSynchronizationAdapter.executeOnTransactionCommit(serviceVersionUpdater);
 
                // if this is a tag service, update all services that refer to 
this tag service
                // so that next policy-download from plugins will get updated 
tag policies
                boolean isTagService = serviceDbObj.getType() == 
EmbeddedServiceDefsUtil.instance().getTagServiceDefId();
                if(isTagService) {
-                       List<XXService> referringServices = 
serviceDao.findByTagServiceId(serviceDbObj.getId());
+                       List<XXService> referringServices = 
serviceDao.findByTagServiceId(serviceId);
 
                        if(CollectionUtils.isNotEmpty(referringServices)) {
                                for(XXService referringService : 
referringServices) {
-                                       commitWork = new Runnable() {
-                                               @Override
-                                               public void run() {
-                                                       
persistVersionChange(daoMgr, referringService.getId(),
-                                                                       
filterForServicePlugin && isTagVersionUpdateNeeded ? 
VERSION_TYPE.POLICY_AND_TAG_VERSION : VERSION_TYPE.POLICY_VERSION);
-                                               }
-                                       };
-                                       
transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork);
+                                       final Long                  
referringServiceId    = referringService.getId();
+                                       final VERSION_TYPE  
tagServiceversionType = filterForServicePlugin && isTagVersionUpdateNeeded ? 
VERSION_TYPE.POLICY_AND_TAG_VERSION : VERSION_TYPE.POLICY_VERSION;
+
+                                       Runnable tagServiceVersionUpdater = new 
ServiceVersionUpdater(daoManager, referringServiceId, tagServiceversionType);
+                                       
transactionSynchronizationAdapter.executeOnTransactionCommit(tagServiceVersionUpdater);
                                }
                        }
                }
@@ -2877,7 +2872,6 @@ public class ServiceDBStore extends AbstractServiceStore {
                                serviceVersionInfoDbObj.setPolicyUpdateTime(new 
Date());
                        }
                        if (versionType == VERSION_TYPE.TAG_VERSION || 
versionType == VERSION_TYPE.POLICY_AND_TAG_VERSION) {
-
                                
serviceVersionInfoDbObj.setTagVersion(getNextVersion(serviceVersionInfoDbObj.getTagVersion()));
                                serviceVersionInfoDbObj.setTagUpdateTime(new 
Date());
                        }
@@ -3310,6 +3304,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                if(serviceDef == null) {
                        return;
                }
+
+               final RangerDaoManager daoManager = daoMgr;
+
                boolean isTagServiceDef = 
StringUtils.equals(serviceDef.getName(), 
EmbeddedServiceDefsUtil.EMBEDDED_SERVICEDEF_TAG_NAME);
 
                XXServiceDao serviceDao = daoMgr.getXXService();
@@ -3318,26 +3315,24 @@ public class ServiceDBStore extends 
AbstractServiceStore {
 
                if(CollectionUtils.isNotEmpty(services)) {
                        for(XXService service : services) {
-                               Runnable commitWork = new Runnable() {
-                                       @Override
-                                       public void run() {
-                                               persistVersionChange(daoMgr, 
service.getId(), VERSION_TYPE.POLICY_VERSION);
-                                       }
-                               };
-                               
transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork);
+
+                               final Long                  serviceId   = 
service.getId();
+                               final VERSION_TYPE  versionType = 
VERSION_TYPE.POLICY_VERSION;
+
+                               Runnable serviceVersionUpdater = new 
ServiceVersionUpdater(daoManager, serviceId, versionType);
+                               
transactionSynchronizationAdapter.executeOnTransactionCommit(serviceVersionUpdater);
 
                                if(isTagServiceDef) {
-                                       List<XXService> referrringServices = 
serviceDao.findByTagServiceId(service.getId());
-
-                                       
if(CollectionUtils.isNotEmpty(referrringServices)) {
-                                               for(XXService referringService 
: referrringServices) {
-                                                       commitWork = new 
Runnable() {
-                                                               @Override
-                                                               public void 
run() {
-                                                                       
persistVersionChange(daoMgr, referringService.getId(), 
VERSION_TYPE.POLICY_VERSION);
-                                                               }
-                                                       };
-                                                       
transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork);
+                                       List<XXService> referringServices = 
serviceDao.findByTagServiceId(service.getId());
+
+                                       
if(CollectionUtils.isNotEmpty(referringServices)) {
+                                               for(XXService referringService 
: referringServices) {
+
+                                                       final Long              
    referringServiceId    = referringService.getId();
+                                                       final VERSION_TYPE  
tagServiceVersionType = VERSION_TYPE.POLICY_VERSION;
+
+                                                       Runnable 
tagServiceVersionUpdater = new ServiceVersionUpdater(daoManager, 
referringServiceId, tagServiceVersionType);
+                                                       
transactionSynchronizationAdapter.executeOnTransactionCommit(tagServiceVersionUpdater);
                                                }
                                        }
                                }
@@ -4787,4 +4782,20 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                }
                return ret;
        }
+
+       public static class ServiceVersionUpdater implements Runnable {
+               final Long                         serviceId;
+               final RangerDaoManager daoManager;
+               final VERSION_TYPE     versionType;
+
+               public ServiceVersionUpdater(RangerDaoManager daoManager, Long 
serviceId, VERSION_TYPE versionType ) {
+                       this.serviceId   = serviceId;
+                       this.daoManager  = daoManager;
+                       this.versionType = versionType;
+               }
+               @Override
+               public void run() {
+                       ServiceDBStore.persistVersionChange(this.daoManager, 
this.serviceId, this.versionType);
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/ranger/blob/e8c5935a/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
index d7e5a86..8081703 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceVersionInfoDao.java
@@ -124,16 +124,13 @@ public class XXServiceVersionInfoDao extends 
BaseDao<XXServiceVersionInfo> {
                }
 
                for(XXServiceVersionInfo serviceVersionInfo : 
serviceVersionInfos) {
+                       final RangerDaoManager finaldaoManager            = 
daoManager;
+                       final Long                     finalServiceId           
  = serviceVersionInfo.getServiceId();
+                       final ServiceDBStore.VERSION_TYPE versionType = 
ServiceDBStore.VERSION_TYPE.TAG_VERSION;
 
-                       Runnable commitWork = new Runnable() {
-                               @Override
-                               public void run() {
-                                       
ServiceDBStore.persistVersionChange(daoManager, serviceVersionInfo.getId(), 
ServiceDBStore.VERSION_TYPE.TAG_VERSION);
-                               }
-                       };
-
-                       
daoManager.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(commitWork);
+                       Runnable serviceVersionUpdater = new 
ServiceDBStore.ServiceVersionUpdater(finaldaoManager, finalServiceId, 
versionType);
 
+                       
daoManager.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(serviceVersionUpdater);
                }
 
        }

Reply via email to