You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2015/06/10 18:45:43 UTC

[21/35] incubator-usergrid git commit: new index strategy

new index strategy

Core Persistence compiling

passing tests for new locator strategy

remove index identifier impl, moved to core

remove index identifier

Change from static index to location strategy

add index naming strategies

refactor index cardinality in cp entitymanager

refactor index cardinality in cp entitymanager

refactor refresh for a single index

core passing

rest passing

rest back to a good failing state

add path to add index

add path to add index


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

Branch: refs/heads/rest-test-framework-token-fix
Commit: ab7c8e21c3d548146f3139c528330d7c482b4627
Parents: d4bb9ef
Author: Shawn Feldman <sf...@apache.org>
Authored: Fri Jun 5 14:20:54 2015 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Tue Jun 9 11:30:24 2015 -0600

----------------------------------------------------------------------
 .../usergrid/corepersistence/CoreModule.java    |   9 +-
 .../corepersistence/CpEntityManager.java        |  25 +-
 .../corepersistence/CpEntityManagerFactory.java |  66 +--
 .../corepersistence/CpManagerCache.java         |  19 +-
 .../corepersistence/CpRelationManager.java      |   6 +-
 .../usergrid/corepersistence/CpSetup.java       |  10 +-
 .../usergrid/corepersistence/ManagerCache.java  |   9 +-
 .../index/ApplicationIndexLocationStrategy.java | 113 +++++
 .../index/IndexLocationStrategyFactory.java     |  30 ++
 .../index/IndexLocationStrategyFactoryImpl.java |  49 +++
 .../corepersistence/index/IndexServiceImpl.java |  23 +-
 .../index/ManagementIndexLocationStrategy.java  |  84 ++++
 .../search/AbstractElasticSearchFilter.java     |  11 +-
 .../read/search/CandidateEntityFilter.java      |  10 +-
 .../pipeline/read/search/CandidateIdFilter.java |  16 +-
 .../read/search/SearchCollectionFilter.java     |   9 +-
 .../read/search/SearchConnectionFilter.java     |   7 +-
 .../usergrid/persistence/EntityManager.java     |  12 +
 .../persistence/EntityManagerFactory.java       |  26 +-
 .../org/apache/usergrid/CoreApplication.java    |  12 +-
 .../org/apache/usergrid/CoreITSetupImpl.java    |   5 +-
 .../org/apache/usergrid/TestEntityIndex.java    |   4 +-
 .../corepersistence/StaleIndexCleanupTest.java  |   6 +-
 .../index/AsyncIndexServiceTest.java            |  21 +-
 .../corepersistence/index/IndexNamingTest.java  |  83 ++++
 .../corepersistence/index/IndexServiceTest.java |  51 +--
 .../PerformanceEntityRebuildIndexTest.java      |   8 +-
 .../persistence/query/IteratingQueryIT.java     |   1 +
 .../index/ApplicationEntityIndex.java           |  76 ----
 .../SearchRequestBuilderStrategyV2.java         |   2 +-
 .../usergrid/persistence/index/EntityIndex.java |  46 +-
 .../persistence/index/EntityIndexFactory.java   |   7 +-
 .../usergrid/persistence/index/IndexAlias.java  |  47 ++
 .../usergrid/persistence/index/IndexFig.java    |   3 +
 .../persistence/index/IndexIdentifier.java      |  48 ---
 .../index/IndexLocationStrategy.java            |  47 ++
 .../persistence/index/IndexRefreshCommand.java  |   2 +-
 .../persistence/index/guice/IndexModule.java    |   4 -
 .../impl/EsApplicationEntityIndexImpl.java      | 428 -------------------
 .../index/impl/EsEntityIndexBatchImpl.java      |  15 +-
 .../index/impl/EsEntityIndexFactoryImpl.java    |  38 +-
 .../index/impl/EsEntityIndexImpl.java           | 376 +++++++++++++++-
 .../persistence/index/impl/IndexAlias.java      |  42 --
 .../persistence/index/impl/IndexCache.java      |   1 +
 .../index/impl/IndexIdentifierv1Impl.java       |  68 ---
 .../index/impl/IndexIdentifierv2Impl.java       |  65 ---
 .../index/impl/IndexLocationStrategy.java       |  33 --
 .../index/impl/IndexRefreshCommandImpl.java     |  11 +-
 .../impl/SearchRequestBuilderStrategy.java      |   1 +
 .../index/impl/ElasticSearchRule.java           |   9 -
 .../persistence/index/impl/EntityIndexTest.java | 230 ++++------
 .../persistence/index/impl/GeoPagingTest.java   |  46 +-
 .../index/impl/IndexLoadTestsIT.java            |  42 +-
 .../index/impl/TestIndexIdentifier.java         |  93 ++++
 .../src/test/resources/log4j.properties         |   2 +-
 .../usergrid/rest/AbstractContextResource.java  |   7 +-
 .../org/apache/usergrid/rest/IndexResource.java |  14 +-
 .../org/apache/usergrid/rest/RootResource.java  |   4 -
 .../rest/test/RefreshIndexResource.java         |   8 +-
 .../apache/usergrid/rest/IndexResourceIT.java   |  37 +-
 .../rest/test/resource2point0/ClientSetup.java  |   2 +-
 .../rest/test/resource2point0/RestClient.java   |   6 +-
 .../org/apache/usergrid/ServiceApplication.java |  16 +-
 .../org/apache/usergrid/ServiceITSetup.java     |   3 +-
 .../org/apache/usergrid/ServiceITSetupImpl.java |   6 +-
 .../migration/AppInfoMigrationPluginTest.java   |   6 +-
 .../apache/usergrid/management/EmailFlowIT.java |  10 +-
 .../usergrid/management/OrganizationIT.java     |   9 +-
 .../org/apache/usergrid/management/RoleIT.java  |   4 +-
 .../cassandra/ApplicationCreatorIT.java         |   2 +-
 .../cassandra/ManagementServiceIT.java          |  22 +-
 .../management/export/ExportServiceIT.java      |  12 +-
 .../management/importer/ImportCollectionIT.java |  10 +-
 .../usergrid/services/ConnectionsServiceIT.java |   4 +-
 .../usergrid/services/GroupServiceIT.java       |   4 +-
 .../usergrid/services/RolesServiceIT.java       |   2 +-
 .../usergrid/services/UsersServiceIT.java       |   2 +-
 .../apns/NotificationsServiceIT.java            |  99 +----
 .../gcm/NotificationsServiceIT.java             |   4 +-
 79 files changed, 1444 insertions(+), 1356 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
index b22a7cb..273e6bb 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
@@ -16,17 +16,13 @@
 package org.apache.usergrid.corepersistence;
 
 
