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")