You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by to...@apache.org on 2014/08/29 19:31:13 UTC

[08/19] git commit: uuid fixes, adding serialization fixes

uuid fixes, adding serialization fixes


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

Branch: refs/heads/USERGRID-188
Commit: 64ad13d5a1ec3fe9d158e39ac4a6d80df3aedcfe
Parents: 9c47aee
Author: Shawn Feldman <sf...@apache.org>
Authored: Tue Aug 26 12:50:54 2014 -0600
Committer: Shawn Feldman <sf...@apache.org>
Committed: Thu Aug 28 09:30:04 2014 -0600

----------------------------------------------------------------------
 stack/core/pom.xml                              | 20 +++++++-
 .../corepersistence/CpEntityManager.java        | 49 +++++++++++---------
 .../corepersistence/CpRelationManager.java      | 10 ++--
 .../java/org/apache/usergrid/mq/Message.java    | 13 +++---
 .../apache/usergrid/persistence/EntityRef.java  |  3 ++
 .../apache/usergrid/persistence/PathQuery.java  |  8 ++--
 .../usergrid/persistence/SimpleEntityRef.java   | 36 +++++++-------
 .../usergrid/persistence/PathQueryIT.java       |  4 +-
 .../persistence/core/util/ValidationUtils.java  |  2 +-
 .../usergrid/persistence/index/query/Query.java |  4 +-
 10 files changed, 93 insertions(+), 56 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/pom.xml
----------------------------------------------------------------------
diff --git a/stack/core/pom.xml b/stack/core/pom.xml
index 0972a89..41c7244 100644
--- a/stack/core/pom.xml
+++ b/stack/core/pom.xml
@@ -576,6 +576,24 @@
             <version>${rx.version}</version>
         </dependency>
 
-    </dependencies>
+
+    <dependency>
+      <groupId>com.codahale.metrics</groupId>
+      <artifactId>metrics-core</artifactId>
+      <version>${metrics.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.codahale.metrics</groupId>
+      <artifactId>metrics-graphite</artifactId>
+      <version>${metrics.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>com.clearspring.analytics</groupId>
+      <artifactId>stream</artifactId>
+      <version>2.7.0</version>
+    </dependency>
+
+  </dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
index 28124c2..f40bc3b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManager.java
@@ -33,6 +33,7 @@ import java.util.TreeMap;
 import java.util.TreeSet;
 import java.util.UUID;
 
+import com.clearspring.analytics.hash.MurmurHash;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
@@ -323,10 +324,10 @@ public class CpEntityManager implements EntityManager {
 
         EntityCollectionManager ecm = managerCache.getEntityCollectionManager( collectionScope );
 
-        if ( !UUIDUtils.isTimeBased( id.getUuid() ) ) {
-            throw new IllegalArgumentException(
-                "Entity Id " + id.getType() + ":"+ id.getUuid() +" uuid not time based");
-        }
+//        if ( !UUIDUtils.isTimeBased( id.getUuid() ) ) {
+//            throw new IllegalArgumentException(
+//                "Entity Id " + id.getType() + ":"+ id.getUuid() +" uuid not time based");
+//        }
 
        org.apache.usergrid.persistence.model.entity.Entity cpEntity = 
                 ecm.load( id ).toBlockingObservable().last();
@@ -410,10 +411,10 @@ public class CpEntityManager implements EntityManager {
 
         EntityCollectionManager ecm = managerCache.getEntityCollectionManager( collectionScope );
 
-        if ( !UUIDUtils.isTimeBased( id.getUuid() ) ) {
-            throw new IllegalArgumentException(
-                "Entity Id " + id.getType() + ":"+ id.getUuid() +" uuid not time based");
-        }
+//        if ( !UUIDUtils.isTimeBased( id.getUuid() ) ) {
+//            throw new IllegalArgumentException(
+//                "Entity Id " + id.getType() + ":"+ id.getUuid() +" uuid not time based");
+//        }
 
         org.apache.usergrid.persistence.model.entity.Entity cpEntity = 
                 ecm.load( id ).toBlockingObservable().last();
@@ -489,10 +490,10 @@ public class CpEntityManager implements EntityManager {
             } );
         }
 
-        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
-            throw new IllegalArgumentException(
-                "Entity Id " + entityId.getType() + ":"+ entityId.getUuid() +" uuid not time based");
-        }
+//        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
+//            throw new IllegalArgumentException(
+//                "Entity Id " + entityId.getType() + ":"+ entityId.getUuid() +" uuid not time based");
+//        }
 
         org.apache.usergrid.persistence.model.entity.Entity cpEntity =
                 ecm.load( entityId ).toBlockingObservable().last();
@@ -543,10 +544,10 @@ public class CpEntityManager implements EntityManager {
 
         Id entityId = new SimpleId( entityRef.getUuid(), entityRef.getType() );
 
-        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
-            throw new IllegalArgumentException(
-                "Entity Id " + entityId.getType() + ":"+ entityId.getUuid() +" uuid not time based");
-        }
+//        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
+//            throw new IllegalArgumentException(
+//                "Entity Id " + entityId.getType() + ":"+ entityId.getUuid() +" uuid not time based");
+//        }
 
         org.apache.usergrid.persistence.model.entity.Entity entity = 
                 ecm.load( entityId ).toBlockingObservable().last();
@@ -984,10 +985,10 @@ public class CpEntityManager implements EntityManager {
 
         Id entityId = new SimpleId( entityRef.getUuid(), entityRef.getType() );
 
-        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
-            throw new IllegalArgumentException(
-                "Entity Id " + entityId.getType() + ":"+entityId.getUuid() +" uuid not time based");
-        }
+//        if ( !UUIDUtils.isTimeBased( entityId.getUuid() ) ) {
+//            throw new IllegalArgumentException(
+//                "Entity Id " + entityId.getType() + ":"+entityId.getUuid() +" uuid not time based");
+//        }
 
         org.apache.usergrid.persistence.model.entity.Entity cpEntity =
                 ecm.load( entityId ).toBlockingObservable().last();
@@ -2363,7 +2364,13 @@ public class CpEntityManager implements EntityManager {
             return null;
         }
 
-        long timestamp = UUIDUtils.getTimestampInMicros( timestampUuid );
+        long timestamp = 0;
+
+        if(UUIDUtils.isTimeBased(timestampUuid)) {
+            timestamp = UUIDUtils.getTimestampInMicros(timestampUuid);
+        }else{
+            timestamp = MurmurHash.hash64(timestampUuid);
+        }
 
         UUID itemId = UUIDUtils.newTimeUUID();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
index 31d32dd..9199d19 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpRelationManager.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
+import com.clearspring.analytics.hash.MurmurHash;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.util.Assert;
@@ -685,12 +686,13 @@ public class CpRelationManager implements RelationManager {
                 headEntity.getType(), headEntity.getUuid(), 
                 itemRef.getType(), itemRef.getUuid() });
 
