Set consistency level to ALL for now on unique value serialization strategy as any cassandra inconsistencies will break the usage of the unique value index.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/02e1619c Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/02e1619c Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/02e1619c Branch: refs/heads/master Commit: 02e1619cbce1ada18d25048558ccdfc2a3341542 Parents: e0a5d98 Author: Michael Russo <[email protected]> Authored: Sun Jul 3 12:32:25 2016 -0700 Committer: Michael Russo <[email protected]> Committed: Sun Jul 3 12:32:25 2016 -0700 ---------------------------------------------------------------------- .../collection/impl/EntityCollectionManagerImpl.java | 4 +++- .../collection/mvcc/stage/write/WriteUniqueVerify.java | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/usergrid/blob/02e1619c/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 658c68c..5bdcf1d 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 @@ -333,8 +333,10 @@ public class EntityCollectionManagerImpl implements EntityCollectionManager { final UUID startTime = UUIDGenerator.newTimeUUID(); //Get back set of unique values that correspond to collection of fields + //Purposely use CL ALL as consistency is extremely important here, regardless of performance UniqueValueSet set = - uniqueValueSerializationStrategy.load( applicationScope, type, fields1 , uniqueIndexRepair); + uniqueValueSerializationStrategy + .load( applicationScope, ConsistencyLevel.CL_ALL, type, fields1 , uniqueIndexRepair); //Short circuit if we don't have any uniqueValues from the given fields. if ( !set.iterator().hasNext() ) { http://git-wip-us.apache.org/repos/asf/usergrid/blob/02e1619c/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 53160dc..01e6621 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 @@ -123,8 +123,9 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>> // loading will retrieve the oldest unique value entry for the field // don't use read repair on this pre-write check - UniqueValueSet set = uniqueValueStrat.load(scope, written.getEntityId().getType(), - Collections.singletonList(written.getField()), false); + // use CL ALL as consistency is extremely important here, more so than performance + UniqueValueSet set = uniqueValueStrat.load(scope, ConsistencyLevel.CL_ALL, + written.getEntityId().getType(), Collections.singletonList(written.getField()), false); set.forEach(uniqueValue -> {
