Author: jbellis
Date: Fri Mar 19 20:26:45 2010
New Revision: 925407

URL: http://svn.apache.org/viewvc?rev=925407&view=rev
Log:
use lexical comparison if time part of uuid is the same.  patch by Sylvain 
Lebresne and jbellis for CASSANDRA-907

Modified:
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
    
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/db/marshal/TypeCompareTest.java

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java?rev=925407&r1=925406&r2=925407&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
 Fri Mar 19 20:26:45 2010
@@ -22,6 +22,7 @@ package org.apache.cassandra.db.marshal;
 
 
 import java.util.UUID;
+import org.apache.cassandra.utils.FBUtilities;
 
 public class TimeUUIDType extends AbstractType
 {
@@ -38,7 +39,7 @@ public class TimeUUIDType extends Abstra
         
         long t1 = LexicalUUIDType.getUUID(o1).timestamp();
         long t2 = LexicalUUIDType.getUUID(o2).timestamp();
-        return t1 < t2 ? -1 : (t1 > t2 ? 1 : 0);
+        return t1 < t2 ? -1 : (t1 > t2 ? 1 : FBUtilities.compareByteArrays(o1, 
o2));
     }
 
     public String getString(byte[] bytes)

Modified: 
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/db/marshal/TypeCompareTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/db/marshal/TypeCompareTest.java?rev=925407&r1=925406&r2=925407&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/db/marshal/TypeCompareTest.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/db/marshal/TypeCompareTest.java
 Fri Mar 19 20:26:45 2010
@@ -22,9 +22,10 @@ package org.apache.cassandra.db.marshal;
 
 
 import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
+import java.util.UUID;
 
 import org.apache.commons.lang.ArrayUtils;
-
 import org.junit.Test;
 
 public class TypeCompareTest
@@ -66,4 +67,21 @@ public class TypeCompareTest
         assert comparator.compare("z".getBytes("UTF-8"), 
"z".getBytes("UTF-8")) == 0;
         assert comparator.compare("a".getBytes("UTF-8"), 
"z".getBytes("UTF-8")) < 0;
     }
+
+    @Test
+    public void testTimeUUID()
+    {
+        // two different UUIDs w/ the same timestamp
+        UUID uuid1 = UUID.fromString("1077e700-c7f2-11de-86d5-f5bcc793a028");
+        byte[] bytes1 = new byte[16];
+        ByteBuffer bb1 = ByteBuffer.wrap(bytes1);
+        bb1.putLong(uuid1.getMostSignificantBits());  
bb1.putLong(uuid1.getLeastSignificantBits());
+
+        UUID uuid2 = UUID.fromString("1077e700-c7f2-11de-982e-6fad363d5f29");
+        byte[] bytes2 = new byte[16];
+        ByteBuffer bb2 = ByteBuffer.wrap(bytes2);
+        bb2.putLong(uuid2.getMostSignificantBits());  
bb2.putLong(uuid2.getLeastSignificantBits());
+
+        assert new TimeUUIDType().compare(bytes1, bytes2) != 0;
+    }
 }


Reply via email to