You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2017/11/27 19:40:32 UTC

atlas git commit: ATLAS-2274: search for classification '*' with a typeName filter results in error ATLAS-2277: search for classification '*' doesn't honor excludeDeletedEntities=true

Repository: atlas
Updated Branches:
  refs/heads/master f5c597103 -> a7e89196f


ATLAS-2274: search for classification '*' with a typeName filter results in error
ATLAS-2277: search for classification '*' doesn't honor excludeDeletedEntities=true


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/a7e89196
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/a7e89196
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/a7e89196

Branch: refs/heads/master
Commit: a7e89196fe7f084cdc5a6e57916bb64ef1d6b466
Parents: f5c5971
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Sat Nov 25 22:03:48 2017 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Sat Nov 25 23:02:38 2017 -0800

----------------------------------------------------------------------
 .../discovery/ClassificationSearchProcessor.java   | 13 ++++++++++---
 .../atlas/discovery/EntitySearchProcessor.java     | 17 ++++++++++++++---
 2 files changed, 24 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/a7e89196/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
----------------------------------------------------------------------
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 0a9e846..1565977 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
@@ -58,7 +58,7 @@ public class ClassificationSearchProcessor extends SearchProcessor {
     private final AtlasIndexQuery indexQuery;
     private final AtlasGraphQuery tagGraphQueryWithAttributes;
     private final AtlasGraphQuery entityGraphQueryTraitNames;
-    private final Predicate       entityPredicateTraitNames;
+    private       Predicate       entityPredicateTraitNames;
 
     private final String              gremlinTagFilterQuery;
     private final Map<String, Object> gremlinQueryBindings;
@@ -144,12 +144,19 @@ public class ClassificationSearchProcessor extends SearchProcessor {
 
             if (classificationType != SearchContext.MATCH_ALL_CLASSIFICATION) {
                 entityGraphQueryTraitNames = graph.query().in(Constants.TRAIT_NAMES_PROPERTY_KEY, typeAndSubTypes);
+                entityPredicateTraitNames  = SearchPredicateUtil.getContainsAnyPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationType.getTypeAndAllSubTypes(), List.class);
             } else {
                 entityGraphQueryTraitNames = graph.query().has(Constants.TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null);
+                entityPredicateTraitNames = SearchPredicateUtil.getNotNullPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, null, List.class);
             }
 
-            entityPredicateTraitNames   = SearchPredicateUtil.getContainsAnyPredicateGenerator()
-                                                             .generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationType.getTypeAndAllSubTypes(), List.class);
+            if (context.getSearchParameters().getExcludeDeletedEntities()) {
+                entityGraphQueryTraitNames.has(Constants.STATE_PROPERTY_KEY, "ACTIVE");
+
+                final Predicate activePredicate = SearchPredicateUtil.getEQPredicateGenerator().generatePredicate(Constants.STATE_PROPERTY_KEY, "ACTIVE", String.class);
+
+                entityPredicateTraitNames = PredicateUtils.andPredicate(entityPredicateTraitNames, activePredicate);
+            }
 
             gremlinTagFilterQuery = null;
             gremlinQueryBindings  = null;

http://git-wip-us.apache.org/repos/asf/atlas/blob/a7e89196/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
index 87efed7..1119463 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
@@ -39,6 +39,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import static org.apache.atlas.repository.graphdb.AtlasGraphQuery.ComparisionOperator.NOT_EQUAL;
+
 public class EntitySearchProcessor extends SearchProcessor {
     private static final Logger LOG      = LoggerFactory.getLogger(EntitySearchProcessor.class);
     private static final Logger PERF_LOG = AtlasPerfTracer.getPerfLogger("EntitySearchProcessor");
@@ -66,10 +68,15 @@ public class EntitySearchProcessor extends SearchProcessor {
 
         final Predicate typeNamePredicate = SearchPredicateUtil.getINPredicateGenerator()
                                                                .generatePredicate(Constants.TYPE_NAME_PROPERTY_KEY, typeAndSubTypes, String.class);
-        final Predicate traitPredicate    = SearchPredicateUtil.getContainsAnyPredicateGenerator()
-                                                               .generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationTypeAndSubTypes, List.class);
         final Predicate activePredicate   = SearchPredicateUtil.getEQPredicateGenerator()
                                                                .generatePredicate(Constants.STATE_PROPERTY_KEY, "ACTIVE", String.class);
+        final Predicate traitPredicate;
+
+        if (classificationType == SearchContext.MATCH_ALL_CLASSIFICATION) {
+            traitPredicate = SearchPredicateUtil.getNotNullPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, null, List.class);
+        } else {
+            traitPredicate = SearchPredicateUtil.getContainsAnyPredicateGenerator().generatePredicate(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationTypeAndSubTypes, List.class);
+        }
 
         processSearchAttributes(entityType, filterCriteria, indexAttributes, graphAttributes, allAttributes);
 
@@ -122,7 +129,11 @@ public class EntitySearchProcessor extends SearchProcessor {
 
             // If we need to filter on the trait names then we need to build the query and equivalent in-memory predicate
             if (filterClassification) {
-                query.in(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationTypeAndSubTypes);
+                if (classificationType == SearchContext.MATCH_ALL_CLASSIFICATION) {
+                    query.has(Constants.TRAIT_NAMES_PROPERTY_KEY, NOT_EQUAL, null);
+                } else {
+                    query.in(Constants.TRAIT_NAMES_PROPERTY_KEY, classificationTypeAndSubTypes);
+                }
 
                 // Construct a parallel in-memory predicate
                 if (graphQueryPredicate != null) {