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/01/20 06:21:33 UTC
[02/51] [abbrv] git commit: Minor re-organization of new classes and
interfaces.
Minor re-organization of new classes and interfaces.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/3fff2966
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/3fff2966
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/3fff2966
Branch: refs/pull/18/merge
Commit: 3fff2966cae516755942c875b183155131863eec
Parents: 2fdeca3
Author: Dave Johnson <sn...@gmail.com>
Authored: Thu Jan 9 16:24:37 2014 -0500
Committer: Dave Johnson <sn...@gmail.com>
Committed: Thu Jan 9 16:24:37 2014 -0500
----------------------------------------------------------------------
.../collection/guice/CollectionModule.java | 4 +-
.../mvcc/stage/write/EntityVersion.java | 62 ++++++++
.../stage/write/EntityVersionSerializer.java | 67 ++++++++
.../mvcc/stage/write/FieldSerializer.java | 102 ++++++++++++
.../mvcc/stage/write/UniqueValue.java | 37 +++++
.../mvcc/stage/write/UniqueValueImpl.java | 121 ++++++++++++++
.../write/UniqueValueSerializationStrategy.java | 56 +++++++
.../UniqueValueSerializationStrategyImpl.java | 158 +++++++++++++++++++
.../mvcc/stage/write/WriteCommit.java | 3 -
.../mvcc/stage/write/WriteUniqueVerify.java | 3 -
.../stage/write/uniquevalues/EntityVersion.java | 62 --------
.../uniquevalues/EntityVersionSerializer.java | 67 --------
.../write/uniquevalues/FieldSerializer.java | 102 ------------
.../stage/write/uniquevalues/UniqueValue.java | 37 -----
.../write/uniquevalues/UniqueValueImpl.java | 121 --------------
.../UniqueValueSerializationStrategy.java | 56 -------
.../UniqueValueSerializationStrategyImpl.java | 158 -------------------
.../serialization/impl/SerializationModule.java | 2 +-
.../mvcc/stage/delete/DeleteCommitTest.java | 2 +-
.../write/EntityVersionSerializerTest.java | 42 +++++
.../mvcc/stage/write/FieldSerializerTest.java | 48 ++++++
...niqueValueSerializationStrategyImplTest.java | 124 +++++++++++++++
.../mvcc/stage/write/WriteCommitTest.java | 1 -
.../mvcc/stage/write/WriteUniqueVerifyTest.java | 1 -
.../EntityVersionSerializerTest.java | 40 -----
.../write/uniquevalues/FieldSerializerTest.java | 47 ------
...niqueValueSerializationStrategyImplTest.java | 121 --------------
27 files changed, 821 insertions(+), 823 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/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 90ab393..e05084b 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
@@ -18,8 +18,8 @@ import org.apache.usergrid.persistence.collection.service.impl.ServiceModule;
import com.google.inject.AbstractModule;
import com.google.inject.assistedinject.FactoryModuleBuilder;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategyImpl;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueSerializationStrategy;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueSerializationStrategyImpl;
import rx.Scheduler;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersion.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersion.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersion.java
new file mode 100644
index 0000000..8f2e239
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersion.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import java.util.UUID;
+import org.apache.usergrid.persistence.model.entity.Id;
+
+/**
+ * Combine entity ID and entity version for use as column name for UniqueValues Column Family.
+ */
+class EntityVersion {
+ private final Id entityId;
+ private final UUID entityVersion;
+
+ public EntityVersion(Id id, UUID uuid) {
+ this.entityId = id;
+ this.entityVersion = uuid;
+ }
+
+ public Id getEntityId() {
+ return entityId;
+ }
+
+ public UUID getEntityVersion() {
+ return entityVersion;
+ }
+
+ public boolean equals( Object o ) {
+
+ if ( o == null || !(o instanceof EntityVersion) ) {
+ return false;
+ }
+
+ EntityVersion other = (EntityVersion)o;
+
+ if ( !other.getEntityId().equals( getEntityId() )) {
+ return false;
+ }
+
+ if ( !other.getEntityVersion().equals( getEntityVersion() )) {
+ return false;
+ }
+
+ return true;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializer.java
new file mode 100644
index 0000000..ae075f3
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializer.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import com.google.common.base.Preconditions;
+import com.netflix.astyanax.model.CompositeBuilder;
+import com.netflix.astyanax.model.Composites;
+import com.netflix.astyanax.model.DynamicComposite;
+import com.netflix.astyanax.serializers.AbstractSerializer;
+import com.netflix.astyanax.serializers.StringSerializer;
+import com.netflix.astyanax.serializers.UUIDSerializer;
+import java.nio.ByteBuffer;
+import java.util.UUID;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Serialize EntityVersion, entity ID and version, for use a column name in Unique Values Column Family.
+ */
+class EntityVersionSerializer extends AbstractSerializer<EntityVersion> {
+
+ private static final Logger LOG = LoggerFactory.getLogger( EntityVersionSerializer.class );
+
+ @Override
+ public ByteBuffer toByteBuffer(final EntityVersion ev) {
+
+ CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
+
+ builder.add( ev.getEntityId().getUuid(), UUIDSerializer.get() );
+ builder.add( ev.getEntityId().getType(), StringSerializer.get() );
+ builder.add( ev.getEntityVersion(), UUIDSerializer.get() );
+
+ return builder.build();
+ }
+
+ @Override
+ public EntityVersion fromByteBuffer(final ByteBuffer byteBuffer) {
+
+ // would use Composites.newDynamicCompositeParser(byteBuffer) but it is not implemented
+
+ DynamicComposite composite = DynamicComposite.fromByteBuffer(byteBuffer);
+ Preconditions.checkArgument(composite.size() == 3, "Composite should have 3 elements");
+
+ final UUID entityId = composite.get( 0, UUIDSerializer.get() );
+ final String entityType = composite.get( 1, StringSerializer.get() );
+ final UUID version = composite.get( 2, UUIDSerializer.get() );
+
+ return new EntityVersion( new SimpleId( entityId, entityType ), version);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializer.java
new file mode 100644
index 0000000..ce67763
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializer.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import com.netflix.astyanax.model.CompositeBuilder;
+import com.netflix.astyanax.model.CompositeParser;
+import java.util.UUID;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.usergrid.persistence.collection.astyanax.CompositeFieldSerializer;
+import org.apache.usergrid.persistence.model.field.DoubleField;
+import org.apache.usergrid.persistence.model.field.Field;
+import org.apache.usergrid.persistence.model.field.IntegerField;
+import org.apache.usergrid.persistence.model.field.LongField;
+import org.apache.usergrid.persistence.model.field.StringField;
+import org.apache.usergrid.persistence.model.field.UUIDField;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+// TODO: replace with "real" serializer
+
+/**
+ * Serialize Field for use as part of row-key in Unique Values Column Family.
+ */
+public class FieldSerializer implements CompositeFieldSerializer<Field> {
+
+ private static final Logger LOG = LoggerFactory.getLogger( FieldSerializer.class );
+
+ public enum FieldType {
+ BOOLEAN_FIELD,
+ DOUBLE_FIELD,
+ INTEGER_FIELD,
+ LONG_FIELD,
+ STRING_FIELD,
+ UUID_FIELD
+ };
+
+ private static final FieldSerializer INSTANCE = new FieldSerializer();
+
+ @Override
+ public void toComposite( final CompositeBuilder builder, final Field field ) {
+
+ builder.addString( field.getName() );
+
+ // TODO: use the real field value serializer(s) here? Store hash instead?
+ builder.addString( field.getValue().toString() );
+
+ String simpleName = field.getClass().getSimpleName();
+ int nameIndex = simpleName.lastIndexOf(".");
+ String fieldType = simpleName.substring(nameIndex + 1, simpleName.length() - "Field".length());
+ fieldType = StringUtils.upperCase( fieldType + "_FIELD" );
+
+ builder.addString( fieldType );
+ }
+
+ @Override
+ public Field fromComposite( final CompositeParser composite ) {
+
+ final String name = composite.readString();
+ final String value = composite.readString();
+ final String typeString = composite.readString();
+
+ final FieldType fieldType = FieldType.valueOf( typeString );
+
+ switch (fieldType) {
+ case DOUBLE_FIELD:
+ return new DoubleField(name, Double.parseDouble(value));
+ case INTEGER_FIELD:
+ return new IntegerField(name, Integer.parseInt(value));
+ case LONG_FIELD:
+ return new LongField(name, Long.parseLong(value));
+ case STRING_FIELD:
+ return new StringField(name, value);
+ case UUID_FIELD:
+ return new UUIDField(name, UUID.fromString(value));
+ default:
+ throw new RuntimeException("Unknown unique field type");
+ }
+ }
+
+
+ /**
+ * Get the singleton serializer
+ */
+ public static FieldSerializer get() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValue.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValue.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValue.java
new file mode 100644
index 0000000..9726059
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValue.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import java.util.UUID;
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.field.Field;
+
+/**
+ * Represents a Unique Value of a field within a collection.
+ */
+public interface UniqueValue {
+
+ public CollectionScope getCollectionScope();
+
+ public Id getEntityId();
+
+ public Field getField();
+
+ public UUID getEntityVersion();
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueImpl.java
new file mode 100644
index 0000000..686eb1f
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueImpl.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import com.google.common.base.Preconditions;
+import java.util.UUID;
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.field.Field;
+
+/**
+ * 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 UUID entityVersion;
+
+ public UniqueValueImpl(
+ final CollectionScope scope, 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( 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() {
+ return field;
+ }
+
+ @Override
+ public UUID getEntityVersion() {
+ return entityVersion;
+ }
+
+ @Override
+ public Id getEntityId() {
+ return entityId;
+ }
+
+
+ @Override
+ public boolean equals( final Object o ) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() ) {
+ return false;
+ }
+
+ final UniqueValueImpl that = ( UniqueValueImpl ) o;
+
+ if ( !getCollectionScope().equals( that.getCollectionScope() ) ) {
+ return false;
+ }
+
+ if ( !getField().equals( that.getField()) ) {
+ return false;
+ }
+
+ if ( !getEntityVersion().equals( that.getEntityVersion() ) ) {
+ return false;
+ }
+
+ if ( !getEntityId().equals( that.getEntityId() ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ @Override
+ public int hashCode() {
+ int result = 31 * getCollectionScope().hashCode();
+ result = 31 * result + getField().hashCode();
+ result = 31 * result + getEntityVersion().hashCode();
+ result = 31 * result + getEntityId().hashCode();
+ return result;
+ }
+
+
+ @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/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategy.java
new file mode 100644
index 0000000..0169361
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategy.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import com.netflix.astyanax.MutationBatch;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.model.field.Field;
+
+/**
+ * Reads and writes to UniqueValues column family.
+ */
+public interface UniqueValueSerializationStrategy {
+
+ /**
+ * Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
+ *
+ * @param uniqueValue Object to be written
+ * @param timeToLive How long object should live in seconds (or null to live forever)
+ * @return MutatationBatch that encapsulates operation, caller may or may not execute.
+ */
+ public MutationBatch write( UniqueValue uniqueValue, Integer timeToLive );
+
+ /**
+ * Load UniqueValue that matches field from collection or null if that value does not exist.
+ *
+ * @param colScope Collection scope in which to look for field name/value
+ * @param field Field name/value to search for
+ * @return UniqueValue or null if not found
+ * @throws ConnectionException on error connecting to Cassandra
+ */
+ public UniqueValue load( CollectionScope colScope, Field field ) throws ConnectionException;
+
+ /**
+ * Delete the specified Unique Value from Cassandra.
+ *
+ * @param uniqueValue Object to be deleted.
+ * @return MutatationBatch that encapsulates operation, caller may or may not execute.
+ */
+ public MutationBatch delete( UniqueValue uniqueValue );
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImpl.java
new file mode 100644
index 0000000..35c924f
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImpl.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import com.google.common.base.Preconditions;
+import com.google.inject.Inject;
+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.connectionpool.exceptions.NotFoundException;
+import com.netflix.astyanax.model.ColumnList;
+import java.util.Collections;
+import org.apache.cassandra.db.marshal.BytesType;
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.collection.astyanax.MultiTennantColumnFamily;
+import org.apache.usergrid.persistence.collection.astyanax.MultiTennantColumnFamilyDefinition;
+import org.apache.usergrid.persistence.collection.astyanax.ScopedRowKey;
+import org.apache.usergrid.persistence.collection.migration.Migration;
+import org.apache.usergrid.persistence.collection.serialization.impl.CollectionScopedRowKeySerializer;
+import org.apache.usergrid.persistence.model.field.Field;
+
+
+/**
+ * Reads and writes to UniqueValues column family.
+ */
+public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializationStrategy, Migration {
+
+ // TODO: use "real" field serializer here instead once it is ready
+ private static final CollectionScopedRowKeySerializer<Field> ROW_KEY_SER =
+ new CollectionScopedRowKeySerializer<Field>( FieldSerializer.get() );
+
+ private static final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
+
+ private static final MultiTennantColumnFamily<CollectionScope, Field, EntityVersion> CF_UNIQUE_VALUES =
+ new MultiTennantColumnFamily<CollectionScope, Field, EntityVersion>( "Unique_Values",
+ ROW_KEY_SER,
+ ENTITY_VERSION_SER );
+
+ protected final Keyspace keyspace;
+
+
+ /**
+ * Construct serialization strategy for keyspace.
+ * @param keyspace Keyspace in which to store Unique Values.
+ */
+ @Inject
+ public UniqueValueSerializationStrategyImpl( final Keyspace keyspace ) {
+ this.keyspace = keyspace;
+ }
+
+
+ @Override
+ public java.util.Collection getColumnFamilies() {
+
+ MultiTennantColumnFamilyDefinition cf = new MultiTennantColumnFamilyDefinition(
+ CF_UNIQUE_VALUES,
+ BytesType.class.getSimpleName(),
+ BytesType.class.getSimpleName(),
+ BytesType.class.getSimpleName() );
+
+ return Collections.singleton( cf );
+ }
+
+
+ @Override
+ public MutationBatch write( UniqueValue value, final Integer timeToLive ) {
+
+ Preconditions.checkNotNull( value, "value is required" );
+
+ final EntityVersion ev = new EntityVersion( value.getEntityId(), value.getEntityVersion() );
+
+ return doWrite( value.getCollectionScope(), value.getField(),
+ new UniqueValueSerializationStrategyImpl.RowOp() {
+
+ @Override
+ public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
+ colMutation.putColumn( ev, 0x0, timeToLive );
+ }
+ } );
+ }
+
+
+ @Override
+ public MutationBatch delete(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() {
+
+ @Override
+ public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
+ colMutation.deleteColumn(ev);
+ }
+ } );
+ }
+
+
+ /**
+ * Do the column update or delete for the given column and row key
+ * @param context We need to use this when getting the keyspace
+ */
+ private MutationBatch doWrite( CollectionScope context, Field field, RowOp op ) {
+ final MutationBatch batch = keyspace.prepareMutationBatch();
+ op.doOp( batch.withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( context, field ) ) );
+ return batch;
+ }
+
+
+ @Override
+ public UniqueValue load( CollectionScope colScope, Field field ) throws ConnectionException {
+
+ Preconditions.checkNotNull( field, "field is required" );
+
+ ColumnList<EntityVersion> result;
+ try {
+ result = keyspace.prepareQuery( CF_UNIQUE_VALUES )
+ .getKey( ScopedRowKey.fromKey( colScope, field ) )
+ .execute().getResult();
+ }
+ catch ( NotFoundException nfe ) {
+ return null;
+ }
+
+ if ( result.isEmpty() ) {
+ return null;
+ }
+
+ EntityVersion ev = result.getColumnByIndex(0).getName();
+ return new UniqueValueImpl( colScope, field, ev.getEntityId(), ev.getEntityVersion() );
+ }
+
+
+ /**
+ * Simple callback to perform puts and deletes with a common row setup code
+ */
+ private static interface RowOp {
+ void doOp( ColumnListMutation<EntityVersion> colMutation );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/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 8848296..acc4cf9 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
@@ -39,9 +39,6 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValue;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueImpl;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.model.field.Field;
import rx.util.functions.Func1;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/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 a5fb545..a147469 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
@@ -18,9 +18,6 @@
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueImpl;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValue;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
import org.apache.usergrid.persistence.collection.mvcc.entity.MvccEntity;
import org.apache.usergrid.persistence.collection.mvcc.entity.ValidationUtils;
import org.apache.usergrid.persistence.collection.mvcc.stage.CollectionIoEvent;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersion.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersion.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersion.java
deleted file mode 100644
index aed77a1..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersion.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import java.util.UUID;
-import org.apache.usergrid.persistence.model.entity.Id;
-
-/**
- * Combine entity ID and entity version for use as column name for UniqueValues Column Family.
- */
-class EntityVersion {
- private final Id entityId;
- private final UUID entityVersion;
-
- public EntityVersion(Id id, UUID uuid) {
- this.entityId = id;
- this.entityVersion = uuid;
- }
-
- public Id getEntityId() {
- return entityId;
- }
-
- public UUID getEntityVersion() {
- return entityVersion;
- }
-
- public boolean equals( Object o ) {
-
- if ( o == null || !(o instanceof EntityVersion) ) {
- return false;
- }
-
- EntityVersion other = (EntityVersion)o;
-
- if ( !other.getEntityId().equals( getEntityId() )) {
- return false;
- }
-
- if ( !other.getEntityVersion().equals( getEntityVersion() )) {
- return false;
- }
-
- return true;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializer.java
deleted file mode 100644
index 0293ff7..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializer.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.google.common.base.Preconditions;
-import com.netflix.astyanax.model.CompositeBuilder;
-import com.netflix.astyanax.model.Composites;
-import com.netflix.astyanax.model.DynamicComposite;
-import com.netflix.astyanax.serializers.AbstractSerializer;
-import com.netflix.astyanax.serializers.StringSerializer;
-import com.netflix.astyanax.serializers.UUIDSerializer;
-import java.nio.ByteBuffer;
-import java.util.UUID;
-import org.apache.usergrid.persistence.model.entity.SimpleId;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Serialize EntityVersion, entity ID and version, for use a column name in Unique Values Column Family.
- */
-class EntityVersionSerializer extends AbstractSerializer<EntityVersion> {
-
- private static final Logger LOG = LoggerFactory.getLogger( EntityVersionSerializer.class );
-
- @Override
- public ByteBuffer toByteBuffer(final EntityVersion ev) {
-
- CompositeBuilder builder = Composites.newDynamicCompositeBuilder();
-
- builder.add( ev.getEntityId().getUuid(), UUIDSerializer.get() );
- builder.add( ev.getEntityId().getType(), StringSerializer.get() );
- builder.add( ev.getEntityVersion(), UUIDSerializer.get() );
-
- return builder.build();
- }
-
- @Override
- public EntityVersion fromByteBuffer(final ByteBuffer byteBuffer) {
-
- // would use Composites.newDynamicCompositeParser(byteBuffer) but it is not implemented
-
- DynamicComposite composite = DynamicComposite.fromByteBuffer(byteBuffer);
- Preconditions.checkArgument(composite.size() == 3, "Composite should have 3 elements");
-
- final UUID entityId = composite.get( 0, UUIDSerializer.get() );
- final String entityType = composite.get( 1, StringSerializer.get() );
- final UUID version = composite.get( 2, UUIDSerializer.get() );
-
- return new EntityVersion( new SimpleId( entityId, entityType ), version);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializer.java
deleted file mode 100644
index 485c459..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializer.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.netflix.astyanax.model.CompositeBuilder;
-import com.netflix.astyanax.model.CompositeParser;
-import java.util.UUID;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.usergrid.persistence.collection.astyanax.CompositeFieldSerializer;
-import org.apache.usergrid.persistence.model.field.DoubleField;
-import org.apache.usergrid.persistence.model.field.Field;
-import org.apache.usergrid.persistence.model.field.IntegerField;
-import org.apache.usergrid.persistence.model.field.LongField;
-import org.apache.usergrid.persistence.model.field.StringField;
-import org.apache.usergrid.persistence.model.field.UUIDField;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-// TODO: replace with "real" serializer
-
-/**
- * Serialize Field for use as part of row-key in Unique Values Column Family.
- */
-public class FieldSerializer implements CompositeFieldSerializer<Field> {
-
- private static final Logger LOG = LoggerFactory.getLogger( FieldSerializer.class );
-
- public enum FieldType {
- BOOLEAN_FIELD,
- DOUBLE_FIELD,
- INTEGER_FIELD,
- LONG_FIELD,
- STRING_FIELD,
- UUID_FIELD
- };
-
- private static final FieldSerializer INSTANCE = new FieldSerializer();
-
- @Override
- public void toComposite( final CompositeBuilder builder, final Field field ) {
-
- builder.addString( field.getName() );
-
- // TODO: use the real field value serializer(s) here? Store hash instead?
- builder.addString( field.getValue().toString() );
-
- String simpleName = field.getClass().getSimpleName();
- int nameIndex = simpleName.lastIndexOf(".");
- String fieldType = simpleName.substring(nameIndex + 1, simpleName.length() - "Field".length());
- fieldType = StringUtils.upperCase( fieldType + "_FIELD" );
-
- builder.addString( fieldType );
- }
-
- @Override
- public Field fromComposite( final CompositeParser composite ) {
-
- final String name = composite.readString();
- final String value = composite.readString();
- final String typeString = composite.readString();
-
- final FieldType fieldType = FieldType.valueOf( typeString );
-
- switch (fieldType) {
- case DOUBLE_FIELD:
- return new DoubleField(name, Double.parseDouble(value));
- case INTEGER_FIELD:
- return new IntegerField(name, Integer.parseInt(value));
- case LONG_FIELD:
- return new LongField(name, Long.parseLong(value));
- case STRING_FIELD:
- return new StringField(name, value);
- case UUID_FIELD:
- return new UUIDField(name, UUID.fromString(value));
- default:
- throw new RuntimeException("Unknown unique field type");
- }
- }
-
-
- /**
- * Get the singleton serializer
- */
- public static FieldSerializer get() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValue.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValue.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValue.java
deleted file mode 100644
index 733e740..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValue.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import java.util.UUID;
-import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
-
-/**
- * Represents a Unique Value of a field within a collection.
- */
-public interface UniqueValue {
-
- public CollectionScope getCollectionScope();
-
- public Id getEntityId();
-
- public Field getField();
-
- public UUID getEntityVersion();
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueImpl.java
deleted file mode 100644
index 3be0f93..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueImpl.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.google.common.base.Preconditions;
-import java.util.UUID;
-import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.model.entity.Id;
-import org.apache.usergrid.persistence.model.field.Field;
-
-/**
- * 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 UUID entityVersion;
-
- public UniqueValueImpl(
- final CollectionScope scope, 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( 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() {
- return field;
- }
-
- @Override
- public UUID getEntityVersion() {
- return entityVersion;
- }
-
- @Override
- public Id getEntityId() {
- return entityId;
- }
-
-
- @Override
- public boolean equals( final Object o ) {
- if ( this == o ) {
- return true;
- }
- if ( o == null || getClass() != o.getClass() ) {
- return false;
- }
-
- final UniqueValueImpl that = ( UniqueValueImpl ) o;
-
- if ( !getCollectionScope().equals( that.getCollectionScope() ) ) {
- return false;
- }
-
- if ( !getField().equals( that.getField()) ) {
- return false;
- }
-
- if ( !getEntityVersion().equals( that.getEntityVersion() ) ) {
- return false;
- }
-
- if ( !getEntityId().equals( that.getEntityId() ) ) {
- return false;
- }
-
- return true;
- }
-
-
- @Override
- public int hashCode() {
- int result = 31 * getCollectionScope().hashCode();
- result = 31 * result + getField().hashCode();
- result = 31 * result + getEntityVersion().hashCode();
- result = 31 * result + getEntityId().hashCode();
- return result;
- }
-
-
- @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/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategy.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategy.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategy.java
deleted file mode 100644
index 5bfd834..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategy.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.netflix.astyanax.MutationBatch;
-import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.model.field.Field;
-
-/**
- * Reads and writes to UniqueValues column family.
- */
-public interface UniqueValueSerializationStrategy {
-
- /**
- * Write the specified UniqueValue to Cassandra with optional timeToLive in milliseconds.
- *
- * @param uniqueValue Object to be written
- * @param timeToLive How long object should live in seconds (or null to live forever)
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
- */
- public MutationBatch write( UniqueValue uniqueValue, Integer timeToLive );
-
- /**
- * Load UniqueValue that matches field from collection or null if that value does not exist.
- *
- * @param colScope Collection scope in which to look for field name/value
- * @param field Field name/value to search for
- * @return UniqueValue or null if not found
- * @throws ConnectionException on error connecting to Cassandra
- */
- public UniqueValue load( CollectionScope colScope, Field field ) throws ConnectionException;
-
- /**
- * Delete the specified Unique Value from Cassandra.
- *
- * @param uniqueValue Object to be deleted.
- * @return MutatationBatch that encapsulates operation, caller may or may not execute.
- */
- public MutationBatch delete( UniqueValue uniqueValue );
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategyImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategyImpl.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategyImpl.java
deleted file mode 100644
index fde4269..0000000
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/UniqueValueSerializationStrategyImpl.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.google.common.base.Preconditions;
-import com.google.inject.Inject;
-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.connectionpool.exceptions.NotFoundException;
-import com.netflix.astyanax.model.ColumnList;
-import java.util.Collections;
-import org.apache.cassandra.db.marshal.BytesType;
-import org.apache.usergrid.persistence.collection.CollectionScope;
-import org.apache.usergrid.persistence.collection.astyanax.MultiTennantColumnFamily;
-import org.apache.usergrid.persistence.collection.astyanax.MultiTennantColumnFamilyDefinition;
-import org.apache.usergrid.persistence.collection.astyanax.ScopedRowKey;
-import org.apache.usergrid.persistence.collection.migration.Migration;
-import org.apache.usergrid.persistence.collection.serialization.impl.CollectionScopedRowKeySerializer;
-import org.apache.usergrid.persistence.model.field.Field;
-
-
-/**
- * Reads and writes to UniqueValues column family.
- */
-public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializationStrategy, Migration {
-
- // TODO: use "real" field serializer here instead once it is ready
- private static final CollectionScopedRowKeySerializer<Field> ROW_KEY_SER =
- new CollectionScopedRowKeySerializer<Field>( FieldSerializer.get() );
-
- private static final EntityVersionSerializer ENTITY_VERSION_SER = new EntityVersionSerializer();
-
- private static final MultiTennantColumnFamily<CollectionScope, Field, EntityVersion> CF_UNIQUE_VALUES =
- new MultiTennantColumnFamily<CollectionScope, Field, EntityVersion>( "Unique_Values",
- ROW_KEY_SER,
- ENTITY_VERSION_SER );
-
- protected final Keyspace keyspace;
-
-
- /**
- * Construct serialization strategy for keyspace.
- * @param keyspace Keyspace in which to store Unique Values.
- */
- @Inject
- public UniqueValueSerializationStrategyImpl( final Keyspace keyspace ) {
- this.keyspace = keyspace;
- }
-
-
- @Override
- public java.util.Collection getColumnFamilies() {
-
- MultiTennantColumnFamilyDefinition cf = new MultiTennantColumnFamilyDefinition(
- CF_UNIQUE_VALUES,
- BytesType.class.getSimpleName(),
- BytesType.class.getSimpleName(),
- BytesType.class.getSimpleName() );
-
- return Collections.singleton( cf );
- }
-
-
- @Override
- public MutationBatch write( UniqueValue value, final Integer timeToLive ) {
-
- Preconditions.checkNotNull( value, "value is required" );
-
- final EntityVersion ev = new EntityVersion( value.getEntityId(), value.getEntityVersion() );
-
- return doWrite( value.getCollectionScope(), value.getField(),
- new UniqueValueSerializationStrategyImpl.RowOp() {
-
- @Override
- public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.putColumn( ev, 0x0, timeToLive );
- }
- } );
- }
-
-
- @Override
- public MutationBatch delete(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() {
-
- @Override
- public void doOp( final ColumnListMutation<EntityVersion> colMutation ) {
- colMutation.deleteColumn(ev);
- }
- } );
- }
-
-
- /**
- * Do the column update or delete for the given column and row key
- * @param context We need to use this when getting the keyspace
- */
- private MutationBatch doWrite( CollectionScope context, Field field, RowOp op ) {
- final MutationBatch batch = keyspace.prepareMutationBatch();
- op.doOp( batch.withRow( CF_UNIQUE_VALUES, ScopedRowKey.fromKey( context, field ) ) );
- return batch;
- }
-
-
- @Override
- public UniqueValue load( CollectionScope colScope, Field field ) throws ConnectionException {
-
- Preconditions.checkNotNull( field, "field is required" );
-
- ColumnList<EntityVersion> result;
- try {
- result = keyspace.prepareQuery( CF_UNIQUE_VALUES )
- .getKey( ScopedRowKey.fromKey( colScope, field ) )
- .execute().getResult();
- }
- catch ( NotFoundException nfe ) {
- return null;
- }
-
- if ( result.isEmpty() ) {
- return null;
- }
-
- EntityVersion ev = result.getColumnByIndex(0).getName();
- return new UniqueValueImpl( colScope, field, ev.getEntityId(), ev.getEntityVersion() );
- }
-
-
- /**
- * Simple callback to perform puts and deletes with a common row setup code
- */
- private static interface RowOp {
- void doOp( ColumnListMutation<EntityVersion> colMutation );
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SerializationModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SerializationModule.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SerializationModule.java
index ffa4195..2c58e88 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SerializationModule.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/serialization/impl/SerializationModule.java
@@ -11,7 +11,7 @@ import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerialization
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
import com.netflix.astyanax.Keyspace;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategyImpl;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueSerializationStrategyImpl;
/**
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/DeleteCommitTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/DeleteCommitTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/DeleteCommitTest.java
index 2c19a06..2fdab50 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/DeleteCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/delete/DeleteCommitTest.java
@@ -17,7 +17,7 @@ import org.apache.usergrid.persistence.collection.mvcc.stage.write.WriteCommit;
import org.apache.usergrid.persistence.model.entity.Entity;
import com.netflix.astyanax.MutationBatch;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueSerializationStrategy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializerTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializerTest.java
new file mode 100644
index 0000000..b11cdcf
--- /dev/null
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/EntityVersionSerializerTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.EntityVersion;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.EntityVersionSerializer;
+import java.nio.ByteBuffer;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.apache.usergrid.persistence.model.util.UUIDGenerator;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class EntityVersionSerializerTest {
+
+ @Test
+ public void testBasicOperation() {
+
+ EntityVersion original = new EntityVersion( new SimpleId("test"), UUIDGenerator.newTimeUUID() );
+
+ EntityVersionSerializer evs = new EntityVersionSerializer();
+ ByteBuffer serialized = evs.toByteBuffer(original);
+
+ EntityVersion deserialized = evs.fromBytes( serialized.array() );
+
+ Assert.assertEquals( original, deserialized );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializerTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializerTest.java
new file mode 100644
index 0000000..de683af
--- /dev/null
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/FieldSerializerTest.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.FieldSerializer;
+import com.netflix.astyanax.model.CompositeBuilder;
+import com.netflix.astyanax.model.CompositeParser;
+import com.netflix.astyanax.model.Composites;
+import java.nio.ByteBuffer;
+import org.apache.usergrid.persistence.model.field.Field;
+import org.apache.usergrid.persistence.model.field.IntegerField;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class FieldSerializerTest {
+
+ @Test
+ public void testBasicOperation() {
+
+ Field original = new IntegerField( "count", 5 );
+
+ CompositeBuilder builder = Composites.newCompositeBuilder();
+ FieldSerializer fs = new FieldSerializer();
+ fs.toComposite( builder, original );
+ ByteBuffer serializer = builder.build();
+
+ CompositeParser parser = Composites.newCompositeParser( serializer );
+
+ Field deserialized = fs.fromComposite( parser );
+
+ Assert.assertEquals( original, deserialized );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/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
new file mode 100644
index 0000000..075e4bb
--- /dev/null
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/UniqueValueSerializationStrategyImplTest.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License. For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+package org.apache.usergrid.persistence.collection.mvcc.stage.write;
+
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValue;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueSerializationStrategy;
+import org.apache.usergrid.persistence.collection.mvcc.stage.write.UniqueValueImpl;
+import com.google.inject.Inject;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import java.util.UUID;
+import org.apache.usergrid.persistence.collection.CollectionScope;
+import org.apache.usergrid.persistence.collection.cassandra.CassandraRule;
+import org.apache.usergrid.persistence.collection.guice.CollectionModule;
+import org.apache.usergrid.persistence.collection.guice.MigrationManagerRule;
+import org.apache.usergrid.persistence.collection.impl.CollectionScopeImpl;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+import org.apache.usergrid.persistence.model.field.IntegerField;
+import org.apache.usergrid.persistence.model.util.UUIDGenerator;
+import org.jukito.JukitoRunner;
+import org.jukito.UseModules;
+import org.junit.Assert;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@RunWith( JukitoRunner.class )
+@UseModules( CollectionModule.class )
+public class UniqueValueSerializationStrategyImplTest {
+ private static final Logger LOG = LoggerFactory.getLogger( UniqueValueSerializationStrategyImplTest.class );
+
+ @ClassRule
+ public static CassandraRule rule = new CassandraRule();
+
+ @Inject
+ @Rule
+ public MigrationManagerRule migrationManagerRule;
+
+ @Inject
+ UniqueValueSerializationStrategy strategy;
+
+
+ @Test
+ public void testBasicOperation() throws ConnectionException, InterruptedException {
+
+ CollectionScope scope = new CollectionScopeImpl(
+ new SimpleId( "organization" ), new SimpleId( "test" ), "test" );
+
+ 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, null ).execute();
+
+ UniqueValue retrieved = strategy.load( scope, field );
+ Assert.assertNotNull( retrieved );
+ Assert.assertEquals( stored, retrieved );
+ }
+
+
+ @Test
+ public void testWriteWithTTL() throws InterruptedException, ConnectionException {
+
+ CollectionScope scope = new CollectionScopeImpl(
+ new SimpleId( "organization" ), new SimpleId( "test" ), "test" );
+
+ // write object that lives 2 seconds
+ 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();
+
+ Thread.sleep( 1000 );
+
+ // waited one sec, should be still here
+ UniqueValue retrieved = strategy.load( scope, field );
+ Assert.assertNotNull( retrieved );
+ Assert.assertEquals( stored, retrieved );
+
+ Thread.sleep( 1500 );
+
+ // wait another second, should be gone now
+ UniqueValue nullExpected = strategy.load( scope, field );
+ Assert.assertNull( nullExpected );
+ }
+
+
+ @Test
+ public void testDelete() throws ConnectionException {
+
+ CollectionScope scope = new CollectionScopeImpl(
+ new SimpleId( "organization" ), new SimpleId( "test" ), "test" );
+
+ 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, null ).execute();
+
+ strategy.delete( stored ).execute();
+
+ UniqueValue nullExpected = strategy.load( scope, field );
+ Assert.assertNull( nullExpected );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
index ab4699e..ca1a057 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteCommitTest.java
@@ -16,7 +16,6 @@ import org.apache.usergrid.persistence.collection.mvcc.stage.TestEntityGenerator
import org.apache.usergrid.persistence.model.entity.Entity;
import com.netflix.astyanax.MutationBatch;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
index fc372b4..ec095bf 100644
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
+++ b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/WriteUniqueVerifyTest.java
@@ -17,7 +17,6 @@
*/
package org.apache.usergrid.persistence.collection.mvcc.stage.write;
-import org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues.UniqueValueSerializationStrategy;
import com.google.inject.Inject;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializerTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializerTest.java
deleted file mode 100644
index b4547b4..0000000
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/EntityVersionSerializerTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import java.nio.ByteBuffer;
-import org.apache.usergrid.persistence.model.entity.SimpleId;
-import org.apache.usergrid.persistence.model.util.UUIDGenerator;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class EntityVersionSerializerTest {
-
- @Test
- public void testBasicOperation() {
-
- EntityVersion original = new EntityVersion( new SimpleId("test"), UUIDGenerator.newTimeUUID() );
-
- EntityVersionSerializer evs = new EntityVersionSerializer();
- ByteBuffer serialized = evs.toByteBuffer(original);
-
- EntityVersion deserialized = evs.fromBytes( serialized.array() );
-
- Assert.assertEquals( original, deserialized );
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3fff2966/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializerTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializerTest.java b/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializerTest.java
deleted file mode 100644
index 32a254d..0000000
--- a/stack/corepersistence/collection/src/test/java/org/apache/usergrid/persistence/collection/mvcc/stage/write/uniquevalues/FieldSerializerTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-package org.apache.usergrid.persistence.collection.mvcc.stage.write.uniquevalues;
-
-import com.netflix.astyanax.model.CompositeBuilder;
-import com.netflix.astyanax.model.CompositeParser;
-import com.netflix.astyanax.model.Composites;
-import java.nio.ByteBuffer;
-import org.apache.usergrid.persistence.model.field.Field;
-import org.apache.usergrid.persistence.model.field.IntegerField;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class FieldSerializerTest {
-
- @Test
- public void testBasicOperation() {
-
- Field original = new IntegerField( "count", 5 );
-
- CompositeBuilder builder = Composites.newCompositeBuilder();
- FieldSerializer fs = new FieldSerializer();
- fs.toComposite( builder, original );
- ByteBuffer serializer = builder.build();
-
- CompositeParser parser = Composites.newCompositeParser( serializer );
-
- Field deserialized = fs.fromComposite( parser );
-
- Assert.assertEquals( original, deserialized );
- }
-}