You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sf...@apache.org on 2015/02/11 17:32:10 UTC

incubator-usergrid git commit: Refactor Application Entity Group

Repository: incubator-usergrid
Updated Branches:
  refs/heads/USERGRID-365 fb0e91055 -> ea680f1a0


Refactor Application Entity Group


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

Branch: refs/heads/USERGRID-365
Commit: ea680f1a0045c02cca376bc82767d2c88132fa90
Parents: fb0e910
Author: Shawn Feldman <sf...@apache.org>
Authored: Wed Feb 11 09:29:57 2015 -0700
Committer: Shawn Feldman <sf...@apache.org>
Committed: Wed Feb 11 09:29:57 2015 -0700

----------------------------------------------------------------------
 .../migration/EntityTypeMappingMigration.java   | 20 ++++-----
 .../impl/AllEntitiesInSystemObservableImpl.java | 25 ++++++++---
 .../rx/impl/ApplicationObservableImpl.java      |  2 +
 .../migration/EntityDataMigrationIT.java        | 30 ++++++-------
 .../migration/EntityTypeMappingMigrationIT.java |  4 +-
 .../migration/GraphShardVersionMigrationIT.java | 34 ++++++++-------
 .../rx/AllEntitiesInSystemObservableIT.java     | 11 ++---
 .../usergrid/persistence/LargeEntityIT.java     |  5 ++-
 .../impl/MvccEntityDataMigrationImpl.java       | 24 ++++++-----
 ...vccEntitySerializationStrategyProxyImpl.java | 14 ++++---
 ...cEntitySerializationStrategyProxyV1Impl.java |  9 ++--
 ...cEntitySerializationStrategyProxyV2Impl.java |  5 ++-
 .../data/DataMigrationManagerImpl.java          | 23 ++--------
 .../data/MigrationInfoSerialization.java        |  4 ++
 .../data/MigrationInfoSerializationImpl.java    | 31 ++++++++++++++
 .../core/rx/AllEntitiesInSystemObservable.java  |  4 ++
 .../core/scope/ApplicationEntityGroup.java      |  5 +--
 .../persistence/core/scope/EntityIdScope.java   | 44 ++++++++++++++++++++
 .../data/DataMigrationManagerImplTest.java      |  3 +-
 .../impl/EdgeDataMigrationImpl.java             |  7 ++--
 .../persistence/model/entity/EntityMap.java     | 14 ++++---
 21 files changed, 211 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigration.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigration.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigration.java
index 8352cff..c4a7177 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigration.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigration.java
@@ -29,6 +29,7 @@ import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
 import org.apache.usergrid.persistence.core.migration.data.DataMigration;
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.map.MapManager;
 import org.apache.usergrid.persistence.map.MapScope;
 import org.apache.usergrid.persistence.model.entity.Id;
