Repository: incubator-ranger Updated Branches: refs/heads/master 73dc5031e -> 634e8d4e6
RANGER-903: Optimize tag update processing Signed-off-by: Madhan Neethiraj <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/634e8d4e Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/634e8d4e Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/634e8d4e Branch: refs/heads/master Commit: 634e8d4e6a1f9d254d9831e0e2c2427b91232cb0 Parents: 73dc503 Author: Abhay Kulkarni <[email protected]> Authored: Sun Apr 10 14:41:35 2016 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Thu Apr 14 00:20:30 2016 -0700 ---------------------------------------------------------------------- .../ranger/plugin/store/file/TagFileStore.java | 25 ++++++++++++++++---- .../java/org/apache/ranger/biz/TagDBStore.java | 23 ++++++++++++++++-- .../ranger/rest/ServiceTagsProcessor.java | 13 +--------- .../service/RangerServiceResourceService.java | 16 ++++++++++--- 4 files changed, 55 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/634e8d4e/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java index cc983a6..a20a9f8 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/file/TagFileStore.java @@ -31,6 +31,7 @@ import org.apache.ranger.authorization.hadoop.config.RangerConfiguration; import org.apache.ranger.plugin.model.*; import org.apache.ranger.plugin.store.AbstractTagStore; import org.apache.ranger.plugin.store.PList; +import org.apache.ranger.plugin.store.RangerServiceResourceSignature; import org.apache.ranger.plugin.store.TagPredicateUtil; import org.apache.ranger.plugin.store.TagStore; import org.apache.ranger.plugin.util.SearchFilter; @@ -599,6 +600,12 @@ public class TagFileStore extends AbstractTagStore { try { preCreate(resource); + if (StringUtils.isEmpty(resource.getResourceSignature())) { + RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); + + resource.setResourceSignature(serializer.getSignature()); + } + resource.setId(nextServiceResourceId); ret = fileStoreUtil.saveToFile(resource, new Path(fileStoreUtil.getDataFile(FILE_PREFIX_RESOURCE, nextServiceResourceId++)), false); @@ -628,6 +635,12 @@ public class TagFileStore extends AbstractTagStore { try { preUpdate(resource); + if (StringUtils.isEmpty(resource.getResourceSignature())) { + RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); + + resource.setResourceSignature(serializer.getSignature()); + } + ret = fileStoreUtil.saveToFile(resource, new Path(fileStoreUtil.getDataFile(FILE_PREFIX_RESOURCE, resource.getId())), true); postUpdate(resource); @@ -873,12 +886,14 @@ public class TagFileStore extends AbstractTagStore { try { RangerTagResourceMap tagResourceMap = getTagResourceMap(id); - Long tagId = tagResourceMap.getTagId(); - RangerTag tag = getTag(tagId); + if (tagResourceMap != null) { + Long tagId = tagResourceMap.getTagId(); + RangerTag tag = getTag(tagId); - deleteTagResourceMap(tagResourceMap); - if (tag.getOwner() == RangerTag.OWNER_SERVICERESOURCE) { - deleteTag(tagId); + deleteTagResourceMap(tagResourceMap); + if (tag != null && tag.getOwner() == RangerTag.OWNER_SERVICERESOURCE) { + deleteTag(tagId); + } } } catch (Exception excp) { throw new Exception("failed to delete tagResourceMap with ID=" + id, excp); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/634e8d4e/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java index 0ec37f1..e11dad6 100644 --- a/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/TagDBStore.java @@ -50,6 +50,7 @@ import org.apache.ranger.plugin.model.RangerPolicy.RangerPolicyResource; import org.apache.ranger.plugin.model.RangerTagDef.RangerTagAttributeDef; import org.apache.ranger.plugin.store.AbstractTagStore; import org.apache.ranger.plugin.store.PList; +import org.apache.ranger.plugin.store.RangerServiceResourceSignature; import org.apache.ranger.plugin.util.SearchFilter; import org.apache.ranger.plugin.util.ServiceTags; import org.apache.ranger.service.RangerAuditFields; @@ -470,6 +471,12 @@ public class TagDBStore extends AbstractTagStore { LOG.debug("==> TagDBStore.createServiceResource(" + resource + ")"); } + if (StringUtils.isEmpty(resource.getResourceSignature())) { + RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); + + resource.setResourceSignature(serializer.getSignature()); + } + RangerServiceResource ret = rangerServiceResourceService.create(resource); createResourceForServiceResource(ret.getId(), resource); @@ -495,14 +502,26 @@ public class TagDBStore extends AbstractTagStore { throw errorUtil.createRESTException("failed to update tag [" + resource.getId() + "], Reason: No resource found with id: [" + resource.getId() + "]", MessageEnums.DATA_NOT_UPDATABLE); } + if (StringUtils.isEmpty(resource.getResourceSignature())) { + RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); + + resource.setResourceSignature(serializer.getSignature()); + } + + boolean serviceResourceElementUpdateNeeded = + !StringUtils.equals(existing.getResourceSignature(), resource.getResourceSignature()); + resource.setCreatedBy(existing.getCreatedBy()); resource.setCreateTime(existing.getCreateTime()); resource.setGuid(existing.getGuid()); resource.setVersion(existing.getVersion()); rangerServiceResourceService.update(resource); - deleteResourceForServiceResource(existing.getId()); - createResourceForServiceResource(existing.getId(), resource); + + if (serviceResourceElementUpdateNeeded) { + deleteResourceForServiceResource(existing.getId()); + createResourceForServiceResource(existing.getId(), resource); + } RangerServiceResource ret = rangerServiceResourceService.read(existing.getId()); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/634e8d4e/security-admin/src/main/java/org/apache/ranger/rest/ServiceTagsProcessor.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceTagsProcessor.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceTagsProcessor.java index cf07deb..baafb0e 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceTagsProcessor.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceTagsProcessor.java @@ -147,26 +147,16 @@ public class ServiceTagsProcessor { RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); resourceSignature = serializer.getSignature(); + resource.setResourceSignature(resourceSignature); existing = tagStore.getServiceResourceByServiceAndResourceSignature(resource.getServiceName(), resourceSignature); } } - if(existing != null) { - resourceSignature = existing.getResourceSignature(); - } - - if(StringUtils.isEmpty(resourceSignature)) { - RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); - - resourceSignature = serializer.getSignature(); - } - RangerServiceResource resourceInStore = null; if (existing == null) { - resource.setResourceSignature(resourceSignature); resourceInStore = tagStore.createServiceResource(resource); } else if (StringUtils.isEmpty(resource.getServiceName()) || MapUtils.isEmpty(resource.getResourceElements())) { @@ -174,7 +164,6 @@ public class ServiceTagsProcessor { } else { resource.setId(existing.getId()); resource.setGuid(existing.getGuid()); - resource.setResourceSignature(resourceSignature); resourceInStore = tagStore.updateServiceResource(resource); } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/634e8d4e/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java index abaeac8..807ad61 100644 --- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java +++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceResourceService.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.apache.ranger.common.SearchField; import org.apache.ranger.common.SearchField.DATA_TYPE; import org.apache.ranger.common.SearchField.SEARCH_TYPE; @@ -34,6 +35,8 @@ import org.springframework.stereotype.Service; @Service public class RangerServiceResourceService extends RangerServiceResourceServiceBase<XXServiceResource, RangerServiceResource> { + private boolean serviceUpdateNeeded = true; + public RangerServiceResourceService() { searchFields.add(new SearchField(SearchFilter.TAG_RESOURCE_ID, "obj.id", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL)); searchFields.add(new SearchField(SearchFilter.TAG_SERVICE_ID, "obj.serviceId", DATA_TYPE.INTEGER, SEARCH_TYPE.FULL)); @@ -47,18 +50,25 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa @Override protected void validateForUpdate(RangerServiceResource vObj, XXServiceResource entityObj) { - + if (StringUtils.equals(entityObj.getGuid(), vObj.getGuid()) && + StringUtils.equals(entityObj.getResourceSignature(), vObj.getResourceSignature())) { + serviceUpdateNeeded = false; + } else { + serviceUpdateNeeded = true; + } } @Override public RangerServiceResource postUpdate(XXServiceResource resource) { RangerServiceResource ret = super.postUpdate(resource); - daoMgr.getXXService().updateServiceForServiceResourceUpdate(resource.getId(), resource.getUpdateTime()); + if (serviceUpdateNeeded) { + daoMgr.getXXService().updateServiceForServiceResourceUpdate(resource.getId(), resource.getUpdateTime()); + } return ret; } - + public RangerServiceResource getPopulatedViewObject(XXServiceResource xObj) { return populateViewBean(xObj); }
