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/11/11 22:23:45 UTC

[13/50] [abbrv] incubator-geode git commit: Refactoring LuceneFunction, LuceneQueryProvider, and LuceneQueryFactory

Refactoring LuceneFunction, LuceneQueryProvider, and LuceneQueryFactory

LuceneFunction had a static RepositoryManager, I changed the code to get
look up the RepositoryManager from the LuceneService.

As part of that work, I noticed StringQueryProvider really needed access
to the index to lookup the field names, analyzer, etc. So I changed the
getQuery method to take an index, and removed the unneeded string
parameters.

Finally, I removed some of the mocking from
LuceneFunctionReadPathDUnitTest, which exposed some other issues:

* I switched RepositoryManager.getRepositories back to using a
RegionFunctionContext, because apparently context.getDataSet is *not*
the local data set.

* I canonicalized the regionPaths in LuceneService


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

Branch: refs/heads/develop
Commit: 8fb4ad7a23db081377e1a93b7da839809095eb70
Parents: 58f13e2
Author: Dan Smith <up...@apache.org>
Authored: Wed Sep 23 13:37:05 2015 -0700
Committer: Dan Smith <up...@apache.org>
Committed: Wed Sep 23 15:42:38 2015 -0700

----------------------------------------------------------------------
 .../internal/cache/GemFireCacheImpl.java        |  2 +-
 .../gemfire/internal/cache/InternalCache.java   |  3 +-
 .../internal/cache/xmlcache/CacheCreation.java  |  2 +-
 .../cache/lucene/LuceneQueryFactory.java        | 16 ----
 .../cache/lucene/LuceneQueryProvider.java       |  3 +-
 .../cache/lucene/LuceneServiceProvider.java     |  3 +-
 .../lucene/internal/InternalLuceneIndex.java    | 10 +++
 .../lucene/internal/InternalLuceneService.java  |  9 ++
 .../cache/lucene/internal/LuceneIndexImpl.java  |  3 +-
 .../lucene/internal/LuceneQueryFactoryImpl.java | 31 ++-----
 .../cache/lucene/internal/LuceneQueryImpl.java  | 11 +--
 .../lucene/internal/LuceneServiceImpl.java      | 20 +++--
 .../internal/PartitionedRepositoryManager.java  | 13 +--
 .../lucene/internal/StringQueryProvider.java    | 45 ++--------
 .../internal/distributed/LuceneFunction.java    | 26 +++---
 .../distributed/LuceneFunctionContext.java      | 26 ++++--
 .../internal/repository/RepositoryManager.java  |  2 +-
 .../internal/LuceneServiceImplJUnitTest.java    | 12 +--
 .../PartitionedRepositoryManagerJUnitTest.java  | 13 ++-
 .../internal/StringQueryProviderJUnitTest.java  | 22 ++---
 .../LuceneFunctionContextJUnitTest.java         |  8 +-
 .../distributed/LuceneFunctionJUnitTest.java    | 95 +++++++++++++-------
 .../LuceneFunctionReadPathDUnitTest.java        | 80 ++++++++---------
 .../TopEntriesFunctionCollectorJUnitTest.java   |  6 +-
 .../IndexRepositoryImplJUnitTest.java           |  6 ++
 25 files changed, 239 insertions(+), 228 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
index ed83a76..6fe639b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
@@ -238,7 +238,7 @@ import com.sun.jna.Platform;
  * @author Darrel Schneider
  */
 @SuppressWarnings("deprecation")