+import org.apache.usergrid.corepersistence.index.*;
 import org.safehaus.guicyfig.GuicyFigModule;
 
 import org.apache.usergrid.corepersistence.asyncevents.AsyncEventService;
 import org.apache.usergrid.corepersistence.asyncevents.AsyncIndexProvider;
 import org.apache.usergrid.corepersistence.asyncevents.EventBuilder;
 import org.apache.usergrid.corepersistence.asyncevents.EventBuilderImpl;
-import org.apache.usergrid.corepersistence.index.IndexProcessorFig;
-import org.apache.usergrid.corepersistence.index.IndexService;
-import org.apache.usergrid.corepersistence.index.IndexServiceImpl;
-import org.apache.usergrid.corepersistence.index.ReIndexService;
-import org.apache.usergrid.corepersistence.index.ReIndexServiceImpl;
 import org.apache.usergrid.corepersistence.migration.AppInfoMigrationPlugin;
 import org.apache.usergrid.corepersistence.migration.CoreMigration;
 import org.apache.usergrid.corepersistence.migration.CoreMigrationPlugin;
@@ -146,8 +142,9 @@ public class CoreModule  extends AbstractModule {
 
         bind( ReIndexService.class).to( ReIndexServiceImpl.class );
 
+        bind( IndexLocationStrategyFactory.class ).to( IndexLocationStrategyFactoryImpl.class );
 
-        install( new GuicyFigModule( IndexProcessorFig.class ) );
+        install(new GuicyFigModule(IndexProcessorFig.class));
 
 
         install( new GuicyFigModule( ApplicationIdCacheFig.class ) );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
index 513f257..c18a514 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
@@ -34,6 +34,10 @@ import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.UUID;
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
+import org.apache.usergrid.persistence.index.AliasedEntityIndex;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+import org.apache.usergrid.persistence.index.IndexRefreshCommand;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
@@ -231,13 +235,14 @@ public class CpEntityManager implements EntityManager {
      * @param applicationId
      */
     public CpEntityManager( final CassandraService cass, final CounterUtils counterUtils, final AsyncEventService indexService, final ManagerCache managerCache,
-                            final MetricsFactory metricsFactory, final EntityManagerFig entityManagerFig,
+                            final MetricsFactory metricsFactory,
+                            final EntityManagerFig entityManagerFig,
                             final PipelineBuilderFactory pipelineBuilderFactory ,
-                            final GraphManagerFactory graphManagerFactory,final UUID applicationId ) {
+                            final GraphManagerFactory graphManagerFactory,
+                            final UUID applicationId ) {
 
         this.entityManagerFig = entityManagerFig;
 
-
         Preconditions.checkNotNull( cass, "cass must not be null" );
         Preconditions.checkNotNull( counterUtils, "counterUtils must not be null" );
         Preconditions.checkNotNull( managerCache, "managerCache must not be null" );
@@ -2909,6 +2914,20 @@ public class CpEntityManager implements EntityManager {
     }
 
 
+    @Override
+    public void addIndex(final String indexSuffix,final int shards,final int replicas, final String writeConsistency){
+        managerCache.getEntityIndex(applicationScope).addIndex( indexSuffix, shards, replicas, writeConsistency);
+    }
+
+    /**
+     * TODO, these 3 methods are super janky.  During refactoring we should clean this model up
+     */
+    public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex() {
+
+        // refresh special indexes without calling EntityManager refresh because stack overflow
+
+        return managerCache.getEntityIndex(applicationScope).refreshAsync().toBlocking().first();
+    }
 
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index 713a2da..6ce17f0 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -26,9 +26,11 @@ import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.corepersistence.index.ReIndexRequestBuilder;
 import org.apache.usergrid.persistence.*;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdge;
+import org.apache.usergrid.persistence.index.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeansException;
@@ -60,10 +62,6 @@ import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
 import org.apache.usergrid.persistence.graph.SearchByEdgeType;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
-import org.apache.usergrid.persistence.index.EntityIndex;
-import org.apache.usergrid.persistence.index.EntityIndexFactory;
-import org.apache.usergrid.persistence.index.IndexRefreshCommand;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
@@ -93,16 +91,12 @@ import static org.apache.usergrid.persistence.Schema.TYPE_APPLICATION;
 public class CpEntityManagerFactory implements EntityManagerFactory, ApplicationContextAware {
 
     private static final Logger logger = LoggerFactory.getLogger( CpEntityManagerFactory.class );
-    private final EntityIndexFactory entityIndexFactory;
     private final EntityManagerFig entityManagerFig;
 
     private ApplicationContext applicationContext;
 
     private Setup setup = null;
 
-    /** Have we already initialized the index for the management app? */
-    private AtomicBoolean indexInitialized = new AtomicBoolean(  );
-
     // cache of already instantiated entity managers
     private LoadingCache<UUID, EntityManager> entityManagers
         = CacheBuilder.newBuilder().maximumSize(100).build(new CacheLoader<UUID, EntityManager>() {
@@ -119,7 +113,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     private CounterUtils counterUtils;
     private Injector injector;
     private final ReIndexService reIndexService;
-    private final EntityIndex entityIndex;
     private final MetricsFactory metricsFactory;
     private final AsyncEventService indexService;
     private final PipelineBuilderFactory pipelineBuilderFactory;
@@ -133,8 +126,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         this.injector = injector;
         this.reIndexService = injector.getInstance(ReIndexService.class);
         this.entityManagerFig = injector.getInstance(EntityManagerFig.class);
-        this.entityIndex = injector.getInstance(EntityIndex.class);
-        this.entityIndexFactory = injector.getInstance(EntityIndexFactory.class);
         this.managerCache = injector.getInstance( ManagerCache.class );
         this.metricsFactory = injector.getInstance( MetricsFactory.class );
         this.indexService = injector.getInstance( AsyncEventService.class );
@@ -143,7 +134,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         this.applicationIdCache = injector.getInstance(ApplicationIdCacheFactory.class).getInstance(
             getManagementEntityManager() );
 
-
     }
 
 
@@ -267,7 +257,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
         EntityManager appEm = getEntityManager(applicationId);
         appEm.create(applicationId, TYPE_APPLICATION, properties);
         appEm.resetRoles();
-     //   entityIndex.refreshAsync();//.toBlocking().last();
 
 
         // create application info entity in the management app
@@ -383,7 +372,7 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
         }
         final Id managementAppId = CpNamingUtils.getManagementApplicationId();
-        final ApplicationEntityIndex aei = entityIndexFactory.createApplicationEntityIndex(applicationScope);
+        final AliasedEntityIndex aei = getManagementIndex();
         final GraphManager managementGraphManager = managerCache.getGraphManager(managementAppScope);
         final Edge createEdge = CpNamingUtils.createCollectionEdge(managementAppId, collectionToName, applicationId);
 
@@ -405,7 +394,8 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
                         managementEm.delete(oldAppEntity);
                         applicationIdCache.evictAppId(oldAppEntity.getName());
                     }
-                    entityIndex.refreshAsync().toBlocking().last();
+                    AliasedEntityIndex ei = getManagementIndex();
+                    ei.refreshAsync().toBlocking().last();
                 } catch (Exception e) {
                     throw new RuntimeException(e);
                 }
@@ -670,28 +660,17 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     /**
      * TODO, these 3 methods are super janky.  During refactoring we should clean this model up
      */
-    public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex() {
-
-        // refresh special indexes without calling EntityManager refresh because stack overflow
-        maybeCreateIndexes();
-
-        return entityIndex.refreshAsync().toBlocking().first();
+    public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex(UUID applicationId) {
+        return getEntityManager(applicationId).refreshIndex();
     }
 
-    private void maybeCreateIndexes() {
-        if ( indexInitialized.getAndSet( true ) ) {
-            return;
-        }
-
-//        entityIndex.initializeIndex();
-    }
 
 
-    private List<ApplicationEntityIndex> getManagementIndexes() {
+    private AliasedEntityIndex getManagementIndex() {
 
-        return Arrays.asList(
+        return
             managerCache.getEntityIndex( // management app
-                CpNamingUtils.getApplicationScope(getManagementAppId())));
+                CpNamingUtils.getApplicationScope(getManagementAppId()));
     }
 
 
@@ -713,11 +692,6 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
 
 
     @Override
-    public void addIndex(final String indexSuffix,final int shards,final int replicas, final String writeConsistency){
-        entityIndex.addIndex( indexSuffix, shards, replicas, writeConsistency);
-    }
-
-    @Override
     public Health getEntityStoreHealth() {
 
         // could use any collection scope here, does not matter
@@ -728,27 +702,15 @@ public class CpEntityManagerFactory implements EntityManagerFactory, Application
     }
 
 
-    @Override
-    public UUID createApplication(String organizationName, String name) throws Exception {
-        throw new UnsupportedOperationException("Not supported in v2");
-    }
-
 
     @Override
-    public UUID createApplication(
-        String organizationName, String name, Map<String, Object> properties) throws Exception {
-        throw new UnsupportedOperationException("Not supported in v2");
-    }
+    public Health getIndexHealth() {
 
-    @Override
-    public UUID initializeApplication(
-        String orgName, UUID appId, String appName, Map<String, Object> props) throws Exception {
-        throw new UnsupportedOperationException("Not supported in v2");
+       return getManagementIndex().getIndexHealth();
     }
 
-
     @Override
-    public Health getIndexHealth() {
-        return entityIndex.getIndexHealth();
+    public void initializeManagementIndex(){
+        getManagementIndex().initialize();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpManagerCache.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpManagerCache.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpManagerCache.java
index f4fee0c..bb02449 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpManagerCache.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpManagerCache.java
@@ -16,13 +16,16 @@
 package org.apache.usergrid.corepersistence;
 
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.collection.EntityCollectionManager;
 import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
+import org.apache.usergrid.persistence.index.AliasedEntityIndex;
+import org.apache.usergrid.persistence.index.EntityIndex;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
 import org.apache.usergrid.persistence.map.MapManager;
 import org.apache.usergrid.persistence.map.MapManagerFactory;
 import org.apache.usergrid.persistence.map.MapScope;
@@ -39,18 +42,23 @@ public class CpManagerCache implements ManagerCache {
     private final EntityIndexFactory eif;
     private final GraphManagerFactory gmf;
     private final MapManagerFactory mmf;
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
 
     // TODO: consider making these cache sizes and timeouts configurable
 
 
     @Inject
-    public CpManagerCache( final EntityCollectionManagerFactory ecmf, final EntityIndexFactory eif,
-                           final GraphManagerFactory gmf, final MapManagerFactory mmf ) {
+    public CpManagerCache( final EntityCollectionManagerFactory ecmf,
+                           final EntityIndexFactory eif,
+                           final GraphManagerFactory gmf,
+                           final MapManagerFactory mmf,
+                           final IndexLocationStrategyFactory indexLocationStrategyFactory) {
 
         this.ecmf = ecmf;
         this.eif = eif;
         this.gmf = gmf;
         this.mmf = mmf;
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
     }
 
 
@@ -62,8 +70,9 @@ public class CpManagerCache implements ManagerCache {
 
 
     @Override
-    public ApplicationEntityIndex getEntityIndex( ApplicationScope appScope ) {
-        return eif.createApplicationEntityIndex( appScope );
+    public AliasedEntityIndex getEntityIndex( ApplicationScope applicationScope) {
+        IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope);
+        return eif.createEntityIndex( indexLocationStrategy );
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
index c717c5b..96c792c 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import org.apache.usergrid.persistence.index.AliasedEntityIndex;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
@@ -64,7 +65,6 @@ import org.apache.usergrid.persistence.graph.impl.SimpleEdge;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdge;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
 import org.apache.usergrid.persistence.graph.impl.SimpleSearchEdgeType;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
 import org.apache.usergrid.persistence.index.EntityIndexBatch;
 import org.apache.usergrid.persistence.index.IndexEdge;
 import org.apache.usergrid.persistence.index.SearchEdge;
@@ -530,7 +530,7 @@ public class CpRelationManager implements RelationManager {
          *
          */
 
-        final ApplicationEntityIndex ei = managerCache.getEntityIndex( applicationScope );
+        final AliasedEntityIndex ei = managerCache.getEntityIndex( applicationScope );
         final EntityIndexBatch batch = ei.createBatch();
 
         // remove item from collection index
@@ -699,7 +699,7 @@ public class CpRelationManager implements RelationManager {
         GraphManager gm = managerCache.getGraphManager( applicationScope );
         gm.writeEdge( edge ).toBlocking().last();
 
-        ApplicationEntityIndex ei = managerCache.getEntityIndex( applicationScope );
+        AliasedEntityIndex ei = managerCache.getEntityIndex( applicationScope );
         EntityIndexBatch batch = ei.createBatch();
 
         // Index the new connection in app|source|type context

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
index d3a1dcc..aace825 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpSetup.java
@@ -20,12 +20,13 @@ package org.apache.usergrid.corepersistence;
 import java.util.UUID;
 
 import com.google.inject.Binding;
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
 import org.apache.usergrid.persistence.index.EntityIndex;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -72,7 +73,6 @@ public class CpSetup implements Setup {
     private final CassandraService cass;
 
     private final EntityManagerFactory emf;
-    private final EntityIndex entityIndex;
 
 
     /**
@@ -80,11 +80,11 @@ public class CpSetup implements Setup {
      *
      * @param emf the emf
      */
-    public CpSetup( final EntityManagerFactory emf, final CassandraService cassandraService, final Injector injector ) {
+    public CpSetup( final EntityManagerFactory emf,
+                    final CassandraService cassandraService, final Injector injector ) {
         this.emf = emf;
         this.cass = cassandraService;
         this.injector = injector;
-        this.entityIndex = injector.getInstance(EntityIndex.class);
 
     }
 
@@ -93,7 +93,7 @@ public class CpSetup implements Setup {
     public void init() throws Exception {
         //a no op, creating the injector creates the connections
         //init our index if required
-        this.entityIndex.initialize();
+        this.emf.initializeManagementIndex();
         setupStaticKeyspace();
         setupSystemKeyspace();
         createDefaultApplications();

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/ManagerCache.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/ManagerCache.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/ManagerCache.java
index dfa62fb..0bd198b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/ManagerCache.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/ManagerCache.java
@@ -23,7 +23,8 @@ package org.apache.usergrid.corepersistence;
 import org.apache.usergrid.persistence.collection.EntityCollectionManager;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.graph.GraphManager;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
+import org.apache.usergrid.persistence.index.AliasedEntityIndex;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
 import org.apache.usergrid.persistence.map.MapManager;
 import org.apache.usergrid.persistence.map.MapScope;
 
@@ -41,12 +42,12 @@ public interface ManagerCache {
     EntityCollectionManager getEntityCollectionManager( ApplicationScope scope );
 
     /**
-     * Get the entity index for the specified app scope
+     * Get the entity index for the specified location strategy
      *
-     * @param appScope
+     * @param applicationScope
      * @return
      */
-    ApplicationEntityIndex getEntityIndex( ApplicationScope appScope );
+    AliasedEntityIndex getEntityIndex( ApplicationScope applicationScope );
 
     /**
      * Get the graph manager for the graph scope

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
new file mode 100644
index 0000000..cad7e10
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ApplicationIndexLocationStrategy.java
@@ -0,0 +1,113 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.corepersistence.index;
+
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.index.IndexAlias;
+import org.apache.usergrid.persistence.index.IndexFig;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+import org.apache.usergrid.utils.StringUtils;
+
+/**
+ * Classy class class.
+ */
+class ApplicationIndexLocationStrategy implements IndexLocationStrategy {
+    private final CassandraFig cassandraFig;
+    private final IndexFig indexFig;
+    private final ApplicationScope applicationScope;
+    private final String prefix;
+
+    public ApplicationIndexLocationStrategy(final CassandraFig cassandraFig,
+                                            final IndexFig indexFig,
+                                            final ApplicationScope applicationScope){
+
+        this.cassandraFig = cassandraFig;
+        this.indexFig = indexFig;
+        this.applicationScope = applicationScope;
+        this.prefix = getPrefix();
+    }
+
+    private String getPrefix() {
+        //remove usergrid
+        final String indexPrefixConfig = StringUtils.isNotEmpty(indexFig.getIndexPrefix())
+            ? indexFig.getIndexPrefix().toLowerCase()  ////use lowercase value
+            : ""; // default to something so its not null
+        final String keyspaceName = cassandraFig.getApplicationKeyspace().toLowerCase();
+        //check for repetition
+        final boolean removePrefix = indexPrefixConfig.length()==0 || keyspaceName.contains(indexPrefixConfig) ;
+        return !removePrefix
+            ? indexPrefixConfig + "_" + keyspaceName
+            : keyspaceName;
+    }
+
+    /**
+     * Get the alias name
+     * @return
+     */
+    @Override
+    public IndexAlias getAlias() {
+        return new IndexAlias(indexFig,prefix);
+    }
+
+    /**
+     * Get index name, send in additional parameter to add incremental indexes
+     * @param suffix
+     * @return
+     */
+    @Override
+    public String getIndex(String suffix) {
+        if (suffix != null) {
+            return prefix + "_" + suffix;
+        } else {
+            return prefix;
+        }
+    }
+
+
+    @Override
+    public String toString() {
+        return "index id: "+prefix;
+    }
+
+    @Override
+    public ApplicationScope getApplicationScope() {
+        return applicationScope;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ApplicationIndexLocationStrategy that = (ApplicationIndexLocationStrategy) o;
+
+        if (!applicationScope.equals(that.applicationScope)) return false;
+        return prefix.equals(that.prefix);
+
+    }
+
+    @Override
+    public int hashCode() {
+        int result = applicationScope.hashCode();
+        result = 31 * result + prefix.hashCode();
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactory.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactory.java
new file mode 100644
index 0000000..d30dc6b
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactory.java
@@ -0,0 +1,30 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.corepersistence.index;
+
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+
+/**
+ * Retrieve index locations by app scope
+ */
+public interface IndexLocationStrategyFactory {
+    IndexLocationStrategy getIndexLocationStrategy(ApplicationScope applicationScope);
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
new file mode 100644
index 0000000..40325c3
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexLocationStrategyFactoryImpl.java
@@ -0,0 +1,49 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.corepersistence.index;
+
+import com.google.inject.Inject;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.index.IndexFig;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+
+/**
+ * Parse app id and get the correct strategy
+ */
+public class IndexLocationStrategyFactoryImpl implements IndexLocationStrategyFactory {
+    private final CassandraFig cassandraFig;
+    private final IndexFig indexFig;
+
+    @Inject
+    public IndexLocationStrategyFactoryImpl(final CassandraFig cassandraFig, final IndexFig indexFig){
+
+        this.cassandraFig = cassandraFig;
+        this.indexFig = indexFig;
+    }
+    public IndexLocationStrategy getIndexLocationStrategy(ApplicationScope applicationScope){
+        if(CpNamingUtils.getManagementApplicationId().equals(applicationScope.getApplication())){
+            return new ManagementIndexLocationStrategy(indexFig);
+        }
+        return new ApplicationIndexLocationStrategy(cassandraFig,indexFig,applicationScope);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
index 96b0792..b8531f8 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexServiceImpl.java
@@ -23,6 +23,7 @@ package org.apache.usergrid.corepersistence.index;
 import java.util.Iterator;
 import java.util.UUID;
 
+import org.apache.usergrid.persistence.index.*;
 import org.apache.usergrid.utils.UUIDUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,24 +32,14 @@ import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
 import org.apache.usergrid.persistence.core.metrics.ObservableTimer;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
-import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.graph.Edge;
 import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
 import org.apache.usergrid.persistence.graph.impl.SimpleEdge;
 import org.apache.usergrid.persistence.graph.serialization.EdgesObservable;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
-import org.apache.usergrid.persistence.index.CandidateResult;
-import org.apache.usergrid.persistence.index.CandidateResults;
-import org.apache.usergrid.persistence.index.EntityIndexBatch;
-import org.apache.usergrid.persistence.index.EntityIndexFactory;
-import org.apache.usergrid.persistence.index.IndexEdge;
-import org.apache.usergrid.persistence.index.IndexFig;
-import org.apache.usergrid.persistence.index.SearchEdge;
 import org.apache.usergrid.persistence.index.impl.IndexOperationMessage;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.schema.CollectionInfo;
 import org.apache.usergrid.utils.InflectionUtils;
 
 import com.codahale.metrics.Timer;
@@ -76,17 +67,19 @@ public class IndexServiceImpl implements IndexService {
     private final EntityIndexFactory entityIndexFactory;
     private final EdgesObservable edgesObservable;
     private final IndexFig indexFig;
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
     private final Timer indexTimer;
     private final Timer addTimer;
 
 
     @Inject
     public IndexServiceImpl( final GraphManagerFactory graphManagerFactory, final EntityIndexFactory entityIndexFactory,
-                             final EdgesObservable edgesObservable, final IndexFig indexFig, final MetricsFactory metricsFactory ) {
+                             final EdgesObservable edgesObservable, final IndexFig indexFig, final IndexLocationStrategyFactory indexLocationStrategyFactory, final MetricsFactory metricsFactory ) {
         this.graphManagerFactory = graphManagerFactory;
         this.entityIndexFactory = entityIndexFactory;
         this.edgesObservable = edgesObservable;
         this.indexFig = indexFig;
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
         this.indexTimer = metricsFactory.getTimer( IndexServiceImpl.class, "index.update_all");
         this.addTimer = metricsFactory.getTimer( IndexServiceImpl.class, "index.add" );
     }
@@ -97,7 +90,7 @@ public class IndexServiceImpl implements IndexService {
                                                           final Entity entity ) {
         //bootstrap the lower modules from their caches
         final GraphManager gm = graphManagerFactory.createEdgeManager( applicationScope );
-        final ApplicationEntityIndex ei = entityIndexFactory.createApplicationEntityIndex( applicationScope );
+        final AliasedEntityIndex ei = entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope));
 
 
         final Id entityId = entity.getId();
@@ -145,7 +138,7 @@ public class IndexServiceImpl implements IndexService {
             throw new IllegalArgumentException("target not equal to entity + "+entity.getId());
         } ).flatMap( indexEdge -> {
 
-            final ApplicationEntityIndex ei = entityIndexFactory.createApplicationEntityIndex( applicationScope );
+            final AliasedEntityIndex ei = entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope) );
 
             final EntityIndexBatch batch = ei.createBatch();
 
@@ -172,7 +165,7 @@ public class IndexServiceImpl implements IndexService {
 
         final Observable<IndexOperationMessage> batches =
             Observable.just( edge ).flatMap( edgeValue -> {
-                final ApplicationEntityIndex ei = entityIndexFactory.createApplicationEntityIndex( applicationScope );
+                final AliasedEntityIndex ei = entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope) );
                 EntityIndexBatch batch = ei.createBatch();
 
 
@@ -209,7 +202,7 @@ public class IndexServiceImpl implements IndexService {
                                                                   final Id entityId, final UUID markedVersion ) {
 
         //bootstrap the lower modules from their caches
-        final ApplicationEntityIndex ei = entityIndexFactory.createApplicationEntityIndex( applicationScope );
+        final AliasedEntityIndex ei = entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope) );
 
         CandidateResults crs = ei.getAllEntityVersionsBeforeMarkedVersion( entityId, markedVersion );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
new file mode 100644
index 0000000..5dbaa54
--- /dev/null
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ManagementIndexLocationStrategy.java
@@ -0,0 +1,84 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.corepersistence.index;
+
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
+import org.apache.usergrid.persistence.index.IndexAlias;
+import org.apache.usergrid.persistence.index.IndexFig;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.utils.StringUtils;
+
+/**
+ * Classy class class.
+ */
+class ManagementIndexLocationStrategy implements IndexLocationStrategy {
+    private final Id managementAppId;
+    private final String prefix;
+    private final IndexFig indexFig;
+
+    public ManagementIndexLocationStrategy(IndexFig indexFig){
+        this.indexFig = indexFig;
+        this.managementAppId = CpNamingUtils.getManagementApplicationId();
+        //remove usergrid
+        this.prefix = indexFig.getManagementAppIndexName().toLowerCase();  ////use lowercase value
+
+
+    }
+    @Override
+    public IndexAlias getAlias() {
+        return new IndexAlias(indexFig,prefix);
+    }
+
+    @Override
+    public String getIndex(String suffix) {
+        if (suffix != null) {
+            return prefix + "_" + suffix;
+        } else {
+            return prefix;
+        }
+    }
+
+    @Override
+    public ApplicationScope getApplicationScope() {
+        return new ApplicationScopeImpl(managementAppId);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ManagementIndexLocationStrategy that = (ManagementIndexLocationStrategy) o;
+
+        if (!managementAppId.equals(that.managementAppId)) return false;
+        return prefix.equals(that.prefix);
+
+    }
+
+    @Override
+    public int hashCode() {
+        int result = managementAppId.hashCode();
+        result = 31 * result + prefix.hashCode();
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java
index 2fdffd2..40a96cf 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/AbstractElasticSearchFilter.java
@@ -20,6 +20,7 @@
 package org.apache.usergrid.corepersistence.pipeline.read.search;
 
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.index.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -47,6 +48,7 @@ public abstract class AbstractElasticSearchFilter extends AbstractPathFilter<Id,
     private static final Logger log = LoggerFactory.getLogger( AbstractElasticSearchFilter.class );
 
     private final EntityIndexFactory entityIndexFactory;
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
     private final String query;
     private final Timer searchTimer;
 
@@ -55,8 +57,11 @@ public abstract class AbstractElasticSearchFilter extends AbstractPathFilter<Id,
      * Create a new instance of our command
      */
     public AbstractElasticSearchFilter( final EntityIndexFactory entityIndexFactory,
-                                        final MetricsFactory metricsFactory, final String query ) {
+                                        final MetricsFactory metricsFactory,
+                                        final IndexLocationStrategyFactory indexLocationStrategyFactory,
+                                        final String query ) {
         this.entityIndexFactory = entityIndexFactory;
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
         this.query = query;
         this.searchTimer = metricsFactory.getTimer( AbstractElasticSearchFilter.class, "query" );
     }
@@ -66,8 +71,8 @@ public abstract class AbstractElasticSearchFilter extends AbstractPathFilter<Id,
     public Observable<FilterResult<Candidate>> call( final Observable<FilterResult<Id>> observable ) {
 
         //get the graph manager
-        final ApplicationEntityIndex applicationEntityIndex =
-            entityIndexFactory.createApplicationEntityIndex( pipelineContext.getApplicationScope() );
+        final AliasedEntityIndex applicationEntityIndex =
+            entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(pipelineContext.getApplicationScope()) );
 
 
         final int limit = pipelineContext.getLimit();

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
index d8a9c68..5303bf5 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateEntityFilter.java
@@ -22,6 +22,7 @@ package org.apache.usergrid.corepersistence.pipeline.read.search;
 
 import java.util.*;
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.index.*;
 import org.apache.usergrid.persistence.model.field.Field;
 import org.slf4j.Logger;
@@ -54,13 +55,16 @@ public class CandidateEntityFilter extends AbstractFilter<FilterResult<Candidate
 
     private final EntityCollectionManagerFactory entityCollectionManagerFactory;
     private final EntityIndexFactory entityIndexFactory;
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
 
 
     @Inject
     public CandidateEntityFilter( final EntityCollectionManagerFactory entityCollectionManagerFactory,
-                                  final EntityIndexFactory entityIndexFactory ) {
+                                  final EntityIndexFactory entityIndexFactory,
+                                  final IndexLocationStrategyFactory indexLocationStrategyFactory) {
         this.entityCollectionManagerFactory = entityCollectionManagerFactory;
         this.entityIndexFactory = entityIndexFactory;
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
     }
 
 
@@ -80,8 +84,8 @@ public class CandidateEntityFilter extends AbstractFilter<FilterResult<Candidate
             entityCollectionManagerFactory.createCollectionManager( applicationScope );
 
 
-        final ApplicationEntityIndex applicationIndex =
-            entityIndexFactory.createApplicationEntityIndex( applicationScope );
+        final AliasedEntityIndex applicationIndex =
+            entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope) );
 
         //buffer them to get a page size we can make 1 network hop
         final Observable<FilterResult<Entity>> searchIdSetObservable = candidateResultsObservable.buffer( pipelineContext.getLimit() )

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java
index 1ef358a..49acfa6 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/CandidateIdFilter.java
@@ -24,6 +24,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
+import org.apache.usergrid.persistence.index.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,11 +36,6 @@ import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
 import org.apache.usergrid.persistence.collection.VersionSet;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
-import org.apache.usergrid.persistence.index.CandidateResult;
-import org.apache.usergrid.persistence.index.EntityIndexBatch;
-import org.apache.usergrid.persistence.index.EntityIndexFactory;
-import org.apache.usergrid.persistence.index.SearchEdge;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import com.fasterxml.uuid.UUIDComparator;
@@ -55,13 +52,16 @@ public class CandidateIdFilter extends AbstractFilter<FilterResult<Candidate>, F
 
     private final EntityCollectionManagerFactory entityCollectionManagerFactory;
     private final EntityIndexFactory entityIndexFactory;
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
 
 
     @Inject
     public CandidateIdFilter( final EntityCollectionManagerFactory entityCollectionManagerFactory,
-                              final EntityIndexFactory entityIndexFactory ) {
+                              final EntityIndexFactory entityIndexFactory,
+                              final IndexLocationStrategyFactory indexLocationStrategyFactory) {
         this.entityCollectionManagerFactory = entityCollectionManagerFactory;
         this.entityIndexFactory = entityIndexFactory;
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
     }
 
 
@@ -80,8 +80,8 @@ public class CandidateIdFilter extends AbstractFilter<FilterResult<Candidate>, F
             entityCollectionManagerFactory.createCollectionManager( applicationScope );
 
 
-        final ApplicationEntityIndex applicationIndex =
-            entityIndexFactory.createApplicationEntityIndex( applicationScope );
+        final AliasedEntityIndex applicationIndex =
+            entityIndexFactory.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope));
 
         final Observable<FilterResult<Id>> searchIdSetObservable =
             filterResultObservable.buffer( pipelineContext.getLimit() ).flatMap( candidateResults -> {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java
index a6edd56..f95cb88 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchCollectionFilter.java
@@ -20,6 +20,7 @@
 package org.apache.usergrid.corepersistence.pipeline.read.search;
 
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
 import org.apache.usergrid.persistence.index.SearchEdge;
@@ -34,6 +35,7 @@ import static org.apache.usergrid.corepersistence.util.CpNamingUtils.createColle
 
 public class SearchCollectionFilter extends AbstractElasticSearchFilter {
 
+    private final IndexLocationStrategyFactory indexLocationStrategyFactory;
     private final String collectionName;
     private final String entityType;
 
@@ -46,11 +48,14 @@ public class SearchCollectionFilter extends AbstractElasticSearchFilter {
      * @param entityType The entity type
      */
     @Inject
-    public SearchCollectionFilter( final EntityIndexFactory entityIndexFactory, final MetricsFactory metricsFactory,
+    public SearchCollectionFilter( final EntityIndexFactory entityIndexFactory,
+                                   final IndexLocationStrategyFactory indexLocationStrategyFactory,
+                                   final MetricsFactory metricsFactory,
                                    @Assisted( "query" ) final String query,
                                    @Assisted( "collectionName" ) final String collectionName,
                                    @Assisted( "entityType" ) final String entityType ) {
-        super( entityIndexFactory, metricsFactory, query );
+        super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query );
+        this.indexLocationStrategyFactory = indexLocationStrategyFactory;
         this.collectionName = collectionName;
         this.entityType = entityType;
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java
index 82d7377..27a12a8 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/search/SearchConnectionFilter.java
@@ -20,6 +20,7 @@
 package org.apache.usergrid.corepersistence.pipeline.read.search;
 
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
 import org.apache.usergrid.persistence.index.SearchEdge;
@@ -44,11 +45,13 @@ public class SearchConnectionFilter extends AbstractElasticSearchFilter {
      * Create a new instance of our command
      */
     @Inject
-    public SearchConnectionFilter( final EntityIndexFactory entityIndexFactory, final MetricsFactory metricsFactory,
+    public SearchConnectionFilter( final EntityIndexFactory entityIndexFactory,
+                                   final MetricsFactory metricsFactory,
+                                   final IndexLocationStrategyFactory indexLocationStrategyFactory,
                                    @Assisted( "query" ) final String query,
                                    @Assisted( "connectionName" ) final String connectionName,
                                    @Assisted( "connectedEntityType" ) final Optional<String> connectedEntityType ) {
-        super( entityIndexFactory, metricsFactory, query );
+        super( entityIndexFactory, metricsFactory, indexLocationStrategyFactory, query );
 
         this.connectionName = connectionName;
         this.connectedEntityType = connectedEntityType;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
index a6fa717..3f088f2 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManager.java
@@ -28,6 +28,7 @@ import org.apache.usergrid.persistence.Query.Level;
 import org.apache.usergrid.persistence.cassandra.CassandraService;
 import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.entities.Role;
+import org.apache.usergrid.persistence.index.IndexRefreshCommand;
 import org.apache.usergrid.persistence.index.query.CounterResolution;
 import org.apache.usergrid.persistence.index.query.Identifier;
 import org.apache.usergrid.persistence.model.entity.Id;
@@ -716,4 +717,15 @@ public interface EntityManager {
      * @return
      */
     Set<String> getConnectionsAsTarget(final EntityRef entityRef);
+
+    /**
+     * Add a new index to the application for scale
+     * @param suffix unique indentifier for additional index
+     * @param shards number of shards
+     * @param replicas number of replicas
+     * @param writeConsistency only "one, quorum, or all"
+     */
+    void addIndex(final String suffix,final int shards,final int replicas, final String writeConsistency);
+
+    IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex();
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
index cd7e515..1ae2377 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
@@ -17,6 +17,7 @@
 package org.apache.usergrid.persistence;
 
 
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 
@@ -64,9 +65,6 @@ public interface EntityManagerFactory {
          */
     Entity createApplicationV2( String organizationName, String name ) throws Exception;
 
-    @Deprecated
-    UUID createApplication( String organizationName, String name ) throws Exception;
-
     /**
      * Creates a Application entity. All entities except for applications must be attached to a
      * Application.
@@ -81,9 +79,6 @@ public interface EntityManagerFactory {
     Entity createApplicationV2(
         String organizationName, String name, Map<String, Object> properties ) throws Exception;
 
-    @Deprecated
-    UUID createApplication(
-        String organizationName, String name, Map<String, Object> properties ) throws Exception;
 
     /**
      * Delete Application.
@@ -157,14 +152,11 @@ public interface EntityManagerFactory {
     public Entity initializeApplicationV2(
         String orgName, UUID appId, String appName, Map<String, Object> props) throws Exception;
 
-    @Deprecated
-    public UUID initializeApplication(
-        String orgName, UUID appId, String appName, Map<String, Object> props) throws Exception;
 
-    public UUID getManagementAppId();
 
-    public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex();
+    public UUID getManagementAppId();
 
+    public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex(UUID applicationId);
 
     /**
      * Perform a realtime count of every entity in the system.  This can be slow as it traverses the entire system graph
@@ -174,22 +166,16 @@ public interface EntityManagerFactory {
     /** For testing purposes */
     public void flushEntityManagerCaches();
 
-    /**
-     * Add a new index to the application for scale
-     * @param suffix unique indentifier for additional index
-     * @param shards number of shards
-     * @param replicas number of replicas
-     * @param writeConsistency only "one, quorum, or all"
-     */
-    public void addIndex(final String suffix,final int shards,final int replicas, final String writeConsistency);
 
     public Health getEntityStoreHealth();
 
     public Health getIndexHealth();
 
+    void initializeManagementIndex();
+
     public interface ProgressObserver {
 
-     public void onProgress( EntityRef entity);
+        public void onProgress(EntityRef entity);
 
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java b/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
index 00cadd0..f431a93 100644
--- a/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
+++ b/stack/core/src/test/java/org/apache/usergrid/CoreApplication.java
@@ -24,6 +24,7 @@ import java.util.UUID;
 import java.util.concurrent.ExecutionException;
 
 import com.google.inject.Injector;
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 import org.apache.usergrid.persistence.index.*;
 import org.apache.usergrid.persistence.model.entity.Id;
@@ -55,9 +56,8 @@ public class CoreApplication implements Application, TestRule {
     protected CoreITSetup setup;
     protected EntityManager em;
     protected Map<String, Object> properties = new LinkedHashMap<String, Object>();
-    private EntityIndex entityIndex;
     private EntityIndexFactory entityIndexFactory;
-    private ApplicationEntityIndex applicationIndex;
+    private AliasedEntityIndex applicationIndex;
     private EntityManager managementEm;
 
 
@@ -177,9 +177,11 @@ public class CoreApplication implements Application, TestRule {
 
         em = setup.getEmf().getEntityManager(id);
         Injector injector = setup.getInjector();
-        entityIndex = injector.getInstance(EntityIndex.class);
+        IndexLocationStrategyFactory indexLocationStrategyFactory = injector.getInstance(IndexLocationStrategyFactory.class);
         entityIndexFactory = injector.getInstance(EntityIndexFactory.class);
-        applicationIndex =  entityIndexFactory.createApplicationEntityIndex(CpNamingUtils.getApplicationScope(id));
+        applicationIndex =  entityIndexFactory.createEntityIndex(
+            indexLocationStrategyFactory.getIndexLocationStrategy(CpNamingUtils.getApplicationScope(id))
+        );
         assertNotNull(em);
 
         LOG.info( "Created new application {} in organization {}", appName, orgName );
@@ -230,7 +232,7 @@ public class CoreApplication implements Application, TestRule {
     @Override
     public synchronized void refreshIndex() {
         //Insert test entity and find it
-        entityIndex.refreshAsync().toBlocking().first();
+        setup.getEmf().refreshIndex(em.getApplicationId());
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/CoreITSetupImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/CoreITSetupImpl.java b/stack/core/src/test/java/org/apache/usergrid/CoreITSetupImpl.java
index 526d883..3b01d3c 100644
--- a/stack/core/src/test/java/org/apache/usergrid/CoreITSetupImpl.java
+++ b/stack/core/src/test/java/org/apache/usergrid/CoreITSetupImpl.java
@@ -148,14 +148,13 @@ public class CoreITSetupImpl implements CoreITSetup, TestEntityIndex {
     }
 
     @Override
-    public void refresh(){
+    public void refresh(UUID appId){
         try {
             Thread.sleep(50);
         } catch (InterruptedException ie){
 
         }
-
-        emf.refreshIndex();
+        emf.refreshIndex(appId);
 
         try {
             Thread.sleep(50);

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/TestEntityIndex.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/TestEntityIndex.java b/stack/core/src/test/java/org/apache/usergrid/TestEntityIndex.java
index cdbae3f..7da187a 100644
--- a/stack/core/src/test/java/org/apache/usergrid/TestEntityIndex.java
+++ b/stack/core/src/test/java/org/apache/usergrid/TestEntityIndex.java
@@ -19,9 +19,11 @@
  */
 package org.apache.usergrid;
 
+import java.util.UUID;
+
 /**
  * abstract refresh implementation
  */
 public interface TestEntityIndex {
-    void refresh();
+    void refresh(UUID appId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/corepersistence/StaleIndexCleanupTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/StaleIndexCleanupTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/StaleIndexCleanupTest.java
index 29dc549..bb3f0b6 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/StaleIndexCleanupTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/StaleIndexCleanupTest.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
+import org.apache.usergrid.corepersistence.index.IndexLocationStrategyFactory;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -45,7 +46,7 @@ import org.apache.usergrid.persistence.collection.EntityCollectionManager;
 import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
-import org.apache.usergrid.persistence.index.ApplicationEntityIndex;
+import org.apache.usergrid.persistence.index.AliasedEntityIndex;
 import org.apache.usergrid.persistence.index.CandidateResults;
 import org.apache.usergrid.persistence.index.EntityIndexFactory;
 import org.apache.usergrid.persistence.index.SearchEdge;
@@ -496,7 +497,8 @@ public class StaleIndexCleanupTest extends AbstractCoreIT {
 
         ApplicationScope as = new ApplicationScopeImpl(
             new SimpleId( em.getApplicationId(), TYPE_APPLICATION ) );
-        ApplicationEntityIndex ei = eif.createApplicationEntityIndex(as);
+        IndexLocationStrategyFactory indexLocationStrategyFactory = SpringResource.getInstance().getBean( Injector.class ).getInstance(IndexLocationStrategyFactory.class);
+        AliasedEntityIndex ei = eif.createEntityIndex(indexLocationStrategyFactory.getIndexLocationStrategy(as));
 
         final Id rootId = createId(em.getApplicationId(), TYPE_APPLICATION);
         SearchEdge is = CpNamingUtils.createCollectionSearchEdge( rootId, collName );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncIndexServiceTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncIndexServiceTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncIndexServiceTest.java
index 00c082f..17c012e 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncIndexServiceTest.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/AsyncIndexServiceTest.java
@@ -23,6 +23,7 @@ package org.apache.usergrid.corepersistence.index;
 import java.util.List;
 import java.util.UUID;
 
+import org.apache.usergrid.persistence.EntityManagerFactory;
 import org.apache.usergrid.persistence.index.*;
 import org.junit.Before;
 import org.junit.Rule;
@@ -81,8 +82,12 @@ public abstract class AsyncIndexServiceTest {
     @Inject
     public EntityIndexFactory entityIndexFactory;
 
+
+    @Inject
+    public IndexLocationStrategyFactory indexLocationStrategyFactory;
+
     @Inject
-    public EntityIndex entityIndex;
+    public EntityManagerFactory emf;
 
 
     private AsyncEventService asyncEventService;
@@ -140,17 +145,17 @@ public abstract class AsyncIndexServiceTest {
 
         asyncEventService.queueEntityIndexUpdate( applicationScope, testEntity );
 
-        entityIndex.refreshAsync().toBlocking().last();
+        emf.refreshIndex(applicationScope.getApplication().getUuid());
 
         //        Thread.sleep( 1000000000000l );
 
-        final ApplicationEntityIndex applicationEntityIndex =
-            entityIndexFactory.createApplicationEntityIndex( applicationScope );
+        final AliasedEntityIndex AliasedEntityIndex =
+            entityIndexFactory.createEntityIndex( indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope) );
 
         final SearchEdge collectionSearchEdge = CpNamingUtils.createSearchEdgeFromSource( collectionEdge );
 
         //query until it's available
-        final CandidateResults collectionResults = getResults( applicationEntityIndex, collectionSearchEdge,
+        final CandidateResults collectionResults = getResults( AliasedEntityIndex, collectionSearchEdge,
             SearchTypes.fromTypes( testEntity.getId().getType() ),  1, 100 );
 
         assertEquals( 1, collectionResults.size() );
@@ -162,7 +167,7 @@ public abstract class AsyncIndexServiceTest {
 
 
         //query until it's available
-        final CandidateResults connectionResults = getResults( applicationEntityIndex, connectionSearchEdge,
+        final CandidateResults connectionResults = getResults( AliasedEntityIndex, connectionSearchEdge,
             SearchTypes.fromTypes( testEntity.getId().getType() ), 1, 100 );
 
         assertEquals( 1, connectionResults.size() );
@@ -171,13 +176,13 @@ public abstract class AsyncIndexServiceTest {
     }
 
 
-    private CandidateResults getResults( final ApplicationEntityIndex applicationEntityIndex,
+    private CandidateResults getResults( final AliasedEntityIndex AliasedEntityIndex,
                                          final SearchEdge searchEdge, final SearchTypes searchTypes, final int expectedSize, final int attempts ) {
 
 
         for ( int i = 0; i < attempts; i++ ) {
             final CandidateResults candidateResults =
-                applicationEntityIndex.search( searchEdge, searchTypes, "select *", 100, 0 );
+                AliasedEntityIndex.search( searchEdge, searchTypes, "select *", 100, 0 );
 
             if ( candidateResults.size() == expectedSize ) {
                 return candidateResults;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ab7c8e21/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
new file mode 100644
index 0000000..893359e
--- /dev/null
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/index/IndexNamingTest.java
@@ -0,0 +1,83 @@
+/*
+ *
+ *  * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  *  contributor license agreements.  The ASF licenses this file to You
+ *  * under the Apache License, Version 2.0 (the "License"); you may not
+ *  * use this file except in compliance with the License.
+ *  * You may obtain a copy of the License at
+ *  *
+ *  *     http://www.apache.org/licenses/LICENSE-2.0
+ *  *
+ *  * Unless required by applicable law or agreed to in writing, software
+ *  * distributed under the License is distributed on an "AS IS" BASIS,
+ *  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  * See the License for the specific language governing permissions and
+ *  * limitations under the License.  For additional information regarding
+ *  * copyright in this work, please see the NOTICE file in the top level
+ *  * directory of this distribution.
+ *
+ */
+package org.apache.usergrid.corepersistence.index;
+
+import com.google.inject.Inject;
+import net.jcip.annotations.NotThreadSafe;
+import org.apache.usergrid.corepersistence.TestIndexModule;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.persistence.core.astyanax.CassandraFig;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
+import org.apache.usergrid.persistence.core.test.UseModules;
+import org.apache.usergrid.persistence.index.IndexFig;
+import org.apache.usergrid.persistence.index.IndexLocationStrategy;
+import org.apache.usergrid.persistence.index.impl.EsRunner;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.UUID;
+
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Classy class class.
+ */
+@RunWith( EsRunner.class )
+@UseModules( { TestIndexModule.class } )
+@NotThreadSafe
+public class IndexNamingTest {
+    @Inject
+    public CassandraFig cassandraFig;
+
+    @Inject
+    public IndexFig indexFig;
+
+    @Inject
+    public IndexLocationStrategyFactory indexLocationStrategyFactory;
+
+    private ApplicationScope applicationScope;
+    private ApplicationScope managementApplicationScope;
+    private ApplicationIndexLocationStrategy applicationLocationStrategy;
+    private ManagementIndexLocationStrategy managementLocationStrategy;
+
+    @Before
+    public void setup(){
+        this.applicationScope = CpNamingUtils.getApplicationScope(UUID.randomUUID());
+        this.managementApplicationScope = CpNamingUtils.getApplicationScope(CpNamingUtils.getManagementApplicationId().getUuid());
+        this.managementLocationStrategy = new ManagementIndexLocationStrategy(indexFig);
+        this.applicationLocationStrategy = new ApplicationIndexLocationStrategy(cassandraFig,indexFig,applicationScope);
+    }
+
+    @Test
+    public void managementNaming(){
+        IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(managementApplicationScope);
+        assertTrue(indexLocationStrategy.getIndex(null).equals(managementLocationStrategy.getIndex(null)));
+
+    }
+    @Test
+    public void applicationNaming(){
+        IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(applicationScope);
+        assertTrue(indexLocationStrategy.getIndex(null).equals(applicationLocationStrategy.getIndex(null)));
+    }
+
+}