You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2016/04/14 09:30:31 UTC

incubator-ranger git commit: RANGER-903: Optimize tag update processing

Repository: incubator-ranger
Updated Branches:
  refs/heads/master 73dc5031e -> 634e8d4e6


RANGER-903: Optimize tag update processing

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


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 <ak...@hortonworks.com>
Authored: Sun Apr 10 14:41:35 2016 -0700
Committer: Madhan Neethiraj <ma...@apache.org>
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);
 	}