You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2014/10/27 21:03:15 UTC

[5/6] git commit: Fix Multi-bindings setup, which requires a Set and not a List for injected multi-bindings.

Fix Multi-bindings setup, which requires a Set and not a List for injected multi-bindings.


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

Branch: refs/heads/two-dot-o-events
Commit: 50728fee145018e79d00c345c18c0cbc1f0e50a3
Parents: 91314e2
Author: Dave Johnson <dm...@apigee.com>
Authored: Mon Oct 27 16:00:31 2014 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Mon Oct 27 16:00:31 2014 -0400

----------------------------------------------------------------------
 .../usergrid/corepersistence/GuiceModule.java   | 18 +++++-----
 .../collection/EntityCollectionManager.java     | 13 ++------
 .../collection/EntityVersionCleanupFactory.java |  7 +++-
 .../collection/guice/CollectionModule.java      | 19 ++++-------
 .../impl/EntityCollectionManagerImpl.java       | 25 ++++++++------
 .../collection/impl/EntityDeletedTask.java      | 31 ++++++++++-------
 .../impl/EntityVersionCleanupTask.java          | 35 ++++++++++----------
 .../impl/EntityVersionCleanupTaskTest.java      | 29 ++++++++--------
 8 files changed, 90 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/core/src/main/java/org/apache/usergrid/corepersistence/GuiceModule.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/GuiceModule.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/GuiceModule.java
index 890b08f..a11fe8b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/GuiceModule.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/GuiceModule.java
@@ -13,10 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.usergrid.corepersistence;
 
-
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.Multibinder;
 import org.apache.usergrid.corepersistence.events.EntityDeletedImpl;
@@ -36,8 +34,9 @@ import org.slf4j.LoggerFactory;
 /**
  * Guice Module that encapsulates Core Persistence.
  */
