Repository: ranger Updated Branches: refs/heads/master 07076c18e -> 591daaf49
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/591daaf4 Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/591daaf4 Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/591daaf4 Branch: refs/heads/master Commit: 591daaf49d12b54202cd13a26a39eb12eb22dbac Parents: 07076c1 Author: rmani <[email protected]> Authored: Tue Aug 21 23:56:28 2018 -0700 Committer: rmani <[email protected]> Committed: Tue Aug 21 23:56:28 2018 -0700 ---------------------------------------------------------------------- .../org/apache/ranger/biz/ServiceDBStore.java | 77 +++++++++++--------- .../ranger/db/XXServiceVersionInfoDao.java | 12 ++- 2 files changed, 49 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ranger/blob/591daaf4/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..8085957 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 doaManager = daoMgr; + final Long serviceId = serviceDbObj.getId(); + final VERSION_TYPE versionType = VERSION_TYPE.POLICY_VERSION; + Runnable commitWork = new CommitWorkRunnable(doaManager, serviceId, versionType); transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork); // 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 tagServiceCommitWork = new CommitWorkRunnable(doaManager, referringServiceId, tagServiceversionType); + transactionSynchronizationAdapter.executeOnTransactionCommit(tagServiceCommitWork); } } } @@ -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 doaManager = 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); - } - }; + + final Long serviceId = service.getId(); + final VERSION_TYPE versionType = VERSION_TYPE.POLICY_VERSION; + + Runnable commitWork = new CommitWorkRunnable(doaManager, serviceId, versionType); transactionSynchronizationAdapter.executeOnTransactionCommit(commitWork); 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 tagServiceCommitWork = new CommitWorkRunnable(doaManager, referringServiceId, tagServiceVersionType); + transactionSynchronizationAdapter.executeOnTransactionCommit(tagServiceCommitWork); } } } @@ -4787,4 +4782,20 @@ public class ServiceDBStore extends AbstractServiceStore { } return ret; } + + public class CommitWorkRunnable implements Runnable { + final Long serviceId; + final RangerDaoManager doaManager; + final VERSION_TYPE versionType; + + public CommitWorkRunnable(RangerDaoManager daoManager, Long serviceId, VERSION_TYPE versionType ) { + this.serviceId = serviceId; + this.doaManager = daoManager; + this.versionType = versionType; + } + @Override + public void run() { + ServiceDBStore.persistVersionChange(this.doaManager, this.serviceId, this.versionType); + } + } } http://git-wip-us.apache.org/repos/asf/ranger/blob/591daaf4/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..b15aee9 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 @@ -33,6 +33,7 @@ import org.springframework.stereotype.Service; @Service public class XXServiceVersionInfoDao extends BaseDao<XXServiceVersionInfo> { + ServiceDBStore serviceDBStore = new ServiceDBStore(); /** * Default Constructor */ @@ -124,16 +125,13 @@ public class XXServiceVersionInfoDao extends BaseDao<XXServiceVersionInfo> { } for(XXServiceVersionInfo serviceVersionInfo : serviceVersionInfos) { + final RangerDaoManager finaldoaManager = 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); - } - }; + Runnable commitWork = serviceDBStore.new CommitWorkRunnable(finaldoaManager, finalServiceId, versionType); daoManager.getRangerTransactionSynchronizationAdapter().executeOnTransactionCommit(commitWork); - } }
