You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by as...@apache.org on 2015/09/04 23:15:24 UTC

[3/3] incubator-geode git commit: GEODE-11: Use ResultCollector in LuceneFunction

GEODE-11: Use ResultCollector in LuceneFunction

Shards will not use LuceneQueryResults object to send result to coordinator.
Replace this dependency with EntryScore and related objects.


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

Branch: refs/heads/feature/GEODE-11
Commit: a0155ef9757f0dddca4326f27ec5d76ee123032f
Parents: 240b39b
Author: Ashvin Agrawal <as...@apache.org>
Authored: Fri Sep 4 14:10:04 2015 -0700
Committer: Ashvin Agrawal <as...@apache.org>
Committed: Fri Sep 4 14:14:00 2015 -0700

----------------------------------------------------------------------
 .../distributed/LuceneQueryFunction.java        | 45 +++++++-------------
 .../LuceneQueryFunctionJUnitTest.java           | 36 +++++++---------
 2 files changed, 32 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0155ef9/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunction.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunction.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunction.java
index 6f59329..9b494e0 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunction.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunction.java
@@ -3,7 +3,6 @@ package com.gemstone.gemfire.cache.lucene.internal.distributed;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.Set;
 
 import org.apache.logging.log4j.Logger;
@@ -13,10 +12,6 @@ import com.gemstone.gemfire.cache.execute.FunctionAdapter;
 import com.gemstone.gemfire.cache.execute.FunctionContext;
 import com.gemstone.gemfire.cache.execute.RegionFunctionContext;
 import com.gemstone.gemfire.cache.execute.ResultSender;
-import com.gemstone.gemfire.cache.lucene.LuceneQueryResults;
-import com.gemstone.gemfire.cache.lucene.internal.LuceneQueryResultsImpl;
-import com.gemstone.gemfire.cache.lucene.internal.LuceneResultStructImpl;
-import com.gemstone.gemfire.cache.lucene.internal.mergers.TopDocsResultMerger;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepository;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexResultCollector;
 import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
