This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/atlas.git
commit 8396faa10595a3fdfd4110466e5be9da13b5ca44 Author: Le Ma <[email protected]> AuthorDate: Thu Oct 24 11:49:02 2019 -0700 ATLAS-3491: search on parent tag doesn't return entities associated with children tags Signed-off-by: Madhan Neethiraj <[email protected]> (cherry picked from commit c04c0ab3e8e8147226337990f73f147d89cdf5a8) --- .../discovery/ClassificationSearchProcessor.java | 2 +- .../apache/atlas/discovery/SearchProcessor.java | 27 +++++++++++----------- .../atlas/web/adapters/TestEntitiesREST.java | 14 +++++++++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java index f9989ab..672f381 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java @@ -156,7 +156,7 @@ public class ClassificationSearchProcessor extends SearchProcessor { StringBuilder queryString = new StringBuilder(); graphIndexQueryBuilder.addActiveStateQueryFilter(queryString); - graphIndexQueryBuilder.addTypeAndSubTypesQueryFilter(queryString, context.getSearchParameters().getClassification()); + graphIndexQueryBuilder.addTypeAndSubTypesQueryFilter(queryString, typeAndSubTypesQryStr); constructFilterQuery(queryString, classificationType, filterCriteria, indexAttributes); diff --git a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java index 015aade..b56d8e8 100644 --- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java +++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java @@ -242,27 +242,28 @@ public abstract class SearchProcessor { protected void filterWhiteSpaceClassification(List<AtlasVertex> entityVertices) { if (CollectionUtils.isNotEmpty(entityVertices)) { - - boolean hasExactMatch = false; - Iterator<AtlasVertex> it = entityVertices.iterator(); + final Iterator<AtlasVertex> it = entityVertices.iterator(); + final Set<String> typeAndSubTypes = context.getClassificationTypes(); while (it.hasNext()) { - AtlasVertex entityVertex = it.next(); + AtlasVertex entityVertex = it.next(); List<String> classificationNames = AtlasGraphUtilsV2.getClassificationNames(entityVertex); - if (CollectionUtils.isNotEmpty(classificationNames) && classificationNames.contains(context.getClassificationType().getTypeName())) { - hasExactMatch = true; + + if (CollectionUtils.isNotEmpty(classificationNames)) { + if (CollectionUtils.containsAny(classificationNames, typeAndSubTypes)) { + continue; + } } - if (hasExactMatch) continue; + List<String> propagatedClassificationNames = AtlasGraphUtilsV2.getPropagatedClassificationNames(entityVertex); - classificationNames = AtlasGraphUtilsV2.getPropagatedClassificationNames(entityVertex); - if (CollectionUtils.isNotEmpty(classificationNames) && classificationNames.contains(context.getClassificationType().getTypeName())) { - hasExactMatch = true; + if (CollectionUtils.isNotEmpty(propagatedClassificationNames)) { + if (CollectionUtils.containsAny(propagatedClassificationNames, typeAndSubTypes)) { + continue; + } } - if (!hasExactMatch) { - it.remove(); - } + it.remove(); } } } diff --git a/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntitiesREST.java b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntitiesREST.java index 16260bc..cd8f898 100644 --- a/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntitiesREST.java +++ b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntitiesREST.java @@ -19,6 +19,7 @@ package org.apache.atlas.web.adapters; import static org.apache.atlas.TestUtilsV2.COLUMN_TYPE; import static org.apache.atlas.TestUtilsV2.DATABASE_TYPE; +import static org.apache.atlas.TestUtilsV2.FETL_CLASSIFICATION; import static org.apache.atlas.TestUtilsV2.PHI; import static org.apache.atlas.TestUtilsV2.TABLE_TYPE; @@ -334,18 +335,27 @@ public class TestEntitiesREST { ClassificationAssociateRequest clsAssRequest = new ClassificationAssociateRequest(createdGuids.get(DATABASE_TYPE), fetlCls); entityREST.addClassification(clsAssRequest); - final AtlasClassification result_tag = entityREST.getClassification(createdGuids.get(DATABASE_TYPE).get(0), TestUtilsV2.PHI); + final AtlasClassification result_tag = entityREST.getClassification(createdGuids.get(DATABASE_TYPE).get(0), TestUtilsV2.FETL_CLASSIFICATION); Assert.assertNotNull(result_tag); + Assert.assertEquals(result_tag.getTypeName(), FETL_CLASSIFICATION); // basic search with subtypes searchParameters = new SearchParameters(); searchParameters.setClassification(TestUtilsV2.CLASSIFICATION); - searchParameters.setIncludeSubTypes(true); + searchParameters.setIncludeSubClassifications(true); AtlasSearchResult res = discoveryREST.searchWithParameters(searchParameters); Assert.assertNotNull(res.getEntities()); Assert.assertEquals(res.getEntities().size(), 3); + + + // basic search without subtypes + searchParameters.setIncludeSubClassifications(false); + res = discoveryREST.searchWithParameters(searchParameters); + + Assert.assertNotNull(res.getEntities()); + Assert.assertEquals(res.getEntities().size(), 2); } @Test(dependsOnMethods = "testTagToMultipleEntities")
