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