Repository: incubator-ranger Updated Branches: refs/heads/master e474d3ed0 -> 38b79e725
RANGER-903 Optimize updates to tag objects 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/38b79e72 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/38b79e72 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/38b79e72 Branch: refs/heads/master Commit: 38b79e7253a6ad8dd5a38f4775ec1ac5b70b05b1 Parents: e474d3e Author: Abhay Kulkarni <[email protected]> Authored: Wed Mar 30 15:04:50 2016 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Mon Apr 4 23:59:34 2016 -0700 ---------------------------------------------------------------------- .../apache/ranger/plugin/model/RangerTag.java | 10 +- .../ranger/plugin/store/AbstractTagStore.java | 19 +- .../apache/ranger/plugin/store/TagStore.java | 4 +- .../ranger/plugin/store/file/TagFileStore.java | 15 +- .../apache/ranger/plugin/util/ServiceTags.java | 25 +- .../ranger/plugin/store/TestTagStore.java | 5 +- .../patches/021-update-tag-for-owner.sql | 1 + .../apache/ranger/biz/RangerTagDBRetriever.java | 1 + .../java/org/apache/ranger/biz/TagDBStore.java | 50 +++- .../ranger/common/RangerServiceTagsCache.java | 1 - .../apache/ranger/db/XXServiceResourceDao.java | 7 +- .../org/apache/ranger/db/XXTagAttributeDao.java | 13 + .../java/org/apache/ranger/db/XXTagDao.java | 15 + .../java/org/apache/ranger/entity/XXTag.java | 2 +- .../org/apache/ranger/rest/ServiceREST.java | 2 +- .../ranger/rest/ServiceTagsProcessor.java | 295 ++++++++++++------- .../java/org/apache/ranger/rest/TagREST.java | 13 +- .../service/RangerServiceResourceService.java | 4 +- .../resources/META-INF/jpa_named_queries.xml | 20 +- tagsync/samples/tags.json | 17 +- .../source/atlas/AtlasNotificationMapper.java | 3 +- .../main/resources/etc/ranger/data/tags.json | 4 +- 22 files changed, 341 insertions(+), 185 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerTag.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerTag.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerTag.java index 78040ba..f19cc60 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerTag.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerTag.java @@ -41,24 +41,26 @@ public class RangerTag extends RangerBaseModelObject { public static final short OWNER_GLOBAL = 1; private String type; - private Short owner = OWNER_SERVICERESOURCE; + private Short owner = OWNER_SERVICERESOURCE; + private Map<String, String> attributes; - public RangerTag(String guid, String type, Short owner, Map<String, String> attributes) { + public RangerTag(String guid, String type, Map<String, String> attributes, Short owner) { super(); setGuid(guid); setType(type); setOwner(owner); setAttributes(attributes); + setOwner(owner); } public RangerTag(String type, Map<String, String> attributes) { - this(null, type, OWNER_SERVICERESOURCE, attributes); + this(null, type, attributes, OWNER_SERVICERESOURCE); } public RangerTag() { - this(null, null, OWNER_SERVICERESOURCE, null); + this(null, null, null, OWNER_SERVICERESOURCE); } public String getType() { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractTagStore.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractTagStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractTagStore.java index 7d2e130..ebf7d6e 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractTagStore.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/AbstractTagStore.java @@ -104,31 +104,21 @@ public abstract class AbstractTagStore implements TagStore { } @Override - public void deleteAllTagObjectsForService(String serviceName, boolean isResourePrivateTag) throws Exception { + public void deleteAllTagObjectsForService(String serviceName) throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> AbstractTagStore.deleteAllTagObjectsForService(serviceName=" + serviceName + ", isResourcePrivateTag=" + isResourePrivateTag + ")"); + LOG.debug("==> AbstractTagStore.deleteAllTagObjectsForService(serviceName=" + serviceName + ")"); } List<RangerServiceResource> serviceResources = getServiceResourcesByService(serviceName); if (serviceResources != null) { - Set<Long> tagsToDelete = new HashSet<Long>(); - - for (RangerServiceResource serviceResource : serviceResources) { Long resourceId = serviceResource.getId(); List<RangerTagResourceMap> tagResourceMapsForService = getTagResourceMapsForResourceId(resourceId); - if (isResourePrivateTag) { - for (RangerTagResourceMap tagResourceMap : tagResourceMapsForService) { - Long tagId = tagResourceMap.getTagId(); - RangerTag tag = getTag(tagId); - tagsToDelete.add(tag.getId()); - } - } for (RangerTagResourceMap tagResourceMap : tagResourceMapsForService) { deleteTagResourceMap(tagResourceMap.getId()); } @@ -138,13 +128,10 @@ public abstract class AbstractTagStore implements TagStore { deleteServiceResource(serviceResource.getId()); } - for (Long tagId : tagsToDelete) { - deleteTag(tagId); - } } if (LOG.isDebugEnabled()) { - LOG.debug("<== AbstractTagStore.deleteAllTagObjectsForService(serviceName=" + serviceName + ", isResourcePrivateTag=" + isResourePrivateTag + ")"); + LOG.debug("<== AbstractTagStore.deleteAllTagObjectsForService(serviceName=" + serviceName + ")"); } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java b/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java index 69bd628..b135423 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/store/TagStore.java @@ -91,7 +91,7 @@ public interface TagStore { List<RangerServiceResource> getServiceResourcesByService(String serviceName) throws Exception; - RangerServiceResource getServiceResourceByResourceSignature(String resourceSignature) throws Exception; + RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) throws Exception; List<RangerServiceResource> getServiceResources(SearchFilter filter) throws Exception; @@ -128,5 +128,5 @@ public interface TagStore { Long getTagVersion(String serviceName); - void deleteAllTagObjectsForService(String serviceName, boolean isResourePrivateTag) throws Exception; + void deleteAllTagObjectsForService(String serviceName) throws Exception; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/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 58052cf..5f22f0d 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 @@ -732,15 +732,17 @@ public class TagFileStore extends AbstractTagStore { } @Override - public RangerServiceResource getServiceResourceByResourceSignature(String resourceSignature) throws Exception { + public RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> TagFileStore.getServiceResourceByResourceSignature(" + resourceSignature + ")"); + LOG.debug("==> TagFileStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ")"); } RangerServiceResource ret = null; if (StringUtils.isNotBlank(resourceSignature)) { - SearchFilter filter = new SearchFilter(SearchFilter.TAG_RESOURCE_SIGNATURE, resourceSignature); + SearchFilter filter = new SearchFilter(); + filter.setParam(SearchFilter.TAG_RESOURCE_SERVICE_NAME, serviceName); + filter.setParam(SearchFilter.TAG_RESOURCE_SIGNATURE, resourceSignature); List<RangerServiceResource> resources = getServiceResources(filter); @@ -748,7 +750,7 @@ public class TagFileStore extends AbstractTagStore { } if (LOG.isDebugEnabled()) { - LOG.debug("<== TagFileStore.getServiceResourceByResourceSignature(" + resourceSignature + "): " + ret); + LOG.debug("<== TagFileStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + "): " + ret); } return ret; @@ -824,8 +826,13 @@ public class TagFileStore extends AbstractTagStore { try { RangerTagResourceMap tagResourceMap = getTagResourceMap(id); + Long tagId = tagResourceMap.getTagId(); + RangerTag tag = getTag(tagId); deleteTagResourceMap(tagResourceMap); + if (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/38b79e72/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 738a947..3c685e9 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 @@ -50,11 +50,7 @@ public class ServiceTags implements java.io.Serializable { 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"; - private String op = OP_ADD_OR_UPDATE; - private String tagModel = TAGMODEL_SHARED; private String serviceName; private Long tagVersion; private Date tagUpdateTime; @@ -64,13 +60,12 @@ public class ServiceTags implements java.io.Serializable { private Map<Long, List<Long>> resourceToTagIds; public ServiceTags() { - this(OP_ADD_OR_UPDATE, TAGMODEL_SHARED, null, 0L, null, null, null, null, null); + this(OP_ADD_OR_UPDATE, null, 0L, null, null, null, null, null); } - public ServiceTags(String op, String tagModel, String serviceName, Long tagVersion, Date tagUpdateTime, Map<Long, RangerTagDef> tagDefinitions, + public ServiceTags(String op, String serviceName, Long tagVersion, Date tagUpdateTime, Map<Long, RangerTagDef> tagDefinitions, Map<Long, RangerTag> tags, List<RangerServiceResource> serviceResources, Map<Long, List<Long>> resourceToTagIds) { setOp(op); - setTagModel(tagModel); setServiceName(serviceName); setTagVersion(tagVersion); setTagUpdateTime(tagUpdateTime); @@ -87,13 +82,6 @@ public class ServiceTags implements java.io.Serializable { } /** - * @return the tagModel - */ - public String getTagModel() { - return tagModel; - } - - /** * @return the serviceName */ public String getServiceName() { @@ -107,14 +95,6 @@ public class ServiceTags implements java.io.Serializable { this.op = op; } - - /** - * @param tagModel the tagModel to set - */ - public void setTagModel(String tagModel) { - this.tagModel = tagModel; - } - /** * @param serviceName the serviceName to set */ @@ -194,7 +174,6 @@ public class ServiceTags implements java.io.Serializable { public StringBuilder toString(StringBuilder sb) { sb.append("ServiceTags={") .append("op=").append(op).append(", ") - .append("tagModel=").append(tagModel).append(", ") .append("serviceName=").append(serviceName).append(", ") .append("tagVersion=").append(tagVersion).append(", ") .append("tagUpdateTime={").append(tagUpdateTime).append("}") http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagStore.java ---------------------------------------------------------------------- diff --git a/agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagStore.java b/agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagStore.java index aaace89..eb2f17e 100644 --- a/agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagStore.java +++ b/agents-common/src/test/java/org/apache/ranger/plugin/store/TestTagStore.java @@ -309,8 +309,9 @@ public class TestTagStore { validator.preDeleteServiceResource(createdServiceResource.getId()); tagStore.deleteServiceResource(createdServiceResource.getId()); - validator.preDeleteTag(createdTag.getId()); - tagStore.deleteTag(createdTag.getId()); + // private tags are deleted when TagResourceMap is deleted.. No need for deleting it here + //validator.preDeleteTag(createdTag.getId()); + //tagStore.deleteTag(createdTag.getId()); } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/db/sqlserver/patches/021-update-tag-for-owner.sql ---------------------------------------------------------------------- diff --git a/security-admin/db/sqlserver/patches/021-update-tag-for-owner.sql b/security-admin/db/sqlserver/patches/021-update-tag-for-owner.sql index dabe841..d07babc 100644 --- a/security-admin/db/sqlserver/patches/021-update-tag-for-owner.sql +++ b/security-admin/db/sqlserver/patches/021-update-tag-for-owner.sql @@ -19,4 +19,5 @@ BEGIN ALTER TABLE [dbo].[x_tag] ADD [owned_by] [smallint] DEFAULT 0 NOT NULL; END GO + exit http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java b/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java index 3b7555e..256db42 100644 --- a/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java +++ b/security-admin/src/main/java/org/apache/ranger/biz/RangerTagDBRetriever.java @@ -525,6 +525,7 @@ public class RangerTagDBRetriever { ret.setId(xTag.getId()); ret.setGuid(xTag.getGuid()); + ret.setOwner(xTag.getOwner()); ret.setCreatedBy(lookupCache.getUserScreenName(xTag.getAddedByUserId())); ret.setUpdatedBy(lookupCache.getUserScreenName(xTag.getUpdatedByUserId())); ret.setCreateTime(xTag.getCreateTime()); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/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 cc2386e..28d7bf6 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 @@ -39,6 +39,7 @@ import org.apache.ranger.entity.XXResourceDef; import org.apache.ranger.entity.XXService; import org.apache.ranger.entity.XXServiceDef; import org.apache.ranger.entity.XXServiceResource; +import org.apache.ranger.entity.XXTag; import org.apache.ranger.entity.XXTagAttribute; import org.apache.ranger.entity.XXTagAttributeDef; import org.apache.ranger.entity.XXServiceResourceElement; @@ -581,15 +582,21 @@ public class TagDBStore extends AbstractTagStore { } @Override - public RangerServiceResource getServiceResourceByResourceSignature(String resourceSignature) throws Exception { + public RangerServiceResource getServiceResourceByServiceAndResourceSignature(String serviceName, String resourceSignature) throws Exception { if (LOG.isDebugEnabled()) { - LOG.debug("==> TagDBStore.getServiceResourceByResourceSignature(" + resourceSignature + ")"); + LOG.debug("==> TagDBStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ")"); } - RangerServiceResource ret = rangerServiceResourceService.getByResourceSignature(resourceSignature); + RangerServiceResource ret = null; + + XXService service = daoManager.getXXService().findByName(serviceName); + + if (service != null) { + ret = rangerServiceResourceService.getByServiceAndResourceSignature(service.getId(), resourceSignature); + } if (LOG.isDebugEnabled()) { - LOG.debug("<== TagDBStore.getServiceResourceByResourceSignature(" + resourceSignature + "): " + ret); + LOG.debug("<== TagDBStore.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + "): " + ret); } return ret; @@ -648,9 +655,15 @@ public class TagDBStore extends AbstractTagStore { } RangerTagResourceMap tagResourceMap = rangerTagResourceMapService.read(id); + Long tagId = tagResourceMap.getTagId(); + RangerTag tag = getTag(tagId); rangerTagResourceMapService.delete(tagResourceMap); + if (tag.getOwner() == RangerTag.OWNER_SERVICERESOURCE) { + deleteTag(tagId); + } + if (LOG.isDebugEnabled()) { LOG.debug("<== TagDBStore.deleteTagResourceMap(" + id + ")"); } @@ -1088,7 +1101,7 @@ public class TagDBStore extends AbstractTagStore { } @Override - public void deleteAllTagObjectsForService(String serviceName, boolean isResourcePrivateFlag) throws Exception { + public void deleteAllTagObjectsForService(String serviceName) throws Exception { if (LOG.isDebugEnabled()) { LOG.debug("==> TagDBStore.deleteAllTagObjectsForService(" + serviceName + ")"); @@ -1099,6 +1112,10 @@ public class TagDBStore extends AbstractTagStore { if (service != null) { Long serviceId = service.getId(); + List<XXTagAttribute> xxTagAttributes = daoManager.getXXTagAttribute().findByServiceIdAndOwner(serviceId, RangerTag.OWNER_SERVICERESOURCE); + + List<XXTag> xxTags = daoManager.getXXTag().findByServiceIdAndOwner(serviceId, RangerTag.OWNER_SERVICERESOURCE); + List<XXTagResourceMap> xxTagResourceMaps = daoManager.getXXTagResourceMap().findByServiceId(serviceId); if (CollectionUtils.isNotEmpty(xxTagResourceMaps)) { @@ -1112,6 +1129,28 @@ public class TagDBStore extends AbstractTagStore { } } + if (CollectionUtils.isNotEmpty(xxTagAttributes)) { + for (XXTagAttribute xxTagAttribute : xxTagAttributes) { + try { + daoManager.getXXTagAttribute().remove(xxTagAttribute); + } catch (Exception e) { + LOG.error("Error deleting RangerTagAttribute with id=" + xxTagAttribute.getId(), e); + throw e; + } + } + } + + if (CollectionUtils.isNotEmpty(xxTags)) { + for (XXTag xxTag : xxTags) { + try { + daoManager.getXXTag().remove(xxTag); + } catch (Exception e) { + LOG.error("Error deleting RangerTag with id=" + xxTag.getId(), e); + throw e; + } + } + } + List<XXServiceResourceElementValue> xxServiceResourceElementValues = daoManager.getXXServiceResourceElementValue().findByServiceId(serviceId); if (CollectionUtils.isNotEmpty(xxServiceResourceElementValues)) { @@ -1150,6 +1189,7 @@ public class TagDBStore extends AbstractTagStore { } } } + } if (LOG.isDebugEnabled()) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/common/RangerServiceTagsCache.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerServiceTagsCache.java b/security-admin/src/main/java/org/apache/ranger/common/RangerServiceTagsCache.java index cdc44e0..15af0f0 100644 --- a/security-admin/src/main/java/org/apache/ranger/common/RangerServiceTagsCache.java +++ b/security-admin/src/main/java/org/apache/ranger/common/RangerServiceTagsCache.java @@ -252,7 +252,6 @@ public class RangerServiceTagsCache { private void pruneUnusedAttributes() { if (serviceTags != null) { serviceTags.setOp(null); - serviceTags.setTagModel(null); serviceTags.setTagUpdateTime(null); serviceTags.setTagDefinitions(null); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java index c990ae7..9257aaa 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceResourceDao.java @@ -59,13 +59,14 @@ public class XXServiceResourceDao extends BaseDao<XXServiceResource> { } } - public XXServiceResource findByResourceSignature(String resourceSignature) { + public XXServiceResource findByServiceAndResourceSignature(Long serviceId, String resourceSignature) { if (StringUtils.isBlank(resourceSignature)) { return null; } try { - return getEntityManager().createNamedQuery("XXServiceResource.findByResourceSignature", tClass) - .setParameter("resourceSignature", resourceSignature).getSingleResult(); + return getEntityManager().createNamedQuery("XXServiceResource.findByServiceAndResourceSignature", tClass) + .setParameter("serviceId", serviceId).setParameter("resourceSignature", resourceSignature) + .getSingleResult(); } catch (NoResultException e) { return null; } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/db/XXTagAttributeDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXTagAttributeDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXTagAttributeDao.java index c993477..a30e543 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXTagAttributeDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagAttributeDao.java @@ -57,6 +57,19 @@ public class XXTagAttributeDao extends BaseDao<XXTagAttribute> { } } + public List<XXTagAttribute> findByServiceIdAndOwner(Long serviceId, Short owner) { + if (serviceId == null) { + return new ArrayList<XXTagAttribute>(); + } + try { + return getEntityManager().createNamedQuery("XXTagAttribute.findByServiceIdAndOwner", tClass) + .setParameter("serviceId", serviceId) + .setParameter("owner", owner) + .getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXTagAttribute>(); + } + } public List<XXTagAttribute> findByResourceId(Long resourceId) { if (resourceId == null) { return new ArrayList<XXTagAttribute>(); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java index 3c9370b..a3fde2c 100644 --- a/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java +++ b/security-admin/src/main/java/org/apache/ranger/db/XXTagDao.java @@ -123,4 +123,19 @@ public class XXTagDao extends BaseDao<XXTag> { return new ArrayList<XXTag>(); } } + + public List<XXTag> findByServiceIdAndOwner(Long serviceId, Short owner) { + if (serviceId == null) { + return new ArrayList<XXTag>(); + } + + try { + return getEntityManager().createNamedQuery("XXTag.findByServiceIdAndOwner", tClass) + .setParameter("serviceId", serviceId) + .setParameter("owner", owner) + .getResultList(); + } catch (NoResultException e) { + return new ArrayList<XXTag>(); + } + } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java b/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java index 526557e..2ed6f73 100644 --- a/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java +++ b/security-admin/src/main/java/org/apache/ranger/entity/XXTag.java @@ -200,7 +200,7 @@ public class XXTag extends XXDBBase implements Serializable { sb.append("id={").append(id).append("} "); sb.append("guid={").append(guid).append("} "); sb.append("type={").append(type).append("} "); - sb.append("owner={").append(owner).append("} "); + sb.append("owned_by={").append(owner).append("} "); sb.append(" }"); return sb; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java index 0dbd042..8f01bfc 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java @@ -539,7 +539,7 @@ public class ServiceREST { XXServiceDef xxServiceDef = daoManager.getXXServiceDef().getById(service.getType()); bizUtil.hasKMSPermissions("Service", xxServiceDef.getImplclassname()); - tagStore.deleteAllTagObjectsForService(service.getName(), false); + tagStore.deleteAllTagObjectsForService(service.getName()); svcStore.deleteService(id); } catch(WebApplicationException excp) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/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 ebe71eb..7e6900e 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 @@ -32,6 +32,7 @@ import org.apache.ranger.plugin.store.RangerServiceResourceSignature; import org.apache.ranger.plugin.store.TagStore; import org.apache.ranger.plugin.util.ServiceTags; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,7 +54,6 @@ public class ServiceTagsProcessor { if (tagStore != null && serviceTags != null) { if (LOG.isDebugEnabled()) { LOG.debug("serviceTags: op=" + serviceTags.getOp()); - LOG.debug("serviceTags: tagModel=" + serviceTags.getTagModel()); } String op = serviceTags.getOp(); @@ -88,11 +88,8 @@ public class ServiceTagsProcessor { } Map<Long, RangerTagDef> tagDefsInStore = new HashMap<Long, RangerTagDef>(); - Map<Long, RangerTag> tagsInStore = new HashMap<Long, RangerTag>(); Map<Long, RangerServiceResource> resourcesInStore = new HashMap<Long, RangerServiceResource>(); - boolean createOrUpdate = true; - if (MapUtils.isNotEmpty(serviceTags.getTagDefinitions())) { RangerTagDef tagDef = null; @@ -102,14 +99,12 @@ public class ServiceTagsProcessor { RangerTagDef existing = null; - if(createOrUpdate) { - if(StringUtils.isNotEmpty(tagDef.getGuid())) { - existing = tagStore.getTagDefByGuid(tagDef.getGuid()); - } + if(StringUtils.isNotEmpty(tagDef.getGuid())) { + existing = tagStore.getTagDefByGuid(tagDef.getGuid()); + } - if(existing == null && StringUtils.isNotEmpty(tagDef.getName())) { - existing = tagStore.getTagDefByName(tagDef.getName()); - } + if(existing == null && StringUtils.isNotEmpty(tagDef.getName())) { + existing = tagStore.getTagDefByName(tagDef.getName()); } RangerTagDef tagDefInStore = null; @@ -123,9 +118,7 @@ public class ServiceTagsProcessor { tagDefInStore = existing; } - if(tagDefsInStore != null) { - tagDefsInStore.put(entry.getKey(), tagDefInStore); - } + tagDefsInStore.put(entry.getKey(), tagDefInStore); } } catch (Exception exception) { LOG.error("createTagDef failed, tagDef=" + tagDef, exception); @@ -133,42 +126,6 @@ public class ServiceTagsProcessor { } } - if (MapUtils.isNotEmpty(serviceTags.getTags())) { - RangerTag tag = null; - - try { - for (Map.Entry<Long, RangerTag> entry : serviceTags.getTags().entrySet()) { - tag = entry.getValue(); - - RangerTag existing = null; - - if(createOrUpdate) { - if(StringUtils.isNotEmpty(tag.getGuid())) { - existing = tagStore.getTagByGuid(tag.getGuid()); - } - } - - RangerTag tagInStore = null; - - if(existing == null) { - tagInStore = tagStore.createTag(tag); - } else { - tag.setId(existing.getId()); - tag.setGuid(existing.getGuid()); - - tagInStore = tagStore.updateTag(tag); - } - - if(tagsInStore != null) { - tagsInStore.put(entry.getKey(), tagInStore); - } - } - } catch (Exception exception) { - LOG.error("createTag failed, tag=" + tag, exception); - throw exception; - } - } - List<RangerServiceResource> resources = serviceTags.getServiceResources(); if (CollectionUtils.isNotEmpty(resources)) { RangerServiceResource resource = null; @@ -181,24 +138,22 @@ public class ServiceTagsProcessor { String resourceSignature = null; Long resourceId = resource.getId(); - if(createOrUpdate) { - if(StringUtils.isNotEmpty(resource.getGuid())) { - existing = tagStore.getServiceResourceByGuid(resource.getGuid()); - } + if(StringUtils.isNotEmpty(resource.getGuid())) { + existing = tagStore.getServiceResourceByGuid(resource.getGuid()); + } - if(existing == null) { - if(MapUtils.isNotEmpty(resource.getResourceElements())) { - RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); + if(existing == null) { + if(MapUtils.isNotEmpty(resource.getResourceElements())) { + RangerServiceResourceSignature serializer = new RangerServiceResourceSignature(resource); - resourceSignature = serializer.getSignature(); + resourceSignature = serializer.getSignature(); - existing = tagStore.getServiceResourceByResourceSignature(resourceSignature); - } + existing = tagStore.getServiceResourceByServiceAndResourceSignature(resource.getServiceName(), resourceSignature); } + } - if(existing != null) { - resourceSignature = existing.getResourceSignature(); - } + if(existing != null) { + resourceSignature = existing.getResourceSignature(); } if(StringUtils.isEmpty(resourceSignature)) { @@ -243,70 +198,141 @@ public class ServiceTagsProcessor { } // Get all tags associated with this resourceId - List<Long> tagsToDelete = null; + List<RangerTag> associatedTags = null; + try { - tagsToDelete = tagStore.getTagIdsForResourceId(resourceInStore.getId()); + associatedTags = tagStore.getTagsForResourceId(resourceInStore.getId()); } catch (Exception exception) { LOG.error("RangerTags cannot be retrieved for resource with guid=" + resourceInStore.getGuid()); throw exception; } + List<RangerTag> tagsToRetain = new ArrayList<RangerTag>(); + List<Long> tagIds = entry.getValue(); try { for (Long tagId : tagIds) { - RangerTag tagInStore = tagsInStore.get(tagId); + RangerTag incomingTag = MapUtils.isNotEmpty(serviceTags.getTags()) ? serviceTags.getTags().get(tagId) : null; - if (tagInStore == null) { + if (incomingTag == null) { LOG.error("Tag (id=" + tagId + ") not found. Skipping addition of this tag for resource (id=" + resourceId + ")"); continue; } - RangerTagResourceMap existing = null; - - if(createOrUpdate) { - existing = tagStore.getTagResourceMapForTagAndResourceId(tagInStore.getId(), resourceInStore.getId()); - } + RangerTag matchingTag = findMatchingTag(incomingTag, associatedTags); + if (matchingTag == null) { + if (LOG.isDebugEnabled()) { + LOG.debug("Did not find matching tag for tagId=" + tagId); + } + // create new tag from incoming tag and associate it with service-resource + RangerTag newTag = tagStore.createTag(incomingTag); - if(existing == null) { RangerTagResourceMap tagResourceMap = new RangerTagResourceMap(); - tagResourceMap.setTagId(tagInStore.getId()); + tagResourceMap.setTagId(newTag.getId()); tagResourceMap.setResourceId(resourceInStore.getId()); tagResourceMap = tagStore.createTagResourceMap(tagResourceMap); + + associatedTags.add(newTag); + tagsToRetain.add(newTag); + + continue; + + } + + if (LOG.isDebugEnabled()) { + LOG.debug("Found matching tag for tagId=" + tagId + ", matchingTag=" + matchingTag); } - if(tagsToDelete != null) { - tagsToDelete.remove((Long)tagInStore.getId()); + if (isResourcePrivateTag(incomingTag)) { + if (!isResourcePrivateTag(matchingTag)) { + // create new tag from incoming tag and associate it with service-resource + RangerTag newTag = tagStore.createTag(incomingTag); + + RangerTagResourceMap tagResourceMap = new RangerTagResourceMap(); + + tagResourceMap.setTagId(newTag.getId()); + tagResourceMap.setResourceId(resourceInStore.getId()); + + tagResourceMap = tagStore.createTagResourceMap(tagResourceMap); + + associatedTags.add(newTag); + tagsToRetain.add(newTag); + + } else { + // Keep this tag, but update it with attribute-values from incoming tag + tagsToRetain.add(matchingTag); + + if (StringUtils.equals(incomingTag.getGuid(), matchingTag.getGuid())) { + // matching tag was found because of Guid match + if (LOG.isDebugEnabled()) { + LOG.debug("Updating existing private tag with id=" + matchingTag.getId()); + } + // update private tag with new values + incomingTag.setId(matchingTag.getId()); + tagStore.updateTag(incomingTag); + } + } + } else { // shared model + if (isResourcePrivateTag(matchingTag)) { + // create new tag from incoming tag and associate it with service-resource + RangerTag newTag = tagStore.createTag(incomingTag); + + RangerTagResourceMap tagResourceMap = new RangerTagResourceMap(); + + tagResourceMap.setTagId(newTag.getId()); + tagResourceMap.setResourceId(resourceInStore.getId()); + + tagResourceMap = tagStore.createTagResourceMap(tagResourceMap); + + associatedTags.add(newTag); + tagsToRetain.add(newTag); + + } else { + // Keep this tag, but update it with attribute-values from incoming tag + tagsToRetain.add(matchingTag); + + // Update shared tag with new values + incomingTag.setId(matchingTag.getId()); + tagStore.updateTag(incomingTag); + + // associate with service-resource if not already associated + if (findTagInList(matchingTag, associatedTags) == null) { + RangerTagResourceMap tagResourceMap = new RangerTagResourceMap(); + + tagResourceMap.setTagId(matchingTag.getId()); + tagResourceMap.setResourceId(resourceInStore.getId()); + + tagResourceMap = tagStore.createTagResourceMap(tagResourceMap); + } + + } } + } } catch (Exception exception) { LOG.error("createRangerTagResourceMap failed", exception); throw exception; } - if (CollectionUtils.isNotEmpty(tagsToDelete)) { + if (CollectionUtils.isNotEmpty(associatedTags)) { Long tagId = null; try { - for(int i = 0; i < tagsToDelete.size(); i++) { - tagId = tagsToDelete.get(i); + for (RangerTag associatedTag : associatedTags) { + if (findTagInList(associatedTag, tagsToRetain) == null) { - RangerTagResourceMap tagResourceMap = tagStore.getTagResourceMapForTagAndResourceId(tagId, resourceInStore.getId()); + tagId = associatedTag.getId(); - if(tagResourceMap != null) { - tagStore.deleteTagResourceMap(tagResourceMap.getId()); - } + RangerTagResourceMap tagResourceMap = tagStore.getTagResourceMapForTagAndResourceId(tagId, resourceInStore.getId()); - if (LOG.isDebugEnabled()) { - LOG.debug("Deleted tagResourceMap(tagId=" + tagId + ", resourceId=" + resourceInStore.getId()); - } - - if (StringUtils.equals(serviceTags.getTagModel(), ServiceTags.TAGMODEL_RESOURCE_PRIVATE)) { - tagStore.deleteTag(tagId); + if (tagResourceMap != null) { + tagStore.deleteTagResourceMap(tagResourceMap.getId()); + } if (LOG.isDebugEnabled()) { - LOG.debug("Deleted tag(tagId=" + tagId + ") as tagModel=" + ServiceTags.TAGMODEL_RESOURCE_PRIVATE); + LOG.debug("Deleted tagResourceMap(tagId=" + tagId + ", resourceId=" + resourceInStore.getId()); } } } @@ -323,6 +349,84 @@ public class ServiceTagsProcessor { } } + private RangerTag findTagInList(RangerTag object, List<RangerTag> list) { + if (LOG.isDebugEnabled()) { + LOG.debug("==> ServiceTagsProcessor.findTagInList(): object=" + (object == null ? null : object.getId())); + } + RangerTag ret = null; + if (object != null) { + for (RangerTag tag : list) { + if (LOG.isDebugEnabled()) { + LOG.debug("==> ServiceTagsProcessor.findTagInList(): tag=" + tag.getId()); + } + if (tag.getId().equals(object.getId())) { + ret = tag; + if (LOG.isDebugEnabled()) { + LOG.debug("==> ServiceTagsProcessor.findTagInList(): found tag=" + tag.getId()); + } + break; + } + } + } + if (LOG.isDebugEnabled()) { + LOG.debug("<== ServiceTagsProcessor.findTagInList(): ret=" + (ret == null ? null : ret.getId())); + } + return ret; + } + private boolean isResourcePrivateTag(RangerTag tag) { + return tag.getOwner() == RangerTag.OWNER_SERVICERESOURCE; + } + + private RangerTag findMatchingTag(RangerTag incomingTag, List<RangerTag> existingTags) throws Exception { + + RangerTag ret = null; + + if(StringUtils.isNotEmpty(incomingTag.getGuid())) { + ret = tagStore.getTagByGuid(incomingTag.getGuid()); + } + + if (ret == null) { + + if (isResourcePrivateTag(incomingTag)) { + + for (RangerTag existingTag : existingTags) { + + if (StringUtils.equals(incomingTag.getType(), existingTag.getType())) { + + // Check attribute values + Map<String, String> incomingTagAttributes = incomingTag.getAttributes(); + Map<String, String> existingTagAttributes = existingTag.getAttributes(); + + if (CollectionUtils.isEqualCollection(incomingTagAttributes.keySet(), existingTagAttributes.keySet())) { + + boolean matched = true; + + for (Map.Entry<String, String> entry : incomingTagAttributes.entrySet()) { + + String key = entry.getKey(); + String value = entry.getValue(); + + if (!StringUtils.equals(value, existingTagAttributes.get(key))) { + matched = false; + break; + } + + } + if (matched) { + ret = existingTag; + break; + } + } + + } + } + } + + } + + return ret; + } + private void delete(ServiceTags serviceTags) throws Exception { if (LOG.isDebugEnabled()) { LOG.debug("==> ServiceTagsProcessor.delete()"); @@ -332,7 +436,6 @@ public class ServiceTagsProcessor { 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 { @@ -344,13 +447,7 @@ public class ServiceTagsProcessor { if (CollectionUtils.isNotEmpty(tagResourceMaps)) { for (RangerTagResourceMap tagResourceMap : tagResourceMaps) { - long tagId = tagResourceMap.getTagId(); - tagStore.deleteTagResourceMap(tagResourceMap.getId()); - - if(isResourePrivateTag) { - tagStore.deleteTag(tagId); - } } } @@ -408,9 +505,7 @@ public class ServiceTagsProcessor { LOG.debug("==> ServiceTagsProcessor.replace()"); } - boolean isResourePrivateTag = StringUtils.equals(serviceTags.getTagModel(), ServiceTags.TAGMODEL_RESOURCE_PRIVATE) ? true : false; - - tagStore.deleteAllTagObjectsForService(serviceTags.getServiceName(), isResourePrivateTag); + tagStore.deleteAllTagObjectsForService(serviceTags.getServiceName()); addOrUpdate(serviceTags); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java index 378ff0b..c69ceed 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/TagREST.java @@ -778,26 +778,27 @@ public class TagREST { } @GET - @Path(TagRESTConstants.RESOURCE_RESOURCE + "signature/{resourceSignature}") + @Path(TagRESTConstants.RESOURCE_RESOURCE + "service/{serviceName}/signature/{resourceSignature}") @Produces({ "application/json", "application/xml" }) @PreAuthorize("hasRole('ROLE_SYS_ADMIN')") - public RangerServiceResource getServiceResourceByResourceSignature(@PathParam("resourceSignature") String resourceSignature) { + public RangerServiceResource getServiceResourceByServiceAndResourceSignature(@PathParam("serviceName") String serviceName, + @PathParam("resourceSignature") String resourceSignature) { if(LOG.isDebugEnabled()) { - LOG.debug("==> TagREST.getServiceResourceByResourceSignature(" + resourceSignature + ")"); + LOG.debug("==> TagREST.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ")"); } RangerServiceResource ret = null; try { - ret = tagStore.getServiceResourceByResourceSignature(resourceSignature); + ret = tagStore.getServiceResourceByServiceAndResourceSignature(serviceName, resourceSignature); } catch(Exception excp) { - LOG.error("getServiceResourceByResourceSignature(" + resourceSignature + ") failed", excp); + LOG.error("getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + ") failed", excp); throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true); } if(LOG.isDebugEnabled()) { - LOG.debug("<== TagREST.getServiceResourceByResourceSignature(" + resourceSignature + "): " + ret); + LOG.debug("<== TagREST.getServiceResourceByServiceAndResourceSignature(" + serviceName + ", " + resourceSignature + "): " + ret); } return ret; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/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 5cf26c9..abaeac8 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 @@ -91,10 +91,10 @@ public class RangerServiceResourceService extends RangerServiceResourceServiceBa return ret; } - public RangerServiceResource getByResourceSignature(String resourceSignature) { + public RangerServiceResource getByServiceAndResourceSignature(Long serviceId, String resourceSignature) { RangerServiceResource ret = null; - XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByResourceSignature(resourceSignature); + XXServiceResource xxServiceResource = daoMgr.getXXServiceResource().findByServiceAndResourceSignature(serviceId, resourceSignature); if(xxServiceResource != null) { ret = populateViewBean(xxServiceResource); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/security-admin/src/main/resources/META-INF/jpa_named_queries.xml ---------------------------------------------------------------------- diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml index 2bb66ca..739b5ca 100644 --- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml +++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml @@ -891,6 +891,13 @@ </query> </named-query> + <named-query name="XXTag.findByServiceIdAndOwner"> + <query>select obj from XXTag obj where obj.owner = :owner and obj.id in + (select tagRes.tagId from XXTagResourceMap tagRes, XXServiceResource resource where tagRes.resourceId = resource.id and resource.serviceId = :serviceId) + order by obj.id + </query> + </named-query> + <named-query name="XXTagAttribute.findByTagId"> <query>select obj from XXTagAttribute obj where obj.tagId = :tagId</query> </named-query> @@ -902,6 +909,15 @@ </query> </named-query> + <named-query name="XXTagAttribute.findByServiceIdAndOwner"> + <query>select obj from XXTagAttribute obj where obj.tagId in + (select tag.id from XXTag tag where tag.owner = :owner and tag.id in + (select tagRes.tagId from XXTagResourceMap tagRes, XXServiceResource resource where tagRes.resourceId = resource.id and resource.serviceId = :serviceId) + ) + order by obj.tagId + </query> + </named-query> + <named-query name="XXTagAttribute.findByResourceId"> <query>select obj from XXTagAttribute obj where obj.tagId in (select tagRes.tagId from XXTagResourceMap tagRes where tagRes.resourceId = :resourceId) @@ -926,8 +942,8 @@ </query> </named-query> - <named-query name="XXServiceResource.findByResourceSignature"> - <query>select obj from XXServiceResource obj where obj.resourceSignature = :resourceSignature</query> + <named-query name="XXServiceResource.findByServiceAndResourceSignature"> + <query>select obj from XXServiceResource obj where obj.serviceId = :serviceId and obj.resourceSignature = :resourceSignature</query> </named-query> <!-- End <== JPA Queries for Tag Based Policies --> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/tagsync/samples/tags.json ---------------------------------------------------------------------- diff --git a/tagsync/samples/tags.json b/tagsync/samples/tags.json index 3028f9d..fe57135 100644 --- a/tagsync/samples/tags.json +++ b/tagsync/samples/tags.json @@ -1,20 +1,19 @@ { "op": "add_or_update", - "tagModel": "resource_private", "serviceName": "cl1_hive", "tagVersion": 1, "tagUpdateTime": "20150924-22:26:33.000-+0000", "tagDefinitions": { - "1":{"id":1, "guid":"tagdef-1", "name":"PII", "attributeDefs":[]}, - "2":{"id":2, "guid":"tagdef-2", "name":"EXPIRES_ON", "attributeDefs":[{"name":"expiry_date", "type":"date"}]}, - "3":{"id":3, "guid":"tagdef-3", "name":"FINANCE", "attributeDefs":[]}, - "4":{"id":4, "guid":"tagdef-4", "name":"AUDIT", "attributeDefs":[]} + "1":{"id":1, "guid":"tagdef-1", "name":"PII", "attributeDefs":[], "owner":0}, + "2":{"id":2, "guid":"tagdef-2", "name":"EXPIRES_ON", "attributeDefs":[{"name":"expiry_date", "type":"date"}], "owner":0}, + "3":{"id":3, "guid":"tagdef-3", "name":"FINANCE", "attributeDefs":[], "owner":0}, + "4":{"id":4, "guid":"tagdef-4", "name":"AUDIT", "attributeDefs":[], "owner":0} }, "tags": { - "1":{"id":1, "guid":"tag-1", "type":"PII", "attributes":{}}, - "2":{"id":2, "guid":"tag-2", "type":"EXPIRES_ON", "attributes":{"expiry_date":"2015/08/31"}}, - "3":{"id":3, "guid":"tag-3", "type":"FINANCE", "attributes":{}}, - "4":{"id":4, "guid":"tag-4", "type":"AUDIT", "attributes":{}} + "1":{"id":1, "guid":"tag-1", "type":"PII", "attributes":{}, "owner":0}, + "2":{"id":2, "guid":"tag-2", "type":"EXPIRES_ON", "attributes":{"expiry_date":"2015/08/31"}, "owner":0}, + "3":{"id":3, "guid":"tag-3", "type":"FINANCE", "attributes":{}, "owner":0}, + "4":{"id":4, "guid":"tag-4", "type":"AUDIT", "attributes":{}, "owner":0} }, "serviceResources": [ { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/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 2168983..a9316b5 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 @@ -201,7 +201,6 @@ public class AtlasNotificationMapper { } ret.setOp(ServiceTags.OP_ADD_OR_UPDATE); - ret.setTagModel(ServiceTags.TAGMODEL_RESOURCE_PRIVATE); ret.setServiceName(serviceName); } @@ -232,7 +231,7 @@ public class AtlasNotificationMapper { LOG.error("Could not get values for trait:" + trait.getTypeName(), exception); } - ret.add(new RangerTag(trait.getTypeName(), tagAttrs)); + ret.add(new RangerTag(null, trait.getTypeName(), tagAttrs, RangerTag.OWNER_SERVICERESOURCE)); } } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/38b79e72/tagsync/src/main/resources/etc/ranger/data/tags.json ---------------------------------------------------------------------- diff --git a/tagsync/src/main/resources/etc/ranger/data/tags.json b/tagsync/src/main/resources/etc/ranger/data/tags.json index b4cd736..8861e03 100644 --- a/tagsync/src/main/resources/etc/ranger/data/tags.json +++ b/tagsync/src/main/resources/etc/ranger/data/tags.json @@ -1,6 +1,5 @@ { "op":"add_or_update", - "tagModel": "resource_private", "serviceName": "cl1_hive", "tagDefinitions": { "1": { @@ -23,7 +22,8 @@ "expiry_date": "2014/12/31" }, "id": 1, - "guid": "tag-1-guid" + "guid": "tag-1-guid", + "owner":0 } }, "serviceResources": [
