You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2015/03/25 01:13:09 UTC

[4/4] incubator-usergrid git commit: Work in progress. Initial interface changes complete.

Work in progress.  Initial interface changes complete.


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

Branch: refs/heads/USERGRID-509
Commit: a849912b44d36231c165fa8789d965f84c9c576d
Parents: adf19ed
Author: Todd Nine <tn...@apigee.com>
Authored: Tue Mar 24 18:13:04 2015 -0600
Committer: Todd Nine <tn...@apigee.com>
Committed: Tue Mar 24 18:13:04 2015 -0600

----------------------------------------------------------------------
 .../collection/CollectionMembers.java           | 72 ++++++++++++++++++++
 .../collection/EntityCollectionManager.java     |  8 +--
 .../persistence/collection/ScopeSet.java        | 42 +++++++-----
 .../cache/CachedEntityCollectionManager.java    |  6 +-
 .../exception/CollectionRuntimeException.java   |  2 +-
 .../impl/EntityCollectionManagerImpl.java       | 26 ++++---
 .../mvcc/MvccLogEntrySerializationStrategy.java |  4 +-
 .../mvcc/stage/write/WriteUniqueVerify.java     | 27 +++++---
 .../MvccEntitySerializationStrategy.java        |  4 +-
 .../UniqueValueSerializationStrategy.java       |  6 +-
 .../MvccEntitySerializationStrategyImpl.java    | 13 ++--
 ...vccEntitySerializationStrategyProxyImpl.java |  4 +-
 .../MvccEntitySerializationStrategyV3Impl.java  | 18 ++---
 .../MvccLogEntrySerializationStrategyImpl.java  | 17 ++---
 .../serialization/impl/ScopeSetImpl.java        | 67 ------------------
 15 files changed, 164 insertions(+), 152 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/CollectionMembers.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/CollectionMembers.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/CollectionMembers.java
