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 2014/10/10 17:50:09 UTC
[02/43] git commit: Fixed issue with UUID not being generated on write
Fixed issue with UUID not being generated on write
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/792b2b2c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/792b2b2c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/792b2b2c
Branch: refs/heads/two-dot-o-events
Commit: 792b2b2c6fafb5c09ceb6c5c0786ac5572e09ff5
Parents: 150897d
Author: Todd Nine <to...@apache.org>
Authored: Tue Oct 7 17:56:32 2014 -0600
Committer: Todd Nine <to...@apache.org>
Committed: Tue Oct 7 17:56:32 2014 -0600
----------------------------------------------------------------------
.../mvcc/entity/MvccValidationUtils.java | 3 ++
.../mvcc/stage/delete/MarkCommit.java | 4 +-
.../mvcc/stage/write/RollbackAction.java | 4 +-
.../mvcc/stage/write/WriteCommit.java | 7 ++--
.../collection/mvcc/stage/write/WriteStart.java | 9 +++--
.../mvcc/stage/write/WriteUniqueVerify.java | 19 ++++-----
.../collection/serialization/UniqueValue.java | 6 ---
.../UniqueValueSerializationStrategy.java | 6 +--
.../impl/EntityVersionSerializer.java | 16 ++++++--
.../serialization/impl/FieldSerializer.java | 23 ++++++-----
.../serialization/impl/UniqueValueImpl.java | 21 +++-------
.../UniqueValueSerializationStrategyImpl.java | 42 +++++++++++++-------
.../collection/EntityCollectionManagerIT.java | 2 +-
...niqueValueSerializationStrategyImplTest.java | 14 +++----
.../stage/write/WriteOptimisticVerifyTest.java | 14 +++----
15 files changed, 102 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/entity/MvccValidationUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/entity/MvccValidationUtils.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/entity/MvccValidationUtils.java
index e03def7..f40572a 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/entity/MvccValidationUtils.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/entity/MvccValidationUtils.java
@@ -28,6 +28,8 @@ import static org.apache.usergrid.persistence.core.util.ValidationUtils.verifyEn
import static org.apache.usergrid.persistence.core.util.ValidationUtils.verifyIdentity;
import static org.apache.usergrid.persistence.core.util.ValidationUtils.verifyString;
import static org.apache.usergrid.persistence.core.util.ValidationUtils.verifyTimeUuid;
+import static org.apache.usergrid.persistence.core.util.ValidationUtils.verifyVersion;
+
/**
* Validation Utilities for collection
@@ -42,6 +44,7 @@ public class MvccValidationUtils {
Preconditions.checkNotNull( entity.getEntity().isPresent(), "Entity is required" );
+ verifyVersion( entity.getVersion() );
verifyMvccEntityOptionalEntity( entity );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommit.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommit.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommit.java
index 61a2a36..1e01c02 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommit.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/MarkCommit.java
@@ -158,9 +158,9 @@ public class MarkCommit implements Action1<CollectionIoEvent<MvccEntity>> {
continue;
}
- final UniqueValue unique = new UniqueValueImpl( collectionScope, field, entityId, entityVersion );
+ final UniqueValue unique = new UniqueValueImpl( field, entityId, entityVersion );
- final MutationBatch deleteMutation = uniqueValueStrat.delete( unique );
+ final MutationBatch deleteMutation = uniqueValueStrat.delete(collectionScope, unique );
batch.mergeShallow( deleteMutation );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
index dfccb34..8561708 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/RollbackAction.java
@@ -83,9 +83,9 @@ public class RollbackAction implements Action1<Throwable> {
if ( field.isUnique() ) {
UniqueValue toDelete =
- new UniqueValueImpl( scope, field, entity.get().getId(), mvccEntity.getVersion() );
+ new UniqueValueImpl( field, entity.get().getId(), mvccEntity.getVersion() );
- MutationBatch deleteMb = uniqueValueStrat.delete( toDelete );
+ MutationBatch deleteMb = uniqueValueStrat.delete(scope, toDelete );
if ( rollbackMb == null ) {
rollbackMb = deleteMb;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
index 49e967f..584d7f1 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommit.java
@@ -113,9 +113,10 @@ public class WriteCommit implements Func1<CollectionIoEvent<MvccEntity>, Entity>
if ( field.isUnique() ) {
- UniqueValue written = new UniqueValueImpl( ioEvent.getEntityCollection(), field,
- mvccEntity.getEntity().get().getId(), mvccEntity.getEntity().get().getVersion());
- MutationBatch mb = uniqueValueStrat.write( written );
+ UniqueValue written = new UniqueValueImpl( field,
+ entityId,version);
+
+ MutationBatch mb = uniqueValueStrat.write(collectionScope, written );
LOG.debug("Finalizing {} unqiue value {}", field.getName(), field.getValue().toString());
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
index ad335a0..20fad0e 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteStart.java
@@ -11,9 +11,11 @@ import org.apache.usergrid.persistence.collection.exception.WriteStartException;
import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
import org.apache.usergrid.persistence.collection.mvcc.entity.MvccEntity;
import org.apache.usergrid.persistence.collection.mvcc.entity.MvccLogEntry;
+import org.apache.usergrid.persistence.collection.mvcc.entity.Stage;
import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccEntityImpl;
import org.apache.usergrid.persistence.collection.mvcc.entity.impl.MvccLogEntryImpl;
import org.apache.usergrid.persistence.collection.mvcc.stage.CollectionIoEvent;
+import org.apache.usergrid.persistence.collection.util.EntityUtils;
import org.apache.usergrid.persistence.model.entity.Entity;
import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.util.UUIDGenerator;
@@ -63,12 +65,11 @@ public class WriteStart implements Func1<CollectionIoEvent<Entity>, CollectionIo
//TODO update this when merged with George's changes
final MvccLogEntry startEntry = new MvccLogEntryImpl( entityId, version,
- org.apache.usergrid.persistence.collection.mvcc.entity.Stage.ACTIVE, MvccLogEntry.State.COMPLETE);
+ Stage.ACTIVE, MvccLogEntry.State.COMPLETE);
MutationBatch write = logStrategy.write( collectionScope, startEntry );
- final MvccEntityImpl nextStage =
- new MvccEntityImpl( entityId, version, status, entity );
+ final MvccEntityImpl nextStage = new MvccEntityImpl( entityId, version, status, entity );
try {
@@ -86,6 +87,8 @@ public class WriteStart implements Func1<CollectionIoEvent<Entity>, CollectionIo
}
+ EntityUtils.setVersion(entity, version);
+
//create the mvcc entity for the next stage
//todo, we need to create a complete or partial update here (or sooner)
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/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 e6d37fc..6ca3445 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
@@ -49,7 +49,6 @@ import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import rx.Observable;
import rx.functions.Action1;
@@ -88,11 +87,13 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
final MvccEntity mvccEntity = ioevent.getEvent();
- final Entity entity = mvccEntity.getEntity().get();
+ final Id entityId = mvccEntity.getId();
+
+ final UUID entityVersion = mvccEntity.getVersion();
- final Id entityId = entity.getId();
- final UUID entityVersion = entity.getVersion();
+ final Entity entity = mvccEntity.getEntity().get();
+
final CollectionScope scope = ioevent.getEntityCollection();
@@ -115,10 +116,10 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
// use write-first then read strategy
- final UniqueValue written = new UniqueValueImpl( scope, field, entityId, entityVersion );
+ final UniqueValue written = new UniqueValueImpl( field, entityId, entityVersion );
// use TTL in case something goes wrong before entity is finally committed
- final MutationBatch mb = uniqueValueStrat.write( written, serializationFig.getTimeout() );
+ final MutationBatch mb = uniqueValueStrat.write( scope, written, serializationFig.getTimeout() );
batch.mergeShallow( mb );
@@ -142,7 +143,6 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
}
-
//now get the set of fields back
final UniqueValueSet uniqueValues;
@@ -154,7 +154,7 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
}
- final Map<String, Field> uniquenessViolations = new HashMap<>( uniqueFields.size());
+ final Map<String, Field> uniquenessViolations = new HashMap<>( uniqueFields.size() );
//loop through each field that was unique
@@ -182,8 +182,5 @@ public class WriteUniqueVerify implements Action1<CollectionIoEvent<MvccEntity>>
if ( !uniquenessViolations.isEmpty() ) {
throw new WriteUniqueVerifyException( mvccEntity, ioevent.getEntityCollection(), uniquenessViolations );
}
-
-
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValue.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValue.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValue.java
index 9749101..2ba927c 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValue.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/UniqueValue.java
@@ -30,12 +30,6 @@ import org.apache.usergrid.persistence.model.field.Field;
public interface UniqueValue {
/**
- * The scope of this value
- * @return
- */
- public CollectionScope getCollectionScope();
-
- /**
* The entity Id that owns this value
* @return
*/
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/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 efcc60d..4ceb407 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
@@ -37,7 +37,7 @@ public interface UniqueValueSerializationStrategy {
* @param uniqueValue Object to be written
* @return MutatationBatch that encapsulates operation, caller may or may not execute.
*/
- public MutationBatch write( UniqueValue uniqueValue );
+ public MutationBatch write( CollectionScope scope, UniqueValue uniqueValue );
/**
* Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
@@ -46,7 +46,7 @@ public interface UniqueValueSerializationStrategy {
* @param timeToLive How long object should live in seconds
* @return MutatationBatch that encapsulates operation, caller may or may not execute.
*/
- public MutationBatch write( UniqueValue uniqueValue, Integer timeToLive );
+ public MutationBatch write( CollectionScope scope, UniqueValue uniqueValue, Integer timeToLive );
/**
* Load UniqueValue that matches field from collection or null if that value does not exist.
@@ -64,5 +64,5 @@ public interface UniqueValueSerializationStrategy {
* @param uniqueValue Object to be deleted.
* @return MutatationBatch that encapsulates operation, caller may or may not execute.
*/
- public MutationBatch delete( UniqueValue uniqueValue );
+ public MutationBatch delete( CollectionScope scope, UniqueValue uniqueValue );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersionSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersionSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersionSerializer.java
index 810a1fc..dc4efde 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersionSerializer.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/EntityVersionSerializer.java
@@ -24,6 +24,10 @@ import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.usergrid.persistence.collection.mvcc.entity.MvccValidationUtils;
+import org.apache.usergrid.persistence.collection.util.EntityUtils;
+import org.apache.usergrid.persistence.core.util.ValidationUtils;
+import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.entity.SimpleId;
import com.google.common.base.Preconditions;
@@ -44,11 +48,17 @@ public class EntityVersionSerializer extends AbstractSerializer<EntityVersion> {
@Override
public ByteBuffer toByteBuffer(final EntityVersion ev) {
+ final UUID entityVersion = ev.getEntityVersion();
+
+ final Id entityId = ev.getEntityId();
+ final UUID entityUuid = entityId.getUuid();
+ final String entityType = entityId.getType();
+
CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
- builder.addTimeUUID( ev.getEntityVersion() );
- builder.addTimeUUID( ev.getEntityId().getUuid() );
- builder.addString( ev.getEntityId().getType() );
+ builder.addUUID( entityVersion );
+ builder.addUUID( entityUuid );
+ builder.addString(entityType );
return builder.build();
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/FieldSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/FieldSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/FieldSerializer.java
index 7eb8216..1d28bf5 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/FieldSerializer.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/FieldSerializer.java
@@ -20,9 +20,6 @@ package org.apache.usergrid.persistence.collection.serialization.impl;
import java.util.UUID;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.apache.usergrid.persistence.core.astyanax.CompositeFieldSerializer;
import org.apache.usergrid.persistence.model.field.BooleanField;
import org.apache.usergrid.persistence.model.field.DoubleField;
@@ -51,12 +48,13 @@ public class FieldSerializer implements CompositeFieldSerializer<Field> {
@Override
public void toComposite( final CompositeBuilder builder, final Field field ) {
- builder.addString( field.getName() );
-
- builder.addString( field.getValue().toString() );
final FieldTypeName fieldType = field.getTypeName();
+
+ /**
+ * Validation we only support a subset
+ */
switch ( fieldType ) {
case BOOLEAN:
case DOUBLE:
@@ -67,19 +65,27 @@ public class FieldSerializer implements CompositeFieldSerializer<Field> {
break;
default:
throw new RuntimeException(
- String.format( "Type %s is not a supported type for unique values", fieldType ));
+ String.format( "Type %s is not a supported type for unique values", fieldType ) );
}
+
builder.addString( fieldType.name() );
+
+ builder.addString( field.getName() );
+
+ builder.addString( field.getValue().toString() );
}
@Override
public Field fromComposite( final CompositeParser composite ) {
+ final String typeString = composite.readString();
+
final String name = composite.readString();
+
final String value = composite.readString();
- final String typeString = composite.readString();
+
final FieldTypeName fieldType = FieldTypeName.valueOf( typeString );
@@ -102,7 +108,6 @@ public class FieldSerializer implements CompositeFieldSerializer<Field> {
}
-
/**
* Get the singleton serializer
*/
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueImpl.java
index 2fdae1a..862d8b1 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueImpl.java
@@ -31,29 +31,22 @@ import com.google.common.base.Preconditions;
* Represents a Unique Value of a field within a collection.
*/
public class UniqueValueImpl implements UniqueValue {
- private final CollectionScope collectionScope;
private final Field field;
private final Id entityId;
private final UUID entityVersion;
- public UniqueValueImpl(
- final CollectionScope scope, final Field field, Id entityId, final UUID version ) {
+ public UniqueValueImpl(final Field field, Id entityId, final UUID version ) {
- Preconditions.checkNotNull( scope, "scope is required" );
Preconditions.checkNotNull( field, "field is required" );
-// Preconditions.checkNotNull( version, "version is required" );
+ Preconditions.checkNotNull( version, "version is required" );
Preconditions.checkNotNull( entityId, "entityId is required" );
- this.collectionScope = scope;
this.field = field;
this.entityVersion = version;
this.entityId = entityId;
}
- @Override
- public CollectionScope getCollectionScope() {
- return collectionScope;
- }
+
@Override
public Field getField() {
@@ -82,9 +75,7 @@ public class UniqueValueImpl implements UniqueValue {
final UniqueValueImpl that = ( UniqueValueImpl ) o;
- if ( !getCollectionScope().equals( that.getCollectionScope() ) ) {
- return false;
- }
+
if ( !getField().equals( that.getField()) ) {
return false;
@@ -104,8 +95,7 @@ public class UniqueValueImpl implements UniqueValue {
@Override
public int hashCode() {
- int result = 31 * getCollectionScope().hashCode();
- result = 31 * result + getField().hashCode();
+ int result = 31 * getField().hashCode();
result = 31 * result + getEntityVersion().hashCode();
result = 31 * result + getEntityId().hashCode();
return result;
@@ -115,7 +105,6 @@ public class UniqueValueImpl implements UniqueValue {
@Override
public String toString() {
return "UniqueValueImpl{" +
- ", collectionScope =" + collectionScope.getName() +
", field =" + field +
", entityVersion=" + entityVersion +
", entityId =" + entityId +
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
index d480691..95c83f3 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/UniqueValueSerializationStrategyImpl.java
@@ -23,6 +23,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -38,6 +39,8 @@ 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.Migration;
+import org.apache.usergrid.persistence.core.util.ValidationUtils;
+import org.apache.usergrid.persistence.model.entity.Id;
import org.apache.usergrid.persistence.model.field.Field;
import com.google.common.base.Preconditions;
@@ -46,6 +49,7 @@ import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.Keyspace;
import com.netflix.astyanax.MutationBatch;
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.util.RangeBuilder;
@@ -60,7 +64,7 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
// TODO: use "real" field serializer here instead once it is ready
private static final CollectionScopedRowKeySerializer<Field> ROW_KEY_SER =
- new CollectionScopedRowKeySerializer<Field>( FieldSerializer.get() );
+ new CollectionScopedRowKeySerializer<>( FieldSerializer.get() );
private static final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
@@ -83,7 +87,7 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
@Override
- public java.util.Collection getColumnFamilies() {
+ public Collection<MultiTennantColumnFamilyDefinition> getColumnFamilies() {
MultiTennantColumnFamilyDefinition cf =
new MultiTennantColumnFamilyDefinition( CF_UNIQUE_VALUES, BytesType.class.getSimpleName(),
@@ -94,19 +98,29 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
}
- public MutationBatch write( UniqueValue uniqueValue ) {
- return write( uniqueValue, Integer.MAX_VALUE );
+ public MutationBatch write(final CollectionScope scope, UniqueValue uniqueValue ) {
+ return write( scope, uniqueValue, Integer.MAX_VALUE );
}
@Override
- public MutationBatch write( UniqueValue value, Integer timeToLive ) {
+ public MutationBatch write(final CollectionScope scope, UniqueValue value, Integer timeToLive ) {
Preconditions.checkNotNull( value, "value is required" );
Preconditions.checkNotNull( timeToLive, "timeToLive is required" );
+ final Field field = value.getField();
+
+
+
+ final Id entityId = value.getEntityId();
+ final UUID entityVersion = value.getEntityVersion();
+
+ ValidationUtils.verifyIdentity( entityId );
+ ValidationUtils.verifyVersion( entityVersion );
+
log.debug( "Writing unique value scope={} id={} version={} name={} value={} ttl={} ", new Object[] {
- value.getCollectionScope().getName(), value.getEntityId(), value.getEntityVersion(),
+ scope.getName(), entityId, entityVersion,
value.getField().getName(), value.getField().getValue(), timeToLive
} );
@@ -120,7 +134,7 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
ttl = timeToLive;
}
- return doWrite( value.getCollectionScope(), value.getField(), new UniqueValueSerializationStrategyImpl.RowOp() {
+ return doWrite( scope, value.getField(), new UniqueValueSerializationStrategyImpl.RowOp() {
@Override
public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
@@ -131,13 +145,13 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
@Override
- public MutationBatch delete( UniqueValue value ) {
+ public MutationBatch delete(final CollectionScope scope, UniqueValue value ) {
Preconditions.checkNotNull( value, "value is required" );
final EntityVersion ev = new EntityVersion( value.getEntityId(), value.getEntityVersion() );
- return doWrite( value.getCollectionScope(), value.getField(), new UniqueValueSerializationStrategyImpl.RowOp() {
+ return doWrite( scope, value.getField(), new UniqueValueSerializationStrategyImpl.RowOp() {
@Override
public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
@@ -160,7 +174,7 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
@Override
- public UniqueValueSet load( final CollectionScope colScope, final Collection<Field> fields )
+ public UniqueValueSet load(final CollectionScope colScope, final Collection<Field> fields )
throws ConnectionException {
Preconditions.checkNotNull( fields, "fields are required" );
@@ -190,17 +204,17 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
final Field field = unique.getKey().getKey();
- final ColumnList<EntityVersion> columnList = unique.getColumns();
+ final Iterator<Column<EntityVersion>> columnList = unique.getColumns().iterator();
//sanity check, nothing to do, skip it
- if ( columnList.size() < 1 ) {
+ if ( !columnList.hasNext()) {
continue;
}
- final EntityVersion entityVersion = columnList.getColumnByIndex( 0 ).getName();
+ final EntityVersion entityVersion = columnList.next().getName();
- final UniqueValueImpl uniqueValue = new UniqueValueImpl( colScope, field, entityVersion.getEntityId(),
+ final UniqueValueImpl uniqueValue = new UniqueValueImpl(field, entityVersion.getEntityId(),
entityVersion.getEntityVersion() );
uniqueValueSet.addValue( uniqueValue );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/EntityCollectionManagerIT.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/EntityCollectionManagerIT.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/EntityCollectionManagerIT.java
index 1639d17..7a725a9 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/EntityCollectionManagerIT.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/EntityCollectionManagerIT.java
@@ -77,7 +77,7 @@ public class EntityCollectionManagerIT {
Entity returned = observable.toBlocking().lastOrDefault( null );
assertNotNull( "Returned has a uuid", returned.getId() );
- assertNotNull( "Version exists" );
+ assertNotNull( "Version exists", returned.getVersion() );
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java
index f03baba..d5fee64 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java
@@ -70,8 +70,8 @@ public class UniqueValueSerializationStrategyImplTest {
IntegerField field = new IntegerField( "count", 5 );
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
- UniqueValue stored = new UniqueValueImpl( scope, field, entityId, version );
- strategy.write( stored ).execute();
+ UniqueValue stored = new UniqueValueImpl( field, entityId, version );
+ strategy.write(scope, stored ).execute();
UniqueValueSet fields = strategy.load( scope, Collections.<Field>singleton( field ) );
@@ -91,8 +91,8 @@ public class UniqueValueSerializationStrategyImplTest {
IntegerField field = new IntegerField( "count", 5 );
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
- UniqueValue stored = new UniqueValueImpl( scope, field, entityId, version );
- strategy.write( stored, 2 ).execute();
+ UniqueValue stored = new UniqueValueImpl( field, entityId, version );
+ strategy.write(scope, stored, 2 ).execute();
Thread.sleep( 1000 );
@@ -123,10 +123,10 @@ public class UniqueValueSerializationStrategyImplTest {
IntegerField field = new IntegerField( "count", 5 );
Id entityId = new SimpleId( UUIDGenerator.newTimeUUID(), "entity" );
UUID version = UUIDGenerator.newTimeUUID();
- UniqueValue stored = new UniqueValueImpl( scope, field, entityId, version );
- strategy.write( stored ).execute();
+ UniqueValue stored = new UniqueValueImpl( field, entityId, version );
+ strategy.write(scope, stored ).execute();
- strategy.delete( stored ).execute();
+ strategy.delete(scope, stored ).execute();
UniqueValueSet fields = strategy.load( scope, Collections.<Field>singleton( field ) );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/792b2b2c/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
index 6f31412..c64fe23 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteOptimisticVerifyTest.java
@@ -136,13 +136,11 @@ public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
// mock up unique values interface
UniqueValueSerializationStrategy uvstrat = mock( UniqueValueSerializationStrategy.class);
- UniqueValue uv1 = new UniqueValueImpl(
- scope, entity.getField("name"), entity.getId(), entity.getVersion());
- UniqueValue uv2 = new UniqueValueImpl(
- scope, entity.getField("identifier"), entity.getId(), entity.getVersion());
+ UniqueValue uv1 = new UniqueValueImpl(entity.getField("name"), entity.getId(), entity.getVersion());
+ UniqueValue uv2 = new UniqueValueImpl( entity.getField("identifier"), entity.getId(), entity.getVersion());
MutationBatch mb = mock( MutationBatch.class );
- when( uvstrat.delete(uv1) ).thenReturn(mb);
- when( uvstrat.delete(uv2) ).thenReturn(mb);
+ when( uvstrat.delete(scope, uv1) ).thenReturn(mb);
+ when( uvstrat.delete(scope, uv2) ).thenReturn(mb);
// Run the stage, conflict should be detected
final MvccEntity mvccEntity = fromEntity( entity );
@@ -162,8 +160,8 @@ public class WriteOptimisticVerifyTest extends AbstractMvccEntityStageTest {
assertTrue( conflictDetected );
// check that unique values were deleted
- verify( uvstrat, times(1) ).delete( uv1 );
- verify( uvstrat, times(1) ).delete( uv2 );
+ verify( uvstrat, times(1) ).delete(scope, uv1 );
+ verify( uvstrat, times(1) ).delete(scope, uv2 );
}
}