You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/08/03 23:27:05 UTC
svn commit: r800573 - in /incubator/cassandra/trunk: conf/
src/java/org/apache/cassandra/db/marshal/
Author: jbellis
Date: Mon Aug 3 21:27:04 2009
New Revision: 800573
URL: http://svn.apache.org/viewvc?rev=800573&view=rev
Log:
Rename UUIDType to LexicalUUIDType and add TimeUUIDType.
patch by jbellis; reviewed by Michael Koziarski for CASSANDRA-334
Added:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
- copied, changed from r800561, incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UUIDType.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
Removed:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UUIDType.java
Modified:
incubator/cassandra/trunk/conf/storage-conf.xml
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java
Modified: incubator/cassandra/trunk/conf/storage-conf.xml
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/conf/storage-conf.xml?rev=800573&r1=800572&r2=800573&view=diff
==============================================================================
--- incubator/cassandra/trunk/conf/storage-conf.xml (original)
+++ incubator/cassandra/trunk/conf/storage-conf.xml Mon Aug 3 21:27:04 2009
@@ -54,13 +54,20 @@
The CompareWith attribute tells Cassandra how to sort the columns
for slicing operations. For backwards compatibility, the default
is to use AsciiType, which is probably NOT what you want.
- Other options are BytesType, UTF8Type, UUIDType, and LongType.
+ Other options are BytesType, UTF8Type, LexicalUUIDType, TimeUUIDType, and LongType.
You can also specify the fully-qualified class name to a class
of your choice implementing org.apache.cassandra.db.marshal.IType.
SuperColumns have a similar CompareSubcolumnsWith attribute.
- (So to get the closest approximation to 0.3-style supercolumns,
+ ByteType: simple sort by byte value. No validation is performed.
+ AsciiType: like BytesType, but validates that the input can be parsed as US-ASCII.
+ UTF8Type: A string encoded as UTF8
+ LongType: A 64bit long
+ LexicalUUIDType: a 128bit UUID, compared lexically (by byte value)
+ TimeUUIDType: a 128bit version 1 UUID, compared by timestamp
+
+ (To get the closest approximation to 0.3-style supercolumns,
you would use CompareWith=UTF8Type CompareSubcolumnsWith=LongType.)
if FlushPeriodInMinutes is configured and positive, it will be
Copied: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java (from r800561, incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UUIDType.java)
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java?p2=incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java&p1=incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UUIDType.java&r1=800561&r2=800573&rev=800573&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UUIDType.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java Mon Aug 3 21:27:04 2009
@@ -3,9 +3,9 @@
import java.util.UUID;
import java.nio.ByteBuffer;
-public class UUIDType extends AbstractType
+public class LexicalUUIDType extends AbstractType
{
- private UUID getUUID(byte[] bytes)
+ static UUID getUUID(byte[] bytes)
{
ByteBuffer bb = ByteBuffer.wrap(bytes);
return new UUID(bb.getLong(), bb.getLong());
@@ -27,6 +27,10 @@
public String getString(byte[] bytes)
{
+ if (bytes.length != 16)
+ {
+ throw new MarshalException("UUIDs must be exactly 16 bytes");
+ }
return getUUID(bytes).toString();
}
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java?rev=800573&r1=800572&r2=800573&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java Mon Aug 3 21:27:04 2009
@@ -23,6 +23,10 @@
public String getString(byte[] bytes)
{
+ if (bytes.length != 8)
+ {
+ throw new MarshalException("A long is exactly 8 bytes");
+ }
return String.valueOf(ByteBuffer.wrap(bytes).getLong());
}
}
Added: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java?rev=800573&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java (added)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java Mon Aug 3 21:27:04 2009
@@ -0,0 +1,28 @@
+package org.apache.cassandra.db.marshal;
+
+import java.util.UUID;
+import java.nio.ByteBuffer;
+
+public class TimeUUIDType extends AbstractType
+{
+ public int compare(byte[] o1, byte[] o2)
+ {
+ long t1 = LexicalUUIDType.getUUID(o1).timestamp();
+ long t2 = LexicalUUIDType.getUUID(o2).timestamp();
+ return t1 < t2 ? -1 : (t1 > t2 ? 1 : 0);
+ }
+
+ public String getString(byte[] bytes)
+ {
+ if (bytes.length != 16)
+ {
+ throw new MarshalException("UUIDs must be exactly 16 bytes");
+ }
+ UUID uuid = LexicalUUIDType.getUUID(bytes);
+ if (uuid.version() != 1)
+ {
+ throw new MarshalException("TimeUUID only makes sense with version 1 UUIDs");
+ }
+ return uuid.toString();
+ }
+}