new file mode 100644
index 0000000..11cf39a
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/CollectionMembers.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  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.
+ */
+
+package org.apache.usergrid.persistence.collection;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.usergrid.persistence.model.entity.Id;
+
+
+/**
+ * A set that contains the collection scope and the ids
+ */
+public class CollectionMembers<T> {
+
+
+    public final CollectionScope scope;
+    public final Collection<T> identifiers;
+
+
+    public CollectionMembers( final CollectionScope scope, final Collection<T> identifiers ) {
+        this.scope = scope;
+        this.identifiers = identifiers;
+    }
+
+
+    public CollectionMembers( final CollectionScope scope, final T identifier ) {
+        this.scope = scope;
+        this.identifiers = Collections.singleton( identifier );
+    }
+
+
+
+    public CollectionMembers( final CollectionScope scope ) {
+        this.scope = scope;
+        this.identifiers = new ArrayList<>(  );
+    }
+
+
+    public CollectionScope getScope() {
+        return scope;
+    }
+
+
+    public Collection<T> getIdentifiers() {
+        return identifiers;
+    }
+
+
+    public void addIdentifier( final T identifier ) {
+        this.identifiers.add( identifier );
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityCollectionManager.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityCollectionManager.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityCollectionManager.java
index 3a13b77..0e5fa33 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityCollectionManager.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityCollectionManager.java
@@ -57,9 +57,9 @@ public interface EntityCollectionManager {
     /**
      * Return the latest versions of the specified entityIds
      *
-     * @param entityId A collection of scopes with the entity Ids set
+     * @param entityIds A collection of scopes with the entity Ids set
      */
-    Observable<VersionSet> getLatestVersion( Collection<ScopeSet<Id>> entityId );
+    Observable<VersionSet> getLatestVersion( ScopeSet<Id> entityIds );
 
 
     /**
@@ -67,7 +67,7 @@ public interface EntityCollectionManager {
      * @param fields The collection of scopes for fields to use
      * @return
      */
-    Observable<FieldSet> getEntitiesFromFields( Collection<ScopeSet<Field>> fields );
+    Observable<FieldSet> getEntitiesFromFields( ScopeSet<Field> fields );
 
     /**
      * Gets the Id for a field
@@ -84,7 +84,7 @@ public interface EntityCollectionManager {
      *
      * @param entityIds The entity ids
      */
-    Observable<EntitySet> load(Collection<ScopeSet<Id>> entityIds);
+    Observable<EntitySet> load(ScopeSet<Id> entityIds);
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/ScopeSet.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/ScopeSet.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/ScopeSet.java
index 059c7cb..ebcd927 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/ScopeSet.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/ScopeSet.java
@@ -20,31 +20,39 @@
 package org.apache.usergrid.persistence.collection;
 
 
-import java.util.Collection;
-
-import org.apache.usergrid.persistence.model.entity.Id;
+import java.util.HashMap;
+import java.util.Map;
 
 
 /**
- * A set that contains the collection scope and the ids
+ * A set of scopes, keyed by collectionScope.
+ *
+ * @param <T> The type of value to encapsulate within the scope.  Examples would be Id objects or Fields
  */
-public interface ScopeSet<T> {
+public class ScopeSet<T> {
+
+    private Map<CollectionScope, CollectionMembers<T>> members  = new HashMap<>(  );
 
-    /**
-     * Get the scope for this set of ids
-     * @return
-     */
-    CollectionScope getScope();
 
     /**
-     * Get the set of Ids to load for this scope
+     * A factory method to generate a collection member with the given scope.  If one exists, it will be returned
+     * @param scope
      * @return
      */
-    Collection<T> getIdentifiers();
+    public CollectionMembers<T> getMembers(final CollectionScope scope){
+        final CollectionMembers<T> existing = members.get( scope );
+
+        if(existing != null){
+            return existing;
+        }
+
+        final CollectionMembers<T> newInstance = new CollectionMembers<T>( scope );
+
+        members.put( scope, newInstance );
+
+        return newInstance;
+    }
+
+
 
-    /**
-     * Add the itentifier to the list
-     * @param identifier
-     */
-    void addIdentifier(T identifier);
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
index 20a269b..823cbc7 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cache/CachedEntityCollectionManager.java
@@ -70,7 +70,7 @@ public class CachedEntityCollectionManager implements EntityCollectionManager {
     }
 
     @Override
-    public Observable<FieldSet> getEntitiesFromFields( final Collection<ScopeSet<Field>> fields ) {
+    public Observable<FieldSet> getEntitiesFromFields( final Collection<CollectionMembers<Field>> fields ) {
         return targetEntityCollectionManager.getEntitiesFromFields( fields );
     }
 
@@ -105,7 +105,7 @@ public class CachedEntityCollectionManager implements EntityCollectionManager {
 
 
     @Override
-    public Observable<VersionSet> getLatestVersion( final Collection<ScopeSet<Id>> entityId ) {
+    public Observable<VersionSet> getLatestVersion( final Collection<CollectionMembers<Id>> entityId ) {
         return targetEntityCollectionManager.getLatestVersion( entityId );
     }
 
@@ -117,7 +117,7 @@ public class CachedEntityCollectionManager implements EntityCollectionManager {
 
 
     @Override
-    public Observable<EntitySet> load( final Collection<ScopeSet<Id>> entityIds ) {
+    public Observable<EntitySet> load( final Collection<CollectionMembers<Id>> entityIds ) {
         return targetEntityCollectionManager.load( entityIds );
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/exception/CollectionRuntimeException.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/exception/CollectionRuntimeException.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/exception/CollectionRuntimeException.java
index fc4cac5..69f4dee 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/exception/CollectionRuntimeException.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/exception/CollectionRuntimeException.java
@@ -23,7 +23,7 @@ import org.apache.usergrid.persistence.collection.MvccEntity;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 
 
-public class CollectionRuntimeException extends RuntimeException {
+public abstract class CollectionRuntimeException extends RuntimeException {
 
     private MvccEntity entity;
     private ApplicationScope applicationScope;

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
index 9453c65..007fc5c 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityCollectionManagerImpl.java
@@ -19,11 +19,8 @@
 package org.apache.usergrid.persistence.collection.impl;
 
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,7 +32,7 @@ import org.apache.usergrid.persistence.collection.EntityCollectionManager;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.FieldSet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.VersionSet;
 import org.apache.usergrid.persistence.collection.guice.CollectionTaskExecutor;
 import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
@@ -51,8 +48,7 @@ import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerial
 import org.apache.usergrid.persistence.collection.serialization.UniqueValue;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValueSerializationStrategy;
 import org.apache.usergrid.persistence.collection.serialization.UniqueValueSet;
-import org.apache.usergrid.persistence.collection.serialization.impl.MutableFieldSet;
-import org.apache.usergrid.persistence.collection.serialization.impl.ScopeSetImpl;
+import org.apache.usergrid.persistence.collection.serialization.impl.CollectionMembersImpl;
 import org.apache.usergrid.persistence.core.guice.ProxyImpl;
 import org.apache.usergrid.persistence.core.metrics.MetricsFactory;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
@@ -71,7 +67,6 @@ import com.google.common.base.Preconditions;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 import com.netflix.astyanax.Keyspace;
-import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.OperationResult;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.ColumnFamily;
@@ -281,9 +276,10 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
 
         final Timer.Context timer = loadTimer.time();
 
-        final ScopeSet<Id> entityScopeSet = new ScopeSetImpl<>( collectionScope,  Collections.singleton( entityId ) );
+        final CollectionMembers<Id>
+            entityCollectionMembers = new CollectionMembersImpl<>( collectionScope,  Collections.singleton( entityId ) );
 
-        return load( Collections.singleton( entityScopeSet) ).flatMap(new Func1<EntitySet, Observable<Entity>>() {
+        return load( Collections.singleton( entityCollectionMembers ) ).flatMap(new Func1<EntitySet, Observable<Entity>>() {
             @Override
             public Observable<Entity> call(final EntitySet entitySet) {
                 final MvccEntity entity = entitySet.getEntity(entityId);
@@ -314,7 +310,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
 
 
     @Override
-    public Observable<EntitySet> load( final Collection<ScopeSet<Id>> entityIds ) {
+    public Observable<EntitySet> load( final Collection<CollectionMembers<Id>> entityIds ) {
 
         Preconditions.checkNotNull( entityIds, "entityIds cannot be null" );
 
@@ -359,8 +355,10 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
             public Id call( Field field ) {
                 try {
 
-                    final ScopeSet<Field> scopeSet = new ScopeSetImpl<>( collectionScope, field );
-                    final UniqueValueSet set = uniqueValueSerializationStrategy.load(applicationScope,  Collections.singleton( scopeSet ) );
+                    final CollectionMembers<Field>
+                        collectionMembers = new CollectionMembersImpl<>( collectionScope, field );
+                    final UniqueValueSet set = uniqueValueSerializationStrategy.load(applicationScope,  Collections.singleton(
+                        collectionMembers ) );
                     final UniqueValue value = set.getValue(collectionScope,  field.getName() );
                     return value == null ? null : value.getEntityId();
                 }
@@ -379,7 +377,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
      * @return
      */
     @Override
-    public Observable<FieldSet> getEntitiesFromFields( final Collection<ScopeSet<Field>> fields ) {
+    public Observable<FieldSet> getEntitiesFromFields( final Collection<CollectionMembers<Field>> fields ) {
 //        return rx.Observable.just(fields).map( new Func1<Collection<ScopeSet<Field>>, FieldSet>() {
 //            @Override
 //            public FieldSet call( Collection<ScopeSet<Field>> fields ) {
@@ -508,7 +506,7 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
 
 
     @Override
-    public Observable<VersionSet> getLatestVersion( final Collection<ScopeSet<Id>> entityIds ) {
+    public Observable<VersionSet> getLatestVersion( final Collection<CollectionMembers<Id>> entityIds ) {
 
         final Timer.Context timer = getLatestTimer.time();
         return Observable.create( new Observable.OnSubscribe<VersionSet>() {

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/MvccLogEntrySerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/MvccLogEntrySerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/MvccLogEntrySerializationStrategy.java
index 9f85f8c..daf9ee1 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/MvccLogEntrySerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/MvccLogEntrySerializationStrategy.java
@@ -25,7 +25,7 @@ import java.util.UUID;
 
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.VersionSet;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
@@ -59,7 +59,7 @@ public interface MvccLogEntrySerializationStrategy extends Migration {
      *
      * @return The deserialized version of the log entry
      */
-    VersionSet load(  ApplicationScope applicationScope,  Collection<ScopeSet<Id>> entityIds,  UUID version );
+    VersionSet load(  ApplicationScope applicationScope,  Collection<CollectionMembers<Id>> entityIds,  UUID version );
 
     /**
      * Load a list, from highest to lowest of the stage with versions <= version up to maxSize elements

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
index a881cbb..12c11a0 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerify.java
@@ -19,6 +19,8 @@ package org.apache.usergrid.persistence.collection.mvcc.stage.write;
 
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -28,8 +30,8 @@ import com.netflix.hystrix.HystrixCommand;
 import com.netflix.hystrix.HystrixCommandGroupKey;
 import com.netflix.hystrix.HystrixThreadPoolProperties;
 
-import org.apache.usergrid.persistence.collection.ScopeSet;
-import org.apache.usergrid.persistence.collection.serialization.impl.ScopeSetImpl;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
+import org.apache.usergrid.persistence.collection.serialization.impl.CollectionMembersImpl;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.util.EntityUtils;
 import org.apache.usergrid.persistence.core.astyanax.CassandraConfig;
@@ -155,18 +157,18 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
         private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
         private final CassandraConfig fig;
         private final ApplicationScope applicationScope;
-//        private final CollectionScope scope;
-        private final ScopeSet<Field> uniqueFields;
+        private final CollectionScope collectionScope;
+        private final Collection<Field> uniqueFields;
         private final Entity entity;
 
         public ConsistentReplayCommand( UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
-                                        CassandraConfig fig, final ApplicationScope applicationScope, CollectionScope
-                                            scope, List<Field> uniqueFields, Entity entity ){
+                                        CassandraConfig fig, final ApplicationScope applicationScope, final CollectionScope collectionScope, Collection<Field> uniqueFields, Entity entity ){
             super(REPLAY_GROUP);
             this.uniqueValueSerializationStrategy = uniqueValueSerializationStrategy;
             this.fig = fig;
             this.applicationScope = applicationScope;
-            uniqueFields = new ScopeSetImpl<Field>(scope, uniqueFields);
+            this.collectionScope = collectionScope;
+            this.uniqueFields = uniqueFields;
             this.entity = entity;
         }
 
@@ -184,8 +186,14 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
             //allocate our max size, worst case
             //now get the set of fields back
             final UniqueValueSet uniqueValues;
+
+            final CollectionMembers<Field>
+                collectionMembers = new CollectionMembersImpl<Field>( collectionScope, uniqueFields );
+
             try {
-                uniqueValues = uniqueValueSerializationStrategy.load( applicationScope,  scope,consistencyLevel, uniqueFields );
+
+             uniqueValues = uniqueValueSerializationStrategy.load( applicationScope ,consistencyLevel,
+                    Collections.singleton( collectionMembers ));
             }
             catch ( ConnectionException e ) {
                 throw new RuntimeException( "Unable to read from cassandra", e );
@@ -196,7 +204,8 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
             //loop through each field that was unique
             for ( final Field field : uniqueFields ) {
 
-                final UniqueValue uniqueValue = uniqueValues.getValue( field.getName() );
+
+                final UniqueValue uniqueValue = uniqueValues.getValue( collectionScope, field.getName() );
 
                 if ( uniqueValue == null ) {
                     throw new RuntimeException(

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
index 65be537..84b0a7e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/MvccEntitySerializationStrategy.java
@@ -26,7 +26,7 @@ import java.util.UUID;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.core.migration.data.VersionedData;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
@@ -57,7 +57,7 @@ public interface MvccEntitySerializationStrategy extends Migration, VersionedDat
      * @param entityIds
      * @return
      */
-    public EntitySet load(ApplicationScope applicationScope, Collection<ScopeSet<Id>> entityIds, UUID maxVersion);
+    public EntitySet load(ApplicationScope applicationScope, Collection<CollectionMembers<Id>> entityIds, UUID maxVersion);
 
     /**
      * Load a list, from highest to lowest of the entity with versions <= version up to maxSize elements

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
index ab1f24b..9bcbde3 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValueSerializationStrategy.java
@@ -25,7 +25,7 @@ import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.ConsistencyLevel;
 import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.core.migration.schema.Migration;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
@@ -65,7 +65,7 @@ public interface UniqueValueSerializationStrategy extends Migration {
      *
      * @throws ConnectionException on error connecting to Cassandra
      */
-    UniqueValueSet load(ApplicationScope applicationScope,  Collection<ScopeSet<Field>> fields ) throws ConnectionException;
+    UniqueValueSet load(ApplicationScope applicationScope,  Collection<CollectionMembers<Field>> fields ) throws ConnectionException;
 
     /**
     * Load UniqueValue that matches field from collection or null if that value does not exist.
@@ -76,7 +76,7 @@ public interface UniqueValueSerializationStrategy extends Migration {
     * @return UniqueValueSet containing fields from the collection that exist in cassandra
     * @throws ConnectionException on error connecting to Cassandra
     */
-    UniqueValueSet load(ApplicationScope applicationScope,  ConsistencyLevel consistencyLevel,  Collection<ScopeSet<Field>> fields ) throws ConnectionException;
+    UniqueValueSet load(ApplicationScope applicationScope,  ConsistencyLevel consistencyLevel,  Collection<CollectionMembers<Field>> fields ) throws ConnectionException;
 
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
index bfabf60..c1806da 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyImpl.java
@@ -35,8 +35,7 @@ import org.apache.cassandra.db.marshal.UUIDType;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
-import org.apache.usergrid.persistence.collection.ScopeSet;
-import org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
 import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
 import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
@@ -114,7 +113,7 @@ public abstract class MvccEntitySerializationStrategyImpl implements MvccEntityS
 
 
     @Override
-    public EntitySet load(final ApplicationScope applicationScope, final Collection<ScopeSet<Id>> entityIds,
+    public EntitySet load(final ApplicationScope applicationScope, final Collection<CollectionMembers<Id>> entityIds,
                            final UUID maxVersion ) {
 
 
@@ -177,8 +176,7 @@ public abstract class MvccEntitySerializationStrategyImpl implements MvccEntityS
                                        .withColumnRange( maxVersion, null, false, 1 ).execute().getResult();
                     }
                     catch ( ConnectionException e ) {
-                        throw new CollectionRuntimeException( null, applicationScope,
-                            "An error occurred connecting to cassandra", e );
+                        throw new RuntimeException("An error occurred connecting to cassandra", e );
                     }
                 } ).subscribeOn( scheduler );
             }, 10 )
@@ -279,8 +277,9 @@ public abstract class MvccEntitySerializationStrategyImpl implements MvccEntityS
     @Override
     public Optional<MvccEntity> load( final ApplicationScope applicationScope, final CollectionScope scope, final Id entityId ) {
 
-        final ScopeSet<Id> scopeSet = new ScopeSetImpl<>( scope, Collections.singleton( entityId ) );
-        final EntitySet results = load(applicationScope,  Collections.singleton( scopeSet ) , UUIDGenerator.newTimeUUID() );
+        final CollectionMembers<Id>
+            collectionMembers = new CollectionMembersImpl<>( scope, Collections.singleton( entityId ) );
+        final EntitySet results = load(applicationScope,  Collections.singleton( collectionMembers ) , UUIDGenerator.newTimeUUID() );
 
         return Optional.fromNullable( results.getEntity( entityId ));
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/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 4d60f5d..cb2f89e 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
@@ -25,7 +25,7 @@ import java.util.UUID;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.serialization.MvccEntitySerializationStrategy;
 import org.apache.usergrid.persistence.collection.serialization.impl.migration.CollectionMigrationPlugin;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
@@ -84,7 +84,7 @@ public class MvccEntitySerializationStrategyProxyImpl implements MvccEntitySeria
 
 
     @Override
-    public EntitySet load(  final ApplicationScope applicationScope, final Collection<ScopeSet<Id>> entityIds, final UUID maxVersion ) {
+    public EntitySet load(  final ApplicationScope applicationScope, final Collection<CollectionMembers<Id>> entityIds, final UUID maxVersion ) {
 
         final MigrationRelationship<MvccEntitySerializationStrategy> migration = getMigrationRelationShip();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
index 7b6124e..110311b 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccEntitySerializationStrategyV3Impl.java
@@ -18,8 +18,7 @@ import org.apache.cassandra.db.marshal.BytesType;
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.EntitySet;
 import org.apache.usergrid.persistence.collection.MvccEntity;
-import org.apache.usergrid.persistence.collection.ScopeSet;
-import org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.exception.DataCorruptionException;
 import org.apache.usergrid.persistence.collection.exception.EntityTooLargeException;
 import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
@@ -54,14 +53,11 @@ import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
 import com.netflix.astyanax.model.Column;
 import com.netflix.astyanax.model.ColumnList;
 import com.netflix.astyanax.model.Row;
-import com.netflix.astyanax.model.Rows;
 import com.netflix.astyanax.serializers.AbstractSerializer;
 import com.netflix.astyanax.serializers.BooleanSerializer;
 
 import rx.Observable;
 import rx.Scheduler;
-import rx.functions.Func1;
-import rx.functions.Func2;
 import rx.schedulers.Schedulers;
 
 
@@ -123,7 +119,7 @@ public class MvccEntitySerializationStrategyV3Impl implements MvccEntitySerializ
 
 
     @Override
-    public EntitySet load( final ApplicationScope applicationScope, final Collection<ScopeSet<Id>> entityIds,
+    public EntitySet load( final ApplicationScope applicationScope, final Collection<CollectionMembers<Id>> entityIds,
                            final UUID maxVersion ) {
 
 
@@ -144,7 +140,7 @@ public class MvccEntitySerializationStrategyV3Impl implements MvccEntitySerializ
 
         final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new ArrayList<>( entityIds.size() );
 
-        for(ScopeSet<Id> collectionScope: entityIds) {
+        for(CollectionMembers<Id> collectionScope: entityIds) {
 
             final Id ownerId = collectionScope.getScope().getOwner();
             final String collectionName = collectionScope.getScope().getName();
@@ -206,8 +202,7 @@ public class MvccEntitySerializationStrategyV3Impl implements MvccEntitySerializ
                                        .withColumnSlice( COL_VALUE ).execute().getResult();
                     }
                     catch ( ConnectionException e ) {
-                        throw new CollectionRuntimeException( null, applicationScope,
-                            "An error occurred connecting to cassandra", e );
+                        throw new RuntimeException("An error occurred connecting to cassandra", e );
                     }
                 } ).subscribeOn( scheduler );
             }, 10 )
@@ -278,9 +273,10 @@ public class MvccEntitySerializationStrategyV3Impl implements MvccEntitySerializ
     public Optional<MvccEntity> load(  final ApplicationScope applicationScope, final CollectionScope scope, final Id entityId ) {
 
 
-        final ScopeSet<Id> scopeSet = new ScopeSetImpl<>( scope, Collections.singleton( entityId ) );
+        final CollectionMembers<Id>
+            collectionMembers = new CollectionMembersImpl<>( scope, Collections.singleton( entityId ) );
 
-        final EntitySet results = load( applicationScope, Collections.singleton( scopeSet ), UUIDGenerator.newTimeUUID() );
+        final EntitySet results = load( applicationScope, Collections.singleton( collectionMembers ), UUIDGenerator.newTimeUUID() );
 
         return Optional.fromNullable( results.getEntity( entityId ));
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
index 4e71e38..8a628b6 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/MvccLogEntrySerializationStrategyImpl.java
@@ -38,9 +38,8 @@ import org.apache.cassandra.db.marshal.UUIDType;
 
 import org.apache.usergrid.persistence.collection.CollectionScope;
 import org.apache.usergrid.persistence.collection.MvccLogEntry;
-import org.apache.usergrid.persistence.collection.ScopeSet;
+import org.apache.usergrid.persistence.collection.CollectionMembers;
 import org.apache.usergrid.persistence.collection.VersionSet;
-import org.apache.usergrid.persistence.collection.exception.CollectionRuntimeException;
 import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
 import org.apache.usergrid.persistence.collection.mvcc.entity.Stage;
 import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccLogEntryImpl;
@@ -49,7 +48,6 @@ import org.apache.usergrid.persistence.core.astyanax.IdRowCompositeSerializer;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamily;
 import org.apache.usergrid.persistence.core.astyanax.MultiTennantColumnFamilyDefinition;
 import org.apache.usergrid.persistence.core.astyanax.ScopedRowKey;
-import org.apache.usergrid.persistence.core.migration.schema.Migration;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.model.entity.Id;
 
@@ -128,7 +126,7 @@ public class MvccLogEntrySerializationStrategyImpl implements MvccLogEntrySerial
 
 
     @Override
-    public VersionSet load( final ApplicationScope applicationScope, final Collection<ScopeSet<Id>> entityIds,
+    public VersionSet load( final ApplicationScope applicationScope, final Collection<CollectionMembers<Id>> entityIds,
                             final UUID maxVersion ) {
         Preconditions.checkNotNull( applicationScope, "applicationScope is required" );
         Preconditions.checkNotNull( entityIds, "entityIds is required" );
@@ -148,11 +146,11 @@ public class MvccLogEntrySerializationStrategyImpl implements MvccLogEntrySerial
         final List<ScopedRowKey<CollectionPrefixedKey<Id>>> rowKeys = new ArrayList<>( entityIds.size() );
 
 
-        for(ScopeSet<Id> scopeSet: entityIds) {
-            final Id ownerId = scopeSet.getScope().getOwner();
-            final String collectionName = scopeSet.getScope().getName();
+        for(CollectionMembers<Id> collectionMembers : entityIds) {
+            final Id ownerId = collectionMembers.getScope().getOwner();
+            final String collectionName = collectionMembers.getScope().getName();
 
-            for ( final Id entityId : scopeSet.getIdentifiers() ) {
+            for ( final Id entityId : collectionMembers.getIdentifiers() ) {
                 final CollectionPrefixedKey<Id> collectionPrefixedKey =
                     new CollectionPrefixedKey<>( collectionName, ownerId, entityId );
 
@@ -175,8 +173,7 @@ public class MvccLogEntrySerializationStrategyImpl implements MvccLogEntrySerial
                                           .iterator();
         }
         catch ( ConnectionException e ) {
-            throw new CollectionRuntimeException( null, applicationScope, "An error occurred connecting to cassandra",
-                    e );
+            throw new RuntimeException( "An error occurred connecting to cassandra", e );
         }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/a849912b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
deleted file mode 100644
index 98abb4b..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/ScopeSetImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  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.
- */
-
-package org.apache.usergrid.persistence.collection.serialization.impl;
-
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.collection.ScopeSet;
-
-
-public class ScopeSetImpl<T> implements ScopeSet<T> {
-
-
-    public final CollectionScope scope;
-    public final Collection<T> identifiers;
-
-
-    public ScopeSetImpl( final CollectionScope scope, final Collection<T> identifiers ) {
-        this.scope = scope;
-        this.identifiers = identifiers;
-    }
-
-
-    public ScopeSetImpl( final CollectionScope scope, final T identifier ) {
-        this.scope = scope;
-        this.identifiers = Collections.singleton(identifier);
-    }
-
-
-
-    @Override
-    public CollectionScope getScope() {
-        return scope;
-    }
-
-
-    @Override
-    public Collection<T> getIdentifiers() {
-        return identifiers;
-    }
-
-
-    @Override
-    public void addIdentifier( final T identifier ) {
-        this.identifiers.add( identifier );
-    }
-}