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/31 02:20:31 UTC
[1/2] git commit: Fixes issue with incorrect column comparator type.
Updated Branches:
refs/heads/two-dot-o e38dda9d9 -> 3f1f841d8
Fixes issue with incorrect column comparator type.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/b787221f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/b787221f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/b787221f
Branch: refs/heads/two-dot-o
Commit: b787221ffd3cdce3bf9ed6dbf049ecf6dcb6e230
Parents: e38dda9
Author: Todd Nine <tn...@apigee.com>
Authored: Thu Jan 30 17:08:45 2014 -0700
Committer: Todd Nine <tn...@apigee.com>
Committed: Thu Jan 30 17:08:45 2014 -0700
----------------------------------------------------------------------
.../collection/cassandra/ColumnTypes.java | 22 ++++++++++++++++++++
.../stage/write/EntityVersionSerializer.java | 2 +-
.../UniqueValueSerializationStrategyImpl.java | 8 +++++--
.../mvcc/stage/write/WriteUniqueVerify.java | 4 ++--
4 files changed, 31 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b787221f/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cassandra/ColumnTypes.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cassandra/ColumnTypes.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cassandra/ColumnTypes.java
new file mode 100644
index 0000000..758d45e
--- /dev/null
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/cassandra/ColumnTypes.java
@@ -0,0 +1,22 @@
+package org.apache.usergrid.persistence.collection.cassandra;
+
+
+import org.apache.cassandra.db.marshal.DynamicCompositeType;
+
+
+/**
+ * Simple class to hold constants we'll need for column types
+ *
+ */
+public class ColumnTypes {
+
+ /**
+ * Constant for the dynamic composite comparator type we'll need
+ */
+ public static final String DYNAMIC_COMPOSITE_TYPE = DynamicCompositeType.class.getSimpleName() + "(a=>AsciiType,b=>BytesType,i=>IntegerType,x=>LexicalUUIDType,l=>LongType," +
+ "t=>TimeUUIDType,s=>UTF8Type,u=>UUIDType,A=>AsciiType(reversed=true),B=>BytesType(reversed=true)," +
+ "I=>IntegerType(reversed=true),X=>LexicalUUIDType(reversed=true),L=>LongType(reversed=true)," +
+ "T=>TimeUUIDType(reversed=true),S=>UTF8Type(reversed=true),U=>UUIDType(reversed=true))";
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b787221f/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
index ae075f3..c03448f 100644
--- 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
@@ -33,7 +33,7 @@ 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> {
+public class EntityVersionSerializer extends AbstractSerializer<EntityVersion> {
private static final Logger LOG = LoggerFactory.getLogger( EntityVersionSerializer.class );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b787221f/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
index 8c2e9eb..9964a30 100644
--- 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
@@ -27,10 +27,13 @@ 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.cassandra.db.marshal.DynamicCompositeType;
+
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.cassandra.ColumnTypes;
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;
@@ -69,8 +72,7 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
public java.util.Collection getColumnFamilies() {
MultiTennantColumnFamilyDefinition cf = new MultiTennantColumnFamilyDefinition(
- CF_UNIQUE_VALUES,
- BytesType.class.getSimpleName(),
+ CF_UNIQUE_VALUES, ColumnTypes.DYNAMIC_COMPOSITE_TYPE,
BytesType.class.getSimpleName(),
BytesType.class.getSimpleName() );
@@ -143,6 +145,8 @@ public class UniqueValueSerializationStrategyImpl implements UniqueValueSerializ
Preconditions.checkNotNull( field, "field is required" );
+
+ //TODO Dave, this doesn't limit the size. We should limit it to 1 explicitly, otherwise you can get a huge result set explosion if multiple values are attempting to write the same unique value.
ColumnList<EntityVersion> result;
try {
result = keyspace.prepareQuery( CF_UNIQUE_VALUES )
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/b787221f/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 818a01d..ad65820 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
@@ -51,7 +51,7 @@ public class WriteUniqueVerify
private final UniqueValueSerializationStrategy uniqueValueStrat;
- //TODO Dave, we don't want to use our own thread pool. Use the Concurrent class to create new observables
+ //TODO Dave: we don't want to use our own thread pool. Use the Concurrent class to create new observables
private final ExecutorService threadPool;
private final int MAX_THREAD_COUNT;
@@ -84,7 +84,7 @@ public class WriteUniqueVerify
// use simple thread pool to verify fields in parallel
- //TODO We don't want to use custom thread pools and futures here.
+ //TODO Dave: We don't want to use custom thread pools and futures here.
// We want to use concurrent to fork all validations this way they're wrapped by timeouts and
// Hystrix thread pools for JMX operations. See the WriteCommand in the EntityCollectionManagerImpl
// I think it still needs added to the Concurrent utility class
[2/2] git commit: Fixes graph parsing
Posted by sn...@apache.org.
Fixes graph parsing
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/3f1f841d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/3f1f841d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/3f1f841d
Branch: refs/heads/two-dot-o
Commit: 3f1f841d8588256ac5e6016755fb2e332f28f873
Parents: b787221
Author: Todd Nine <tn...@apigee.com>
Authored: Thu Jan 30 18:02:21 2014 -0700
Committer: Todd Nine <tn...@apigee.com>
Committed: Thu Jan 30 18:02:54 2014 -0700
----------------------------------------------------------------------
.../IdColDynamicCompositeSerializer.java | 2 +-
.../MultiTennantColumnFamilyDefinition.java | 12 +-
.../persistence/graph/SearchByIdType.java | 5 -
.../persistence/graph/SearchEdgeType.java | 2 -
.../persistence/graph/guice/GraphModule.java | 5 +-
.../persistence/graph/impl/EdgeManagerImpl.java | 5 -
.../persistence/graph/impl/SimpleEdge.java | 49 ++++++
.../graph/impl/SimpleSearchByIdType.java | 1 -
.../graph/serialization/EdgeSerialization.java | 20 ++-
.../impl/EdgeSerializationImpl.java | 134 ++++++++-------
.../impl/parse/ColumnNameIterator.java | 2 -
.../impl/parse/ObservableIterator.java | 2 -
.../stage/write/EdgeWriteStage.java | 1 -
.../graph/serialization/util/EdgeHasher.java | 4 -
.../graph/serialization/util/EdgeUtils.java | 2 +-
.../persistence/graph/EdgeManagerIT.java | 12 +-
.../serialization/EdgeSerializationTest.java | 162 +++++++++++++++++++
.../graph/test/util/EdgeTestUtils.java | 10 +-
.../persistence/model/entity/SimpleId.java | 8 +-
stack/corepersistence/pom.xml | 2 +-
20 files changed, 318 insertions(+), 122 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/astyanax/IdColDynamicCompositeSerializer.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/astyanax/IdColDynamicCompositeSerializer.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/astyanax/IdColDynamicCompositeSerializer.java
index 44da06b..770cc47 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/astyanax/IdColDynamicCompositeSerializer.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/astyanax/IdColDynamicCompositeSerializer.java
@@ -69,7 +69,7 @@ public class IdColDynamicCompositeSerializer implements DynamicCompositeFieldSer
public Id fromComposite( final DynamicComposite composite, int startIndex ) {
- Preconditions.checkArgument( composite.size() > startIndex+2, "Composite must contain a next element for uuid" );
+ Preconditions.checkArgument( composite.size() >= startIndex+2, "Composite must contain a next element for uuid and type" );
final UUID uuid = composite.get(startIndex, UUID_SERIALIZER );
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/astyanax/MultiTennantColumnFamilyDefinition.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/astyanax/MultiTennantColumnFamilyDefinition.java b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/astyanax/MultiTennantColumnFamilyDefinition.java
index 764ae36..c0f7f13 100644
--- a/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/astyanax/MultiTennantColumnFamilyDefinition.java
+++ b/stack/corepersistence/collection/src/main/java/org/apache/usergrid/persistence/collection/astyanax/MultiTennantColumnFamilyDefinition.java
@@ -40,21 +40,21 @@ public class MultiTennantColumnFamilyDefinition {
private final ColumnFamily columnFamily;
- private final String comparator;
+ private final String columnComparatorType;
private final String keyValidationType;
private final String valueValidationType;
- public MultiTennantColumnFamilyDefinition( final ColumnFamily columnFamily, final String comparator,
+ public MultiTennantColumnFamilyDefinition( final ColumnFamily columnFamily, final String columnComparatorType,
final String keyValidationType, final String valueValidationType ) {
Preconditions.checkNotNull( columnFamily, "columnFamily is required" );
- Preconditions.checkNotNull( comparator, "comparator is required" );
+ Preconditions.checkNotNull( columnComparatorType, "columnComparatorType is required" );
Preconditions.checkNotNull( keyValidationType, "keyValidationType is required" );
Preconditions.checkNotNull( valueValidationType, "valueValidationType is required" );
this.columnFamily = columnFamily;
- this.comparator = comparator;
+ this.columnComparatorType = columnComparatorType;
this.keyValidationType = keyValidationType;
this.valueValidationType = valueValidationType;
}
@@ -63,11 +63,11 @@ public class MultiTennantColumnFamilyDefinition {
public Map<String, Object> getOptions() {
Map<String, Object> options = new HashMap<String, Object>();
- options.put( COMPARATOR_TYPE, comparator );
+ options.put( COMPARATOR_TYPE, columnComparatorType );
options.put( KEY_VALIDATION, keyValidationType );
options.put( VALUE_VALIDATION, valueValidationType );
- //always use 10% load repair chance!
+ //always use 10% read repair chance!
options.put( READ_REPAIR_CHANCE, 0.1d );
return options;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchByIdType.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchByIdType.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchByIdType.java
index 0e6ae0f..f3d42a6 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchByIdType.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchByIdType.java
@@ -20,11 +20,6 @@
package org.apache.usergrid.persistence.graph;
-import java.util.UUID;
-
-import org.apache.usergrid.persistence.model.entity.Id;
-
-
/**
* Search by both edge type and target type. Only nodes
* with the type specified will be returned
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchEdgeType.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchEdgeType.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchEdgeType.java
index 54c94dc..653547c 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchEdgeType.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/SearchEdgeType.java
@@ -20,8 +20,6 @@
package org.apache.usergrid.persistence.graph;
-import java.util.UUID;
-
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.common.base.Optional;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/guice/GraphModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/guice/GraphModule.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/guice/GraphModule.java
index 6533b9f..6690356 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/guice/GraphModule.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/guice/GraphModule.java
@@ -19,13 +19,10 @@
package org.apache.usergrid.persistence.graph.guice;
+
import org.apache.usergrid.persistence.collection.guice.CollectionModule;
import org.apache.usergrid.persistence.collection.migration.Migration;
-import org.apache.usergrid.persistence.collection.mvcc.MvccEntitySerializationStrategy;
-import org.apache.usergrid.persistence.collection.mvcc.MvccLogEntrySerializationStrategy;
import org.apache.usergrid.persistence.collection.mvcc.event.PostProcessObserver;
-import org.apache.usergrid.persistence.collection.serialization.impl.MvccEntitySerializationStrategyImpl;
-import org.apache.usergrid.persistence.collection.serialization.impl.MvccLogEntrySerializationStrategyImpl;
import org.apache.usergrid.persistence.graph.EdgeManager;
import org.apache.usergrid.persistence.graph.EdgeManagerFactory;
import org.apache.usergrid.persistence.graph.impl.CollectionIndexObserver;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/EdgeManagerImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/EdgeManagerImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/EdgeManagerImpl.java
index 347993f..bc5c91e 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/EdgeManagerImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/EdgeManagerImpl.java
@@ -23,7 +23,6 @@ package org.apache.usergrid.persistence.graph.impl;
import java.util.Iterator;
import org.apache.usergrid.persistence.collection.OrganizationScope;
-import org.apache.usergrid.persistence.collection.hystrix.ReadCommand;
import org.apache.usergrid.persistence.collection.hystrix.WriteCommand;
import org.apache.usergrid.persistence.collection.mvcc.entity.ValidationUtils;
import org.apache.usergrid.persistence.graph.Edge;
@@ -39,13 +38,9 @@ import org.apache.usergrid.persistence.graph.serialization.stage.write.EdgeWrite
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
-import com.netflix.hystrix.Hystrix;
-import com.netflix.hystrix.HystrixCommand;
-import com.netflix.hystrix.HystrixCommandGroupKey;
import rx.Observable;
import rx.Scheduler;
-import rx.util.functions.Func1;
/**
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleEdge.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleEdge.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleEdge.java
index ef4515d..81a6005 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleEdge.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleEdge.java
@@ -73,4 +73,53 @@ public class SimpleEdge implements Edge {
public UUID getVersion() {
return version;
}
+
+
+ @Override
+ public boolean equals( final Object o ) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( !( o instanceof Edge ) ) {
+ return false;
+ }
+
+ final Edge that = ( Edge ) o;
+
+ if ( !sourceNode.equals( that.getSourceNode() ) ) {
+ return false;
+ }
+ if ( !targetNode.equals( that.getTargetNode() ) ) {
+ return false;
+ }
+ if ( !type.equals( that.getType() ) ) {
+ return false;
+ }
+ if ( !version.equals( that.getVersion() ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ @Override
+ public int hashCode() {
+ int result = sourceNode.hashCode();
+ result = 31 * result + type.hashCode();
+ result = 31 * result + targetNode.hashCode();
+ result = 31 * result + version.hashCode();
+ return result;
+ }
+
+
+ @Override
+ public String toString() {
+ return "SimpleEdge{" +
+ "sourceNode=" + sourceNode +
+ ", type='" + type + '\'' +
+ ", targetNode=" + targetNode +
+ ", version=" + version +
+ '}';
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleSearchByIdType.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleSearchByIdType.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleSearchByIdType.java
index e3fd2b4..e00ed87 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleSearchByIdType.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/impl/SimpleSearchByIdType.java
@@ -24,7 +24,6 @@ import java.util.UUID;
import org.apache.usergrid.persistence.collection.mvcc.entity.ValidationUtils;
import org.apache.usergrid.persistence.graph.Edge;
-import org.apache.usergrid.persistence.graph.SearchByEdgeType;
import org.apache.usergrid.persistence.graph.SearchByIdType;
import org.apache.usergrid.persistence.model.entity.Id;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerialization.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerialization.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerialization.java
index 2fa8dc2..f6434df 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerialization.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerialization.java
@@ -54,38 +54,36 @@ public interface EdgeSerialization {
MutationBatch deleteEdge( OrganizationScope scope, Edge edge );
/**
- * Get an iterator of all edges by edge type from source node
+ * Get an iterator of all edges by edge type originating from source node
*
* @param scope The org scope of the graph
* @param edgeType The search edge
*/
- Iterator<Edge> getTargetEdges( OrganizationScope scope, SearchByEdgeType edgeType );
+ Iterator<Edge> getEdgesFromSource( OrganizationScope scope, SearchByEdgeType edgeType );
/**
- * Get an iterator of all edges by edge type and target type from source node * @param scope The org scope of the
- * graph
+ * Get an iterator of all edges by edge type originating from source node. Also filters by target node id type
*
* @param scope The org scope of the graph
* @param edgeType The search edge
*/
- Iterator<Edge> getTargetIdEdges( OrganizationScope scope, SearchByIdType edgeType );
+ Iterator<Edge> getEdgesFromSourceByTargetType( OrganizationScope scope, SearchByIdType edgeType );
/**
- * Get an iterator of all edges by edge type from target node * @param scope The org scope of the graph
- *
+ * Get an iterator of all edges by edge type pointing to the target node
* @param scope The org scope of the graph
* @param edgeType The search edge
*/
- Iterator<Edge> getSourceEdges( OrganizationScope scope, SearchByEdgeType edgeType );
+ Iterator<Edge> getEdgesToTarget( OrganizationScope scope, SearchByEdgeType edgeType );
/**
- * Get an iterator of all edges by edge type and source type from target node * @param scope The org scope of the
- * graph
+ * Get an iterator of all edges by edge type pointing to the target node. Also uses the source id
+ * type to limit the results
*
* @param scope The org scope of the graph
* @param edgeType The search edge
*/
- Iterator<Edge> getSourceIdEdges( OrganizationScope scope, SearchByIdType edgeType );
+ Iterator<Edge> getEdgesToTargetBySourceType( OrganizationScope scope, SearchByIdType edgeType );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
index c100e31..a726e3e 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgeSerializationImpl.java
@@ -29,13 +29,14 @@ import java.util.UUID;
import javax.inject.Inject;
import org.apache.cassandra.db.marshal.BytesType;
-import org.apache.cassandra.db.marshal.DynamicCompositeType;
+import org.apache.usergrid.persistence.astyanax.IdColDynamicCompositeSerializer;
import org.apache.usergrid.persistence.collection.OrganizationScope;
import org.apache.usergrid.persistence.collection.astyanax.IdRowCompositeSerializer;
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.cassandra.ColumnTypes;
import org.apache.usergrid.persistence.collection.migration.Migration;
import org.apache.usergrid.persistence.collection.mvcc.entity.ValidationUtils;
import org.apache.usergrid.persistence.graph.Edge;
@@ -59,9 +60,9 @@ import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.DynamicComposite;
import com.netflix.astyanax.query.RowQuery;
import com.netflix.astyanax.serializers.AbstractSerializer;
+import com.netflix.astyanax.serializers.LongSerializer;
import com.netflix.astyanax.serializers.UUIDSerializer;
import com.netflix.astyanax.util.RangeBuilder;
-import org.apache.usergrid.persistence.astyanax.IdColDynamicCompositeSerializer;
/**
@@ -89,23 +90,35 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
// column families
- private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> CF_SOURCE_EDGES =
- new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Source_Edges", ORG_ROW_KEY_SER,
- EDGE_TYPE_SERIALIZER );
+ /**
+ * Edges that are from the source node. The row key is the source node
+ */
+ private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> GRAPH_SOURCE_NODE_EDGES =
+ new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Source_Node_Edges",
+ ORG_ROW_KEY_SER, EDGE_TYPE_SERIALIZER );
- private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> CF_TARGET_EDGES =
- new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Target_Edges", ORG_ROW_KEY_SER,
- EDGE_TYPE_SERIALIZER );
+ /**
+ * Edges that are incoming to the target node. The target node is the row key
+ */
+ private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> GRAPH_TARGET_NODE_EDGES =
+ new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Target_Node_Edges",
+ ORG_ROW_KEY_SER, EDGE_TYPE_SERIALIZER );
- private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> CF_SOURCE_TYPE_EDGES =
- new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_SourceType_Edges",
+ /**
+ * The edges that are from the source node with target type. The source node is the row key.
+ */
+ private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> GRAPH_SOURCE_NODE_TARGET_TYPE =
+ new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Source_Node_Target_Type",
ORG_ROW_KEY_SER, EDGE_TYPE_ID_SERIALIZER );
- private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> CF_TARGET_TYPE_EDGES =
- new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_TargetType_Edges",
+ /**
+ * The edges that are to the target node with the source type. The target node is the row key
+ */
+ private static final MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> GRAPH_TARGET_NODE_SOURCE_TYPE =
+ new MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge>( "Graph_Target_Node_Source_Type",
ORG_ROW_KEY_SER, EDGE_TYPE_ID_SERIALIZER );
@@ -155,20 +168,21 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
final DirectedEdge targetEdge = new DirectedEdge( edgeTypeName, sourceNodeId, version );
+ //TODO T.N Resume here
/**
- * Write edges from source->target
+ * Write edges from target<-source
*/
- batch.withRow( CF_SOURCE_EDGES, sourceKey ).putColumn( sourceEdge, HOLDER );
+ batch.withRow( GRAPH_SOURCE_NODE_EDGES, sourceKey ).putColumn( sourceEdge, HOLDER );
- batch.withRow( CF_SOURCE_TYPE_EDGES, sourceKey ).putColumn( sourceEdge, HOLDER );
+ batch.withRow( GRAPH_SOURCE_NODE_TARGET_TYPE, sourceKey ).putColumn( sourceEdge, HOLDER );
/**
- * Write edges target<- source
+ * Write edges source->target
*/
- batch.withRow( CF_TARGET_EDGES, targetKey ).putColumn( targetEdge, HOLDER );
+ batch.withRow( GRAPH_TARGET_NODE_EDGES, targetKey ).putColumn( targetEdge, HOLDER );
- batch.withRow( CF_TARGET_TYPE_EDGES, targetKey ).putColumn( targetEdge, HOLDER );
+ batch.withRow( GRAPH_TARGET_NODE_SOURCE_TYPE, targetKey ).putColumn( targetEdge, HOLDER );
return batch;
}
@@ -210,60 +224,67 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
/**
* Write edges from source->target
*/
- batch.withRow( CF_SOURCE_EDGES, sourceKey ).deleteColumn( sourceEdge );
+ batch.withRow( GRAPH_SOURCE_NODE_EDGES, sourceKey ).deleteColumn( sourceEdge );
- batch.withRow( CF_SOURCE_TYPE_EDGES, sourceKey ).deleteColumn( sourceEdge );
+ batch.withRow( GRAPH_SOURCE_NODE_TARGET_TYPE, sourceKey ).deleteColumn( sourceEdge );
/**
* Write edges target<- source
*/
- batch.withRow( CF_TARGET_EDGES, targetKey ).deleteColumn( targetEdge );
+ batch.withRow( GRAPH_TARGET_NODE_EDGES, targetKey ).deleteColumn( targetEdge );
- batch.withRow( CF_TARGET_TYPE_EDGES, targetKey ).deleteColumn( targetEdge );
+ batch.withRow( GRAPH_TARGET_NODE_SOURCE_TYPE, targetKey ).deleteColumn( targetEdge );
return batch;
}
@Override
- public Iterator<Edge> getTargetEdges( final OrganizationScope scope, final SearchByEdgeType edgeType ) {
- return getEdges( scope, edgeType, CF_SOURCE_EDGES, EDGE_TYPE_ID_SERIALIZER, SOURCE_DIRECTED_EDGE_CREATOR );
+ public Iterator<Edge> getEdgesFromSource( final OrganizationScope scope, final SearchByEdgeType edgeType ) {
+ return getEdges( scope, edgeType, GRAPH_SOURCE_NODE_EDGES, EDGE_TYPE_SERIALIZER, TARGET_DIRECTED_EDGE_CREATOR, new SourceEdgeColumnParser( edgeType ) );
}
@Override
- public Iterator<Edge> getTargetIdEdges( final OrganizationScope scope, final SearchByIdType edgeType ) {
- return getEdges( scope, edgeType, CF_SOURCE_TYPE_EDGES, EDGE_TYPE_SERIALIZER, SOURCE_DIRECTED_EDGE_CREATOR );
+ public Iterator<Edge> getEdgesFromSourceByTargetType( final OrganizationScope scope,
+ final SearchByIdType edgeType ) {
+ return getEdges( scope, edgeType, GRAPH_SOURCE_NODE_TARGET_TYPE, EDGE_TYPE_SERIALIZER,
+ SOURCE_DIRECTED_EDGE_CREATOR, new SourceEdgeColumnParser( edgeType ) );
}
-
@Override
- public Iterator<Edge> getSourceEdges( final OrganizationScope scope, final SearchByEdgeType edgeType ) {
- return getEdges( scope, edgeType, CF_TARGET_EDGES, EDGE_TYPE_SERIALIZER, TARGET_DIRECTED_EDGE_CREATOR );
+ public Iterator<Edge> getEdgesToTarget( final OrganizationScope scope, final SearchByEdgeType edgeType ) {
+ return getEdges( scope, edgeType, GRAPH_TARGET_NODE_EDGES, EDGE_TYPE_ID_SERIALIZER,
+ SOURCE_DIRECTED_EDGE_CREATOR, new TargetEdgeColumnParser( edgeType ) );
}
@Override
- public Iterator<Edge> getSourceIdEdges( final OrganizationScope scope, final SearchByIdType edgeType ) {
- return getEdges( scope, edgeType, CF_TARGET_TYPE_EDGES, EDGE_TYPE_ID_SERIALIZER, TARGET_DIRECTED_EDGE_CREATOR );
+ public Iterator<Edge> getEdgesToTargetBySourceType( final OrganizationScope scope, final SearchByIdType edgeType ) {
+ return getEdges( scope, edgeType, GRAPH_TARGET_NODE_SOURCE_TYPE, EDGE_TYPE_ID_SERIALIZER,
+ TARGET_DIRECTED_EDGE_CREATOR, new TargetEdgeColumnParser( edgeType ) );
}
/**
* Get the edges with the specified criteria
+ *
* @param scope The organization scope
* @param edgeType The search type
* @param cf The column familiy to search
* @param edgeSerializer The serializer to use when reading columns
* @param directedEdgeCreator The creator to use when creating the edges for searching
+ * @param edgeColumnParser The parser to user when iterating the columns
+ *
* @return An iterator of all Edge instance that match the criteria
*/
private Iterator<Edge> getEdges( final OrganizationScope scope, final SearchByEdgeType edgeType,
MultiTennantColumnFamily<OrganizationScope, Id, DirectedEdge> cf,
final EdgeSerializer edgeSerializer,
- final DirectedEdgeCreator directedEdgeCreator ) {
+ final DirectedEdgeCreator directedEdgeCreator,
+ final EdgeColumnParser edgeColumnParser) {
ValidationUtils.validateOrganizationScope( scope );
EdgeUtils.validateSearchByEdgeType( edgeType );
@@ -276,33 +297,33 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
/**
* Edge from source->target
*/
- final ScopedRowKey<OrganizationScope, Id> sourceKey = new ScopedRowKey<OrganizationScope, Id>( scope, nodeId );
+ final ScopedRowKey<OrganizationScope, Id> rowkey = new ScopedRowKey<OrganizationScope, Id>( scope, nodeId );
- DirectedEdge sourceEdge;
+ DirectedEdge lastEdge;
/**
* If the edge is present, we need to being seeking from this
*/
if ( edgeType.last().isPresent() ) {
- sourceEdge = directedEdgeCreator.getDirectedEdge( edgeType.last().get() );
+ lastEdge = directedEdgeCreator.getDirectedEdge( edgeType.last().get() );
}
else {
- sourceEdge = new DirectedEdge( edgeTypeName, nodeId, version );
+ lastEdge = new DirectedEdge( edgeTypeName, nodeId, version );
}
//resume from the last if specified. Also set the range
final ByteBufferRange searchRange =
- new RangeBuilder().setLimit( PAGE_SIZE ).setStart( sourceEdge, edgeSerializer ).build();
+ new RangeBuilder().setLimit( PAGE_SIZE ).setStart( lastEdge, edgeSerializer ).build();
RowQuery<ScopedRowKey<OrganizationScope, Id>, DirectedEdge> query =
- keyspace.prepareQuery( cf ).getKey( sourceKey ).autoPaginate( true ).withColumnRange( searchRange );
+ keyspace.prepareQuery( cf ).getKey( rowkey ).autoPaginate( true ).withColumnRange( searchRange );
try {
return new ColumnNameIterator<DirectedEdge, Edge>( query.execute().getResult().iterator(),
- new SourceEdgeColumnParser( nodeId, edgeTypeName ), edgeType.last().isPresent() );
+ edgeColumnParser, edgeType.last().isPresent() );
}
catch ( ConnectionException e ) {
throw new RuntimeException( "Unable to connect to cassandra", e );
@@ -310,12 +331,10 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
}
-
-
@Override
public Collection<MultiTennantColumnFamilyDefinition> getColumnFamilies() {
- return Arrays.asList( graphCf( CF_SOURCE_EDGES ), graphCf( CF_TARGET_EDGES ),
- graphCf( CF_SOURCE_TYPE_EDGES ), graphCf( CF_TARGET_TYPE_EDGES ) );
+ return Arrays.asList( graphCf( GRAPH_SOURCE_NODE_EDGES ), graphCf( GRAPH_TARGET_NODE_EDGES ),
+ graphCf( GRAPH_SOURCE_NODE_TARGET_TYPE ), graphCf( GRAPH_TARGET_NODE_SOURCE_TYPE ) );
}
@@ -323,7 +342,7 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
* Helper to generate an edge definition by the type
*/
private MultiTennantColumnFamilyDefinition graphCf( MultiTennantColumnFamily cf ) {
- return new MultiTennantColumnFamilyDefinition( cf, DynamicCompositeType.class.getSimpleName(),
+ return new MultiTennantColumnFamilyDefinition( cf, ColumnTypes.DYNAMIC_COMPOSITE_TYPE,
BytesType.class.getSimpleName(), BytesType.class.getSimpleName() );
}
@@ -337,6 +356,7 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
private static final IdColDynamicCompositeSerializer ID_COL_SERIALIZER = IdColDynamicCompositeSerializer.get();
private static final UUIDSerializer UUID_SERIALIZER = UUIDSerializer.get();
+ private static final LongSerializer LONG_SERIALIZER = LongSerializer.get();
@Override
@@ -346,14 +366,13 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
DynamicComposite composite = new DynamicComposite();
- for ( long hash : targetEdgeTypes ) {
- composite.add( hash );
- }
+ composite.addComponent( targetEdgeTypes[0], LONG_SERIALIZER );
+ composite.addComponent( targetEdgeTypes[1], LONG_SERIALIZER );
- ID_COL_SERIALIZER.toComposite( composite, edge.id );
composite.addComponent( edge.version, UUID_SERIALIZER );
+ ID_COL_SERIALIZER.toComposite( composite, edge.id );
return composite.serialize();
}
@@ -366,9 +385,10 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
Preconditions.checkArgument( composite.size() == 5, "Composite should have 5 elements" );
+ final UUID version = composite.get( 2, UUID_SERIALIZER );
+
final Id id = ID_COL_SERIALIZER.fromComposite( composite, 3 );
- final UUID version = composite.get( 5, UUID_SERIALIZER );
return new DirectedEdge( null, id, version );
}
@@ -435,9 +455,9 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
/**
* Default constructor. Needs to take the id and edge used in the search
*/
- protected EdgeColumnParser( final Id id, final String edgeType ) {
- this.id = id;
- this.edgeType = edgeType;
+ protected EdgeColumnParser( SearchByEdgeType searchByEdgeType ) {
+ this.id = searchByEdgeType.getNode();
+ this.edgeType = searchByEdgeType.getType();
}
@@ -460,11 +480,12 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
*/
private static class SourceEdgeColumnParser extends EdgeColumnParser {
+
/**
* Default constructor. Needs to take the id and edge used in the search
*/
- protected SourceEdgeColumnParser( final Id id, final String edgeType ) {
- super( id, edgeType );
+ protected SourceEdgeColumnParser( final SearchByEdgeType searchByEdgeType ) {
+ super( searchByEdgeType );
}
@@ -480,11 +501,12 @@ public class EdgeSerializationImpl implements EdgeSerialization, Migration {
*/
private static class TargetEdgeColumnParser extends EdgeColumnParser {
+
/**
* Default constructor. Needs to take the id and edge used in the search
*/
- protected TargetEdgeColumnParser( final Id id, final String edgeType ) {
- super( id, edgeType );
+ protected TargetEdgeColumnParser( final SearchByEdgeType searchByEdgeType ) {
+ super( searchByEdgeType );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ColumnNameIterator.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ColumnNameIterator.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ColumnNameIterator.java
index 7979e3b..eeb8d74 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ColumnNameIterator.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ColumnNameIterator.java
@@ -3,8 +3,6 @@ package org.apache.usergrid.persistence.graph.serialization.impl.parse;
import java.util.Iterator;
-import org.apache.usergrid.persistence.graph.serialization.impl.parse.ColumnParser;
-
import com.netflix.astyanax.model.Column;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ObservableIterator.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ObservableIterator.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ObservableIterator.java
index 0272f74..f820aa9 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ObservableIterator.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/parse/ObservableIterator.java
@@ -3,8 +3,6 @@ package org.apache.usergrid.persistence.graph.serialization.impl.parse;
import java.util.Iterator;
-import com.netflix.hystrix.HystrixCommand;
-
import rx.Observable;
import rx.Observer;
import rx.Subscription;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/stage/write/EdgeWriteStage.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/stage/write/EdgeWriteStage.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/stage/write/EdgeWriteStage.java
index b4c9355..03deec6 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/stage/write/EdgeWriteStage.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/stage/write/EdgeWriteStage.java
@@ -12,7 +12,6 @@ import com.google.inject.Singleton;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
-import rx.util.functions.Action1;
import rx.util.functions.Func1;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeHasher.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeHasher.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeHasher.java
index 4d6b397..717773c 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeHasher.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeHasher.java
@@ -22,15 +22,11 @@ package org.apache.usergrid.persistence.graph.serialization.util;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.UUID;
import org.apache.cassandra.utils.MurmurHash;
import org.apache.usergrid.persistence.model.entity.Id;
-import com.netflix.astyanax.serializers.StringSerializer;
-
/**
*
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeUtils.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeUtils.java
index 18c8127..0979d95 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeUtils.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/util/EdgeUtils.java
@@ -24,8 +24,8 @@ import org.apache.usergrid.persistence.collection.mvcc.entity.ValidationUtils;
import org.apache.usergrid.persistence.graph.Edge;
import org.apache.usergrid.persistence.graph.SearchByEdgeType;
import org.apache.usergrid.persistence.graph.SearchByIdType;
-import org.apache.usergrid.persistence.graph.SearchIdType;
import org.apache.usergrid.persistence.graph.SearchEdgeType;
+import org.apache.usergrid.persistence.graph.SearchIdType;
import com.google.common.base.Preconditions;
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/EdgeManagerIT.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/EdgeManagerIT.java b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/EdgeManagerIT.java
index 5a7c95a..17cff7d 100644
--- a/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/EdgeManagerIT.java
+++ b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/EdgeManagerIT.java
@@ -27,18 +27,16 @@ import org.jukito.JukitoRunner;
import org.jukito.UseModules;
import org.junit.Before;
import org.junit.ClassRule;
+import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.usergrid.persistence.collection.OrganizationScope;
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.graph.guice.GraphModule;
import org.apache.usergrid.persistence.graph.impl.SimpleEdge;
-import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
-import org.apache.usergrid.persistence.graph.impl.SimpleSearchByIdType;
import org.apache.usergrid.persistence.graph.impl.SimpleSearchEdgeType;
import org.apache.usergrid.persistence.graph.impl.SimpleSearchIdType;
import org.apache.usergrid.persistence.model.entity.Id;
@@ -49,18 +47,16 @@ import com.google.inject.Inject;
import rx.Observable;
+import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.createEdge;
+import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.createSearchByEdge;
+import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.createSearchByEdgeAndId;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
-import org.junit.Ignore;
import static org.mockito.Mockito.mock;
-
-
import static org.mockito.Mockito.when;
-import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.*;
-
@Ignore // tests fail due to unimplemented methods in EdgeManagerImpl that return null
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerializationTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerializationTest.java b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerializationTest.java
new file mode 100644
index 0000000..5bee908
--- /dev/null
+++ b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/serialization/EdgeSerializationTest.java
@@ -0,0 +1,162 @@
+package org.apache.usergrid.persistence.graph.serialization;
+
+
+import java.util.Iterator;
+import java.util.UUID;
+
+import org.jukito.JukitoRunner;
+import org.jukito.UseModules;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.apache.usergrid.persistence.collection.OrganizationScope;
+import org.apache.usergrid.persistence.collection.cassandra.CassandraRule;
+import org.apache.usergrid.persistence.collection.guice.MigrationManagerRule;
+import org.apache.usergrid.persistence.graph.Edge;
+import org.apache.usergrid.persistence.graph.guice.GraphModule;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.util.UUIDGenerator;
+
+import com.google.inject.Inject;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+
+import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.createEdge;
+import static org.apache.usergrid.persistence.graph.test.util.EdgeTestUtils.createSearchByEdge;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+
+/**
+ *
+ *
+ */
+@RunWith( JukitoRunner.class )
+@UseModules( { GraphModule.class } )
+public class EdgeSerializationTest {
+
+ @ClassRule
+ public static CassandraRule rule = new CassandraRule();
+
+
+ @Inject
+ @Rule
+ public MigrationManagerRule migrationManagerRule;
+
+
+ @Inject
+ protected EdgeSerialization serialization;
+
+ protected OrganizationScope scope;
+
+
+ @Before
+ public void setup() {
+ scope = mock( OrganizationScope.class );
+
+ Id orgId = mock( Id.class );
+
+ when( orgId.getType() ).thenReturn( "organization" );
+ when( orgId.getUuid() ).thenReturn( UUIDGenerator.newTimeUUID() );
+
+ when( scope.getOrganization() ).thenReturn( orgId );
+ }
+
+
+ /**
+ * Tests mixing 2 edge types between 2 nodes. We should get results for the same source->destination with the 2
+ * edge types
+ */
+ @Test
+ public void mixedEdgeTypes() throws ConnectionException {
+ final Edge edge1 = createEdge( "source", "edge1", "target" );
+
+ final Id sourceId = edge1.getSourceNode();
+ final Id targetId = edge1.getTargetNode();
+
+
+ final Edge edge2 = createEdge( sourceId, "edge2", targetId );
+
+ serialization.writeEdge( scope, edge1 ).execute();
+ serialization.writeEdge( scope, edge2 ).execute();
+
+
+ UUID now = UUIDGenerator.newTimeUUID();
+
+ //get our edges out by name
+
+ Iterator<Edge> results =
+ serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge1", now, null ) );
+
+ assertEquals( edge1, results.next() );
+ assertFalse( results.hasNext() );
+
+ //test getting the next edge
+ results = serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge2", now, null ) );
+
+ assertEquals( edge2, results.next() );
+ assertFalse( results.hasNext() );
+
+ //test getting source edges from the target
+
+ results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge1", now, null ) );
+ assertEquals( edge1, results.next() );
+ assertFalse( results.hasNext() );
+
+
+ results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge2", now, null ) );
+ assertEquals( edge2, results.next() );
+ assertFalse( results.hasNext() );
+ }
+
+
+ /**
+ * Test paging by resuming the search from the edge
+ */
+ @Test
+ public void testPaging() throws ConnectionException {
+ final Edge edge1 = createEdge( "source", "edge", "target" );
+
+ final Id sourceId = edge1.getSourceNode();
+ final Id targetId = edge1.getTargetNode();
+
+
+ final Edge edge2 = createEdge( sourceId, "edge", targetId );
+
+
+ serialization.writeEdge( scope, edge1 ).execute();
+ serialization.writeEdge( scope, edge2 ).execute();
+
+
+ UUID now = UUIDGenerator.newTimeUUID();
+
+ //get our edges out by name
+
+ Iterator<Edge> results =
+ serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge", now, edge1 ) );
+
+ assertEquals(edge2, results.next());
+ assertFalse( results.hasNext() );
+
+ //test getting the next edge
+ results = serialization.getEdgesFromSource( scope, createSearchByEdge( sourceId, "edge", now, edge2 ) );
+
+ assertFalse( "No results should be returned", results.hasNext() );
+
+ //test getting source edges from the target
+
+ results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge", now, edge1 ) );
+ assertEquals(edge2, results.next());
+ assertFalse( results.hasNext() );
+
+
+ results = serialization.getEdgesToTarget( scope, createSearchByEdge( targetId, "edge", now, edge2 ) );
+ assertFalse( "No results should be returned", results.hasNext() );
+ //test resume by name
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/test/util/EdgeTestUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/test/util/EdgeTestUtils.java b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/test/util/EdgeTestUtils.java
index 9f779c9..5e063ee 100644
--- a/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/test/util/EdgeTestUtils.java
+++ b/stack/corepersistence/graph/src/test/java/org/apache/usergrid/persistence/graph/test/util/EdgeTestUtils.java
@@ -32,11 +32,9 @@ import org.apache.usergrid.persistence.graph.impl.SimpleSearchByIdType;
import org.apache.usergrid.persistence.graph.impl.SimpleSearchEdgeType;
import org.apache.usergrid.persistence.graph.impl.SimpleSearchIdType;
import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
import org.apache.usergrid.persistence.model.util.UUIDGenerator;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
/**
* Simple class for edge testing generation
@@ -75,11 +73,7 @@ public class EdgeTestUtils {
* @return
*/
public static Id createId(String type){
- Id sourceId = mock( Id.class );
- when( sourceId.getType() ).thenReturn( type );
- when( sourceId.getUuid() ).thenReturn( UUIDGenerator.newTimeUUID() );
-
- return sourceId;
+ return new SimpleId( UUIDGenerator.newTimeUUID(), type );
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/SimpleId.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/SimpleId.java b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/SimpleId.java
index e894891..64d6b6b 100644
--- a/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/SimpleId.java
+++ b/stack/corepersistence/model/src/main/java/org/apache/usergrid/persistence/model/entity/SimpleId.java
@@ -72,16 +72,16 @@ public class SimpleId implements Id, Serializable {
if ( this == o ) {
return true;
}
- if ( !( o instanceof SimpleId ) ) {
+ if ( !( o instanceof Id ) ) {
return false;
}
- final SimpleId simpleId = ( SimpleId ) o;
+ final Id id = ( Id ) o;
- if ( !type.equals( simpleId.type ) ) {
+ if ( !type.equals( id.getType() ) ) {
return false;
}
- if ( !uuid.equals( simpleId.uuid ) ) {
+ if ( !uuid.equals( id.getUuid() ) ) {
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/3f1f841d/stack/corepersistence/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/pom.xml b/stack/corepersistence/pom.xml
index 31b32d7..16288a7 100644
--- a/stack/corepersistence/pom.xml
+++ b/stack/corepersistence/pom.xml
@@ -13,7 +13,7 @@
<version>1.0-SNAPSHOT</version>
<properties>
- <astyanax.version>1.56.46-UG</astyanax.version>
+ <astyanax.version>1.56.48</astyanax.version>
<jukito.version>1.4-UG</jukito.version>
<guice.version>3.0</guice.version>
<archaius.version>0.5.12</archaius.version>