@@ -66,19 +67,18 @@ public class EntityTypeMappingMigration implements DataMigration {
         final MapScope ms = CpNamingUtils.getEntityTypeMapScope(applicationEntityGroup.applicationScope.getApplication());
 
         final MapManager mapManager = managerCache.getMapManager(ms);
-        return Observable.from(applicationEntityGroup.entityIds).subscribeOn(Schedulers.io())
-            .map(new Func1<Id, Long>() {
+        return Observable.from(applicationEntityGroup.entityIds)
+            .subscribeOn(Schedulers.io())
+            .map(new Func1<EntityIdScope, Long>() {
                 @Override
-                public Long call(Id id) {
-                    for (Id entityId : applicationEntityGroup.entityIds) {
-                        final UUID entityUuid = entityId.getUuid();
-                        final String entityType = entityId.getType();
+                public Long call(EntityIdScope idScope) {
+                    final UUID entityUuid = idScope.getId().getUuid();
+                    final String entityType = idScope.getId().getType();
 
-                        mapManager.putString(entityUuid.toString(), entityType);
+                    mapManager.putString(entityUuid.toString(), entityType);
 
-                        if (atomicLong.incrementAndGet() % 100 == 0) {
-                            updateStatus(atomicLong, observer);
-                        }
+                    if (atomicLong.incrementAndGet() % 100 == 0) {
+                        updateStatus(atomicLong, observer);
                     }
                     return atomicLong.get();
                 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntitiesInSystemObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntitiesInSystemObservableImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntitiesInSystemObservableImpl.java
index 4608bd2..ed087ce 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntitiesInSystemObservableImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntitiesInSystemObservableImpl.java
@@ -20,14 +20,18 @@
 package org.apache.usergrid.corepersistence.rx.impl;
 
 
+import java.util.ArrayList;
 import java.util.List;
 
+import com.google.inject.Inject;
 import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.rx.ApplicationObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
 import org.apache.usergrid.persistence.graph.serialization.TargetIdObservable;
@@ -48,6 +52,7 @@ public class AllEntitiesInSystemObservableImpl implements AllEntitiesInSystemObs
     private final GraphManagerFactory graphManagerFactory;
     private final TargetIdObservable targetIdObservable;
 
+    @Inject
     public AllEntitiesInSystemObservableImpl(ApplicationObservable applicationObservable, GraphManagerFactory graphManagerFactory, TargetIdObservable targetIdObservable){
 
         this.applicationObservable = applicationObservable;
@@ -89,12 +94,22 @@ public class AllEntitiesInSystemObservableImpl implements AllEntitiesInSystemObs
                                             return Observable
                                                 .merge(applicationNode, entityNodes)
                                                     .buffer(bufferSize)
-                                                    .map(new Func1<List<Id>, ApplicationEntityGroup>() {
+                                                    .map(new Func1<List<Id>, List<EntityIdScope>>() {
                                                         @Override
-                                                        public ApplicationEntityGroup call(final List<Id> ids) {
-                                                            //CpNamingUtils.getCollectionScopeNameFromEntityType(applicationId,);
-
-                                                            return new ApplicationEntityGroup(applicationScope, ids);
+                                                        public List<EntityIdScope> call(List<Id> ids) {
+                                                            List<EntityIdScope> scopes = new ArrayList<>(ids.size());
+                                                            for (Id id : ids) {
+                                                                CollectionScope scope = CpNamingUtils.getCollectionScopeNameFromEntityType(applicationId, id.getType());
+                                                                EntityIdScope idScope = new EntityIdScope(id, scope);
+                                                                scopes.add(idScope);
+                                                            }
+                                                            return scopes;
+                                                        }
+                                                    })
+                                                    .map(new Func1<List<EntityIdScope>, ApplicationEntityGroup>() {
+                                                        @Override
+                                                        public ApplicationEntityGroup call(final List<EntityIdScope> scopes) {
+                                                            return new ApplicationEntityGroup(applicationScope, scopes);
                                                         }
                                                     });
                                         }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/ApplicationObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/ApplicationObservableImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/ApplicationObservableImpl.java
index 10a043d..9a5e084 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/ApplicationObservableImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/ApplicationObservableImpl.java
@@ -23,6 +23,7 @@ package org.apache.usergrid.corepersistence.rx.impl;
 import java.util.Arrays;
 import java.util.UUID;
 
+import com.google.inject.Inject;
 import org.apache.usergrid.persistence.collection.EntityCollectionManagerFactory;
 import org.apache.usergrid.persistence.core.rx.ApplicationObservable;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
@@ -57,6 +58,7 @@ public class ApplicationObservableImpl implements ApplicationObservable {
     private final EntityCollectionManagerFactory entityCollectionManagerFactory;
     private final GraphManagerFactory graphManagerFactory;
 
+    @Inject
     public ApplicationObservableImpl(EntityCollectionManagerFactory entityCollectionManagerFactory, GraphManagerFactory graphManagerFactory){
 
         this.entityCollectionManagerFactory = entityCollectionManagerFactory;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityDataMigrationIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityDataMigrationIT.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityDataMigrationIT.java
index a23ce93..651766b 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityDataMigrationIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityDataMigrationIT.java
@@ -25,10 +25,12 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.usergrid.persistence.collection.mvcc.MvccEntityMigrationStrategy;
+import org.apache.usergrid.persistence.collection.serialization.impl.MvccEntityDataMigrationImpl;
 import org.apache.usergrid.persistence.collection.serialization.impl.MvccEntitySerializationStrategyProxyV2Impl;
 import org.apache.usergrid.persistence.core.migration.data.DataMigration;
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -81,14 +83,14 @@ public class EntityDataMigrationIT extends AbstractCoreIT {
      */
     @Rule
     public MigrationTestRule migrationTestRule =
-            new MigrationTestRule( app, CpSetup.getInjector() ,MvccEntitySerializationStrategyProxyV2Impl.class  );
+            new MigrationTestRule( app, CpSetup.getInjector() ,MvccEntityDataMigrationImpl.class  );
     private AllEntitiesInSystemObservable allEntitiesInSystemObservable;
 
     @Before
     public void setup() {
         emf = setup.getEmf();
         injector = CpSetup.getInjector();
-        entityDataMigration = injector.getInstance( MvccEntitySerializationStrategyProxyV2Impl.class );
+        entityDataMigration = injector.getInstance( MvccEntityDataMigrationImpl.class );
         dataMigrationManager = injector.getInstance( DataMigrationManager.class );
         migrationInfoSerialization = injector.getInstance( MigrationInfoSerialization.class );
         MvccEntityMigrationStrategy strategy = injector.getInstance(Key.get(MvccEntityMigrationStrategy.class));
@@ -140,15 +142,15 @@ public class EntityDataMigrationIT extends AbstractCoreIT {
                         final ApplicationEntityGroup entity ) {
 
                     //add all versions from history to our comparison
-                    for ( final Id id : entity.entityIds ) {
+                    for ( final EntityIdScope id : entity.entityIds ) {
 
                         CollectionScope scope = CpNamingUtils
                                 .getCollectionScopeNameFromEntityType(
-                                        entity.applicationScope.getApplication(),
-                                        id.getType() );
+                                    entity.applicationScope.getApplication(),
+                                    id.getId().getType());
 
                         final Iterator<MvccEntity> versions = v1Strategy
-                                .loadDescendingHistory( scope, id, UUIDGenerator.newTimeUUID(),
+                                .loadDescendingHistory( scope, id.getId(), UUIDGenerator.newTimeUUID(),
                                         100 );
 
                         while ( versions.hasNext() ) {
@@ -159,7 +161,7 @@ public class EntityDataMigrationIT extends AbstractCoreIT {
 
                             createdEntityIds.remove( mvccEntity.getId() );
 
-                            entityIds.add( id );
+                            entityIds.add( id.getId() );
                         }
                     }
                 }
@@ -202,15 +204,15 @@ public class EntityDataMigrationIT extends AbstractCoreIT {
                 public void call(
                         final ApplicationEntityGroup entity ) {
                     //add all versions from history to our comparison
-                    for ( final Id id : entity.entityIds ) {
+                    for ( final EntityIdScope id : entity.entityIds ) {
 
                         CollectionScope scope = CpNamingUtils
                                 .getCollectionScopeNameFromEntityType(
-                                        entity.applicationScope.getApplication(),
-                                        id.getType() );
+                                    entity.applicationScope.getApplication(),
+                                    id.getId().getType());
 
                         final Iterator<MvccEntity> versions = v2Strategy
-                                .loadDescendingHistory( scope, id,
+                                .loadDescendingHistory( scope, id.getId(),
                                         UUIDGenerator.newTimeUUID(), 100 );
 
                         while ( versions.hasNext() ) {
@@ -242,14 +244,14 @@ public class EntityDataMigrationIT extends AbstractCoreIT {
                             entity.applicationScope.getApplication().getUuid() );
 
                     //add all versions from history to our comparison
-                    for ( final Id id : entity.entityIds ) {
+                    for ( final EntityIdScope id : entity.entityIds ) {
 
 
                         try {
-                            final Entity emEntity = em.get( SimpleEntityRef.fromId( id ) );
+                            final Entity emEntity = em.get( SimpleEntityRef.fromId( id.getId() ) );
 
                             if(emEntity != null){
-                                entityIds.remove( id );
+                                entityIds.remove( id.getId() );
                             }
                         }
                         catch ( Exception e ) {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigrationIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigrationIT.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigrationIT.java
index 3da0b85..8a09952 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigrationIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/EntityTypeMappingMigrationIT.java
@@ -25,6 +25,7 @@ import java.util.Set;
 
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -147,7 +148,8 @@ public class EntityTypeMappingMigrationIT extends AbstractCoreIT {
                     final EntityManager em = emf.getEntityManager(
                         entity.applicationScope.getApplication().getUuid());
 
-                    for (final Id id : entity.entityIds) {
+                    for (final EntityIdScope idScope : entity.entityIds) {
+                        final Id id = idScope.getId();
                         try {
                             final Entity returned = em.get(id.getUuid());
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/GraphShardVersionMigrationIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/GraphShardVersionMigrationIT.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/GraphShardVersionMigrationIT.java
index 2d6d0d9..6d718d7 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/GraphShardVersionMigrationIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/migration/GraphShardVersionMigrationIT.java
@@ -26,6 +26,8 @@ import java.util.Set;
 import org.apache.usergrid.persistence.core.migration.data.DataMigration;
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
+import org.apache.usergrid.persistence.graph.serialization.impl.EdgeDataMigrationImpl;
 import org.apache.usergrid.persistence.graph.serialization.impl.EdgeMetadataSerializationProxyImpl;
 import org.junit.Before;
 import org.junit.Rule;
@@ -69,14 +71,14 @@ public class GraphShardVersionMigrationIT extends AbstractCoreIT {
      * Rule to do the resets we need
      */
     @Rule
-    public MigrationTestRule migrationTestRule = new MigrationTestRule( app, CpSetup.getInjector() ,EdgeMetadataSerializationProxyImpl.class  );
+    public MigrationTestRule migrationTestRule = new MigrationTestRule( app, CpSetup.getInjector() ,EdgeDataMigrationImpl.class  );
     private AllEntitiesInSystemObservable allEntitiesInSystemObservable;
 
 
     @Before
     public void setup() {
         injector = CpSetup.getInjector();
-        graphShardVersionMigration = injector.getInstance( EdgeMetadataSerializationProxyImpl.class );
+        graphShardVersionMigration = injector.getInstance( EdgeDataMigrationImpl.class );
         managerCache = injector.getInstance( ManagerCache.class );
         dataMigrationManager = injector.getInstance( DataMigrationManager.class );
         migrationInfoSerialization = injector.getInstance( MigrationInfoSerialization.class );
@@ -127,31 +129,31 @@ public class GraphShardVersionMigrationIT extends AbstractCoreIT {
                                              final GraphManager gm =
                                                      managerCache.getGraphManager( entity.applicationScope );
 
-                                             for ( final Id id : entity.entityIds ) {
+                                             for ( final EntityIdScope idScope : entity.entityIds ) {
                                                  /**
                                                   * Get our edge types from the source
                                                   */
-                                                 gm.getEdgeTypesFromSource( new SimpleSearchEdgeType( id, null, null ) )
-                                                   .doOnNext( new Action1<String>() {
+                                                 gm.getEdgeTypesFromSource( new SimpleSearchEdgeType(idScope.getId(), null, null ) )
+                                                   .doOnNext(new Action1<String>() {
                                                        @Override
-                                                       public void call( final String s ) {
-                                                           sourceTypes.put( id, s );
+                                                       public void call(final String s) {
+                                                           sourceTypes.put(idScope.getId(), s);
                                                        }
-                                                   } ).toBlocking().lastOrDefault( null );
+                                                   }).toBlocking().lastOrDefault( null );
 
 
                                                  /**
                                                   * Get the edge types to the target
                                                   */
-                                                 gm.getEdgeTypesToTarget( new SimpleSearchEdgeType( id, null, null ) )
+                                                 gm.getEdgeTypesToTarget( new SimpleSearchEdgeType( idScope.getId(), null, null ) )
                                                    .doOnNext( new Action1<String>() {
                                                        @Override
                                                        public void call( final String s ) {
-                                                           targetTypes.put( id, s );
+                                                           targetTypes.put( idScope.getId(), s );
                                                        }
                                                    } ).toBlocking().lastOrDefault( null );
 
-                                                 allEntities.remove( id );
+                                                 allEntities.remove( idScope.getId() );
                                              }
                                          }
                                      } ).toBlocking().lastOrDefault( null );
@@ -195,16 +197,16 @@ public class GraphShardVersionMigrationIT extends AbstractCoreIT {
                                                         final GraphManager gm =
                                                                 managerCache.getGraphManager( entity.applicationScope );
 
-                                                        for ( final Id id : entity.entityIds ) {
+                                                        for ( final EntityIdScope idScope : entity.entityIds ) {
                                                             /**
                                                              * Get our edge types from the source
                                                              */
                                                             gm.getEdgeTypesFromSource(
-                                                                    new SimpleSearchEdgeType( id, null, null ) )
+                                                                    new SimpleSearchEdgeType( idScope.getId(), null, null ) )
                                                               .doOnNext( new Action1<String>() {
                                                                   @Override
                                                                   public void call( final String s ) {
-                                                                      sourceTypes.remove( id, s );
+                                                                      sourceTypes.remove( idScope.getId(), s );
                                                                   }
                                                               } ).toBlocking().lastOrDefault( null );
 
@@ -213,11 +215,11 @@ public class GraphShardVersionMigrationIT extends AbstractCoreIT {
                                                              * Get the edge types to the target
                                                              */
                                                             gm.getEdgeTypesToTarget(
-                                                                    new SimpleSearchEdgeType( id, null, null ) )
+                                                                    new SimpleSearchEdgeType( idScope.getId(), null, null ) )
                                                               .doOnNext( new Action1<String>() {
                                                                   @Override
                                                                   public void call( final String s ) {
-                                                                      targetTypes.remove( id, s );
+                                                                      targetTypes.remove( idScope.getId(), s );
                                                                   }
                                                               } ).toBlocking().lastOrDefault( null );
                                                         }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/test/java/org/apache/usergrid/corepersistence/rx/AllEntitiesInSystemObservableIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/corepersistence/rx/AllEntitiesInSystemObservableIT.java b/stack/core/src/test/java/org/apache/usergrid/corepersistence/rx/AllEntitiesInSystemObservableIT.java
index 30c9ac3..fb37487 100644
--- a/stack/core/src/test/java/org/apache/usergrid/corepersistence/rx/AllEntitiesInSystemObservableIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/corepersistence/rx/AllEntitiesInSystemObservableIT.java
@@ -27,6 +27,7 @@ import org.apache.usergrid.corepersistence.rx.impl.AllEntitiesInSystemObservable
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.rx.ApplicationObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.graph.serialization.TargetIdObservable;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -113,14 +114,14 @@ public class AllEntitiesInSystemObservableIT extends AbstractCoreIT {
                     return;
                 }
 
-                for(Id id: entity.entityIds) {
+                for(EntityIdScope idScope: entity.entityIds) {
 
                     //we should only emit each node once
-                    if ( id.getType().equals( type1 ) ) {
-                        assertTrue( "Element should be present on removal", type1Identities.remove( id ) );
+                    if ( idScope.getId().getType().equals( type1 ) ) {
+                        assertTrue( "Element should be present on removal", type1Identities.remove(idScope.getId() ) );
                     }
-                    else if ( id.getType().equals( type2 ) ) {
-                        assertTrue( "Element should be present on removal", type2Identities.remove( id ) );
+                    else if ( idScope.getId().getType().equals( type2 ) ) {
+                        assertTrue( "Element should be present on removal", type2Identities.remove(idScope.getId() ) );
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/core/src/test/java/org/apache/usergrid/persistence/LargeEntityIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/LargeEntityIT.java b/stack/core/src/test/java/org/apache/usergrid/persistence/LargeEntityIT.java
index c95f7d6..b18955d 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/LargeEntityIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/LargeEntityIT.java
@@ -44,7 +44,8 @@ import static org.junit.Assert.assertEquals;
 
 
 @Concurrent()
-public class LargeEntityIT extends AbstractCoreIT {
+public class
+    LargeEntityIT extends AbstractCoreIT {
     private static final Logger LOG = LoggerFactory.getLogger( LargeEntityIT.class );
 
     @Rule
@@ -82,7 +83,7 @@ public class LargeEntityIT extends AbstractCoreIT {
 
         LOG.debug( "testLargeEntityCrud" );
 
-        SetConfigTestBypass.setValueByPass( serializationFig, "getMaxEntitySize", 641814 + "" );
+        SetConfigTestBypass.setValueByPass( serializationFig, "getMaxEntitySize", 641834 + "" );
 
 
         final URL resource = this.getClass().getClassLoader().getResource( TEST_DATA_FILE );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntityDataMigrationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntityDataMigrationImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntityDataMigrationImpl.java
index 287c469..864a3af 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntityDataMigrationImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntityDataMigrationImpl.java
@@ -32,10 +32,13 @@ import org.apache.usergrid.persistence.core.migration.data.DataMigrationExceptio
 import org.apache.usergrid.persistence.core.migration.schema.MigrationStrategy;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 import rx.Observable;
+import rx.functions.Action1;
 import rx.functions.Func1;
+import rx.schedulers.Schedulers;
 
 import java.util.Iterator;
 import java.util.List;
@@ -62,22 +65,22 @@ public class MvccEntityDataMigrationImpl implements DataMigration {
         final AtomicLong atomicLong = new AtomicLong();
         final MutationBatch totalBatch = keyspace.prepareMutationBatch();
 
-        final List<Id> entityIds = applicationEntityGroup.entityIds;
+        final List<EntityIdScope> entityIds = applicationEntityGroup.entityIds;
 
         final UUID now = UUIDGenerator.newTimeUUID();
 
         //go through each entity in the system, and load it's entire
         // history
         return Observable.from(entityIds)
-
-            .map(new Func1<Id, Id>() {
+            .subscribeOn(Schedulers.io())
+            .map(new Func1<EntityIdScope, Id>() {
                 @Override
-                public Id call(Id entityId) {
+                public Id call(EntityIdScope idScope) {
 
                     ApplicationScope applicationScope = applicationEntityGroup.applicationScope;
 
                     if (!(applicationScope instanceof CollectionScope)) {
-                        throw new IllegalArgumentException("getCollectionScopeFromEntityId must return a collection scope");
+                        return idScope.getId();
                     }
 
                     CollectionScope currentScope = (CollectionScope) applicationScope;
@@ -85,7 +88,7 @@ public class MvccEntityDataMigrationImpl implements DataMigration {
                     //for each element in the history in the previous version,
                     // copy it to the CF in v2
                     Iterator<MvccEntity> allVersions = migration.from()
-                        .loadDescendingHistory(currentScope, entityId, now,
+                        .loadDescendingHistory(currentScope, idScope.getId(), now,
                             1000);
 
                     while (allVersions.hasNext()) {
@@ -101,14 +104,15 @@ public class MvccEntityDataMigrationImpl implements DataMigration {
                         }
                     }
                     executeBatch(totalBatch, observer, atomicLong);
-                    return entityId;
+                    return idScope.getId();
                 }
             })
-            .map(new Func1<Id, Long>() {
+            .buffer(100)
+            .doOnNext(new Action1<List<Id>>() {
                 @Override
-                public Long call(Id id) {
+                public void call(List<Id> ids) {
                     executeBatch(totalBatch, observer, atomicLong);
-                    return atomicLong.get();
+
                 }
             });
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
index 9e87da4..2624cd4 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyImpl.java
@@ -26,6 +26,7 @@ import org.apache.usergrid.persistence.collection.mvcc.MvccEntityMigrationStrate
 import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.migration.data.DataMigrationManager;
+import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerialization;
 import org.apache.usergrid.persistence.model.entity.Id;
 
 import java.util.*;
@@ -39,21 +40,22 @@ import java.util.*;
 public abstract class MvccEntitySerializationStrategyProxyImpl implements MvccEntitySerializationStrategy, MvccEntityMigrationStrategy {
 
 
-    private final DataMigrationManager dataMigrationManager;
     protected final Keyspace keyspace;
     protected final MvccEntitySerializationStrategy previous;
     protected final MvccEntitySerializationStrategy current;
+    private final MigrationInfoSerialization migrationInfoSerialization;
 
 
     @Inject
-    public MvccEntitySerializationStrategyProxyImpl(final DataMigrationManager dataMigrationManager,
-                                                    final Keyspace keyspace,
+    public MvccEntitySerializationStrategyProxyImpl(final Keyspace keyspace,
                                                     final MvccEntitySerializationStrategy previous,
-                                                    final MvccEntitySerializationStrategy current) {
-        this.dataMigrationManager = dataMigrationManager;
+                                                    final MvccEntitySerializationStrategy current,
+                                                    final MigrationInfoSerialization migrationInfoSerialization) {
+
         this.keyspace = keyspace;
         this.previous = previous;
         this.current = current;
+        this.migrationInfoSerialization = migrationInfoSerialization;
     }
 
 
@@ -137,7 +139,7 @@ public abstract class MvccEntitySerializationStrategyProxyImpl implements MvccEn
      * Return true if we're on an old version
      */
     private boolean isOldVersion() {
-        return dataMigrationManager.getCurrentVersion() < getVersion();
+        return migrationInfoSerialization.getCurrentVersion() < getVersion();
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV1Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV1Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV1Impl.java
index 75b33e3..f2c8d33 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV1Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV1Impl.java
@@ -29,6 +29,7 @@ import org.apache.usergrid.persistence.core.migration.data.DataMigrationManager;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import com.netflix.astyanax.Keyspace;
+import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerialization;
 
 
 /**
@@ -41,11 +42,11 @@ public class MvccEntitySerializationStrategyProxyV1Impl extends MvccEntitySerial
 
 
     @Inject
-    public MvccEntitySerializationStrategyProxyV1Impl(final DataMigrationManager dataMigrationManager,
-                                                      final Keyspace keyspace,
+    public MvccEntitySerializationStrategyProxyV1Impl(final Keyspace keyspace,
                                                       @V1Impl final MvccEntitySerializationStrategy previous,
-                                                      @V2Impl final MvccEntitySerializationStrategy current) {
-        super(dataMigrationManager, keyspace, previous, current);
+                                                      @V2Impl final MvccEntitySerializationStrategy current,
+                                                      final MigrationInfoSerialization migrationInfoSerialization) {
+        super( keyspace, previous, current,migrationInfoSerialization);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV2Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV2Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV2Impl.java
index 4f31b52..d897ee4 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV2Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyProxyV2Impl.java
@@ -7,6 +7,7 @@ import org.apache.usergrid.persistence.collection.mvcc.MvccEntityMigrationStrate
 import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import org.apache.usergrid.persistence.core.guice.*;
 import org.apache.usergrid.persistence.core.migration.data.DataMigrationManager;
+import org.apache.usergrid.persistence.core.migration.data.MigrationInfoSerialization;
 
 
 /**
@@ -19,11 +20,11 @@ public class MvccEntitySerializationStrategyProxyV2Impl extends MvccEntitySerial
 
 
     @Inject
-    public MvccEntitySerializationStrategyProxyV2Impl( final DataMigrationManager dataMigrationManager,
+    public MvccEntitySerializationStrategyProxyV2Impl( final MigrationInfoSerialization migrationInfoSerialization,
                                                      final Keyspace keyspace,
                                                      @V1ProxyImpl final MvccEntitySerializationStrategy previous,
                                                      @V3Impl final MvccEntitySerializationStrategy current) {
-        super(dataMigrationManager,keyspace,previous,current);
+        super(keyspace,previous,current,migrationInfoSerialization);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
index 8a84d9f..a9b4f56 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImpl.java
@@ -55,17 +55,7 @@ public class DataMigrationManagerImpl implements DataMigrationManager {
     private final MigrationInfoSerialization migrationInfoSerialization;
     private final AllEntitiesInSystemObservable allEntitiesInSystemObservable;
 
-    /**
-     * Cache to cache versions temporarily
-     */
-    private final LoadingCache<String, Integer> versionCache = CacheBuilder.newBuilder()
-            //cache the local value for 1 minute
-            .expireAfterWrite(1, TimeUnit.MINUTES).build( new CacheLoader<String, Integer>() {
-                @Override
-                public Integer load( final String key ) throws Exception {
-                    return migrationInfoSerialization.getVersion();
-                }
-            } );
+
     private final Set<DataMigration> migrations;
 
 
@@ -137,8 +127,6 @@ public class DataMigrationManagerImpl implements DataMigrationManager {
                             //set the version
                             migrationInfoSerialization.setVersion(migrationVersion);
 
-                            versionCache.invalidateAll();
-
                             //update the observer for progress so other nodes can see it
                             observer.update(migrationVersion, "Completed successfully");
                         }
@@ -192,18 +180,13 @@ public class DataMigrationManagerImpl implements DataMigrationManager {
 
     @Override
     public void invalidate() {
-        versionCache.invalidateAll();
+        migrationInfoSerialization.invalidate();
     }
 
 
     @Override
     public int getCurrentVersion() {
-        try {
-            return versionCache.get( "currentVersion" );
-        }
-        catch ( ExecutionException e ) {
-            throw new DataMigrationException( "Unable to get current version", e );
-        }
+        return migrationInfoSerialization.getCurrentVersion();
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerialization.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerialization.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerialization.java
index db2a747..3caa6aa 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerialization.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerialization.java
@@ -60,4 +60,8 @@ public interface MigrationInfoSerialization extends Migration {
      * @return The integer that's saved
      */
     public int getStatusCode();
+
+    public int getCurrentVersion();
+
+    public void invalidate();
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
index 603ebb3..aeee0bb 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/migration/data/MigrationInfoSerializationImpl.java
@@ -22,7 +22,11 @@ package org.apache.usergrid.persistence.core.migration.data;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
 import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.cassandra.db.marshal.UTF8Type;
 
@@ -45,6 +49,17 @@ import com.netflix.astyanax.serializers.StringSerializer;
 @Singleton
 public class MigrationInfoSerializationImpl implements MigrationInfoSerialization {
 
+    /**
+     * Cache to cache versions temporarily
+     */
+    private final LoadingCache<String, Integer> versionCache = CacheBuilder.newBuilder()
+        //cache the local value for 1 minute
+        .expireAfterWrite(1, TimeUnit.MINUTES).build( new CacheLoader<String, Integer>() {
+            @Override
+            public Integer load( final String key ) throws Exception {
+                return getVersion();
+            }
+        } );
 
     /**
      * Just a hard coded scope since we need it
@@ -118,6 +133,8 @@ public class MigrationInfoSerializationImpl implements MigrationInfoSerializatio
         catch ( ConnectionException e ) {
             throw new DataMigrationException( "Unable to save status", e );
         }
+
+        versionCache.invalidateAll();
     }
 
 
@@ -164,6 +181,20 @@ public class MigrationInfoSerializationImpl implements MigrationInfoSerializatio
         }
     }
 
+    @Override
+    public int getCurrentVersion() {
+        try {
+            return versionCache.get("currentversion");
+        }catch (Exception ee){
+            throw new RuntimeException(ee);
+        }
+    }
+
+    @Override
+    public void invalidate() {
+        versionCache.invalidateAll();
+    }
+
 
     @Override
     public Collection<MultiTennantColumnFamilyDefinition> getColumnFamilies() {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/rx/AllEntitiesInSystemObservable.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/rx/AllEntitiesInSystemObservable.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/rx/AllEntitiesInSystemObservable.java
index 1ec017e..bc6021c 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/rx/AllEntitiesInSystemObservable.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/rx/AllEntitiesInSystemObservable.java
@@ -20,6 +20,8 @@
 package org.apache.usergrid.persistence.core.rx;
 
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.model.entity.Id;
 import rx.Observable;
 
 
@@ -36,5 +38,7 @@ public interface AllEntitiesInSystemObservable {
      *                   you may be more than 1 ApplicationEntityGroup with the same application and different ids
      */
     public Observable<ApplicationEntityGroup> getAllEntitiesInSystem(final int bufferSize);
+
+
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/ApplicationEntityGroup.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/ApplicationEntityGroup.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/ApplicationEntityGroup.java
index a767f4a..9b2d7e4 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/ApplicationEntityGroup.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/ApplicationEntityGroup.java
@@ -29,12 +29,11 @@ import java.util.List;
  */
 public final class ApplicationEntityGroup {
     public final ApplicationScope applicationScope;
-    public final List<Id> entityIds;
+    public final List<EntityIdScope> entityIds;
 
-    public ApplicationEntityGroup(final ApplicationScope applicationScope, final List<Id> entityIds) {
+    public ApplicationEntityGroup(final ApplicationScope applicationScope, final List<EntityIdScope> entityIds) {
         this.applicationScope = applicationScope;
         this.entityIds = entityIds;
     }
-
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/EntityIdScope.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/EntityIdScope.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/EntityIdScope.java
new file mode 100644
index 0000000..554c150
--- /dev/null
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/scope/EntityIdScope.java
@@ -0,0 +1,44 @@
+/*
+ *
+ *  * 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.persistence.core.scope;
+
+import org.apache.usergrid.persistence.model.entity.Id;
+
+/**
+ * Tuple containing collectionscope and entityid
+ */
+public class EntityIdScope{
+    private final Id id;
+    private final ApplicationScope collectionScope;
+
+    public EntityIdScope(Id id, ApplicationScope collectionScope){
+        this.id = id;
+        this.collectionScope = collectionScope;
+    }
+
+
+    public Id getId() {
+        return id;
+    }
+
+    public ApplicationScope getCollectionScope() {
+        return collectionScope;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
index bf8678f..c12adea 100644
--- a/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
+++ b/stack/corepersistence/common/src/test/java/org/apache/usergrid/persistence/core/migration/data/DataMigrationManagerImplTest.java
@@ -30,6 +30,7 @@ import java.util.Set;
 import org.apache.usergrid.persistence.core.rx.AllEntitiesInSystemObservable;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 import org.junit.Test;
 import org.mockito.invocation.InvocationOnMock;
@@ -61,7 +62,7 @@ public class DataMigrationManagerImplTest {
             return Observable.create(new Observable.OnSubscribe<ApplicationEntityGroup>() {
                 @Override
                 public void call(Subscriber<? super ApplicationEntityGroup> subscriber) {
-                    ApplicationEntityGroup entityGroup = new ApplicationEntityGroup(mock(ApplicationScope.class),new ArrayList<Id>());
+                    ApplicationEntityGroup entityGroup = new ApplicationEntityGroup(mock(ApplicationScope.class),new ArrayList<EntityIdScope>());
                     subscriber.onNext(entityGroup);
                     subscriber.onCompleted();
                 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeDataMigrationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeDataMigrationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeDataMigrationImpl.java
index cfece16..7ddde13 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeDataMigrationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeDataMigrationImpl.java
@@ -25,6 +25,7 @@ import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import org.apache.usergrid.persistence.core.migration.data.DataMigration;
 import org.apache.usergrid.persistence.core.scope.ApplicationEntityGroup;
+import org.apache.usergrid.persistence.core.scope.EntityIdScope;
 import org.apache.usergrid.persistence.graph.Edge;
 import org.apache.usergrid.persistence.graph.GraphManager;
 import org.apache.usergrid.persistence.graph.GraphManagerFactory;
@@ -76,11 +77,11 @@ public class EdgeDataMigrationImpl implements DataMigration {
             Observable
                 .from(applicationEntityGroup.entityIds)
 
-                .flatMap(new Func1<Id, Observable<List<Edge>>>() {
+                .flatMap(new Func1<EntityIdScope, Observable<List<Edge>>>() {
                     //for each id in the group, get it's edges
                     @Override
-                    public Observable<List<Edge>> call(final Id id) {
-                        logger.info("Migrating edges from node {} in scope {}", id,
+                    public Observable<List<Edge>> call(final EntityIdScope idScope) {
+                        logger.info("Migrating edges from node {} in scope {}", idScope.getId(),
                             applicationEntityGroup.applicationScope);
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/ea680f1a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityMap.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityMap.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityMap.java
index 59a2439..5dbd1fb 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityMap.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/EntityMap.java
@@ -30,24 +30,28 @@ public class EntityMap extends HashMap<String,Object> {
 
     @JsonIgnore
     public Id getId(){
-        return new SimpleId((UUID)get(ID_KEY), (String)get(TYPE_KEY));
+        return containsKey(ID_KEY) ? new SimpleId((UUID)get(ID_KEY), (String)get(TYPE_KEY)):null;
     }
 
     @JsonIgnore
     public void setId(Id id){
-        put(ID_KEY,id.getUuid());
-        put(TYPE_KEY,id.getType());
+        if(id!=null) {
+            put(ID_KEY, id.getUuid());
+            put(TYPE_KEY, id.getType());
+        }
 
     }
 
     @JsonIgnore
     public UUID getVersion(){
-        return (UUID) get(VERSION_KEY);
+        return containsKey(VERSION_KEY) ? (UUID) get(VERSION_KEY):null;
     }
 
     @JsonIgnore
     public void setVersion(UUID version){
-        put(VERSION_KEY,version);
+        if(version!=null) {
+            put(VERSION_KEY, version);
+        }
     }
 
     public static EntityMap fromEntity(Entity entity) {