-public class GuiceModule  extends AbstractModule {
-    private static final Logger LOG = LoggerFactory.getLogger( GuiceModule.class );
+public class GuiceModule extends AbstractModule {
+
+    private static final Logger logger = LoggerFactory.getLogger(GuiceModule.class);
 
     @Override
     protected void configure() {
@@ -49,13 +48,12 @@ public class GuiceModule  extends AbstractModule {
         install(new MapModule());
         install(new QueueModule());
 
-        bind(CpEntityDeleteListener.class).asEagerSingleton();
-        bind(CpEntityIndexDeleteListener.class).asEagerSingleton();
-
+        Multibinder<EntityDeleted> entityBinder
+                = Multibinder.newSetBinder(binder(), EntityDeleted.class);
+        entityBinder.addBinding().to(EntityDeletedImpl.class);
 
-        Multibinder<EntityDeleted> entityBinder =  Multibinder.newSetBinder(binder(), EntityDeleted.class);
-        entityBinder.addBinding().to( EntityDeletedImpl.class );
-        Multibinder<EntityVersionDeleted> versionBinder = Multibinder.newSetBinder(binder(), EntityVersionDeleted.class);
+        Multibinder<EntityVersionDeleted> versionBinder
+                = Multibinder.newSetBinder(binder(), EntityVersionDeleted.class);
         versionBinder.addBinding().to(EntityVersionDeletedImpl.class);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/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 f976cb5..5b75f22 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
@@ -20,8 +20,8 @@ package org.apache.usergrid.persistence.collection;
 
 
 import java.util.Collection;
+import org.apache.usergrid.persistence.collection.event.EntityDeleted;
 
-import java.util.UUID;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.entity.Id;
 
@@ -39,7 +39,6 @@ public interface EntityCollectionManager {
     /**
      * Write the entity in the entity collection.  This is an entire entity, it's contents will
      * completely overwrite the previous values, if it exists.
-     *
      * @param entity The entity to update
      */
     public Observable<Entity> write( Entity entity );
@@ -62,25 +61,19 @@ public interface EntityCollectionManager {
 
     /**
      * Gets the Id for a field
-     * @param field
      * @return most likely a single Id, watch for onerror events
      */
     public Observable<Id> getIdField(final Field field);
 
     /**
      * Load all the entityIds into the observable entity set
-     * @param entityIds
-     * @return
      */
     public Observable<EntitySet> load(Collection<Id> entityIds);
 
-
     /**
      * Takes the change and reloads an entity with all changes applied in this entity applied.
-     * The resulting entity from calling load will be the previous version of this entity + the entity
-     * in this object applied to it.
-     * @param entity
-     * @return
+     * The resulting entity from calling load will be the previous version of this entity plus 
+     * the entity in this object applied to it.
      */
     public Observable<Entity> update ( Entity entity );
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityVersionCleanupFactory.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityVersionCleanupFactory.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityVersionCleanupFactory.java
index c349070..2232f00 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityVersionCleanupFactory.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/EntityVersionCleanupFactory.java
@@ -24,7 +24,12 @@ import org.apache.usergrid.persistence.model.entity.Id;
 
 import java.util.UUID;
 
+
 public interface EntityVersionCleanupFactory {
-    public EntityVersionCleanupTask getTask( final CollectionScope scope, final Id entityId, final UUID version );
+
+    public EntityVersionCleanupTask getTask( 
+        final CollectionScope scope, 
+        final Id entityId, 
+        final UUID version );
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/guice/CollectionModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/guice/CollectionModule.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/guice/CollectionModule.java
index 7dc8a4c..3532fe0 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/guice/CollectionModule.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/guice/CollectionModule.java
@@ -28,7 +28,6 @@ import org.apache.usergrid.persistence.collection.EntityCollectionManagerSync;
 import org.apache.usergrid.persistence.collection.EntityDeletedFactory;
 import org.apache.usergrid.persistence.collection.EntityVersionCleanupFactory;
 import org.apache.usergrid.persistence.collection.event.EntityDeleted;
-import org.apache.usergrid.persistence.collection.event.EntityVersionCreated;
 import org.apache.usergrid.persistence.collection.event.EntityVersionDeleted;
 import org.apache.usergrid.persistence.collection.impl.EntityCollectionManagerImpl;
 import org.apache.usergrid.persistence.collection.impl.EntityCollectionManagerSyncImpl;
@@ -52,6 +51,7 @@ import com.google.inject.Singleton;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
 import com.google.inject.multibindings.Multibinder;
 import java.util.List;
+import org.apache.usergrid.persistence.collection.event.EntityVersionCreated;
 
 
 /**
@@ -65,34 +65,27 @@ public class CollectionModule extends AbstractModule {
     @Override
     protected void configure() {
 
-        //noinspection unchecked
+        // noinspection unchecked
         install( new GuicyFigModule( SerializationFig.class ) );
-
         install( new SerializationModule() );
         install( new ServiceModule() );
 
-        install ( new FactoryModuleBuilder()
-                .build( EntityVersionCleanupFactory.class ));
-
-        install ( new FactoryModuleBuilder()
-                  .build( EntityDeletedFactory.class));
+        install ( new FactoryModuleBuilder().build( EntityVersionCleanupFactory.class ));
+        install ( new FactoryModuleBuilder().build( EntityDeletedFactory.class));
 
-        //bind empty list.  including modules can add impelmentations
+        // users of this module can add their own implemementations
+        // for more information: https://github.com/google/guice/wiki/Multibindings
         Multibinder.newSetBinder( binder(), EntityVersionDeleted.class );
         Multibinder.newSetBinder( binder(), EntityVersionCreated.class );
         Multibinder.newSetBinder( binder(), EntityDeleted.class );
 
-
         // create a guice factor for getting our collection manager
         install( new FactoryModuleBuilder()
             .implement( EntityCollectionManager.class, EntityCollectionManagerImpl.class )
             .implement( EntityCollectionManagerSync.class, EntityCollectionManagerSyncImpl.class )
             .build( EntityCollectionManagerFactory.class ) );
 
-
-        //bind( EntityVersionDeleted.class).to( org.apache.usergrid.corepersistence.events.EntityVersionDeletedImpl.class );
         bind( UniqueValueSerializationStrategy.class ).to( UniqueValueSerializationStrategyImpl.class );
-
         bind( ChangeLogGenerator.class).to( ChangeLogGeneratorImpl.class);
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/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 5a816b5..0170116 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
@@ -21,8 +21,6 @@ package org.apache.usergrid.persistence.collection.impl;
 
 import org.apache.usergrid.persistence.collection.*;
 
-import java.net.ConnectException;
-import java.util.*;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -32,7 +30,6 @@ 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.core.task.Task;
-import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.apache.usergrid.persistence.model.field.Field;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -61,6 +58,8 @@ import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 import com.google.common.base.Preconditions;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
+import java.util.ArrayList;
+import org.apache.usergrid.persistence.collection.event.EntityDeleted;
 
 import rx.Observable;
 import rx.Subscriber;
@@ -81,7 +80,6 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
     private final CollectionScope collectionScope;
     private final UUIDService uuidService;
 
-
     //start stages
     private final WriteStart writeStart;
     private final WriteStart writeUpdate;
@@ -90,17 +88,18 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
     private final WriteCommit writeCommit;
     private final RollbackAction rollback;
 
-
     //delete stages
     private final MarkStart markStart;
     private final MarkCommit markCommit;
 
     private final TaskExecutor taskExecutor;
-    private EntityVersionCleanupFactory entityVersionCleanupFactory;
+    private final EntityVersionCleanupFactory entityVersionCleanupFactory;
     private final MvccLogEntrySerializationStrategy mvccLogEntrySerializationStrategy;
     private final MvccEntitySerializationStrategy entitySerializationStrategy;
-    private EntityDeletedFactory entityDeletedFactory;
-    private UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
+    private final EntityDeletedFactory entityDeletedFactory;
+    private final UniqueValueSerializationStrategy uniqueValueSerializationStrategy;
+
+    private List<EntityDeleted> entityDeletedListeners = new ArrayList<EntityDeleted>();
 
 
     @Inject
@@ -170,9 +169,13 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager {
         observable.map(writeCommit).doOnNext(new Action1<Entity>() {
             @Override
             public void call(final Entity entity) {
-                //TODO fire a task here
-                taskExecutor.submit(entityVersionCleanupFactory.getTask(collectionScope, entityId,entity.getVersion()));
-                //post-processing to come later. leave it empty for now.
+
+                // TODO fire a task here
+
+                taskExecutor.submit(entityVersionCleanupFactory.getTask( 
+                    collectionScope, entityId, entity.getVersion() ));
+
+                // post-processing to come later. leave it empty for now.
             }
         }).doOnError(rollback);
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityDeletedTask.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityDeletedTask.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityDeletedTask.java
index 0755025..284cf5b 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityDeletedTask.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityDeletedTask.java
@@ -35,7 +35,7 @@ import rx.functions.Action1;
 import rx.functions.Func1;
 import rx.schedulers.Schedulers;
 
-import java.util.List;
+import java.util.Set;
 import java.util.UUID;
 
 
@@ -43,23 +43,26 @@ import java.util.UUID;
  * Fires Cleanup Task
  */
 public class EntityDeletedTask implements Task<Void> {
+    private static final Logger LOG =  LoggerFactory.getLogger(EntityDeletedTask.class);
+
     private EntityVersionCleanupFactory entityVersionCleanupFactory;
     private MvccLogEntrySerializationStrategy logEntrySerializationStrategy;
     private MvccEntitySerializationStrategy entitySerializationStrategy;
-    private List<EntityDeleted> listeners;
+    private Set<EntityDeleted> listeners;
     private final CollectionScope collectionScope;
     private final Id entityId;
     private final UUID version;
-    private static final Logger LOG =  LoggerFactory.getLogger(EntityDeletedTask.class);
+
 
     @Inject
-    public EntityDeletedTask( EntityVersionCleanupFactory             entityVersionCleanupFactory,
-                              final MvccLogEntrySerializationStrategy logEntrySerializationStrategy,
-                              final MvccEntitySerializationStrategy   entitySerializationStrategy,
-                              final List<EntityDeleted>               listeners,
-                              @Assisted final CollectionScope collectionScope,
-                              @Assisted final Id entityId, 
-                              @Assisted final UUID version) {
+    public EntityDeletedTask( 
+        EntityVersionCleanupFactory             entityVersionCleanupFactory,
+        final MvccLogEntrySerializationStrategy logEntrySerializationStrategy,
+        final MvccEntitySerializationStrategy   entitySerializationStrategy,
+        final Set<EntityDeleted>                listeners, // MUST be a set or Guice will not inject
+        @Assisted final CollectionScope         collectionScope, 
+        @Assisted final Id                      entityId, 
+        @Assisted final UUID                    version) {
 
         this.entityVersionCleanupFactory = entityVersionCleanupFactory;
         this.logEntrySerializationStrategy = logEntrySerializationStrategy;
@@ -70,12 +73,14 @@ public class EntityDeletedTask implements Task<Void> {
         this.version = version;
     }
 
+
     @Override
     public void exceptionThrown(Throwable throwable) {
         LOG.error( "Unable to run update task for collection {} with entity {} and version {}",
                 new Object[] { collectionScope, entityId, version }, throwable );
     }
 
+    
     @Override
     public Void rejected() {
         try {
@@ -88,10 +93,11 @@ public class EntityDeletedTask implements Task<Void> {
         return null;
     }
 
+    
     @Override
     public Void call() throws Exception { 
 
-        entityVersionCleanupFactory.getTask( collectionScope, entityId, version, listeners ).call();
+        entityVersionCleanupFactory.getTask( collectionScope, entityId, version ).call();
 
         fireEvents();
         final MutationBatch entityDelete = entitySerializationStrategy.delete(collectionScope, entityId, version);
@@ -102,6 +108,7 @@ public class EntityDeletedTask implements Task<Void> {
         return null;
     }
 
+
     private void fireEvents() {
         final int listenerSize = listeners.size();
 
@@ -110,7 +117,7 @@ public class EntityDeletedTask implements Task<Void> {
         }
 
         if ( listenerSize == 1 ) {
-            listeners.get( 0 ).deleted( collectionScope, entityId,version );
+            listeners.iterator().next().deleted( collectionScope, entityId,version );
             return;
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTask.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTask.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTask.java
index ca66192..d45eeb9 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTask.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTask.java
@@ -45,6 +45,7 @@ import org.apache.usergrid.persistence.model.entity.Id;
 import com.netflix.astyanax.Keyspace;
 import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import java.util.Set;
 
 import rx.Observable;
 import rx.functions.Action1;
@@ -58,10 +59,9 @@ import rx.schedulers.Schedulers;
  */
 public class EntityVersionCleanupTask implements Task<Void> {
 
-    private static final Logger LOG = LoggerFactory.getLogger( EntityVersionCleanupTask.class );
+    private static final Logger logger = LoggerFactory.getLogger( EntityVersionCleanupTask.class );
 
-
-    private final List<EntityVersionDeleted> listeners;
+    private final Set<EntityVersionDeleted> listeners;
 
     private final MvccLogEntrySerializationStrategy logEntrySerializationStrategy;
     private final MvccEntitySerializationStrategy entitySerializationStrategy;
@@ -76,14 +76,16 @@ public class EntityVersionCleanupTask implements Task<Void> {
 
 
     @Inject
-    public EntityVersionCleanupTask( final SerializationFig serializationFig,
-                            final MvccLogEntrySerializationStrategy logEntrySerializationStrategy,
-                            final MvccEntitySerializationStrategy entitySerializationStrategy,
-                            final UniqueValueSerializationStrategy uniqueValueSerializationStrategy,
-                            final Keyspace keyspace,
-                            @Assisted final CollectionScope scope,
-                            final List<EntityVersionDeleted> listeners,
-                            @Assisted final Id entityId,@Assisted final UUID version ) {
+    public EntityVersionCleanupTask( 
+        final SerializationFig serializationFig,
+        final MvccLogEntrySerializationStrategy logEntrySerializationStrategy,
+        final MvccEntitySerializationStrategy   entitySerializationStrategy,
+        final UniqueValueSerializationStrategy  uniqueValueSerializationStrategy,
+        final Keyspace                          keyspace,
+        final Set<EntityVersionDeleted>         listeners, // MUST be a set or Guice will not inject
+        @Assisted final CollectionScope         scope,
+        @Assisted final Id                      entityId,
+        @Assisted final UUID                    version ) {
 
         this.serializationFig = serializationFig;
         this.logEntrySerializationStrategy = logEntrySerializationStrategy;
@@ -99,7 +101,7 @@ public class EntityVersionCleanupTask implements Task<Void> {
 
     @Override
     public void exceptionThrown( final Throwable throwable ) {
-        LOG.error( "Unable to run update task for collection {} with entity {} and version {}",
+        logger.error( "Unable to run update task for collection {} with entity {} and version {}",
                 new Object[] { scope, entityId, version }, throwable );
     }
 
@@ -193,7 +195,7 @@ public class EntityVersionCleanupTask implements Task<Void> {
 
         final int removedCount = deleteFieldsObservable.count().toBlocking().last();
 
-        LOG.debug("Removed unique values for {} entities of entity {}",removedCount,entityId);
+        logger.debug("Removed unique values for {} entities of entity {}",removedCount,entityId);
 
         return null;
     }
@@ -208,12 +210,11 @@ public class EntityVersionCleanupTask implements Task<Void> {
         }
 
         if ( listenerSize == 1 ) {
-            listeners.get( 0 ).versionDeleted( scope, entityId, versions );
-            //listeners.iterator().next().versionDeleted( scope,entityId,versions );
+            listeners.iterator().next().versionDeleted( scope, entityId, versions );
             return;
         }
 
-        LOG.debug( "Started firing {} listeners", listenerSize );
+        logger.debug( "Started firing {} listeners", listenerSize );
 
         //if we have more than 1, run them on the rx scheduler for a max of 8 operations at a time
         Observable.from( listeners )
@@ -232,7 +233,7 @@ public class EntityVersionCleanupTask implements Task<Void> {
                 }
             }, Schedulers.io() ).toBlocking().last();
 
-        LOG.debug( "Finished firing {} listeners", listenerSize );
+        logger.debug( "Finished firing {} listeners", listenerSize );
     }
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/50728fee/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
index 2665dc2..621db20 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/impl/EntityVersionCleanupTaskTest.java
@@ -21,7 +21,6 @@ package org.apache.usergrid.persistence.collection.impl;
 
 import com.google.common.base.Optional;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
@@ -48,6 +47,8 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.netflix.astyanax.Keyspace;
 import com.netflix.astyanax.MutationBatch;
 import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import java.util.HashSet;
+import java.util.Set;
 import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
 import org.apache.usergrid.persistence.model.entity.Entity;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
@@ -59,6 +60,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import org.mockito.internal.util.collections.Sets;
 
 
 /**
@@ -102,7 +104,7 @@ public class EntityVersionCleanupTaskTest {
             .thenReturn( logBatch );
 
         // intentionally no events
-        final List<EntityVersionDeleted> listeners = new ArrayList<EntityVersionDeleted>();
+        final Set<EntityVersionDeleted> listeners = new HashSet<EntityVersionDeleted>();
 
         final Id applicationId = new SimpleId( "application" );
 
@@ -127,8 +129,8 @@ public class EntityVersionCleanupTaskTest {
                         ess,
                         uvss,
                         keyspace,
-                        appScope,
                         listeners,
+                        appScope,
                         entityId,
                         version
                 );
@@ -199,7 +201,7 @@ public class EntityVersionCleanupTaskTest {
 
 
         //intentionally no events
-        final List<EntityVersionDeleted> listeners = new ArrayList<EntityVersionDeleted>();
+        final Set<EntityVersionDeleted> listeners = new HashSet<EntityVersionDeleted>();
 
         final Id applicationId = new SimpleId( "application" );
 
@@ -226,8 +228,8 @@ public class EntityVersionCleanupTaskTest {
                         ess,
                         uniqueValueSerializationStrategy,
                         keyspace,
-                        appScope,
                         listeners,
+                        appScope,
                         entityId,
                         version
                 );
@@ -305,7 +307,7 @@ public class EntityVersionCleanupTaskTest {
 
         final EntityVersionDeletedTest eventListener = new EntityVersionDeletedTest( latch );
 
-        final List<EntityVersionDeleted> listeners = new ArrayList<EntityVersionDeleted>();
+        final Set<EntityVersionDeleted> listeners = new HashSet<EntityVersionDeleted>();
 
         listeners.add( eventListener );
 
@@ -335,8 +337,8 @@ public class EntityVersionCleanupTaskTest {
                         ess,
                         uniqueValueSerializationStrategy,
                         keyspace,
-                        appScope,
                         listeners,
+                        appScope,
                         entityId,
                         version
                 );
@@ -423,7 +425,7 @@ public class EntityVersionCleanupTaskTest {
         final EntityVersionDeletedTest listener2 = new EntityVersionDeletedTest( latch );
         final EntityVersionDeletedTest listener3 = new EntityVersionDeletedTest( latch );
 
-        final List<EntityVersionDeleted> listeners = new ArrayList<EntityVersionDeleted>();
+        final Set<EntityVersionDeleted> listeners = new HashSet<EntityVersionDeleted>();
 
         listeners.add( listener1 );
         listeners.add( listener2 );
@@ -448,8 +450,8 @@ public class EntityVersionCleanupTaskTest {
                         ess,
                         uniqueValueSerializationStrategy,
                         keyspace,
-                        appScope,
                         listeners,
+                        appScope,
                         entityId,
                         version
                 );
@@ -550,7 +552,7 @@ public class EntityVersionCleanupTaskTest {
         final SlowListener listener4 = new SlowListener( latch, waitSemaphore );
         final SlowListener listener5 = new SlowListener( latch, waitSemaphore );
 
-        final List<EntityVersionDeleted> listeners = new ArrayList<>();
+        final Set<EntityVersionDeleted> listeners = new HashSet<EntityVersionDeleted>();
 
         listeners.add( listener1 );
         listeners.add( listener2 );
@@ -584,8 +586,8 @@ public class EntityVersionCleanupTaskTest {
                         mvccEntitySerializationStrategy,
                         uniqueValueSerializationStrategy,
                         keyspace,
-                        appScope,
                         listeners,
+                        appScope,
                         entityId,
                         version
                 );
@@ -721,8 +723,8 @@ public class EntityVersionCleanupTaskTest {
             mvccEntitySerializationStrategy, 
             uniqueValueSerializationStrategy, 
             keyspace1,
+            Sets.newSet( (EntityVersionDeleted)runListener ),
             appScope,  
-            Arrays.<EntityVersionDeleted>asList( slowListener ),
             entityId, 
             version );
 
@@ -736,8 +738,8 @@ public class EntityVersionCleanupTaskTest {
             mvccEntitySerializationStrategy,
             uniqueValueSerializationStrategy, 
             keyspace2, 
+            Sets.newSet( (EntityVersionDeleted)runListener ),
             appScope,
-            Arrays.<EntityVersionDeleted>asList( runListener ),
             entityId, 
             version );
 
@@ -813,6 +815,7 @@ public class EntityVersionCleanupTaskTest {
                 final List<MvccEntity> entityVersion ) {
             invocationLatch.countDown();
         }
+
     }