Repository: atlas Updated Branches: refs/heads/master 0eaefe38f -> 801db28bf
ATLAS-2632 Tag Propagation : Tag is added to propagatedClassification twice when relationship is updated to BOTH Project: http://git-wip-us.apache.org/repos/asf/atlas/repo Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/801db28b Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/801db28b Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/801db28b Branch: refs/heads/master Commit: 801db28bf772b111b776a0dda0d305344c2eef4d Parents: 0eaefe3 Author: Sarath Subramanian <[email protected]> Authored: Tue May 15 14:24:55 2018 -0700 Committer: Sarath Subramanian <[email protected]> Committed: Tue May 15 14:24:55 2018 -0700 ---------------------------------------------------------------------- .../atlas/model/instance/AtlasRelationship.java | 21 ++++++++++---------- .../graph/v1/AtlasRelationshipStoreV1.java | 2 +- .../store/graph/v1/EntityGraphRetriever.java | 11 +++++----- .../ClassificationPropagationTest.java | 21 ++++++++++---------- 4 files changed, 29 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/atlas/blob/801db28b/intg/src/main/java/org/apache/atlas/model/instance/AtlasRelationship.java ---------------------------------------------------------------------- diff --git a/intg/src/main/java/org/apache/atlas/model/instance/AtlasRelationship.java b/intg/src/main/java/org/apache/atlas/model/instance/AtlasRelationship.java index d04daa5..debaeef 100644 --- a/intg/src/main/java/org/apache/atlas/model/instance/AtlasRelationship.java +++ b/intg/src/main/java/org/apache/atlas/model/instance/AtlasRelationship.java @@ -30,12 +30,13 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; -import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.atomic.AtomicLong; import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; @@ -82,8 +83,8 @@ public class AtlasRelationship extends AtlasStruct implements Serializable { public enum Status { ACTIVE, DELETED } - private List<AtlasClassification> propagatedClassifications; - private List<AtlasClassification> blockedPropagatedClassifications; + private Set<AtlasClassification> propagatedClassifications; + private Set<AtlasClassification> blockedPropagatedClassifications; @JsonIgnore private static AtomicLong s_nextId = new AtomicLong(System.nanoTime()); @@ -198,7 +199,7 @@ public class AtlasRelationship extends AtlasStruct implements Serializable { } if (CollectionUtils.isNotEmpty((List) propagatedClassifications)) { - this.propagatedClassifications = new ArrayList<>(); + this.propagatedClassifications = new HashSet<>(); for (Object elem : (List) propagatedClassifications) { if (elem instanceof AtlasClassification) { @@ -210,7 +211,7 @@ public class AtlasRelationship extends AtlasStruct implements Serializable { } if (CollectionUtils.isNotEmpty((List) blockedPropagatedClassifications)) { - this.blockedPropagatedClassifications = new ArrayList<>(); + this.blockedPropagatedClassifications = new HashSet<>(); for (Object elem : (List) blockedPropagatedClassifications) { if (elem instanceof AtlasClassification) { @@ -308,19 +309,19 @@ public class AtlasRelationship extends AtlasStruct implements Serializable { return "-" + Long.toString(s_nextId.getAndIncrement()); } - public List<AtlasClassification> getPropagatedClassifications() { + public Set<AtlasClassification> getPropagatedClassifications() { return propagatedClassifications; } - public void setPropagatedClassifications(List<AtlasClassification> propagatedClassifications) { + public void setPropagatedClassifications(Set<AtlasClassification> propagatedClassifications) { this.propagatedClassifications = propagatedClassifications; } - public List<AtlasClassification> getBlockedPropagatedClassifications() { + public Set<AtlasClassification> getBlockedPropagatedClassifications() { return blockedPropagatedClassifications; } - public void setBlockedPropagatedClassifications(List<AtlasClassification> blockedPropagatedClassifications) { + public void setBlockedPropagatedClassifications(Set<AtlasClassification> blockedPropagatedClassifications) { this.blockedPropagatedClassifications = blockedPropagatedClassifications; } @@ -330,7 +331,7 @@ public class AtlasRelationship extends AtlasStruct implements Serializable { private void init(String guid, AtlasObjectId end1, AtlasObjectId end2, String label, PropagateTags propagateTags, Status status, String createdBy, String updatedBy, Date createTime, Date updateTime, Long version, - List<AtlasClassification> propagatedClassifications, List<AtlasClassification> blockedPropagatedClassifications) { + Set<AtlasClassification> propagatedClassifications, Set<AtlasClassification> blockedPropagatedClassifications) { setGuid(guid); setEnd1(end1); setEnd2(end2); http://git-wip-us.apache.org/repos/asf/atlas/blob/801db28b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java index 9fcba6d..a600b20 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/AtlasRelationshipStoreV1.java @@ -357,7 +357,7 @@ public class AtlasRelationshipStoreV1 implements AtlasRelationshipStore { return entityRetriever.mapEdgeToAtlasRelationship(relationshipEdge); } - private void handleBlockedClassifications(AtlasEdge edge, List<AtlasClassification> blockedPropagatedClassifications) throws AtlasBaseException { + private void handleBlockedClassifications(AtlasEdge edge, Set<AtlasClassification> blockedPropagatedClassifications) throws AtlasBaseException { if (blockedPropagatedClassifications != null) { List<AtlasVertex> propagatedClassificationVertices = getClassificationVertices(edge); List<String> currentClassificationIds = getBlockedClassificationIds(edge); http://git-wip-us.apache.org/repos/asf/atlas/blob/801db28b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java ---------------------------------------------------------------------- diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java index 7ca51e4..0f9f877 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/EntityGraphRetriever.java @@ -65,6 +65,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -1042,11 +1043,11 @@ public final class EntityGraphRetriever { } private void readClassificationsFromEdge(AtlasEdge edge, AtlasRelationshipWithExtInfo relationshipWithExtInfo, boolean extendedInfo) throws AtlasBaseException { - List<AtlasVertex> classificationVertices = getClassificationVertices(edge); - List<String> blockedClassificationIds = getBlockedClassificationIds(edge); - List<AtlasClassification> propagatedClassifications = new ArrayList<>(); - List<AtlasClassification> blockedClassifications = new ArrayList<>(); - AtlasRelationship relationship = relationshipWithExtInfo.getRelationship(); + List<AtlasVertex> classificationVertices = getClassificationVertices(edge); + List<String> blockedClassificationIds = getBlockedClassificationIds(edge); + AtlasRelationship relationship = relationshipWithExtInfo.getRelationship(); + Set<AtlasClassification> propagatedClassifications = new HashSet<>(); + Set<AtlasClassification> blockedClassifications = new HashSet<>(); for (AtlasVertex classificationVertex : classificationVertices) { String classificationId = classificationVertex.getIdForDisplay(); http://git-wip-us.apache.org/repos/asf/atlas/blob/801db28b/repository/src/test/java/org/apache/atlas/repository/tagpropagation/ClassificationPropagationTest.java ---------------------------------------------------------------------- diff --git a/repository/src/test/java/org/apache/atlas/repository/tagpropagation/ClassificationPropagationTest.java b/repository/src/test/java/org/apache/atlas/repository/tagpropagation/ClassificationPropagationTest.java index 56e7b96..151211e 100644 --- a/repository/src/test/java/org/apache/atlas/repository/tagpropagation/ClassificationPropagationTest.java +++ b/repository/src/test/java/org/apache/atlas/repository/tagpropagation/ClassificationPropagationTest.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -350,8 +351,8 @@ public class ClassificationPropagationTest { assertClassificationExistInEntity(EMPLOYEES_UNION_TABLE, PII_tag3.getTypeName(), employees2.getGuid()); AtlasRelationship process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); - List<AtlasClassification> propagatedClassifications = process3_employee_union_relationship.getPropagatedClassifications(); - List<AtlasClassification> blockedClassifications = process3_employee_union_relationship.getBlockedPropagatedClassifications(); + Set<AtlasClassification> propagatedClassifications = process3_employee_union_relationship.getPropagatedClassifications(); + Set<AtlasClassification> blockedClassifications = process3_employee_union_relationship.getBlockedPropagatedClassifications(); assertNotNull(propagatedClassifications); assertClassificationEquals(propagatedClassifications, PII_tag1); @@ -363,7 +364,7 @@ public class ClassificationPropagationTest { PII_tag2.setEntityGuid(employees1.getGuid()); PII_tag3.setEntityGuid(employees2.getGuid()); - process3_employee_union_relationship.setBlockedPropagatedClassifications(Arrays.asList(PII_tag2, PII_tag3)); + process3_employee_union_relationship.setBlockedPropagatedClassifications(new HashSet<>(Arrays.asList(PII_tag2, PII_tag3))); relationshipStore.update(process3_employee_union_relationship); process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); @@ -383,7 +384,7 @@ public class ClassificationPropagationTest { assertClassificationExistInEntity(EMPLOYEES_UNION_TABLE, PII_tag1.getTypeName(), hdfs_path.getGuid()); } - private void assertClassificationEquals(List<AtlasClassification> propagatedClassifications, AtlasClassification expected) { + private void assertClassificationEquals(Set<AtlasClassification> propagatedClassifications, AtlasClassification expected) { String expectedTypeName = expected.getTypeName(); for (AtlasClassification c : propagatedClassifications) { if(c.getTypeName().equals(expectedTypeName)) { @@ -417,19 +418,19 @@ public class ClassificationPropagationTest { AtlasRelationship process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); // remove blocked propagated classification entry for PII (from employees2) - allow PII from employees2 to propagate to employee_union - process3_employee_union_relationship.setBlockedPropagatedClassifications(Arrays.asList(PII_tag3)); + process3_employee_union_relationship.setBlockedPropagatedClassifications(new HashSet<>(Arrays.asList(PII_tag3))); relationshipStore.update(process3_employee_union_relationship); - process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); - List<AtlasClassification> propagatedClassifications = process3_employee_union_relationship.getPropagatedClassifications(); - List<AtlasClassification> blockedClassifications = process3_employee_union_relationship.getBlockedPropagatedClassifications(); + process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); + Set<AtlasClassification> propagatedClassifications = process3_employee_union_relationship.getPropagatedClassifications(); + Set<AtlasClassification> blockedClassifications = process3_employee_union_relationship.getBlockedPropagatedClassifications(); assertClassificationExistInList(propagatedClassifications, PII_tag1); assertClassificationExistInList(propagatedClassifications, PII_tag2); assertClassificationExistInList(blockedClassifications, PII_tag3); // remove all blocked propagated classification entry - process3_employee_union_relationship.setBlockedPropagatedClassifications(Collections.emptyList()); + process3_employee_union_relationship.setBlockedPropagatedClassifications(Collections.emptySet()); relationshipStore.update(process3_employee_union_relationship); process3_employee_union_relationship = getRelationship(EMPLOYEES_UNION_PROCESS, EMPLOYEES_UNION_TABLE); @@ -442,7 +443,7 @@ public class ClassificationPropagationTest { assertTrue(blockedClassifications.isEmpty()); } - private void assertClassificationExistInList(List<AtlasClassification> classifications, AtlasClassification classification) { + private void assertClassificationExistInList(Set<AtlasClassification> classifications, AtlasClassification classification) { String classificationName = classification.getTypeName(); String entityGuid = classification.getEntityGuid(); boolean foundClassification = false;
