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 2015/10/28 17:00:16 UTC
[40/50] [abbrv] incubator-ranger git commit: RANGER-660: updated
TagREST to support delete and replace operatios
RANGER-660: updated TagREST to support delete and replace operatios
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/9a398915
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/9a398915
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/9a398915
Branch: refs/heads/master
Commit: 9a398915883d6d1924b0d1689992059bea5c032c
Parents: a9e1135
Author: Abhay Kulkarni <ak...@hortonworks.com>
Authored: Mon Oct 12 13:20:58 2015 -0700
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Mon Oct 12 22:45:54 2015 -0700
----------------------------------------------------------------------
.../apache/ranger/plugin/util/ServiceTags.java | 1 +
.../ranger/rest/ServiceTagsProcessor.java | 68 +++++++++++++++++++-
.../source/atlas/AtlasNotificationMapper.java | 56 ----------------
3 files changed, 67 insertions(+), 58 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/9a398915/agents-common/src/main/java/org/apache/ranger/plugin/util/ServiceTags.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/ServiceTags.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/ServiceTags.java
index d03e7bc..6963058 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/util/ServiceTags.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/ServiceTags.java
@@ -46,6 +46,7 @@ public class ServiceTags implements java.io.Serializable {
public static final String OP_ADD_OR_UPDATE = "add_or_update";
public static final String OP_DELETE = "delete";
+ public static final String OP_REPLACE = "replace";
public static final String TAGMODEL_SHARED = "shared";
public static final String TAGMODEL_RESOURCE_PRIVATE = "resource_private";
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/9a398915/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 586f6b7..b1986be 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
@@ -30,8 +30,10 @@ import org.apache.ranger.plugin.model.RangerTagDef;
import org.apache.ranger.plugin.model.RangerTagResourceMap;
import org.apache.ranger.plugin.store.RangerServiceResourceSignature;
import org.apache.ranger.plugin.store.TagStore;
+import org.apache.ranger.plugin.util.SearchFilter;
import org.apache.ranger.plugin.util.ServiceTags;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,6 +63,8 @@ public class ServiceTagsProcessor {
addOrUpdate(serviceTags);
} else if (StringUtils.equalsIgnoreCase(op, ServiceTags.OP_DELETE)) {
delete(serviceTags);
+ } else if (StringUtils.equalsIgnoreCase(op, ServiceTags.OP_REPLACE)) {
+ replace(serviceTags);
} else {
LOG.error("Unknown op, op=" + op);
}
@@ -326,13 +330,32 @@ public class ServiceTagsProcessor {
LOG.debug("==> ServiceTagsProcessor.delete()");
}
+ // We dont expect any resourceId->tagId mappings in delete operation, so ignoring them if specified
+
List<RangerServiceResource> serviceResources = serviceTags.getServiceResources();
if (CollectionUtils.isNotEmpty(serviceResources)) {
+ boolean isResourePrivateTag = StringUtils.equals(serviceTags.getTagModel(), ServiceTags.TAGMODEL_RESOURCE_PRIVATE) ? true : false;
+
for (RangerServiceResource serviceResource : serviceResources) {
try {
RangerServiceResource objToDelete = tagStore.getServiceResourceByGuid(serviceResource.getGuid());
- if(objToDelete != null) {
+ if (objToDelete != null) {
+
+ List<RangerTagResourceMap> tagResourceMaps = tagStore.getTagResourceMapsForResourceGuid(objToDelete.getGuid());
+
+ if (CollectionUtils.isNotEmpty(tagResourceMaps)) {
+ for (RangerTagResourceMap tagResourceMap : tagResourceMaps) {
+ long tagId = tagResourceMap.getTagId();
+
+ tagStore.deleteTagResourceMap(tagResourceMap.getId());
+
+ if(isResourePrivateTag) {
+ tagStore.deleteTag(tagId);
+ }
+ }
+ }
+
tagStore.deleteServiceResource(objToDelete.getId());
}
} catch (Exception exception) {
@@ -349,7 +372,7 @@ public class ServiceTagsProcessor {
try {
RangerTag objToDelete = tagStore.getTagByGuid(tag.getGuid());
- if(objToDelete != null) {
+ if (objToDelete != null) {
tagStore.deleteTag(objToDelete.getId());
}
} catch (Exception exception) {
@@ -381,4 +404,45 @@ public class ServiceTagsProcessor {
}
}
+ // Delete all tagdef, tag, serviceResource and tagResourceMaps and then add all objects in provided ServiceTagsids
+ private void replace(ServiceTags serviceTags) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceTagsProcessor.replace()");
+ }
+
+ // TODO:
+ // This is an inefficient implementation. Replace by direct database deletes
+
+ SearchFilter searchAll = new SearchFilter();
+
+ List<RangerTagResourceMap> allTagResourceMaps = tagStore.getTagResourceMaps(searchAll);
+ for (RangerTagResourceMap tagResourceMap : allTagResourceMaps) {
+ tagStore.deleteTagResourceMap(tagResourceMap.getId());
+ }
+
+ List<RangerServiceResource> allServiceResources = tagStore.getServiceResources(searchAll);
+ for (RangerServiceResource serviceResource : allServiceResources) {
+ tagStore.deleteServiceResource(serviceResource.getId());
+ }
+
+ List<RangerTag> allTags = tagStore.getTags(searchAll);
+ for (RangerTag tag : allTags) {
+ tagStore.deleteTag(tag.getId());
+ }
+
+ List<RangerTagDef> allTagDefs = tagStore.getTagDefs(searchAll);
+ for (RangerTagDef tagDef : allTagDefs) {
+ tagStore.deleteTagDef(tagDef.getId());
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("ServiceTagsProcessor.replace() : All tag-related objects are removed now. Adding objects specified in ServiceTags..");
+ }
+
+ addOrUpdate(serviceTags);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceTagsProcessor.replace()");
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/9a398915/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasNotificationMapper.java
----------------------------------------------------------------------
diff --git a/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasNotificationMapper.java b/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasNotificationMapper.java
index 2c843af..d5108a1 100644
--- a/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasNotificationMapper.java
+++ b/tagsync/src/main/java/org/apache/ranger/tagsync/source/atlas/AtlasNotificationMapper.java
@@ -176,7 +176,6 @@ class AtlasNotificationMapper {
String[] components = getQualifiedNameComponents(entity);
// components should contain qualifiedName, instanceName, dbName, tableName, columnName in that order
-
String entityTypeName = entity.getTypeName();
String instanceName, dbName, tableName, columnName;
@@ -354,59 +353,4 @@ class AtlasNotificationMapper {
return type.cast(map.get(name));
}
- // Temporary stuff, until qualifiedName is implemented by Atlas
- static private String[] getTempNameComponents(Entity entity) {
- String ret[] = new String[4];
- if (StringUtils.equals(entity.getTypeName(), ENTITY_TYPE_HIVE_DB)) {
- ret[1] = getAttribute(entity.getValues(), "clusterName", String.class);
- ret[2] = getAttribute(entity.getValues(), "name", String.class);
- ret[3] = null;
- ret[0] = ret[1] + "." + ret[2];
- } else if (StringUtils.equals(entity.getTypeName(), ENTITY_TYPE_HIVE_TABLE)) {
- String qualifiedName = getAttribute(entity.getValues(), "name", String.class);
- String nameHierarchy[] = qualifiedName.split("\\.@");
-
- int hierarchyLevels = nameHierarchy.length;
-
- if (LOG.isDebugEnabled()) {
- LOG.debug("----- Entity-Id:" + entity.getId().getGuid());
- LOG.debug("----- Entity-Type-Name:" + entity.getTypeName());
- LOG.debug("----- Entity-Qualified-Name:" + qualifiedName);
- LOG.debug("----- Entity-Qualified-Name-Components -----");
- for (int i = 0; i < hierarchyLevels; i++) {
- LOG.debug("----- Index:" + i + " Value:" + nameHierarchy[i]);
- }
- }
-
- int i;
- for (i = 0; i < ret.length; i++) {
- ret[i] = null;
- }
- ret[0] = qualifiedName;
- if (hierarchyLevels > 2) {
- ret[1] = nameHierarchy[2];
- }
- if (hierarchyLevels > 1) {
- ret[2] = nameHierarchy[1];
- }
- if (hierarchyLevels > 0) {
- ret[3] = nameHierarchy[0];
- }
-
-
- }
- return ret;
- }
-
-
- static private ServiceTags handleEntityUpdate(Entity entity) throws Exception {
-
- throw new Exception("Not implemented");
-
- }
-
- static private ServiceTags handleTraitDelete(Entity entity) throws Exception {
-
- throw new Exception("Not implemented");
- }
}