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

Reply via email to