ATLAS-2082: basic-search fails when in-memory filters all results from index-query
(cherry picked from commit 64c9bde668b52c6f621c19110f2da0a0907704d8)
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 29670bc..0daab03 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/ClassificationSearchProcessor.java
@@ -236,22 +236,23 @@
// Now filter on the tag attributes
Set<String> guids = getGuids(entityVertices);
- gremlinQueryBindings.put("guids", guids);
+ // Clear prior results
+ entityVertices.clear();
- try {
- AtlasGraph graph = context.getGraph();
- ScriptEngine gremlinScriptEngine = graph.getGremlinScriptEngine();
- List<AtlasVertex> atlasVertices = (List<AtlasVertex>) graph.executeGremlinScript(gremlinScriptEngine, gremlinQueryBindings, gremlinTagFilterQuery, false);
+ if (CollectionUtils.isNotEmpty(guids)) {
+ gremlinQueryBindings.put("guids", guids);
- // Clear prior results
- entityVertices.clear();
+ try {
+ AtlasGraph graph = context.getGraph();
+ ScriptEngine gremlinScriptEngine = graph.getGremlinScriptEngine();
+ List<AtlasVertex> atlasVertices = (List<AtlasVertex>) graph.executeGremlinScript(gremlinScriptEngine, gremlinQueryBindings, gremlinTagFilterQuery, false);
- if (CollectionUtils.isNotEmpty(atlasVertices)) {
- entityVertices.addAll(atlasVertices);
+ if (CollectionUtils.isNotEmpty(atlasVertices)) {
+ entityVertices.addAll(atlasVertices);
+ }
+ } catch (AtlasBaseException | ScriptException e) {
+ LOG.warn(e.getMessage(), e);
}
-
- } catch (AtlasBaseException | ScriptException e) {
- LOG.warn(e.getMessage(), e);
}
}
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 f4ac8ab..a4a638a 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/EntitySearchProcessor.java
@@ -173,12 +173,17 @@
CollectionUtils.filter(entityVertices, inMemoryPredicate);
if (graphQuery != null) {
- AtlasGraphQuery guidQuery = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, getGuids(entityVertices));
-
- guidQuery.addConditionsFrom(graphQuery);
+ Set<String> guids = getGuids(entityVertices);
entityVertices.clear();
- getVertices(guidQuery.vertices().iterator(), entityVertices);
+
+ if (CollectionUtils.isNotEmpty(guids)) {
+ AtlasGraphQuery guidQuery = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, guids);
+
+ guidQuery.addConditionsFrom(graphQuery);
+
+ getVertices(guidQuery.vertices().iterator(), entityVertices);
+ }
}
} else {
Iterator<AtlasVertex> queryResult = graphQuery.vertices(qryOffset, limit).iterator();
@@ -211,12 +216,17 @@
LOG.debug("==> EntitySearchProcessor.filter({})", entityVertices.size());
}
- AtlasGraphQuery query = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, getGuids(entityVertices));
-
- query.addConditionsFrom(filterGraphQuery);
+ Set<String> guids = getGuids(entityVertices);
entityVertices.clear();
- getVertices(query.vertices().iterator(), entityVertices);
+
+ if (CollectionUtils.isNotEmpty(guids)) {
+ AtlasGraphQuery query = context.getGraph().query().in(Constants.GUID_PROPERTY_KEY, guids);
+
+ query.addConditionsFrom(filterGraphQuery);
+
+ getVertices(query.vertices().iterator(), entityVertices);
+ }
super.filter(entityVertices);