-public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePerfStats, DistributionAdvisee, Extensible<Cache> {
+public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePerfStats, DistributionAdvisee {
   private static final Logger logger = LogService.getLogger();
   
   // moved *SERIAL_NUMBER stuff to DistributionAdvisor

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java
index 7c1fa8e..cf1a4dc 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/InternalCache.java
@@ -14,6 +14,7 @@ import com.gemstone.gemfire.cache.hdfs.internal.HDFSStoreImpl;
 import com.gemstone.gemfire.cache.hdfs.internal.hoplog.HDFSStoreDirector;
 import com.gemstone.gemfire.cache.query.internal.cq.CqService;
 import com.gemstone.gemfire.distributed.DistributedMember;
+import com.gemstone.gemfire.internal.cache.extension.Extensible;
 
 /**
  * The InternalCache interface is contract for implementing classes for defining internal cache operations that should
@@ -23,7 +24,7 @@ import com.gemstone.gemfire.distributed.DistributedMember;
  * @see com.gemstone.gemfire.cache.Cache
  * @since 7.0
  */
-public interface InternalCache extends Cache {
+public interface InternalCache extends Cache, Extensible<Cache> {
 
   public DistributedMember getMyId();
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java
index 04630ba..2e2ec2b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/xmlcache/CacheCreation.java
@@ -126,7 +126,7 @@ import com.gemstone.gemfire.pdx.internal.TypeRegistry;
  *
  * @since 3.0
  */
-public class CacheCreation implements InternalCache, Extensible<Cache> {
+public class CacheCreation implements InternalCache {
 
   /** The amount of time to wait for a distributed lock */
   private int lockTimeout = GemFireCacheImpl.DEFAULT_LOCK_TIMEOUT;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java
index 1775b40..55f1b3a 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryFactory.java
@@ -1,6 +1,5 @@
 package com.gemstone.gemfire.cache.lucene;
 
-import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.queryparser.classic.ParseException;
 
 /**
@@ -50,21 +49,6 @@ public interface LuceneQueryFactory {
   LuceneQueryFactory setProjectionFields(String... fieldNames);
   
   /**
-   * Create wrapper object for lucene's QueryParser object.
-   * The queryString is using lucene QueryParser's syntax. QueryParser is for easy-to-use 
-   * with human understandable syntax. 
-   *  
-   * @param regionName region name
-   * @param indexName index name
-   * @param queryString query string in lucene QueryParser's syntax
-   * @param analyzer lucene Analyzer to parse the queryString
-   * @return LuceneQuery object
-   * @throws ParseException
-   */
-  public LuceneQuery create(String indexName, String regionName, String queryString, 
-      Analyzer analyzer) throws ParseException;
-  
-  /**
    * Create wrapper object for lucene's QueryParser object using default standard analyzer.
    * The queryString is using lucene QueryParser's syntax. QueryParser is for easy-to-use 
    * with human understandable syntax. 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryProvider.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryProvider.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryProvider.java
index 767bfa8..a113fab 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryProvider.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneQueryProvider.java
@@ -17,7 +17,8 @@ import com.gemstone.gemfire.cache.query.QueryException;
 public interface LuceneQueryProvider extends Serializable {
   /**
    * @return A Lucene Query object which could be used for executing Lucene Search on indexed data
+   * @param The local lucene index the query is being constructed against.
    * @throws QueryException if the provider fails to construct the query object
    */
-  public Query getQuery() throws QueryException;
+  public Query getQuery(LuceneIndex index) throws QueryException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneServiceProvider.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneServiceProvider.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneServiceProvider.java
index b276b48..7d90b7d 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneServiceProvider.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/LuceneServiceProvider.java
@@ -1,6 +1,7 @@
 package com.gemstone.gemfire.cache.lucene;
 
 import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneService;
 import com.gemstone.gemfire.cache.lucene.internal.LuceneServiceImpl;
 import com.gemstone.gemfire.internal.cache.extension.Extensible;
 
@@ -17,7 +18,7 @@ public class LuceneServiceProvider {
   public static LuceneService get(Cache cache) {
     synchronized(LuceneService.class) {
       Extensible<Cache> extensible = (Extensible<Cache>) cache;
-      LuceneServiceImpl service = (LuceneServiceImpl) extensible.getExtensionPoint().getExtension(LuceneService.class);
+      InternalLuceneService service = (InternalLuceneService) extensible.getExtensionPoint().getExtension(LuceneService.class);
       if(service == null) {
         service = new LuceneServiceImpl(cache);
         extensible.getExtensionPoint().addExtension(LuceneService.class, service);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java
new file mode 100644
index 0000000..ab2c924
--- /dev/null
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneIndex.java
@@ -0,0 +1,10 @@
+package com.gemstone.gemfire.cache.lucene.internal;
+
+import com.gemstone.gemfire.cache.lucene.LuceneIndex;
+import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
+
+public interface InternalLuceneIndex extends LuceneIndex {
+  
+  public RepositoryManager getRepositoryManager();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneService.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneService.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneService.java
new file mode 100644
index 0000000..d09ef19
--- /dev/null
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/InternalLuceneService.java
@@ -0,0 +1,9 @@
+package com.gemstone.gemfire.cache.lucene.internal;
+
+import com.gemstone.gemfire.cache.Cache;
+import com.gemstone.gemfire.cache.lucene.LuceneService;
+import com.gemstone.gemfire.internal.cache.extension.Extension;
+
+public interface InternalLuceneService extends LuceneService, Extension<Cache> {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
index 799ef27..1a91292 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneIndexImpl.java
@@ -7,12 +7,11 @@ import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
 
 import com.gemstone.gemfire.cache.Region;
-import com.gemstone.gemfire.cache.lucene.LuceneIndex;
 import com.gemstone.gemfire.cache.lucene.internal.filesystem.ChunkKey;
 import com.gemstone.gemfire.cache.lucene.internal.filesystem.File;
 import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
 
-public abstract class LuceneIndexImpl implements LuceneIndex {
+public abstract class LuceneIndexImpl implements InternalLuceneIndex {
 
   static private final boolean CREATE_CACHE = Boolean.getBoolean("lucene.createCache");
   static private final boolean USE_FS = Boolean.getBoolean("lucene.useFileSystem");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryFactoryImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryFactoryImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryFactoryImpl.java
index f5d38bc..9210929 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryFactoryImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryFactoryImpl.java
@@ -15,9 +15,9 @@ import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
 
 public class LuceneQueryFactoryImpl implements LuceneQueryFactory {
-  private int limit_attr = DEFAULT_LIMIT;
-  private int pageSize_attr = DEFAULT_PAGESIZE;
-  private Set<String> projection_fields_attr = new HashSet<String>();
+  private int limit = DEFAULT_LIMIT;
+  private int pageSize = DEFAULT_PAGESIZE;
+  private Set<String> projectionFields = new HashSet<String>();
   
   /* reference to the index. One index could have multiple Queries, but one Query must belong
    * to one index
@@ -26,38 +26,25 @@ public class LuceneQueryFactoryImpl implements LuceneQueryFactory {
 
   @Override
   public LuceneQueryFactory setPageSize(int pageSize) {
-    this.pageSize_attr = pageSize;
+    this.pageSize = pageSize;
     return this;
   }
 
   @Override
   public LuceneQueryFactory setResultLimit(int limit) {
-    this.limit_attr = limit;
+    this.limit = limit;
     return this;
   }
 
   @Override
   public LuceneQuery create(String indexName, String regionName,
-      String queryString, Analyzer analyzer) throws ParseException {
-    QueryParser parser = new QueryParser(null, analyzer);
-    Query query = parser.parse(queryString);
-    LuceneQueryImpl luceneQuery = new LuceneQueryImpl(indexName, regionName, limit_attr, pageSize_attr, projection_fields_attr, query);
-    return luceneQuery;
-  }
-
-  @Override
-  public LuceneQuery create(String indexName, String regionName,
       String queryString) throws ParseException {
-    StandardAnalyzer analyzer = new StandardAnalyzer();
-    return create(indexName, regionName, queryString, analyzer);
+    return create(indexName, regionName, new StringQueryProvider(queryString));
   }
   
   public LuceneQuery create(String indexName, String regionName, LuceneQueryProvider provider) {
-//    LuceneQueryImpl luceneQuery = new LuceneQueryImpl(indexName, regionName, limit_attr, pageSize_attr, 
-//        resultType_attr, projection_fields_attr, query);
-//    return luceneQuery;
-    // TODO Auto-generated method stub
-    return null;
+    LuceneQueryImpl luceneQuery = new LuceneQueryImpl(indexName, regionName, provider, projectionFields, limit, pageSize);
+    return luceneQuery;
   }
   
 
@@ -69,7 +56,7 @@ public class LuceneQueryFactoryImpl implements LuceneQueryFactory {
   public LuceneQueryFactory setProjectionFields(String... fieldNames) {
     if (fieldNames != null) {
       for (String fieldName:fieldNames) {
-        this.projection_fields_attr.add(fieldName);
+        this.projectionFields.add(fieldName);
       }
     }
     return this;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryImpl.java
index e93692f..714df95 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneQueryImpl.java
@@ -6,6 +6,7 @@ import org.apache.lucene.search.Query;
 
 import com.gemstone.gemfire.cache.lucene.LuceneQuery;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
+import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryResults;
 
 public class LuceneQueryImpl implements LuceneQuery {
@@ -18,16 +19,16 @@ public class LuceneQueryImpl implements LuceneQuery {
   private Set<String> projectedFieldNames;
   
   /* the lucene Query object to be wrapped here */
-  private Query query;
+  private LuceneQueryProvider query;
   
-  LuceneQueryImpl(String indexName, String regionName, int limit, int pageSize, 
-      Set<String> projectionFieldNames, Query query) {
+  LuceneQueryImpl(String indexName, String regionName, LuceneQueryProvider provider, Set<String> projectionFields, 
+      int limit, int pageSize) {
     this.indexName = indexName;
     this.regionName = regionName;
     this.limit = limit;
     this.pageSize = pageSize;
-    this.projectedFieldNames = projectionFieldNames;
-    this.query = query;
+    this.projectedFieldNames = projectionFields;
+    this.query = provider;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
index 1d7178a..cb6e5fc 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImpl.java
@@ -14,7 +14,6 @@ import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.execute.FunctionService;
 import com.gemstone.gemfire.cache.lucene.LuceneIndex;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
-import com.gemstone.gemfire.cache.lucene.LuceneService;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.EntryScore;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.LuceneFunction;
 import com.gemstone.gemfire.cache.lucene.internal.distributed.LuceneFunctionContext;
@@ -28,7 +27,6 @@ import com.gemstone.gemfire.internal.DataSerializableFixedID;
 import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 import com.gemstone.gemfire.internal.cache.PartitionedRegion;
 import com.gemstone.gemfire.internal.cache.extension.Extensible;
-import com.gemstone.gemfire.internal.cache.extension.Extension;
 import com.gemstone.gemfire.internal.cache.xmlcache.XmlGenerator;
 import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
 import com.gemstone.gemfire.internal.logging.LogService;
@@ -40,7 +38,7 @@ import com.gemstone.gemfire.internal.logging.LogService;
  * 
  * @since 8.5
  */
-public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
+public class LuceneServiceImpl implements InternalLuceneService {
   private final Cache cache;
 
   private final HashMap<String, LuceneIndex> indexMap;
@@ -80,7 +78,7 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
     // for this API, set index to use the default StandardAnalyzer for each field
     index.setAnalyzer(null);
     index.initialize();
-    registerIndex(getUniqueIndexName(indexName, regionPath), index);
+    registerIndex(index);
     return index;
   }
   
@@ -90,6 +88,9 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
       logger.info("Data region "+regionPath+" not found");
       return null;
     }
+    //Convert the region name into a canonical form
+    
+    regionPath = dataregion.getFullPath();
     LuceneIndexImpl index = null;
     if (dataregion instanceof PartitionedRegion) {
       // partitioned region
@@ -103,7 +104,11 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
 
   @Override
   public LuceneIndex getIndex(String indexName, String regionPath) {
-    return indexMap.get(getUniqueIndexName(indexName, regionPath));
+    Region region = cache.getRegion(regionPath);
+    if(region == null) {
+      return null;
+    }
+    return indexMap.get(getUniqueIndexName(indexName, region.getFullPath()));
   }
 
   @Override
@@ -124,7 +129,7 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
     }
     index.setAnalyzer(analyzer);
     index.initialize();
-    registerIndex(getUniqueIndexName(indexName, regionPath), index);
+    registerIndex(index);
     return index;
   }
 
@@ -152,7 +157,8 @@ public class LuceneServiceImpl implements LuceneService, Extension<Cache> {
 
   }
   
-  public void registerIndex(final String regionAndIndex, LuceneIndex index){
+  public void registerIndex(LuceneIndex index){
+    String regionAndIndex = getUniqueIndexName(index.getName(), index.getRegionPath()); 
     if( !indexMap.containsKey( regionAndIndex )) {
       indexMap.put(regionAndIndex, index);
     }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManager.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManager.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManager.java
index 65c678c..91ad82c 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManager.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManager.java
@@ -11,15 +11,19 @@ import org.apache.lucene.index.IndexWriterConfig;
 
 import com.gemstone.gemfire.InternalGemFireError;
 import com.gemstone.gemfire.cache.Region;
+import com.gemstone.gemfire.cache.execute.RegionFunctionContext;
 import com.gemstone.gemfire.cache.lucene.internal.directory.RegionDirectory;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepository;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepositoryImpl;
 import com.gemstone.gemfire.cache.lucene.internal.repository.RepositoryManager;
 import com.gemstone.gemfire.cache.lucene.internal.repository.serializer.LuceneSerializer;
+import com.gemstone.gemfire.cache.partition.PartitionRegionHelper;
 import com.gemstone.gemfire.internal.cache.BucketNotFoundException;
 import com.gemstone.gemfire.internal.cache.BucketRegion;
 import com.gemstone.gemfire.internal.cache.LocalDataSet;
 import com.gemstone.gemfire.internal.cache.PartitionedRegion;
+import com.gemstone.gemfire.internal.cache.PartitionedRegionHelper;
+import com.gemstone.gemfire.internal.cache.execute.InternalRegionFunctionContext;
 import com.gemstone.gemfire.internal.util.concurrent.CopyOnWriteHashMap;
 
 /**
@@ -77,13 +81,10 @@ public class PartitionedRepositoryManager implements RepositoryManager {
   }
   
   @Override
-  public Collection<IndexRepository> getRepositories(Region region) throws BucketNotFoundException {
-    if(!(region instanceof LocalDataSet)) {
-      throw new IllegalStateException("Trying to find the repositories for a region which is not the local data set of a function");
-    }
+  public Collection<IndexRepository> getRepositories(RegionFunctionContext ctx) throws BucketNotFoundException {
     
-    LocalDataSet dataSet = (LocalDataSet) region;
-    Set<Integer> buckets = dataSet.getBucketSet();
+    Region<Object, Object> region = ctx.getDataSet();
+    Set<Integer> buckets = ((InternalRegionFunctionContext) ctx).getLocalBucketSet(region);
     ArrayList<IndexRepository> repos = new ArrayList<IndexRepository>(buckets.size());
     for(Integer bucketId : buckets) {
       BucketRegion userBucket = userRegion.getDataStore().getLocalBucketById(bucketId);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProvider.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProvider.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProvider.java
index 78a2f99..7e50bae 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProvider.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProvider.java
@@ -6,6 +6,7 @@ import java.io.IOException;
 
 import org.apache.logging.log4j.Logger;
 import org.apache.lucene.analysis.core.SimpleAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
 import org.apache.lucene.queryparser.classic.ParseException;
 import org.apache.lucene.search.Query;
@@ -29,37 +30,25 @@ public class StringQueryProvider implements LuceneQueryProvider, DataSerializabl
 
   // the following members hold input data and needs to be sent on wire
   private String query;
-  private String indexName;
-  private String regionPath;
 
   // the following members hold derived objects and need not be serialized
-  private Query luceneQuery;
-  private LuceneIndex index;
+  private transient Query luceneQuery;
 
   public StringQueryProvider() {
-    this(null, null);
+    this(null);
   }
 
-  public StringQueryProvider(LuceneIndex index, String query) {
+  public StringQueryProvider(String query) {
     this.query = query;
-    this.index = index;
-    if (index != null) {
-      this.indexName = index.getName();
-      this.regionPath = index.getRegionPath();
-    }
   }
 
   @Override
-  public synchronized Query getQuery() throws QueryException {
+  public synchronized Query getQuery(LuceneIndex index) throws QueryException {
     if (luceneQuery == null) {
-      String[] fields = null;
-      if (index != null) {
-        fields = index.getFieldNames();
-      } else {
-        // TODO get index from lucene query service
-      }
+      String[] fields = index.getFieldNames();
 
-      MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new SimpleAnalyzer());
+      //TODO  get the analyzer from the index
+      MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, new StandardAnalyzer());
       try {
         luceneQuery = parser.parse(query);
       } catch (ParseException e) {
@@ -77,20 +66,6 @@ public class StringQueryProvider implements LuceneQueryProvider, DataSerializabl
     return query;
   }
 
-  /**
-   * @return name of the index on which this query will be executed
-   */
-  public String getIndexName() {
-    return indexName;
-  }
-
-  /**
-   * @return path of the region on which this query will be executed
-   */
-  public String getRegionPath() {
-    return regionPath;
-  }
-
   @Override
   public Version[] getSerializationVersions() {
     return null;
@@ -104,14 +79,10 @@ public class StringQueryProvider implements LuceneQueryProvider, DataSerializabl
   @Override
   public void toData(DataOutput out) throws IOException {
     DataSerializer.writeString(query, out);
-    DataSerializer.writeString(index.getName(), out);
-    DataSerializer.writeString(index.getRegionPath(), out);
   }
 
   @Override
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {
     query = DataSerializer.readString(in);
-    this.indexName = DataSerializer.readString(in);
-    this.regionPath = DataSerializer.readString(in);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
index ca0e2d3..b8552fa 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunction.java
@@ -14,6 +14,9 @@ import com.gemstone.gemfire.cache.execute.RegionFunctionContext;
 import com.gemstone.gemfire.cache.execute.ResultSender;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
+import com.gemstone.gemfire.cache.lucene.LuceneService;
+import com.gemstone.gemfire.cache.lucene.LuceneServiceProvider;
+import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneIndex;
 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;
@@ -32,8 +35,6 @@ public class LuceneFunction extends FunctionAdapter {
 
   private static final Logger logger = LogService.getLogger();
 
-  private static RepositoryManager repoManager;
-
   @Override
   public void execute(FunctionContext context) {
     RegionFunctionContext ctx = (RegionFunctionContext) context;
@@ -52,10 +53,14 @@ public class LuceneFunction extends FunctionAdapter {
       resultSender.sendException(new IllegalArgumentException("Missing query provider"));
       return;
     }
+    
+    LuceneService service = LuceneServiceProvider.get(region.getCache());
+    InternalLuceneIndex index = (InternalLuceneIndex) service.getIndex(searchContext.getIndexName(), region.getFullPath());
+    RepositoryManager repoManager = index.getRepositoryManager();
 
     Query query = null;
     try {
-      query = queryProvider.getQuery();
+      query = queryProvider.getQuery(index);
     } catch (QueryException e) {
       resultSender.sendException(e);
       return;
@@ -65,19 +70,19 @@ public class LuceneFunction extends FunctionAdapter {
       logger.debug("Executing lucene query: {}, on region {}", query, region.getFullPath());
     }
 
+    int resultLimit = searchContext.getLimit();
     CollectorManager manager = (searchContext == null) ? null : searchContext.getCollectorManager();
     if (manager == null) {
-      int resultLimit = (searchContext == null ? LuceneQueryFactory.DEFAULT_LIMIT : searchContext.getLimit());
       manager = new TopEntriesCollectorManager(null, resultLimit);
     }
 
     Collection<IndexResultCollector> results = new ArrayList<>();
     try {
-      Collection<IndexRepository> repositories = getIndexRepositories(ctx, region);
+      Collection<IndexRepository> repositories = repoManager.getRepositories(ctx);
       for (IndexRepository repo : repositories) {
         IndexResultCollector collector = manager.newCollector(repo.toString());
         logger.debug("Executing search on repo: " + repo.toString());
-        repo.query(query, 0, collector);
+        repo.query(query, resultLimit, collector);
         results.add(collector);
       }
     } catch (IOException e) {
@@ -101,15 +106,6 @@ public class LuceneFunction extends FunctionAdapter {
     }
   }
 
-  private Collection<IndexRepository> getIndexRepositories(RegionFunctionContext ctx, Region region) throws BucketNotFoundException {
-    synchronized (LuceneFunction.class) {
-      return repoManager.getRepositories(region);
-    }
-  }
-
-  static synchronized void setRepositoryManager(RepositoryManager manager) {
-    repoManager = manager;
-  }
 
   @Override
   public String getId() {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContext.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContext.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContext.java
index feeb768..d36bcc2 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContext.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContext.java
@@ -18,23 +18,24 @@ import com.gemstone.gemfire.internal.Version;
 public class LuceneFunctionContext<C extends IndexResultCollector> implements DataSerializableFixedID {
   private CollectorManager<C> manager;
   private int limit;
-
-  LuceneQueryProvider queryProvider;
+  private LuceneQueryProvider queryProvider;
+  private String indexName;
 
   public LuceneFunctionContext() {
-    this(null, null);
+    this(null, null, null);
   }
 
-  public LuceneFunctionContext(LuceneQueryProvider provider) {
-    this(provider, null);
+  public LuceneFunctionContext(LuceneQueryProvider provider, String indexName) {
+    this(provider, indexName, null);
   }
 
-  public LuceneFunctionContext(LuceneQueryProvider provider, CollectorManager<C> manager) {
-    this(provider, manager, LuceneQueryFactory.DEFAULT_LIMIT);
+  public LuceneFunctionContext(LuceneQueryProvider provider, String indexName, CollectorManager<C> manager) {
+    this(provider, indexName, manager, LuceneQueryFactory.DEFAULT_LIMIT);
   }
 
-  public LuceneFunctionContext(LuceneQueryProvider provider, CollectorManager<C> manager, int limit) {
+  public LuceneFunctionContext(LuceneQueryProvider provider, String indexName, CollectorManager<C> manager, int limit) {
     this.queryProvider = provider;
+    this.indexName = indexName;
     this.manager = manager;
     this.limit = limit;
   }
@@ -47,6 +48,13 @@ public class LuceneFunctionContext<C extends IndexResultCollector> implements Da
   }
 
   /**
+   * Get the name of the index to query
+   */
+  public String getIndexName() {
+    return indexName;
+  }
+
+  /**
    * On each member, search query is executed on one or more {@link IndexRepository}s. A {@link CollectorManager} could
    * be provided to customize the way results from these repositories is collected and merged.
    * 
@@ -70,6 +78,7 @@ public class LuceneFunctionContext<C extends IndexResultCollector> implements Da
     out.writeInt(limit);
     DataSerializer.writeObject(queryProvider, out);
     DataSerializer.writeObject(manager, out);
+    DataSerializer.writeString(indexName, out);
   }
 
   @Override
@@ -77,6 +86,7 @@ public class LuceneFunctionContext<C extends IndexResultCollector> implements Da
     limit = in.readInt();
     queryProvider = DataSerializer.readObject(in);
     manager = DataSerializer.readObject(in);
+    this.indexName = DataSerializer.readString(in);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/repository/RepositoryManager.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/repository/RepositoryManager.java b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/repository/RepositoryManager.java
index b61e8be..cea4f89 100644
--- a/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/repository/RepositoryManager.java
+++ b/gemfire-lucene/src/main/java/com/gemstone/gemfire/cache/lucene/internal/repository/RepositoryManager.java
@@ -22,5 +22,5 @@ public interface RepositoryManager {
    * @return a collection of {@link IndexRepository} instances
    * @throws BucketNotFoundException if any of the requested buckets is not found on this member
    */
-  Collection<IndexRepository> getRepositories(Region localDataSet) throws BucketNotFoundException;
+  Collection<IndexRepository> getRepositories(RegionFunctionContext context) throws BucketNotFoundException;
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
index a7ed00d..10f4794 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/LuceneServiceImplJUnitTest.java
@@ -127,7 +127,7 @@ public class LuceneServiceImplJUnitTest {
     assertTrue(index1 instanceof LuceneIndexForPartitionedRegion);
     LuceneIndexForPartitionedRegion index1PR = (LuceneIndexForPartitionedRegion)index1;
     assertEquals("index1", index1.getName());
-    assertEquals("PR1", index1.getRegionPath());
+    assertEquals("/PR1", index1.getRegionPath());
     String[] fields1 = index1.getFieldNames();
     assertEquals(3, fields1.length);
     Analyzer analyzer = index1PR.getAnalyzer();
@@ -135,8 +135,8 @@ public class LuceneServiceImplJUnitTest {
     RepositoryManager RepositoryManager = index1PR.getRepositoryManager();
     assertTrue(RepositoryManager != null);
    
-    final String fileRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "PR1")+".files";
-    final String chunkRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "PR1")+".chunks";
+    final String fileRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "/PR1")+".files";
+    final String chunkRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "/PR1")+".chunks";
     PartitionedRegion filePR = (PartitionedRegion)cache.getRegion(fileRegionName);
     PartitionedRegion chunkPR = (PartitionedRegion)cache.getRegion(chunkRegionName);
     assertTrue(filePR != null);
@@ -160,7 +160,7 @@ public class LuceneServiceImplJUnitTest {
     assertTrue(index1 instanceof LuceneIndexForPartitionedRegion);
     LuceneIndexForPartitionedRegion index1PR = (LuceneIndexForPartitionedRegion)index1;
     assertEquals("index1", index1.getName());
-    assertEquals("PR1", index1.getRegionPath());
+    assertEquals("/PR1", index1.getRegionPath());
     String[] fields1 = index1.getFieldNames();
     assertEquals(3, fields1.length);
     Analyzer analyzer = index1PR.getAnalyzer();
@@ -168,8 +168,8 @@ public class LuceneServiceImplJUnitTest {
     RepositoryManager RepositoryManager = index1PR.getRepositoryManager();
     assertTrue(RepositoryManager != null);
    
-    final String fileRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "PR1")+".files";
-    final String chunkRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "PR1")+".chunks";
+    final String fileRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "/PR1")+".files";
+    final String chunkRegionName = LuceneServiceImpl.getUniqueIndexName("index1", "/PR1")+".chunks";
     PartitionedRegion filePR = (PartitionedRegion)cache.getRegion(fileRegionName);
     PartitionedRegion chunkPR = (PartitionedRegion)cache.getRegion(chunkRegionName);
     assertTrue(filePR != null);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
index a2cc75e..1225aa1 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/PartitionedRepositoryManagerJUnitTest.java
@@ -2,6 +2,7 @@ package com.gemstone.gemfire.cache.lucene.internal;
 
 import static org.junit.Assert.*;
 import static org.mockito.Matchers.*;
+import static org.mockito.Mockito.*;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -21,6 +22,7 @@ import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
+import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.lucene.internal.directory.RegionDirectory;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepository;
 import com.gemstone.gemfire.cache.lucene.internal.repository.IndexRepositoryImpl;
@@ -32,6 +34,7 @@ import com.gemstone.gemfire.internal.cache.LocalDataSet;
 import com.gemstone.gemfire.internal.cache.PartitionedRegion;
 import com.gemstone.gemfire.internal.cache.PartitionedRegion.RetryTimeKeeper;
 import com.gemstone.gemfire.internal.cache.PartitionedRegionDataStore;
+import com.gemstone.gemfire.internal.cache.execute.InternalRegionFunctionContext;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
@@ -147,8 +150,9 @@ public class PartitionedRepositoryManagerJUnitTest {
     BucketRegion mockBucket1 = getMockBucket(1);
 
     Set<Integer> buckets = new LinkedHashSet<Integer>(Arrays.asList(0, 1));
-    LocalDataSet ldr = new LocalDataSet(null, buckets);
-    Collection<IndexRepository> repos = repoManager.getRepositories(ldr);
+    InternalRegionFunctionContext ctx = Mockito.mock(InternalRegionFunctionContext.class);
+    Mockito.when(ctx.getLocalBucketSet((any(Region.class)))).thenReturn(buckets);
+    Collection<IndexRepository> repos = repoManager.getRepositories(ctx);
     assertEquals(2, repos.size());
 
     Iterator<IndexRepository> itr = repos.iterator();
@@ -173,9 +177,10 @@ public class PartitionedRepositoryManagerJUnitTest {
     BucketRegion mockBucket0 = getMockBucket(0);
 
     Set<Integer> buckets = new LinkedHashSet<Integer>(Arrays.asList(0, 1));
-    LocalDataSet ldr = new LocalDataSet(userRegion, buckets);
 
-    repoManager.getRepositories(ldr);
+    InternalRegionFunctionContext ctx = Mockito.mock(InternalRegionFunctionContext.class);
+    Mockito.when(ctx.getLocalBucketSet((any(Region.class)))).thenReturn(buckets);
+    repoManager.getRepositories(ctx);
   }
   
   private void checkRepository(IndexRepositoryImpl repo0, int bucketId) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProviderJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProviderJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProviderJUnitTest.java
index 078ae42..673fdf2 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProviderJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/StringQueryProviderJUnitTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
 import org.apache.lucene.search.Query;
 import org.junit.Assert;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 import org.mockito.Mockito;
@@ -31,41 +32,40 @@ public class StringQueryProviderJUnitTest {
 
   @Test
   public void testQueryConstruction() throws QueryException {
-    StringQueryProvider provider = new StringQueryProvider(null, "foo:bar");
-    Query query = provider.getQuery();
+    StringQueryProvider provider = new StringQueryProvider("foo:bar");
+    Query query = provider.getQuery(mockIndex);
     Assert.assertNotNull(query);
     assertEquals("foo:bar", query.toString());
   }
 
   @Test
   public void usesSearchableFieldsAsDefaults() throws QueryException {
-    StringQueryProvider provider = new StringQueryProvider(mockIndex, "findThis");
-    Query query = provider.getQuery();
+    StringQueryProvider provider = new StringQueryProvider("findThis");
+    Query query = provider.getQuery(mockIndex);
     Assert.assertNotNull(query);
     assertEquals("field-1:findthis field-2:findthis", query.toString());
   }
 
   @Test
+  @Ignore("Custom analyzer not yet supported, this is a duplicate test right now")
   public void usesCustomAnalyzer() throws QueryException {
-    StringQueryProvider provider = new StringQueryProvider(mockIndex, "findThis");
-    Query query = provider.getQuery();
+    StringQueryProvider provider = new StringQueryProvider("findThis");
+    Query query = provider.getQuery(mockIndex);
     Assert.assertNotNull(query);
     assertEquals("field-1:findthis field-2:findthis", query.toString());
   }
 
   @Test(expected = QueryException.class)
   public void errorsOnMalformedQueryString() throws QueryException {
-    StringQueryProvider provider = new StringQueryProvider(mockIndex, "invalid:lucene:query:string");
-    provider.getQuery();
+    StringQueryProvider provider = new StringQueryProvider("invalid:lucene:query:string");
+    provider.getQuery(mockIndex);
   }
   
   @Test
   public void testSerialization() {
     LuceneServiceImpl.registerDataSerializables();
-    StringQueryProvider provider = new StringQueryProvider(mockIndex, "text:search");
+    StringQueryProvider provider = new StringQueryProvider("text:search");
     StringQueryProvider copy = CopyHelper.deepCopy(provider);
     assertEquals("text:search", copy.getQueryString());
-    assertEquals(mockIndex.getName(), copy.getIndexName());
-    assertEquals(mockIndex.getRegionPath(), copy.getRegionPath());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContextJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContextJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContextJUnitTest.java
index 01a1690..98b48d8 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContextJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionContextJUnitTest.java
@@ -30,18 +30,16 @@ public class LuceneFunctionContextJUnitTest {
   public void testSerialization() {
     LuceneServiceImpl.registerDataSerializables();
 
-    LuceneIndex mockIndex = Mockito.mock(LuceneIndex.class);
-    Mockito.doReturn("mockIndex").when(mockIndex).getName();
-    LuceneQueryProvider provider = new StringQueryProvider(mockIndex, "text");
+    LuceneQueryProvider provider = new StringQueryProvider("text");
     CollectorManager<TopEntriesCollector> manager = new TopEntriesCollectorManager("test");
-    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(provider, manager, 123);
+    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(provider, "testIndex", manager, 123);
 
     LuceneFunctionContext<TopEntriesCollector> copy = CopyHelper.deepCopy(context);
     assertEquals(123, copy.getLimit());
     Assert.assertNotNull(copy.getQueryProvider());
     assertEquals("text", ((StringQueryProvider) copy.getQueryProvider()).getQueryString());
-    assertEquals("mockIndex", ((StringQueryProvider) copy.getQueryProvider()).getIndexName());
     assertEquals(TopEntriesCollectorManager.class, copy.getCollectorManager().getClass());
     assertEquals("test", ((TopEntriesCollectorManager) copy.getCollectorManager()).getId());
+    assertEquals("testIndex", copy.getIndexName());
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
index ba5f96a..6c37468 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionJUnitTest.java
@@ -1,6 +1,6 @@
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -23,26 +23,35 @@ 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.LuceneQueryFactory;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
+import com.gemstone.gemfire.cache.lucene.LuceneService;
+import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneIndex;
+import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneService;
 import com.gemstone.gemfire.cache.lucene.internal.StringQueryProvider;
 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;
 import com.gemstone.gemfire.cache.query.QueryException;
 import com.gemstone.gemfire.internal.cache.BucketNotFoundException;
+import com.gemstone.gemfire.internal.cache.InternalCache;
+import com.gemstone.gemfire.internal.cache.execute.InternalRegionFunctionContext;
+import com.gemstone.gemfire.internal.cache.extension.ExtensionPoint;
 import com.gemstone.gemfire.test.junit.categories.UnitTest;
 
 @Category(UnitTest.class)
 public class LuceneFunctionJUnitTest {
   Mockery mocker;
 
+  String regionPath = "/region";
+  String indexName = "index";
   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);
 
-  RegionFunctionContext mockContext;
+  InternalRegionFunctionContext mockContext;
   ResultSender<TopEntriesCollector> mockResultSender;
   Region<Object, Object> mockRegion;
 
@@ -50,12 +59,16 @@ public class LuceneFunctionJUnitTest {
   IndexRepository mockRepository1;
   IndexRepository mockRepository2;
   IndexResultCollector mockCollector;
+  InternalLuceneService mockService;
+  InternalLuceneIndex mockIndex;
 
   ArrayList<IndexRepository> repos;
   LuceneFunctionContext searchArgs;
   LuceneQueryProvider queryProvider;
   Query query;
 
+  private InternalCache mockCache;
+
   @Test
   public void testRepoQueryAndMerge() throws Exception {
     final AtomicReference<TopEntriesCollector> result = new AtomicReference<>();
@@ -66,13 +79,13 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getArguments();
         will(returnValue(searchArgs));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         will(returnValue(repos));
 
         oneOf(mockContext).getResultSender();
         will(returnValue(mockResultSender));
 
-        oneOf(mockRepository1).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository1).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
         will(new CustomAction("streamSearchResults") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
@@ -84,7 +97,7 @@ public class LuceneFunctionJUnitTest {
           }
         });
 
-        oneOf(mockRepository2).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository2).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
         will(new CustomAction("streamSearchResults") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
@@ -107,7 +120,6 @@ public class LuceneFunctionJUnitTest {
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
     List<EntryScore> hits = result.get().getEntries().getHits();
@@ -119,7 +131,7 @@ public class LuceneFunctionJUnitTest {
   public void testResultLimitClause() throws Exception {
     final AtomicReference<TopEntriesCollector> result = new AtomicReference<>();
 
-    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, null, 3);
+    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", null, 3);
 
     mocker.checking(new Expectations() {
       {
@@ -131,10 +143,10 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getResultSender();
         will(returnValue(mockResultSender));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         will(returnValue(repos));
 
-        oneOf(mockRepository1).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository1).query(with(query), with(equal(3)), with(any(IndexResultCollector.class)));
         will(new CustomAction("streamSearchResults") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
@@ -146,7 +158,7 @@ public class LuceneFunctionJUnitTest {
           }
         });
 
-        oneOf(mockRepository2).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository2).query(with(query), with(equal(3)), with(any(IndexResultCollector.class)));
         will(new CustomAction("streamSearchResults") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
@@ -169,7 +181,6 @@ public class LuceneFunctionJUnitTest {
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
     List<EntryScore> hits = result.get().getEntries().getHits();
@@ -180,7 +191,7 @@ public class LuceneFunctionJUnitTest {
   @Test
   public void injectCustomCollectorManager() throws Exception {
     final CollectorManager mockManager = mocker.mock(CollectorManager.class);
-    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, mockManager);
+    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager);
     mocker.checking(new Expectations() {
       {
         oneOf(mockContext).getDataSet();
@@ -190,7 +201,7 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getResultSender();
         will(returnValue(mockResultSender));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         repos.remove(0);
         will(returnValue(repos));
 
@@ -209,7 +220,7 @@ public class LuceneFunctionJUnitTest {
 
         oneOf(mockCollector).collect("key-2-1", .45f);
 
-        oneOf(mockRepository2).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository2).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
         will(new CustomAction("streamSearchResults") {
           @Override
           public Object invoke(Invocation invocation) throws Throwable {
@@ -224,7 +235,6 @@ public class LuceneFunctionJUnitTest {
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
   }
@@ -238,20 +248,19 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getArguments();
         will(returnValue(searchArgs));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         will(returnValue(repos));
 
         oneOf(mockContext).getResultSender();
         will(returnValue(mockResultSender));
         oneOf(mockResultSender).sendException(with(any(IOException.class)));
 
-        oneOf(mockRepository1).query(with(query), with(equal(0)), with(any(IndexResultCollector.class)));
+        oneOf(mockRepository1).query(with(query), with(equal(LuceneQueryFactory.DEFAULT_LIMIT)), with(any(IndexResultCollector.class)));
         will(throwException(new IOException()));
       }
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
   }
@@ -265,7 +274,7 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getArguments();
         will(returnValue(searchArgs));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         will(throwException(new BucketNotFoundException("")));
 
         oneOf(mockContext).getResultSender();
@@ -275,7 +284,6 @@ public class LuceneFunctionJUnitTest {
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
   }
@@ -283,7 +291,7 @@ public class LuceneFunctionJUnitTest {
   @Test
   public void testReduceError() throws Exception {
     final CollectorManager mockManager = mocker.mock(CollectorManager.class);
-    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, mockManager);
+    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName", mockManager);
     mocker.checking(new Expectations() {
       {
         oneOf(mockContext).getDataSet();
@@ -298,17 +306,16 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockManager).reduce(with(any(Collection.class)));
         will(throwException(new IOException()));
 
-        oneOf(mockRepoManager).getRepositories(mockRegion);
+        oneOf(mockRepoManager).getRepositories(mockContext);
         repos.remove(1);
         will(returnValue(repos));
 
-        oneOf(mockRepository1).query(query, 0, mockCollector);
+        oneOf(mockRepository1).query(query, LuceneQueryFactory.DEFAULT_LIMIT, mockCollector);
         oneOf(mockResultSender).sendException(with(any(IOException.class)));
       }
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
   }
@@ -316,7 +323,7 @@ public class LuceneFunctionJUnitTest {
   @Test
   public void queryProviderErrorIsHandled() throws Exception {
     queryProvider = mocker.mock(LuceneQueryProvider.class);
-    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, null);
+    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName");
     mocker.checking(new Expectations() {
       {
         oneOf(mockContext).getDataSet();
@@ -326,7 +333,7 @@ public class LuceneFunctionJUnitTest {
         oneOf(mockContext).getArguments();
         will(returnValue(searchArgs));
 
-        oneOf(queryProvider).getQuery();
+        oneOf(queryProvider).getQuery(mockIndex);
         will(throwException(new QueryException()));
 
         oneOf(mockResultSender).sendException(with(any(QueryException.class)));
@@ -334,7 +341,6 @@ public class LuceneFunctionJUnitTest {
     });
 
     LuceneFunction function = new LuceneFunction();
-    function.setRepositoryManager(mockRepoManager);
 
     function.execute(mockContext);
   }
@@ -354,7 +360,7 @@ public class LuceneFunctionJUnitTest {
       }
     };
 
-    mockContext = mocker.mock(RegionFunctionContext.class);
+    mockContext = mocker.mock(InternalRegionFunctionContext.class);
     mockResultSender = mocker.mock(ResultSender.class);
     mockRegion = mocker.mock(Region.class);
 
@@ -366,10 +372,35 @@ public class LuceneFunctionJUnitTest {
     repos = new ArrayList<IndexRepository>();
     repos.add(mockRepository1);
     repos.add(mockRepository2);
-
-    queryProvider = new StringQueryProvider(null, "gemfire:lucene");
-    query = queryProvider.getQuery();
-    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider);
+    
+    mockIndex = mocker.mock(InternalLuceneIndex.class);
+    mockService = mocker.mock(InternalLuceneService.class);
+    mockCache = mocker.mock(InternalCache.class);
+
+    queryProvider = new StringQueryProvider("gemfire:lucene");
+    
+    searchArgs = new LuceneFunctionContext<IndexResultCollector>(queryProvider, "indexName");
+    
+    final ExtensionPoint mockExtensionPoint = mocker.mock(ExtensionPoint.class);
+    mocker.checking(new Expectations() {{
+      allowing(mockRegion).getCache();
+      will(returnValue(mockCache));
+      allowing(mockRegion).getFullPath();
+      will(returnValue(regionPath));
+      allowing(mockCache).getExtensionPoint();
+      will(returnValue(mockExtensionPoint));
+      allowing(mockExtensionPoint).getExtension(LuceneService.class);
+      will(returnValue(mockService));
+      allowing(mockService).getIndex(with("indexName"), with(regionPath));
+      will(returnValue(mockIndex));
+      allowing(mockIndex).getRepositoryManager();
+      will(returnValue(mockRepoManager));
+      allowing(mockIndex).getFieldNames();
+      will(returnValue(new String[] {"gemfire"}));
+      
+    }});
+    
+    query = queryProvider.getQuery(mockIndex);
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
index a950c8d..939790d 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/LuceneFunctionReadPathDUnitTest.java
@@ -1,40 +1,30 @@
 package com.gemstone.gemfire.cache.lucene.internal.distributed;
 
-import static org.mockito.Matchers.*;
-import static org.mockito.Mockito.*;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.io.Serializable;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.lucene.search.Query;
 import org.junit.Assert;
 import org.junit.experimental.categories.Category;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
 
 import com.gemstone.gemfire.cache.Cache;
 import com.gemstone.gemfire.cache.Region;
 import com.gemstone.gemfire.cache.RegionFactory;
 import com.gemstone.gemfire.cache.RegionShortcut;
-import com.gemstone.gemfire.cache.execute.FunctionException;
 import com.gemstone.gemfire.cache.execute.FunctionService;
 import com.gemstone.gemfire.cache.execute.ResultCollector;
 import com.gemstone.gemfire.cache.lucene.LuceneIndex;
 import com.gemstone.gemfire.cache.lucene.LuceneQueryProvider;
 import com.gemstone.gemfire.cache.lucene.LuceneService;
 import com.gemstone.gemfire.cache.lucene.LuceneServiceProvider;
+import com.gemstone.gemfire.cache.lucene.internal.InternalLuceneIndex;
 import com.gemstone.gemfire.cache.lucene.internal.StringQueryProvider;
 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;
 import com.gemstone.gemfire.cache30.CacheTestCase;
 import com.gemstone.gemfire.internal.cache.BucketNotFoundException;
 import com.gemstone.gemfire.test.junit.categories.DistributedTest;
 
 import dunit.Host;
+import dunit.SerializableCallable;
 import dunit.SerializableRunnable;
 import dunit.VM;
 
@@ -61,43 +51,36 @@ public class LuceneFunctionReadPathDUnitTest extends CacheTestCase {
   }
 
   public void testEnd2EndFunctionExecution() {
-    SerializableRunnable createPartitionRegion = new SerializableRunnable("createRegion") {
+    SerializableCallable createPartitionRegion = new SerializableCallable("createRegion") {
       private static final long serialVersionUID = 1L;
 
-      public void run() {
+      public Object call() throws Exception {
         final Cache cache = getCache();
         assertNotNull(cache);
         RegionFactory<Object, Object> regionFactory = cache.createRegionFactory(RegionShortcut.PARTITION);
-        regionFactory.create(REGION_NAME);
+        Region<Object, Object> region = regionFactory.create(REGION_NAME);
+        
 
         LuceneService service = LuceneServiceProvider.get(cache);
-        service.createIndex(INDEX_NAME, REGION_NAME);
-
-        IndexRepository mockRepo = mock(IndexRepository.class);
-        Collection<IndexRepository> repos = new ArrayList<IndexRepository>();
-        repos.add(mockRepo);
-
-        RepositoryManager mockManager = mock(RepositoryManager.class);
-        // TODO avoid using repository manager mock. The manager choice depends on the region type
-        LuceneFunction.setRepositoryManager(mockManager);
+        InternalLuceneIndex index = (InternalLuceneIndex) service.createIndex(INDEX_NAME, REGION_NAME, "text");
+        
+        
+        region.put(1, new TestObject("hello world"));
+        region.put(2, new TestObject("goodbye world"));
+        
+        //TODO - the async event queue hasn't been hooked up, so we'll fake out
+        //writing the entry to the repository.
         try {
-          Mockito.doReturn(repos).when(mockManager).getRepositories(any(Region.class));
-        } catch (BucketNotFoundException e) {
-          fail("", e);
-        }
-
-        try {
-          Mockito.doAnswer(new Answer<Object>() {
-            public Object answer(InvocationOnMock invocation) {
-              Object[] args = invocation.getArguments();
-              IndexResultCollector collector = (IndexResultCollector) args[2];
-              collector.collect(cache.getDistributedSystem().getDistributedMember().getProcessId(), .1f);
-              return null;
-            }
-          }).when(mockRepo).query(any(Query.class), Mockito.anyInt(), any(IndexResultCollector.class));
-        } catch (IOException e) {
-          fail("", e);
+        IndexRepository repository1 = index.getRepositoryManager().getRepository(region, 1, null);
+        repository1.create(1, new TestObject("hello world"));
+        repository1.commit();
+        IndexRepository repository2 = index.getRepositoryManager().getRepository(region, 2, null);
+        repository2.create(2, new TestObject("hello world"));
+        repository2.commit();
+        } catch(BucketNotFoundException e) {
+          //thats ok, one of the data stores does not host these buckets.
         }
+        return null;
       }
     };
 
@@ -115,9 +98,9 @@ public class LuceneFunctionReadPathDUnitTest extends CacheTestCase {
 
         LuceneService service = LuceneServiceProvider.get(cache);
         LuceneIndex index = service.getIndex(INDEX_NAME, REGION_NAME);
-        LuceneQueryProvider provider = new StringQueryProvider(index, "text:search");
+        LuceneQueryProvider provider = new StringQueryProvider("text:world");
 
-        LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(provider,
+        LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(provider, index.getName(),
             new TopEntriesCollectorManager());
         TopEntriesFunctionCollector collector = new TopEntriesFunctionCollector();
 
@@ -135,4 +118,15 @@ public class LuceneFunctionReadPathDUnitTest extends CacheTestCase {
 
     server1.invoke(executeSearch);
   }
+  
+  private static class TestObject implements Serializable {
+    private String text;
+
+    public TestObject(String text) {
+      this.text = text;
+    }
+    
+    
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
index a66f2fc..5f7dc3d 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/distributed/TopEntriesFunctionCollectorJUnitTest.java
@@ -184,7 +184,7 @@ public class TopEntriesFunctionCollectorJUnitTest {
 
   @Test
   public void mergeShardAndLimitResults() throws Exception {
-    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, null, 3);
+    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, null, null, 3);
     
     TopEntriesFunctionCollector collector = new TopEntriesFunctionCollector(context);
     collector.addResult(null, result1);
@@ -226,7 +226,7 @@ public class TopEntriesFunctionCollectorJUnitTest {
           }
         }));
 
-    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, mockManager);
+    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, null, mockManager);
     TopEntriesFunctionCollector collector = new TopEntriesFunctionCollector(context);
     collector.addResult(null, result1);
     collector.addResult(null, result2);
@@ -255,7 +255,7 @@ public class TopEntriesFunctionCollectorJUnitTest {
     TopEntriesCollectorManager mockManager = mock(TopEntriesCollectorManager.class);
     Mockito.doThrow(new IOException()).when(mockManager).reduce(any(Collection.class));
 
-    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, mockManager);
+    LuceneFunctionContext<TopEntriesCollector> context = new LuceneFunctionContext<>(null, null, mockManager);
     TopEntriesFunctionCollector collector = new TopEntriesFunctionCollector(context);
     collector.endResults();
     collector.getResult();

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/8fb4ad7a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
index 3a25c97..ede267c 100644
--- a/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
+++ b/gemfire-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/internal/repository/IndexRepositoryImplJUnitTest.java
@@ -65,6 +65,12 @@ public class IndexRepositoryImplJUnitTest {
     repo.commit();
     
     checkQuery("Cream", "s", "key2", "key4");
+    checkQuery("NotARealWord", "s");
+  }
+  
+  @Test
+  public void testEmptyRepo() throws IOException, ParseException {
+    checkQuery("NotARealWord", "s");
   }
   
   @Test