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;
+ }
}