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); } }