+        long uuidHash = MurmurHash.hash64( memberEntity.getId().getUuid());
         // create graph edge connection from head entity to member entity
         Edge edge = new SimpleEdge(
-            cpHeadEntity.getId(), 
-            edgeType, 
-            memberEntity.getId(), 
-            memberEntity.getId().getUuid().timestamp() );
+            cpHeadEntity.getId(),
+            edgeType,
+            memberEntity.getId(),
+           uuidHash);
         GraphManager gm = managerCache.getGraphManager(applicationScope);
         gm.writeEdge(edge).toBlockingObservable().last();
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/mq/Message.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/mq/Message.java b/stack/core/src/main/java/org/apache/usergrid/mq/Message.java
index 85aea1f..b48fe74 100644
--- a/stack/core/src/main/java/org/apache/usergrid/mq/Message.java
+++ b/stack/core/src/main/java/org/apache/usergrid/mq/Message.java
@@ -30,6 +30,7 @@ import java.util.UUID;
 
 import javax.xml.bind.annotation.XmlRootElement;
 
+import com.clearspring.analytics.hash.MurmurHash;
 import org.apache.usergrid.utils.UUIDUtils;
 
 import com.fasterxml.jackson.annotation.JsonAnyGetter;
@@ -484,13 +485,13 @@ public class Message {
 
 
     public void setUuid( UUID uuid ) {
-        if ( isTimeBased( uuid ) ) {
+        //if ( isTimeBased( uuid ) ) {
             properties.put( MESSAGE_ID, uuid );
-            properties.put( MESSAGE_TIMESTAMP, getTimestampInMillis( uuid ) );
-        }
-        else {
-            throw new IllegalArgumentException( "Not a time-based UUID" );
-        }
+            properties.put( MESSAGE_TIMESTAMP, MurmurHash.hash64(uuid));
+//        }
+//        else {
+//            throw new IllegalArgumentException( "Not a time-based UUID" );
+//        }
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/persistence/EntityRef.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityRef.java b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityRef.java
index b9d60cb..8133840 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityRef.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityRef.java
@@ -17,8 +17,11 @@
 package org.apache.usergrid.persistence;
 
 
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
 import java.util.UUID;
 
+@JsonTypeInfo( use= JsonTypeInfo.Id.CLASS,include= JsonTypeInfo.As.WRAPPER_OBJECT,property="@class" )
 public interface EntityRef {
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/persistence/PathQuery.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/PathQuery.java b/stack/core/src/main/java/org/apache/usergrid/persistence/PathQuery.java
index 6721fa6..c1d0360 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/PathQuery.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/PathQuery.java
@@ -26,7 +26,7 @@ public class PathQuery<E> {
 
     private PathQuery source;
     private Query query;
-    private EntityRef head;
+    private SimpleEntityRef head;
 
 
     public PathQuery() {
@@ -38,7 +38,7 @@ public class PathQuery<E> {
      *
      * @param head the top-level entity
      */
-    public PathQuery( EntityRef head ) {
+    public PathQuery( SimpleEntityRef head ) {
         this.head = head;
         this.query = null;
     }
@@ -50,7 +50,7 @@ public class PathQuery<E> {
      * @param head the top-level entity
      * @param query the query - must have a collection or connectType value set
      */
-    public PathQuery( EntityRef head, Query query ) {
+    public PathQuery( SimpleEntityRef head, Query query ) {
         if ( query.getCollection() == null && query.getConnectionType() == null ) {
             throw new IllegalArgumentException( "Query must have a collection or connectionType value" );
         }
@@ -122,7 +122,7 @@ public class PathQuery<E> {
     }
 
 
-    public EntityRef getHead() {
+    public SimpleEntityRef getHead() {
         return head;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/main/java/org/apache/usergrid/persistence/SimpleEntityRef.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/persistence/SimpleEntityRef.java b/stack/core/src/main/java/org/apache/usergrid/persistence/SimpleEntityRef.java
index 3e0f413..65f093f 100644
--- a/stack/core/src/main/java/org/apache/usergrid/persistence/SimpleEntityRef.java
+++ b/stack/core/src/main/java/org/apache/usergrid/persistence/SimpleEntityRef.java
@@ -17,6 +17,9 @@
 package org.apache.usergrid.persistence;
 
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 import java.util.UUID;
 
 
@@ -26,24 +29,25 @@ public class SimpleEntityRef implements EntityRef {
 
     protected final String type;
 
-    protected final UUID id;
+    protected final UUID uuid;
 
 
-    public SimpleEntityRef( UUID id ) {
-        this.id = id;
+    public SimpleEntityRef( UUID uuid ) {
+        this.uuid = uuid;
         type = null;
     }
 
 
-    public SimpleEntityRef( String type, UUID id ) {
+    @JsonCreator
+    public SimpleEntityRef(@JsonProperty("type")  String type,@JsonProperty("uuid")  UUID uuid ) {
         this.type = type;
-        this.id = id;
+        this.uuid = uuid;
     }
 
 
     public SimpleEntityRef( EntityRef entityRef ) {
         type = entityRef.getType();
-        id = entityRef.getUuid();
+        uuid = entityRef.getUuid();
     }
 
 
@@ -54,7 +58,7 @@ public class SimpleEntityRef implements EntityRef {
 
     @Override
     public UUID getUuid() {
-        return id;
+        return uuid;
     }
 
 
@@ -69,8 +73,8 @@ public class SimpleEntityRef implements EntityRef {
     }
 
 
-    public static EntityRef ref( UUID entityId ) {
-        return new SimpleEntityRef( null, entityId );
+    public static EntityRef ref( UUID uuid ) {
+        return new SimpleEntityRef( null, uuid );
     }
 
 
@@ -83,7 +87,7 @@ public class SimpleEntityRef implements EntityRef {
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ( ( id == null ) ? 0 : id.hashCode() );
+        result = prime * result + ( ( uuid == null ) ? 0 : uuid.hashCode() );
         result = prime * result + ( ( type == null ) ? 0 : type.hashCode() );
         return result;
     }
@@ -101,12 +105,12 @@ public class SimpleEntityRef implements EntityRef {
             return false;
         }
         SimpleEntityRef other = ( SimpleEntityRef ) obj;
-        if ( id == null ) {
-            if ( other.id != null ) {
+        if ( uuid == null ) {
+            if ( other.uuid != null ) {
                 return false;
             }
         }
-        else if ( !id.equals( other.id ) ) {
+        else if ( !uuid.equals( other.uuid ) ) {
             return false;
         }
         if ( type == null ) {
@@ -123,13 +127,13 @@ public class SimpleEntityRef implements EntityRef {
 
     @Override
     public String toString() {
-        if ( ( type == null ) && ( id == null ) ) {
+        if ( ( type == null ) && ( uuid == null ) ) {
             return "EntityRef(" + NULL_ID.toString() + ")";
         }
         if ( type == null ) {
-            return "EntityRef(" + id.toString() + ")";
+            return "EntityRef(" + uuid.toString() + ")";
         }
-        return type + "(" + id + ")";
+        return type + "(" + uuid + ")";
     }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/core/src/test/java/org/apache/usergrid/persistence/PathQueryIT.java
----------------------------------------------------------------------
diff --git a/stack/core/src/test/java/org/apache/usergrid/persistence/PathQueryIT.java b/stack/core/src/test/java/org/apache/usergrid/persistence/PathQueryIT.java
index bdaef0a..16fae85 100644
--- a/stack/core/src/test/java/org/apache/usergrid/persistence/PathQueryIT.java
+++ b/stack/core/src/test/java/org/apache/usergrid/persistence/PathQueryIT.java
@@ -92,7 +92,7 @@ public class PathQueryIT extends AbstractCoreIT {
         deviceQuery.addFilter( "index >= 2" );
         int expectedDeviceQuerySize = 3;
 
-        PathQuery<EntityRef> usersPQ = new PathQuery<EntityRef>( em.getApplicationRef(), userQuery );
+        PathQuery<EntityRef> usersPQ = new PathQuery<EntityRef>( new SimpleEntityRef( em.getApplicationRef()), userQuery );
         PathQuery<Entity> devicesPQ = usersPQ.chain( deviceQuery );
         HashSet set = new HashSet( expectedUserQuerySize * expectedDeviceQuerySize );
         Iterator<Entity> i = devicesPQ.iterator( em );
@@ -174,7 +174,7 @@ public class PathQueryIT extends AbstractCoreIT {
         deviceQuery.addFilter( "index >= 4" );
         int expectedDeviceQuerySize = 3;
 
-        PathQuery groupsPQ = new PathQuery( em.getApplicationRef(), groupQuery );
+        PathQuery groupsPQ = new PathQuery(new SimpleEntityRef( em.getApplicationRef() ), groupQuery );
         PathQuery usersPQ = groupsPQ.chain( userQuery );
         PathQuery<Entity> devicesPQ = usersPQ.chain( deviceQuery );
 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/util/ValidationUtils.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/util/ValidationUtils.java b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/util/ValidationUtils.java
index 62f7ab6..141978a 100644
--- a/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/util/ValidationUtils.java
+++ b/stack/corepersistence/common/src/main/java/org/apache/usergrid/persistence/core/util/ValidationUtils.java
@@ -80,7 +80,7 @@ public class ValidationUtils {
 
         Preconditions.checkNotNull( uuid, "The id uuid is required to be set" );
 
-        Preconditions.checkArgument( uuid.version() == UUID_VERSION, "The uuid must be version 1" );
+        //Preconditions.checkArgument( uuid.version() == UUID_VERSION, "The uuid must be version 1" );
 
         final String type = entityId.getType();
         Preconditions.checkNotNull( type, "The id type is required " );

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/64ad13d5/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java
index 9dda724..569c08d 100644
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/query/Query.java
@@ -28,6 +28,8 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.UUID;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
 import org.antlr.runtime.ANTLRStringStream;
 import org.antlr.runtime.ClassicToken;
 import org.antlr.runtime.CommonTokenStream;
@@ -1081,7 +1083,7 @@ public class Query {
         private final Query.SortDirection direction;
 
 
-        public SortPredicate( String propertyName, Query.SortDirection direction ) {
+        public SortPredicate(@JsonProperty("propertyName")  String propertyName, @JsonProperty("direction")  Query.SortDirection direction ) {
             if ( propertyName == null ) {
                 throw new NullPointerException( "Property name was null" );
             }