@@ -39,7 +34,7 @@ public class LuceneQueryFunction extends FunctionAdapter {
   @Override
   public void execute(FunctionContext context) {
     RegionFunctionContext ctx = (RegionFunctionContext) context;
-    ResultSender<LuceneQueryResults> resultSender = ctx.getResultSender();
+    ResultSender<TopEntries> resultSender = ctx.getResultSender();
 
     Region region = ctx.getDataSet();
     if (logger.isDebugEnabled()) {
@@ -47,16 +42,18 @@ public class LuceneQueryFunction extends FunctionAdapter {
     }
 
     LuceneSearchFunctionArgs args = (LuceneSearchFunctionArgs) ctx.getArguments();
-    Set<Integer> buckets = args == null ? null : args.getBuckets();
+    Set<Integer> buckets = (args == null ? null : args.getBuckets());
 
-    List<LuceneQueryResults> results = new ArrayList<>();
+    CollectorManager<TopEntries, TopEntriesCollector> manager = new TopEntriesCollectorManager();
+
+    Collection<IndexResultCollector> results = new ArrayList<>();
     try {
       Collection<IndexRepository> repositories = repoManager.getRepositories(region, buckets);
       for (IndexRepository repo : repositories) {
-        ShardResultCollector collector = new ShardResultCollector();
-        logger.debug("Executing search on repo: " + repo);
+        TopEntriesCollector collector = manager.newCollector(repo.toString());
+        logger.debug("Executing search on repo: " + repo.toString());
         repo.query(null, 0, collector);
-        results.add(collector.getResult());
+        results.add(collector);
       }
     } catch (IOException e) {
       logger.warn("", e);
@@ -68,24 +65,14 @@ public class LuceneQueryFunction extends FunctionAdapter {
       return;
     }
 
-    TopDocsResultMerger merger = new TopDocsResultMerger();
-    LuceneQueryResults merged = merger.mergeResults(results);
-    resultSender.lastResult(merged);
-  }
-
-  /**
-   * Collects and merges results from {@link IndexRepository}s
-   */
-  class ShardResultCollector implements IndexResultCollector {
-    LuceneQueryResultsImpl result = new LuceneQueryResultsImpl();
-    
-    @Override
-    public void collect(Object key, float score) {
-      result.addHit(new LuceneResultStructImpl(key, score));
-    }
-
-    public LuceneQueryResults getResult() {
-      return result;
+    TopEntries mergedResult;
+    try {
+      mergedResult = manager.reduce(results);
+      resultSender.lastResult(mergedResult);
+    } catch (IOException e) {
+      logger.warn("", e);
+      resultSender.sendException(e);
+      return;
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a0155ef9/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunctionJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunctionJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunctionJUnitTest.java
index 94e088f..069ca90 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunctionJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneQueryFunctionJUnitTest.java
@@ -22,10 +22,6 @@ import org.junit.experimental.categories.Category;
 import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.execute.RegionFunctionContext;
 import com.gemstone.gemfire.cache.execute.ResultSender;
-import com.gemstone.gemfire.cache.lucene.LuceneQueryResults;
-import com.gemstone.gemfire.cache.lucene.LuceneResultStruct;
-import com.gemstone.gemfire.cache.lucene.internal.LuceneResultStructImpl;
-import com.gemstone.gemfire.cache.lucene.internal.mergers.TopDocsMergeJUnitTest;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepository;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexResultCollector;
 import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
@@ -38,13 +34,13 @@ public class LuceneQueryFunctionJUnitTest {
 
   @Test
   public void testRepoQueryAndMerge() throws Exception {
-    final LuceneResultStructImpl r1_1 = new LuceneResultStructImpl("key-1-1", .5f);
-    final LuceneResultStructImpl r1_2 = new LuceneResultStructImpl("key-1-2", .4f);
-    final LuceneResultStructImpl r1_3 = new LuceneResultStructImpl("key-1-3", .3f);
-    final LuceneResultStructImpl r2_1 = new LuceneResultStructImpl("key-2-1", .45f);
-    final LuceneResultStructImpl r2_2 = new LuceneResultStructImpl("key-2-2", .35f);
+    final EntryScore r1_1 = new EntryScore("key-1-1", .5f);
+    final EntryScore r1_2 = new EntryScore("key-1-2", .4f);
+    final EntryScore r1_3 = new EntryScore("key-1-3", .3f);
+    final EntryScore r2_1 = new EntryScore("key-2-1", .45f);
+    final EntryScore r2_2 = new EntryScore("key-2-2", .35f);
 
-    final AtomicReference<LuceneQueryResults> result = new AtomicReference<>();
+    final AtomicReference<TopEntries> result = new AtomicReference<>();
 
     final QueryMocks m = new QueryMocks();
     mocker.checking(new Expectations() {
@@ -65,9 +61,9 @@ public class LuceneQueryFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r1_1.getKey(), r1_1.getScore());
-            collector.collect(r1_2.getKey(), r1_2.getScore());
-            collector.collect(r1_3.getKey(), r1_3.getScore());
+            collector.collect(r1_1.key, r1_1.score);
+            collector.collect(r1_2.key, r1_2.score);
+            collector.collect(r1_3.key, r1_3.score);
             return null;
           }
         });
@@ -77,17 +73,17 @@ public class LuceneQueryFunctionJUnitTest {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
             IndexResultCollector collector = (IndexResultCollector) invocation.getParameter(2);
-            collector.collect(r2_1.getKey(), r2_1.getScore());
-            collector.collect(r2_2.getKey(), r2_2.getScore());
+            collector.collect(r2_1.key, r2_1.score);
+            collector.collect(r2_2.key, r2_2.score);
             return null;
           }
         });
 
-        oneOf(m.mockResultSender).lastResult(with(any(LuceneQueryResults.class)));
+        oneOf(m.mockResultSender).lastResult(with(any(TopEntries.class)));
         will(new CustomAction("collectResult") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
-            result.set((LuceneQueryResults) invocation.getParameter(0));
+            result.set((TopEntries) invocation.getParameter(0));
             return null;
           }
         });
@@ -98,9 +94,9 @@ public class LuceneQueryFunctionJUnitTest {
     function.setRepositoryManager(m.mockRepoManager);
 
     function.execute(m.mockContext);
-    List<LuceneResultStruct> hits = result.get().getHits();
+    List<EntryScore> hits = result.get().getHits();
     assertEquals(5, hits.size());
-    TopDocsMergeJUnitTest.verifyResultOrder(result.get(), r1_1, r2_1, r1_2, r2_2, r1_3);
+    TopEntriesJUnitTest.verifyResultOrder(result.get().getHits(), r1_1, r2_1, r1_2, r2_2, r1_3);
   }
 
   @Test
@@ -164,7 +160,7 @@ public class LuceneQueryFunctionJUnitTest {
 
   class QueryMocks {
     RegionFunctionContext mockContext = mocker.mock(RegionFunctionContext.class);
-    ResultSender<LuceneQueryResults> mockResultSender = mocker.mock(ResultSender.class);
+    ResultSender<TopEntries> mockResultSender = mocker.mock(ResultSender.class);
     Region<Object, Object> mockRegion = mocker.mock(Region.class);
 
     RepositoryManager mockRepoManager = mocker.mock(RepositoryManager.class);