You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by mr...@apache.org on 2016/03/29 22:11:49 UTC

[8/8] usergrid git commit: Clear ES index scrolls if the result set is less than the requested limit.

Clear ES index scrolls if the result set is less than the requested limit.


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

Branch: refs/heads/hotfix-2.0.0
Commit: f89bbdbc0e8b802be38d938a3c4539d6cc38f01e
Parents: e3b467d
Author: Michael Russo <mr...@apigee.com>
Authored: Tue Mar 29 13:10:11 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Tue Mar 29 13:10:11 2016 -0700

----------------------------------------------------------------------
 .../index/impl/EsEntityIndexImpl.java           | 32 +++++++++++++++-----
 1 file changed, 25 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f89bbdbc/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index 9add426..57d263e 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@ -54,9 +54,7 @@ import org.elasticsearch.action.admin.indices.alias.IndicesAliasesResponse;
 import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
 import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse;
-import org.elasticsearch.action.search.SearchRequestBuilder;
-import org.elasticsearch.action.search.SearchResponse;
-import org.elasticsearch.action.search.SearchScrollRequestBuilder;
+import org.elasticsearch.action.search.*;
 import org.elasticsearch.client.AdminClient;
 import org.elasticsearch.common.settings.ImmutableSettings;
 import org.elasticsearch.common.settings.Settings;
@@ -390,6 +388,7 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
 
 
         SearchResponse searchResponse;
+        String esScrollCursor = null;
 
         if ( query.getCursor() == null ) {
             SearchRequestBuilder srb = esProvider.getClient().prepareSearch( alias.getReadAlias() )
@@ -474,7 +473,7 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
             }
 
             //now get the cursor from the map  and validate
-            final String esScrollCursor  = mapManager.getString( userCursorString );
+            esScrollCursor  = mapManager.getString( userCursorString );
 
             Preconditions.checkArgument(esScrollCursor != null, "Could not find a cursor for the value '{}' ",  esScrollCursor);
 
@@ -502,11 +501,11 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
             failureMonitor.success();
         }
 
-        return parseResults(searchResponse, query);
+        return parseResults(searchResponse, query, esScrollCursor );
     }
 
 
-    private CandidateResults parseResults( final SearchResponse searchResponse, final Query query ) {
+    private CandidateResults parseResults(final SearchResponse searchResponse, final Query query, String previousCursor) {
 
         final SearchHits searchHits = searchResponse.getHits();
         final SearchHit[] hits = searchHits.getHits();
@@ -546,6 +545,25 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
 
             candidateResults.setCursor( userCursorString );
             logger.debug(" User cursor = {},  Cursor = {} ", userCursorString, esScrollCursor);
+        }else{
+
+            // just execute this and not care about the response
+            logger.info("Candidate results size {} is less than limit {}, clearing next scroll ID {}",
+                candidateResults.size(), query.getLimit(), searchResponse.getScrollId());
+
+            ClearScrollRequestBuilder builder = esProvider.getClient().prepareClearScroll()
+                .addScrollId(searchResponse.getScrollId());
+
+            if( previousCursor != null){
+
+                logger.info("Candidate results size {} is less than limit {}, clearing previous scroll ID {}",
+                    candidateResults.size(), query.getLimit(), previousCursor);
+
+                builder.addScrollId(previousCursor);
+            }
+            
+            builder.execute().actionGet();
+
         }
 
         return candidateResults;
@@ -632,7 +650,7 @@ public class EsEntityIndexImpl implements AliasedEntityIndex {
 
         failureMonitor.success();
 
-        return parseResults(searchResponse, new Query());
+        return parseResults(searchResponse, new Query(), null);
     }