This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/master by this push:
     new c04c0ab  ATLAS-3491: search on parent tag doesn't return entities 
associated with children tags
c04c0ab is described below

commit c04c0ab3e8e8147226337990f73f147d89cdf5a8
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]>
---
 .../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")

Reply via email to