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 2010/10/22 05:23:31 UTC

svn commit: r1026200 [7/11] - in /cassandra/trunk: ./ interface/ interface/thrift/gen-java/org/apache/cassandra/thrift/ src/java/org/apache/cassandra/auth/ src/java/org/apache/cassandra/avro/ src/java/org/apache/cassandra/cli/ src/java/org/apache/cassa...

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryPath.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryPath.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryPath.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryPath.java Fri Oct 22 03:23:26 2010
@@ -21,24 +21,23 @@ package org.apache.cassandra.db.filter;
  */
 
 
+import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.DataInputStream;
-
-import org.apache.commons.lang.ArrayUtils;
+import java.nio.ByteBuffer;
 
 import org.apache.cassandra.thrift.ColumnParent;
 import org.apache.cassandra.thrift.ColumnPath;
-import org.apache.cassandra.db.ColumnSerializer;
 import org.apache.cassandra.utils.FBUtilities;
+import org.apache.commons.lang.ArrayUtils;
 
 public class QueryPath
 {
     public final String columnFamilyName;
-    public final byte[] superColumnName;
-    public final byte[] columnName;
+    public final ByteBuffer superColumnName;
+    public final ByteBuffer columnName;
 
-    public QueryPath(String columnFamilyName, byte[] superColumnName, byte[] columnName)
+    public QueryPath(String columnFamilyName, ByteBuffer superColumnName, ByteBuffer columnName)
     {
         this.columnFamilyName = columnFamilyName;
         this.superColumnName = superColumnName;
@@ -50,7 +49,7 @@ public class QueryPath
         this(columnParent.column_family, columnParent.super_column, null);
     }
 
-    public QueryPath(String columnFamilyName, byte[] superColumnName)
+    public QueryPath(String columnFamilyName, ByteBuffer superColumnName)
     {
         this(columnFamilyName, superColumnName, null);
     }
@@ -65,7 +64,7 @@ public class QueryPath
         this(column_path.column_family, column_path.super_column, column_path.column);
     }
 
-    public static QueryPath column(byte[] columnName)
+    public static QueryPath column(ByteBuffer columnName)
     {
         return new QueryPath(null, null, columnName);
     }
@@ -83,18 +82,20 @@ public class QueryPath
     public void serialize(DataOutputStream dos) throws IOException
     {
         assert !"".equals(columnFamilyName);
-        assert superColumnName == null || superColumnName.length > 0;
-        assert columnName == null || columnName.length > 0;
+        assert superColumnName == null || superColumnName.remaining() > 0;
+        assert columnName == null || columnName.remaining() > 0;
         dos.writeUTF(columnFamilyName == null ? "" : columnFamilyName);
-        FBUtilities.writeShortByteArray(superColumnName == null ? ArrayUtils.EMPTY_BYTE_ARRAY : superColumnName, dos);
-        FBUtilities.writeShortByteArray(columnName == null ? ArrayUtils.EMPTY_BYTE_ARRAY : columnName, dos);
+        FBUtilities.writeShortByteArray(superColumnName == null ? FBUtilities.EMPTY_BYTE_BUFFER : superColumnName, dos);
+        FBUtilities.writeShortByteArray(columnName == null ? FBUtilities.EMPTY_BYTE_BUFFER : columnName, dos);
     }
 
     public static QueryPath deserialize(DataInputStream din) throws IOException
     {
         String cfName = din.readUTF();
-        byte[] scName = FBUtilities.readShortByteArray(din);
-        byte[] cName = FBUtilities.readShortByteArray(din);
-        return new QueryPath(cfName.isEmpty() ? null : cfName, scName.length == 0 ? null : scName, cName.length == 0 ? null : cName);
+        ByteBuffer scName = FBUtilities.readShortByteArray(din);
+        ByteBuffer cName = FBUtilities.readShortByteArray(din);
+        return new QueryPath(cfName.isEmpty() ? null : cfName, 
+                             scName.remaining() == 0 ? null : scName, 
+                             cName.remaining() == 0 ? null : cName);
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java Fri Oct 22 03:23:26 2010
@@ -21,32 +21,40 @@ package org.apache.cassandra.db.filter;
  */
 
 
-import java.util.*;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.commons.collections.comparators.ReverseComparator;
-import org.apache.commons.collections.iterators.ReverseListIterator;
-import org.apache.commons.collections.IteratorUtils;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
 
 import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.db.ColumnFamily;
+import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.IColumn;
+import org.apache.cassandra.db.IColumnContainer;
+import org.apache.cassandra.db.Memtable;
+import org.apache.cassandra.db.SuperColumn;
 import org.apache.cassandra.db.columniterator.IColumnIterator;
 import org.apache.cassandra.db.columniterator.SSTableSliceIterator;
+import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.io.util.FileDataInput;
-import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.comparators.ReverseComparator;
+import org.apache.commons.collections.iterators.ReverseListIterator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class SliceQueryFilter implements IFilter
 {
     private static Logger logger = LoggerFactory.getLogger(SliceQueryFilter.class);
 
-    public final byte[] start;
-    public final byte[] finish;
+    public final ByteBuffer start;
+    public final ByteBuffer finish;
     public final boolean reversed;
     public final int count;
 
-    public SliceQueryFilter(byte[] start, byte[] finish, boolean reversed, int count)
+    public SliceQueryFilter(ByteBuffer start, ByteBuffer finish, boolean reversed, int count)
     {
         this.start = start;
         this.finish = finish;
@@ -86,7 +94,7 @@ public class SliceQueryFilter implements
         }
 
         // iterate until we get to the "real" start column
-        Comparator<byte[]> comparator = reversed ? superColumn.getComparator().getReverseComparator() : superColumn.getComparator();
+        Comparator<ByteBuffer> comparator = reversed ? superColumn.getComparator().getReverseComparator() : superColumn.getComparator();
         while (subcolumns.hasNext())
         {
             IColumn column = subcolumns.next();
@@ -121,11 +129,11 @@ public class SliceQueryFilter implements
                 logger.debug(String.format("collecting %s of %s: %s",
                                            liveColumns, count, column.getString(comparator)));
 
-            if (finish.length > 0
+            if (finish.remaining() > 0
                 && ((!reversed && comparator.compare(column.name(), finish) > 0))
                     || (reversed && comparator.compare(column.name(), finish) < 0))
                 break;
-
+ 
             // only count live columns towards the `count` criteria
             if (!column.isMarkedForDelete()
                 && (!container.isMarkedForDelete()

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AbstractType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AbstractType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AbstractType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AbstractType.java Fri Oct 22 03:23:26 2010
@@ -21,41 +21,42 @@ package org.apache.cassandra.db.marshal;
  */
 
 
-import java.util.Comparator;
+import java.nio.ByteBuffer;
 import java.util.Collection;
+import java.util.Comparator;
 
 import org.apache.cassandra.db.IColumn;
 
 /**
- * Specifies a Comparator for a specific type of byte[].
+ * Specifies a Comparator for a specific type of ByteBuffer.
  *
- * Note that empty byte[] are used to represent "start at the beginning"
+ * Note that empty ByteBuffer are used to represent "start at the beginning"
  * or "stop at the end" arguments to get_slice, so the Comparator
  * should always handle those values even if they normally do not
- * represent a valid byte[] for the type being compared.
+ * represent a valid ByteBuffer for the type being compared.
  */
-public abstract class AbstractType implements Comparator<byte[]>
+public abstract class AbstractType implements Comparator<ByteBuffer>
 {
     /** get a string representation of the bytes suitable for log messages */
-    public abstract String getString(byte[] bytes);
+    public abstract String getString(ByteBuffer bytes);
 
     /** validate that the byte array is a valid sequence for the type we are supposed to be comparing */
-    public void validate(byte[] bytes)
+    public void validate(ByteBuffer bytes)
     {
         getString(bytes);
     }
 
-    public Comparator<byte[]> getReverseComparator()
+    public Comparator<ByteBuffer> getReverseComparator()
     {
-        return new Comparator<byte[]>()
+        return new Comparator<ByteBuffer>()
         {
-            public int compare(byte[] o1, byte[] o2)
+            public int compare(ByteBuffer o1, ByteBuffer o2)
             {
-                if (o1.length == 0)
+                if (o1.remaining() == 0)
                 {
-                    return o2.length == 0 ? 0 : -1;
+                    return o2.remaining() == 0 ? 0 : -1;
                 }
-                if (o2.length == 0)
+                if (o2.remaining() == 0)
                 {
                     return 1;
                 }
@@ -66,10 +67,10 @@ public abstract class AbstractType imple
     }
 
     /** convenience method */
-    public String getString(Collection<byte[]> names)
+    public String getString(Collection<ByteBuffer> names)
     {
         StringBuilder builder = new StringBuilder();
-        for (byte[] name : names)
+        for (ByteBuffer name : names)
         {
             builder.append(getString(name)).append(",");
         }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/AsciiType.java Fri Oct 22 03:23:26 2010
@@ -22,6 +22,7 @@ package org.apache.cassandra.db.marshal;
 
 
 import java.io.UnsupportedEncodingException;
+import java.nio.ByteBuffer;
 
 public class AsciiType extends BytesType
 {
@@ -30,11 +31,11 @@ public class AsciiType extends BytesType
     AsciiType() {} // singleton
 
     @Override
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
         try
         {
-            return new String(bytes, "US-ASCII");
+            return new String(bytes.array(),bytes.position()+bytes.arrayOffset(),bytes.remaining(), "US-ASCII");
         }
         catch (UnsupportedEncodingException e)
         {

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/BytesType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/BytesType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/BytesType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/BytesType.java Fri Oct 22 03:23:26 2010
@@ -21,8 +21,9 @@ package org.apache.cassandra.db.marshal;
  */
 
 
-import java.util.Arrays;
+import java.nio.ByteBuffer;
 
+import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.FBUtilities;
 
 public class BytesType extends AbstractType
@@ -31,12 +32,17 @@ public class BytesType extends AbstractT
 
     BytesType() {} // singleton
     
-    public int compare(byte[] o1, byte[] o2)
+    public int compare(ByteBuffer o1, ByteBuffer o2)
     {
-        return FBUtilities.compareByteArrays(o1, o2);
+        if(null == o1){
+            if(null == o2) return 0;
+            else return -1;
+        }
+              
+        return ByteBufferUtil.compare(o1, o2);
     }
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
         return FBUtilities.bytesToHex(bytes);
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/IntegerType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/IntegerType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/IntegerType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/IntegerType.java Fri Oct 22 03:23:26 2010
@@ -19,20 +19,22 @@
 
 package org.apache.cassandra.db.marshal;
 
+import java.nio.ByteBuffer;
+
 public final class IntegerType extends AbstractType
 {
     public static final IntegerType instance = new IntegerType();
 
-    private static int findMostSignificantByte(byte[] bytes)
+    private static int findMostSignificantByte(ByteBuffer bytes)
     {
-        int len = bytes.length - 1;
+        int len = bytes.remaining() - 1;
         int i = 0;
         for (; i < len; i++)
         {
-            byte b0 = bytes[i];
+            byte b0 = bytes.array()[bytes.position()+bytes.arrayOffset()+i];
             if (b0 != 0 && b0 != -1)
                 break;
-            byte b1 = bytes[i + 1];
+            byte b1 = bytes.array()[bytes.position()+bytes.arrayOffset()+ i + 1];
             if (b0 == 0 && b1 != 0)
             {
                 if (b1 > 0)
@@ -51,10 +53,10 @@ public final class IntegerType extends A
 
     IntegerType() {/* singleton */}
 
-    public int compare(byte[] lhs, byte[] rhs)
+    public int compare(ByteBuffer lhs, ByteBuffer rhs)
     {
-        int lhsLen = lhs.length;
-        int rhsLen = rhs.length;
+        int lhsLen = lhs.remaining();
+        int rhsLen = rhs.remaining();
 
         if (lhsLen == 0)
             return rhsLen == 0 ? 0 : -1;
@@ -68,8 +70,8 @@ public final class IntegerType extends A
         int lhsLenDiff = lhsLen - lhsMsbIdx;
         int rhsLenDiff = rhsLen - rhsMsbIdx;
 
-        byte lhsMsb = lhs[lhsMsbIdx];
-        byte rhsMsb = rhs[rhsMsbIdx];
+        byte lhsMsb = lhs.array()[lhs.position()+lhs.arrayOffset()+lhsMsbIdx];
+        byte rhsMsb = rhs.array()[rhs.position()+rhs.arrayOffset()+rhsMsbIdx];
 
         /*         +    -
          *      -----------
@@ -99,8 +101,8 @@ public final class IntegerType extends A
         // remaining bytes are compared unsigned
         while (lhsMsbIdx < lhsLen)
         {
-            lhsMsb = lhs[lhsMsbIdx++];
-            rhsMsb = rhs[rhsMsbIdx++];
+            lhsMsb = lhs.array()[lhs.position()+lhs.arrayOffset()+lhsMsbIdx++];
+            rhsMsb = rhs.array()[rhs.position()+rhs.arrayOffset()+rhsMsbIdx++];
             if (lhsMsb != rhsMsb)
                 return (lhsMsb & 0xFF) - (rhsMsb & 0xFF);
         }
@@ -109,13 +111,13 @@ public final class IntegerType extends A
     }
 
     @Override
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
         if (bytes == null)
             return "null";
-        if (bytes.length == 0)
+        if (bytes.remaining() == 0)
             return "empty";
 
-        return new java.math.BigInteger(bytes).toString(10);
+        return new java.math.BigInteger(bytes.array()).toString(10);
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java Fri Oct 22 03:23:26 2010
@@ -24,25 +24,26 @@ package org.apache.cassandra.db.marshal;
 import java.util.UUID;
 import java.nio.ByteBuffer;
 
+import org.apache.cassandra.utils.ByteBufferUtil;
+
 public class LexicalUUIDType extends AbstractType
 {
     public static final LexicalUUIDType instance = new LexicalUUIDType();
 
     LexicalUUIDType() {} // singleton
 
-    static UUID getUUID(byte[] bytes)
+    static UUID getUUID(ByteBuffer bytes)
     {
-        ByteBuffer bb = ByteBuffer.wrap(bytes);
-        return new UUID(bb.getLong(), bb.getLong());
+        return new UUID(bytes.getLong(bytes.position()+bytes.arrayOffset()), bytes.getLong(bytes.position()+bytes.arrayOffset()));
     }
 
-    public int compare(byte[] o1, byte[] o2)
+    public int compare(ByteBuffer o1, ByteBuffer o2)
     {
-        if (o1.length == 0)
+        if (o1.remaining() == 0)
         {
-            return o2.length == 0 ? 0 : -1;
+            return o2.remaining() == 0 ? 0 : -1;
         }
-        if (o2.length == 0)
+        if (o2.remaining() == 0)
         {
             return 1;
         }
@@ -50,13 +51,13 @@ public class LexicalUUIDType extends Abs
         return getUUID(o1).compareTo(getUUID(o2));
     }
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
-        if (bytes.length == 0)
+        if (bytes.remaining() == 0)
         {
             return "";
         }
-        if (bytes.length != 16)
+        if (bytes.remaining() != 16)
         {
             throw new MarshalException("UUIDs must be exactly 16 bytes");
         }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java Fri Oct 22 03:23:26 2010
@@ -19,6 +19,8 @@
 
 package org.apache.cassandra.db.marshal;
 
+import java.nio.ByteBuffer;
+
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.dht.Token;
 
@@ -33,12 +35,12 @@ public class LocalByPartionerType<T exte
         this.partitioner = partitioner;
     }
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
         return null;
     }
 
-    public int compare(byte[] o1, byte[] o2)
+    public int compare(ByteBuffer o1, ByteBuffer o2)
     {
         return partitioner.decorateKey(o1).compareTo(partitioner.decorateKey(o2));
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/LongType.java Fri Oct 22 03:23:26 2010
@@ -23,7 +23,7 @@ package org.apache.cassandra.db.marshal;
 
 import java.nio.ByteBuffer;
 
-import org.apache.cassandra.utils.FBUtilities;
+import org.apache.cassandra.utils.ByteBufferUtil;
 
 public class LongType extends AbstractType
 {
@@ -31,33 +31,37 @@ public class LongType extends AbstractTy
 
     LongType() {} // singleton
 
-    public int compare(byte[] o1, byte[] o2)
+    public int compare(ByteBuffer o1, ByteBuffer o2)
     {
-        if (o1.length == 0)
+        if (o1.remaining() == 0)
         {
-            return o2.length == 0 ? 0 : -1;
+            return o2.remaining() == 0 ? 0 : -1;
         }
-        if (o2.length == 0)
+        if (o2.remaining() == 0)
         {
             return 1;
         }
 
-        int diff = o1[0] - o2[0];
+        int diff = o1.array()[o1.position()+o1.arrayOffset()] - o2.array()[o2.position()+o2.arrayOffset()];
         if (diff != 0)
             return diff;
-        return FBUtilities.compareByteArrays(o1, o2);
+        
+       
+        return ByteBufferUtil.compare(o1, o2);
     }
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
-        if (bytes.length == 0)
+        if (bytes.remaining() == 0)
         {
             return "";
         }
-        if (bytes.length != 8)
+        if (bytes.remaining() != 8)
         {
-            throw new MarshalException("A long is exactly 8 bytes");
+            throw new MarshalException("A long is exactly 8 bytes: "+bytes.remaining());
         }
-        return String.valueOf(ByteBuffer.wrap(bytes).getLong());
+        
+        
+        return String.valueOf(bytes.getLong(bytes.position()+bytes.arrayOffset()));
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java Fri Oct 22 03:23:26 2010
@@ -21,7 +21,9 @@ package org.apache.cassandra.db.marshal;
  */
 
 
+import java.nio.ByteBuffer;
 import java.util.UUID;
+
 import org.apache.cassandra.utils.FBUtilities;
 
 public class TimeUUIDType extends AbstractType
@@ -30,48 +32,51 @@ public class TimeUUIDType extends Abstra
 
     TimeUUIDType() {} // singleton
 
-    public int compare(byte[] o1, byte[] o2)
+    public int compare(ByteBuffer o1, ByteBuffer o2)
     {
-        if (o1.length == 0)
+        if (o1.remaining() == 0)
         {
-            return o2.length == 0 ? 0 : -1;
+            return o2.remaining() == 0 ? 0 : -1;
         }
-        if (o2.length == 0)
+        if (o2.remaining() == 0)
         {
             return 1;
         }
         int res = compareTimestampBytes(o1, o2);
         if (res != 0)
             return res;
-        return FBUtilities.compareByteArrays(o1, o2);
+        return o1.compareTo(o2);
     }
 
-    private static int compareTimestampBytes(byte[] o1, byte[] o2)
+    private static int compareTimestampBytes(ByteBuffer o1, ByteBuffer o2)
     {
-        int d = (o1[6] & 0xF) - (o2[6] & 0xF);
+        int o1Pos = o1.position()+o1.arrayOffset();
+        int o2Pos = o2.position()+o2.arrayOffset();
+        
+        int d = (o1.array()[o1Pos+6] & 0xF) - (o2.array()[o2Pos+6] & 0xF);
         if (d != 0) return d;
-        d = (o1[7] & 0xFF) - (o2[7] & 0xFF);
+        d = (o1.array()[o1Pos+7] & 0xFF) - (o2.array()[o2Pos+7] & 0xFF);
         if (d != 0) return d;
-        d = (o1[4] & 0xFF) - (o2[4] & 0xFF);
+        d = (o1.array()[o1Pos+4] & 0xFF) - (o2.array()[o2Pos+4] & 0xFF);
         if (d != 0) return d;
-        d = (o1[5] & 0xFF) - (o2[5] & 0xFF);
+        d = (o1.array()[o1Pos+5] & 0xFF) - (o2.array()[o2Pos+5] & 0xFF);
         if (d != 0) return d;
-        d = (o1[0] & 0xFF) - (o2[0] & 0xFF);
+        d = (o1.array()[o1Pos+0] & 0xFF) - (o2.array()[o2Pos+0] & 0xFF);
         if (d != 0) return d;
-        d = (o1[1] & 0xFF) - (o2[1] & 0xFF);
+        d = (o1.array()[o1Pos+1] & 0xFF) - (o2.array()[o2Pos+1] & 0xFF);
         if (d != 0) return d;
-        d = (o1[2] & 0xFF) - (o2[2] & 0xFF);
+        d = (o1.array()[o1Pos+2] & 0xFF) - (o2.array()[o2Pos+2] & 0xFF);
         if (d != 0) return d;
-        return (o1[3] & 0xFF) - (o2[3] & 0xFF);
+        return (o1.array()[o1Pos+3] & 0xFF) - (o2.array()[o2Pos+3] & 0xFF);
     }
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
-        if (bytes.length == 0)
+        if (bytes.remaining() == 0)
         {
             return "";
         }
-        if (bytes.length != 16)
+        if (bytes.remaining() != 16)
         {
             throw new MarshalException("UUIDs must be exactly 16 bytes");
         }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UTF8Type.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UTF8Type.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/marshal/UTF8Type.java Fri Oct 22 03:23:26 2010
@@ -20,7 +20,7 @@ package org.apache.cassandra.db.marshal;
  * 
  */
 
-import java.io.IOException;
+import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
 import java.util.Arrays;
 
@@ -32,7 +32,7 @@ public class UTF8Type extends BytesType
 
     UTF8Type() {} // singleton
 
-    public String getString(byte[] bytes)
+    public String getString(ByteBuffer bytes)
     {
         try
         {
@@ -40,7 +40,7 @@ public class UTF8Type extends BytesType
         }
         catch (CharacterCodingException e)
         {
-            throw new MarshalException("invalid UTF8 bytes " + Arrays.toString(bytes));
+            throw new MarshalException("invalid UTF8 bytes " + Arrays.toString(bytes.array()));
         }
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/Migration.java Fri Oct 22 03:23:26 2010
@@ -71,8 +71,8 @@ public abstract class Migration
     public static final String NAME_VALIDATOR_REGEX = "\\w+";
     public static final String MIGRATIONS_CF = "Migrations";
     public static final String SCHEMA_CF = "Schema";
-    public static final byte[] MIGRATIONS_KEY = "Migrations Key".getBytes(UTF_8);
-    public static final byte[] LAST_MIGRATION_KEY = "Last Migration".getBytes(UTF_8);
+    public static final ByteBuffer MIGRATIONS_KEY = ByteBuffer.wrap("Migrations Key".getBytes(UTF_8));
+    public static final ByteBuffer LAST_MIGRATION_KEY = ByteBuffer.wrap("Last Migration".getBytes(UTF_8));
     
     protected RowMutation rm;
     protected UUID newVersion;
@@ -111,15 +111,15 @@ public abstract class Migration
         if (!clientMode)
         {
             long now = System.currentTimeMillis();
-            byte[] buf = serialize();
+            ByteBuffer buf = serialize();
             RowMutation migration = new RowMutation(Table.SYSTEM_TABLE, MIGRATIONS_KEY);
-            migration.add(new QueryPath(MIGRATIONS_CF, null, UUIDGen.decompose(newVersion)), buf, now);
+            migration.add(new QueryPath(MIGRATIONS_CF, null, ByteBuffer.wrap(UUIDGen.decompose(newVersion))), buf, now);
             migration.apply();
             
             // note that we're storing this in the system table, which is not replicated
             logger.debug("Applying migration " + newVersion.toString());
             migration = new RowMutation(Table.SYSTEM_TABLE, LAST_MIGRATION_KEY);
-            migration.add(new QueryPath(SCHEMA_CF, null, LAST_MIGRATION_KEY), UUIDGen.decompose(newVersion), now);
+            migration.add(new QueryPath(SCHEMA_CF, null, LAST_MIGRATION_KEY), ByteBuffer.wrap(UUIDGen.decompose(newVersion)), now);
             migration.apply();
 
             // if we fail here, there will be schema changes in the CL that will get replayed *AFTER* the schema is loaded.
@@ -218,17 +218,17 @@ public abstract class Migration
         long now = System.currentTimeMillis();
         // add a column for each keyspace
         for (KSMetaData ksm : ksms)
-            rm.add(new QueryPath(SCHEMA_CF, null, ksm.name.getBytes(UTF_8)), SerDeUtils.serialize(ksm.deflate()), now);
+            rm.add(new QueryPath(SCHEMA_CF, null, ByteBuffer.wrap(ksm.name.getBytes(UTF_8))), SerDeUtils.serialize(ksm.deflate()), now);
         // add the schema
         rm.add(new QueryPath(SCHEMA_CF,
                              null,
                              DefsTable.DEFINITION_SCHEMA_COLUMN_NAME),
-                             org.apache.cassandra.avro.KsDef.SCHEMA$.toString().getBytes(UTF_8),
+                             ByteBuffer.wrap(org.apache.cassandra.avro.KsDef.SCHEMA$.toString().getBytes(UTF_8)),
                              now);
         return rm;
     }
         
-    public byte[] serialize() throws IOException
+    public ByteBuffer serialize() throws IOException
     {
         // super deflate
         org.apache.cassandra.db.migration.avro.Migration mi = new org.apache.cassandra.db.migration.avro.Migration();
@@ -256,7 +256,7 @@ public abstract class Migration
         return SerDeUtils.serializeWithSchema(mi);
     }
 
-    public static Migration deserialize(byte[] bytes) throws IOException
+    public static Migration deserialize(ByteBuffer bytes) throws IOException
     {
         // deserialize
         org.apache.cassandra.db.migration.avro.Migration mi = SerDeUtils.deserializeWithSchema(bytes, new org.apache.cassandra.db.migration.avro.Migration());
@@ -276,8 +276,8 @@ public abstract class Migration
         }
         
         // super inflate
-        migration.lastVersion = UUIDGen.makeType1UUID(mi.old_version.bytes());
-        migration.newVersion = UUIDGen.makeType1UUID(mi.new_version.bytes());
+        migration.lastVersion = UUIDGen.makeType1UUID(ByteBuffer.wrap(mi.old_version.bytes()));
+        migration.newVersion = UUIDGen.makeType1UUID(ByteBuffer.wrap(mi.new_version.bytes()));
         try
         {
             migration.rm = RowMutation.serializer().deserialize(SerDeUtils.createDataInputStream(mi.row_mutation));
@@ -297,14 +297,14 @@ public abstract class Migration
         DecoratedKey dkey = StorageService.getPartitioner().decorateKey(MIGRATIONS_KEY);
         Table defs = Table.open(Table.SYSTEM_TABLE);
         ColumnFamilyStore cfStore = defs.getColumnFamilyStore(Migration.MIGRATIONS_CF);
-        QueryFilter filter = QueryFilter.getSliceFilter(dkey, new QueryPath(MIGRATIONS_CF), UUIDGen.decompose(start), UUIDGen.decompose(end), false, 1000);
+        QueryFilter filter = QueryFilter.getSliceFilter(dkey, new QueryPath(MIGRATIONS_CF), ByteBuffer.wrap(UUIDGen.decompose(start)), ByteBuffer.wrap(UUIDGen.decompose(end)), false, 1000);   
         ColumnFamily cf = cfStore.getColumnFamily(filter);
         return cf.getSortedColumns();
     }
     
-    public static byte[] toUTF8Bytes(UUID version)
+    public static ByteBuffer toUTF8Bytes(UUID version)
     {
-        return version.toString().getBytes(UTF_8);
+        return ByteBuffer.wrap(version.toString().getBytes(UTF_8));
     }
     
     public static boolean isLegalName(String s)

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/migration/UpdateColumnFamily.java Fri Oct 22 03:23:26 2010
@@ -1,17 +1,22 @@
 package org.apache.cassandra.db.migration;
 
-import org.apache.cassandra.config.*;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.config.ConfigurationException;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.KSMetaData;
 import org.apache.cassandra.db.ColumnFamilyStore;
 import org.apache.cassandra.db.SystemTable;
 import org.apache.cassandra.db.Table;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.UUIDGen;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
 /**
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -84,9 +89,9 @@ public class UpdateColumnFamily extends 
             table.reloadCf(newCfm.cfId);
 
             // clean up obsolete index data files
-            for (Map.Entry<byte[], ColumnDefinition> entry : oldCfm.column_metadata.entrySet())
+            for (Map.Entry<ByteBuffer, ColumnDefinition> entry : oldCfm.column_metadata.entrySet())
             {
-                byte[] column = entry.getKey();
+                ByteBuffer column = entry.getKey();
                 ColumnDefinition def = entry.getValue();
                 if (def.index_type != null
                     && (!newCfm.column_metadata.containsKey(column) || newCfm.column_metadata.get(column).index_type == null))

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java Fri Oct 22 03:23:26 2010
@@ -19,17 +19,14 @@
 package org.apache.cassandra.dht;
 
 import java.math.BigInteger;
-import java.text.Collator;
+import java.nio.ByteBuffer;
 import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Locale;
 import java.util.Random;
 
-import org.apache.commons.lang.ArrayUtils;
-
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.Pair;
+import org.apache.commons.lang.ArrayUtils;
 
 public abstract class AbstractByteOrderedPartitioner implements IPartitioner<BytesToken>
 {
@@ -37,21 +34,45 @@ public abstract class AbstractByteOrdere
     
     public static final BigInteger BYTE_MASK = new BigInteger("255");
 
-    public DecoratedKey<BytesToken> decorateKey(byte[] key)
+    public DecoratedKey<BytesToken> decorateKey(ByteBuffer key)
     {
         return new DecoratedKey<BytesToken>(getToken(key), key);
     }
     
-    public DecoratedKey<BytesToken> convertFromDiskFormat(byte[] key)
+    public DecoratedKey<BytesToken> convertFromDiskFormat(ByteBuffer key)
     {
         return new DecoratedKey<BytesToken>(getToken(key), key);
     }
 
-    public BytesToken midpoint(BytesToken ltoken, BytesToken rtoken)
+    public BytesToken midpoint(Token ltoken, Token rtoken)
     {
-        int sigbytes = Math.max(ltoken.token.length, rtoken.token.length);
-        BigInteger left = bigForBytes(ltoken.token, sigbytes);
-        BigInteger right = bigForBytes(rtoken.token, sigbytes);
+        int ll,rl;
+        ByteBuffer lb,rb;
+        
+        if(ltoken.token instanceof byte[])
+        {
+            ll = ((byte[])ltoken.token).length;
+            lb = ByteBuffer.wrap(((byte[])ltoken.token));
+        }
+        else
+        {
+            ll = ((ByteBuffer)ltoken.token).remaining();
+            lb = (ByteBuffer)ltoken.token;
+        }
+        
+        if(rtoken.token instanceof byte[])
+        {
+            rl = ((byte[])rtoken.token).length;
+            rb = ByteBuffer.wrap(((byte[])rtoken.token));
+        }
+        else
+        {
+            rl = ((ByteBuffer)rtoken.token).remaining();
+            rb = (ByteBuffer)rtoken.token;
+        }
+        int sigbytes = Math.max(ll, rl);
+        BigInteger left = bigForBytes(lb, sigbytes);
+        BigInteger right = bigForBytes(rb, sigbytes);
 
         Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(left, right, 8*sigbytes);
         return new BytesToken(bytesForBig(midpair.left, sigbytes, midpair.right));
@@ -61,14 +82,23 @@ public abstract class AbstractByteOrdere
      * Convert a byte array containing the most significant of 'sigbytes' bytes
      * representing a big-endian magnitude into a BigInteger.
      */
-    private BigInteger bigForBytes(byte[] bytes, int sigbytes)
+    private BigInteger bigForBytes(ByteBuffer bytes, int sigbytes)
     {
-        if (bytes.length != sigbytes)
+        byte[] b = new byte[sigbytes];
+        
+        // append zeros
+        Arrays.fill(b, (byte) 0);
+        
+        if (bytes.remaining() != sigbytes)
+        {                     
+            System.arraycopy(bytes.array(), bytes.position()+bytes.arrayOffset(), b, 0, bytes.remaining());
+        } 
+        else
         {
-            // append zeros
-            bytes = Arrays.copyOf(bytes, sigbytes);
+            System.arraycopy(bytes.array(), bytes.position()+bytes.arrayOffset(), b, 0, sigbytes);
         }
-        return new BigInteger(1, bytes);
+        
+        return new BigInteger(1, b);
     }
 
     /**
@@ -108,19 +138,19 @@ public abstract class AbstractByteOrdere
     }
 
     private final Token.TokenFactory<byte[]> tokenFactory = new Token.TokenFactory<byte[]>() {
-        public byte[] toByteArray(Token<byte[]> bytesToken)
+        public ByteBuffer toByteArray(Token<byte[]> bytesToken)
         {
-            return bytesToken.token;
+            return ByteBuffer.wrap(bytesToken.token);
         }
 
-        public Token<byte[]> fromByteArray(byte[] bytes)
+        public Token<byte[]> fromByteArray(ByteBuffer bytes)
         {
             return new BytesToken(bytes);
         }
 
         public String toString(Token<byte[]> bytesToken)
         {
-            return FBUtilities.bytesToHex(bytesToken.token);
+            return FBUtilities.bytesToHex(ByteBuffer.wrap(bytesToken.token));
         }
 
         public Token<byte[]> fromString(String string)
@@ -139,5 +169,5 @@ public abstract class AbstractByteOrdere
         return true;
     }
 
-    public abstract BytesToken getToken(byte[] key);
+    public abstract BytesToken getToken(ByteBuffer key);
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java Fri Oct 22 03:23:26 2010
@@ -18,11 +18,13 @@
 
 package org.apache.cassandra.dht;
 
+import java.nio.ByteBuffer;
+
 public class ByteOrderedPartitioner extends AbstractByteOrderedPartitioner
 {
-    public BytesToken getToken(byte[] key)
+    public BytesToken getToken(ByteBuffer key)
     {
-        if (key.length == 0)
+        if (key.remaining() == 0)
             return MINIMUM;
         return new BytesToken(key);
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/BytesToken.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/BytesToken.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/BytesToken.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/BytesToken.java Fri Oct 22 03:23:26 2010
@@ -18,28 +18,54 @@
 */
 package org.apache.cassandra.dht;
 
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 
+import org.apache.cassandra.utils.ByteBufferUtil;
 import org.apache.cassandra.utils.FBUtilities;
 
 public class BytesToken extends Token<byte[]>
 {
-    public BytesToken(byte... token)
+	public BytesToken(ByteBuffer token)
+	{
+		super(convertByteBuffer(token));
+	}
+	
+    public BytesToken(byte[] token)
     {
         super(token);
     }
     
+    private static byte[] convertByteBuffer(ByteBuffer token)
+    {
+    	if(token.position() == 0 && token.arrayOffset() == 0 && 
+    			   token.limit() == token.capacity())
+    	{
+    		return token.array();
+    	}
+    	else
+    	{
+    		token.mark();
+    		byte[] buf = new byte[token.remaining()];
+    		token.get(buf);
+    		token.reset();
+    				
+    		return buf;
+    	} 	
+    }
+    
     @Override
     public String toString()
     {
-        return "Token(bytes[" + FBUtilities.bytesToHex(token) + "])";
+        return "Token(bytes[" + FBUtilities.bytesToHex(ByteBuffer.wrap(token)) + "])";
     }
 
     @Override
     public int compareTo(Token<byte[]> o)
-    {
-        return FBUtilities.compareByteArrays(token, o.token);
+    {   
+        return FBUtilities.compareByteArrays(token, o.token, 0, 0, token.length, o.token.length);
     }
+    
 
     @Override
     public int hashCode()
@@ -56,6 +82,7 @@ public class BytesToken extends Token<by
         if (!(obj instanceof BytesToken))
             return false;
         BytesToken other = (BytesToken) obj;
+           
         return Arrays.equals(token, other.token);
     }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java Fri Oct 22 03:23:26 2010
@@ -18,27 +18,20 @@
 
 package org.apache.cassandra.dht;
 
-import java.math.BigInteger;
+import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
 import java.text.Collator;
-import java.util.Arrays;
-import java.util.Comparator;
 import java.util.Locale;
-import java.util.Random;
 
-import org.apache.commons.lang.ArrayUtils;
-
-import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.utils.FBUtilities;
-import org.apache.cassandra.utils.Pair;
 
 public class CollatingOrderPreservingPartitioner extends AbstractByteOrderedPartitioner
 {
     static final Collator collator = Collator.getInstance(new Locale("en", "US"));
 
-    public BytesToken getToken(byte[] key)
+    public BytesToken getToken(ByteBuffer key)
     {
-        if (key.length == 0)
+        if (key.remaining() == 0)
             return MINIMUM;
 
         String skey;
@@ -50,6 +43,6 @@ public class CollatingOrderPreservingPar
         {
             throw new RuntimeException("The provided key was not UTF8 encoded.", e);
         }
-        return new BytesToken(collator.getCollationKey(skey).toByteArray());
+        return new BytesToken(ByteBuffer.wrap(collator.getCollationKey(skey).toByteArray()));
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/IPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/IPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/IPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/IPartitioner.java Fri Oct 22 03:23:26 2010
@@ -18,7 +18,7 @@
 
 package org.apache.cassandra.dht;
 
-import java.util.Comparator;
+import java.nio.ByteBuffer;
 
 import org.apache.cassandra.db.DecoratedKey;
 
@@ -31,7 +31,7 @@ public interface IPartitioner<T extends 
      * @param key On disk representation 
      * @return DecoratedKey object
      */
-    public DecoratedKey<T> convertFromDiskFormat(byte[] key);
+    public DecoratedKey<T> convertFromDiskFormat(ByteBuffer key);
     
     /**
      * Transform key to object representation of the on-disk format.
@@ -39,7 +39,7 @@ public interface IPartitioner<T extends 
      * @param key the raw, client-facing key
      * @return decorated version of key
      */
-    public DecoratedKey<T> decorateKey(byte[] key);
+    public DecoratedKey<T> decorateKey(ByteBuffer key);
 
     /**
      * Calculate a Token representing the approximate "middle" of the given
@@ -47,7 +47,7 @@ public interface IPartitioner<T extends 
      *
      * @return The approximate midpoint between left and right.
      */
-    public T midpoint(T left, T right);
+    public Token midpoint(Token left, Token right);
 
 	/**
 	 * @return The minimum possible Token in the range that is being partitioned.
@@ -59,7 +59,7 @@ public interface IPartitioner<T extends 
      * (This is NOT a method to create a Token from its string representation;
      * for that, use TokenFactory.fromString.)
      */
-    public T getToken(byte[] key);
+    public T getToken(ByteBuffer key);
 
     /**
      * @return a randomly generated token

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/LocalPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/LocalPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/LocalPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/LocalPartitioner.java Fri Oct 22 03:23:26 2010
@@ -19,10 +19,12 @@
 
 package org.apache.cassandra.dht;
 
-import org.apache.commons.lang.ArrayUtils;
+import java.nio.ByteBuffer;
 
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.utils.FBUtilities;
+import org.apache.commons.lang.ArrayUtils;
 
 public class LocalPartitioner implements IPartitioner<LocalToken>
 {
@@ -33,27 +35,27 @@ public class LocalPartitioner implements
         this.comparator = comparator;
     }
 
-    public DecoratedKey<LocalToken> convertFromDiskFormat(byte[] key)
+    public DecoratedKey<LocalToken> convertFromDiskFormat(ByteBuffer key)
     {
         return decorateKey(key);
     }
 
-    public DecoratedKey<LocalToken> decorateKey(byte[] key)
+    public DecoratedKey<LocalToken> decorateKey(ByteBuffer key)
     {
         return new DecoratedKey<LocalToken>(getToken(key), key);
     }
 
-    public LocalToken midpoint(LocalToken left, LocalToken right)
+    public Token midpoint(Token left, Token right)
     {
         throw new UnsupportedOperationException();
     }
 
     public LocalToken getMinimumToken()
     {
-        return new LocalToken(comparator, ArrayUtils.EMPTY_BYTE_ARRAY);
+        return new LocalToken(comparator, FBUtilities.EMPTY_BYTE_BUFFER);
     }
 
-    public LocalToken getToken(byte[] key)
+    public LocalToken getToken(ByteBuffer key)
     {
         return new LocalToken(comparator, key);
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/LocalToken.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/LocalToken.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/LocalToken.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/LocalToken.java Fri Oct 22 03:23:26 2010
@@ -18,16 +18,17 @@
 */
 package org.apache.cassandra.dht;
 
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 
 import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.utils.FBUtilities;
+import org.apache.cassandra.utils.ByteBufferUtil;
 
-public class LocalToken extends Token<byte[]>
+public class LocalToken extends Token<ByteBuffer>
 {
     private final AbstractType comparator;
 
-    public LocalToken(AbstractType comparator, byte... token)
+    public LocalToken(AbstractType comparator, ByteBuffer token)
     {
         super(token);
         this.comparator = comparator;
@@ -40,7 +41,7 @@ public class LocalToken extends Token<by
     }
 
     @Override
-    public int compareTo(Token<byte[]> o)
+    public int compareTo(Token<ByteBuffer> o)
     {
         return comparator.compare(token, o.token);
     }
@@ -49,7 +50,7 @@ public class LocalToken extends Token<by
     public int hashCode()
     {
         final int prime = 31;
-        return prime + Arrays.hashCode(token);
+        return prime + token.hashCode();
     }
 
     @Override
@@ -60,7 +61,7 @@ public class LocalToken extends Token<by
         if (!(obj instanceof LocalToken))
             return false;
         LocalToken other = (LocalToken) obj;
-        return Arrays.equals(token, other.token);
+        return ByteBufferUtil.equals(token, other.token);
     }
 
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java Fri Oct 22 03:23:26 2010
@@ -20,12 +20,10 @@ package org.apache.cassandra.dht;
 
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
+import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
-import java.util.Arrays;
-import java.util.Comparator;
 import java.util.Random;
 
-import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.Pair;
@@ -36,21 +34,21 @@ public class OrderPreservingPartitioner 
 
     public static final BigInteger CHAR_MASK = new BigInteger("65535");
 
-    public DecoratedKey<StringToken> decorateKey(byte[] key)
+    public DecoratedKey<StringToken> decorateKey(ByteBuffer key)
     {
         return new DecoratedKey<StringToken>(getToken(key), key);
     }
     
-    public DecoratedKey<StringToken> convertFromDiskFormat(byte[] key)
+    public DecoratedKey<StringToken> convertFromDiskFormat(ByteBuffer key)
     {
         return new DecoratedKey<StringToken>(getToken(key), key);
     }
 
-    public StringToken midpoint(StringToken ltoken, StringToken rtoken)
+    public StringToken midpoint(Token ltoken, Token rtoken)
     {
-        int sigchars = Math.max(ltoken.token.length(), rtoken.token.length());
-        BigInteger left = bigForString(ltoken.token, sigchars);
-        BigInteger right = bigForString(rtoken.token, sigchars);
+        int sigchars = Math.max(((StringToken)ltoken).token.length(), ((StringToken)rtoken).token.length());
+        BigInteger left = bigForString(((StringToken)ltoken).token, sigchars);
+        BigInteger right = bigForString(((StringToken)rtoken).token, sigchars);
 
         Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(left, right, 16*sigchars);
         return new StringToken(stringForBig(midpair.left, sigchars, midpair.right));
@@ -112,11 +110,11 @@ public class OrderPreservingPartitioner 
     }
 
     private final Token.TokenFactory<String> tokenFactory = new Token.TokenFactory<String>() {
-        public byte[] toByteArray(Token<String> stringToken)
+        public ByteBuffer toByteArray(Token<String> stringToken)
         {
             try
             {
-                return stringToken.token.getBytes("UTF-8");
+                return ByteBuffer.wrap(stringToken.token.getBytes("UTF-8"));
             }
             catch (UnsupportedEncodingException e)
             {
@@ -124,11 +122,11 @@ public class OrderPreservingPartitioner 
             }
         }
 
-        public Token<String> fromByteArray(byte[] bytes)
+        public Token<String> fromByteArray(ByteBuffer bytes)
         {
             try
             {
-                return new StringToken(new String(bytes, "UTF-8"));
+                return new StringToken(new String(bytes.array(),bytes.position()+bytes.arrayOffset(),bytes.limit(), "UTF-8"));
             }
             catch (UnsupportedEncodingException e)
             {
@@ -157,7 +155,7 @@ public class OrderPreservingPartitioner 
         return true;
     }
 
-    public StringToken getToken(byte[] key)
+    public StringToken getToken(ByteBuffer key)
     {
         String skey;
         try

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/RandomPartitioner.java Fri Oct 22 03:23:26 2010
@@ -18,7 +18,10 @@
 
 package org.apache.cassandra.dht;
 
+import static com.google.common.base.Charsets.UTF_8;
+
 import java.math.BigInteger;
+import java.nio.ByteBuffer;
 import java.util.Arrays;
 
 import org.apache.cassandra.db.DecoratedKey;
@@ -26,8 +29,6 @@ import org.apache.cassandra.utils.FBUtil
 import org.apache.cassandra.utils.GuidGenerator;
 import org.apache.cassandra.utils.Pair;
 
-import static com.google.common.base.Charsets.UTF_8;
-
 /**
  * This class generates a BigIntegerToken using MD5 hash.
  */
@@ -39,18 +40,18 @@ public class RandomPartitioner implement
 
     private static final byte DELIMITER_BYTE = ":".getBytes()[0];
 
-    public DecoratedKey<BigIntegerToken> decorateKey(byte[] key)
+    public DecoratedKey<BigIntegerToken> decorateKey(ByteBuffer key)
     {
         return new DecoratedKey<BigIntegerToken>(getToken(key), key);
     }
     
-    public DecoratedKey<BigIntegerToken> convertFromDiskFormat(byte[] fromdisk)
+    public DecoratedKey<BigIntegerToken> convertFromDiskFormat(ByteBuffer fromdisk)
     {
         // find the delimiter position
         int splitPoint = -1;
-        for (int i = 0; i < fromdisk.length; i++)
+        for (int i = fromdisk.position()+fromdisk.arrayOffset(); i < fromdisk.limit(); i++)
         {
-            if (fromdisk[i] == DELIMITER_BYTE)
+            if (fromdisk.array()[i] == DELIMITER_BYTE)
             {
                 splitPoint = i;
                 break;
@@ -59,14 +60,14 @@ public class RandomPartitioner implement
         assert splitPoint != -1;
 
         // and decode the token and key
-        String token = new String(fromdisk, 0, splitPoint, UTF_8);
-        byte[] key = Arrays.copyOfRange(fromdisk, splitPoint + 1, fromdisk.length);
-        return new DecoratedKey<BigIntegerToken>(new BigIntegerToken(token), key);
+        String token = new String(fromdisk.array(), fromdisk.position()+fromdisk.arrayOffset(), splitPoint, UTF_8);
+        byte[] key = Arrays.copyOfRange(fromdisk.array(), splitPoint + 1, fromdisk.limit());
+        return new DecoratedKey<BigIntegerToken>(new BigIntegerToken(token), ByteBuffer.wrap(key));
     }
 
-    public BigIntegerToken midpoint(BigIntegerToken ltoken, BigIntegerToken rtoken)
+    public Token midpoint(Token ltoken, Token rtoken)
     {
-        Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(ltoken.token, rtoken.token, 127);
+        Pair<BigInteger,Boolean> midpair = FBUtilities.midpoint(((BigIntegerToken)ltoken).token, ((BigIntegerToken)rtoken).token, 127);
         // discard the remainder
         return new BigIntegerToken(midpair.left);
     }
@@ -78,21 +79,25 @@ public class RandomPartitioner implement
 
     public BigIntegerToken getRandomToken()
     {
-        BigInteger token = FBUtilities.md5hash(GuidGenerator.guid().getBytes());
+        BigInteger token = FBUtilities.md5hash(GuidGenerator.guidAsBytes());
         if ( token.signum() == -1 )
             token = token.multiply(BigInteger.valueOf(-1L));
         return new BigIntegerToken(token);
     }
 
     private final Token.TokenFactory<BigInteger> tokenFactory = new Token.TokenFactory<BigInteger>() {
-        public byte[] toByteArray(Token<BigInteger> bigIntegerToken)
+        public ByteBuffer toByteArray(Token<BigInteger> bigIntegerToken)
         {
-            return bigIntegerToken.token.toByteArray();
+            return ByteBuffer.wrap(bigIntegerToken.token.toByteArray());
         }
 
-        public Token<BigInteger> fromByteArray(byte[] bytes)
+        public Token<BigInteger> fromByteArray(ByteBuffer bytes)
         {
-            return new BigIntegerToken(new BigInteger(bytes));
+            byte[] b = new byte[bytes.remaining()];
+            bytes.get(b);
+            bytes.rewind();
+            
+            return new BigIntegerToken(new BigInteger(b));
         }
 
         public String toString(Token<BigInteger> bigIntegerToken)
@@ -116,9 +121,9 @@ public class RandomPartitioner implement
         return false;
     }
 
-    public BigIntegerToken getToken(byte[] key)
+    public BigIntegerToken getToken(ByteBuffer key)
     {
-        if (key.length == 0)
+        if (key.remaining() == 0)
             return MINIMUM;
         return new BigIntegerToken(FBUtilities.md5hash(key));
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/Range.java Fri Oct 22 03:23:26 2010
@@ -19,11 +19,17 @@
 package org.apache.cassandra.dht;
 
 import java.io.Serializable;
-import java.util.*;
-
-import org.apache.commons.lang.ObjectUtils;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.utils.FBUtilities;
+import org.apache.commons.lang.ObjectUtils;
 
 /**
  * A representation of the range that a node is responsible for on the DHT ring.
@@ -65,7 +71,7 @@ public class Range extends AbstractBound
             /*
              * This is the range (a, b] where a < b. 
              */
-            return (bi.compareTo(left) > 0 && right.compareTo(bi) >= 0);
+            return ( compare(bi,left) > 0 && compare(right,bi) >= 0);
         }
     }
 
@@ -81,13 +87,13 @@ public class Range extends AbstractBound
         boolean thatwraps = isWrapAround(that.left, that.right);
         if (thiswraps == thatwraps)
         {
-            return left.compareTo(that.left) <= 0 && that.right.compareTo(right) <= 0;
+            return compare(left,that.left) <= 0 && compare(that.right,right) <= 0;
         }
         else if (thiswraps)
         {
             // wrapping might contain non-wrapping
             // that is contained if both its tokens are in one of our wrap segments
-            return left.compareTo(that.left) <= 0 || that.right.compareTo(right) <= 0;
+            return compare(left,that.left) <= 0 || compare(that.right,right) <= 0;
         }
         else
         {
@@ -207,7 +213,44 @@ public class Range extends AbstractBound
      */
     public static boolean isWrapAround(Token left, Token right)
     {
-        return left.compareTo(right) >= 0;
+       return compare(left,right) >= 0;           
+    }
+    
+    public static int compare(Token left, Token right){
+        byte[] l,r;
+        int lo,ll,ro,rl;
+        
+        if(left.token instanceof byte[])
+        {
+            l  = (byte[]) left.token;
+            lo = 0;
+            ll = l.length;
+        }
+        else if(left.token instanceof ByteBuffer)
+        {
+            l  = ((ByteBuffer)left.token).array();
+            lo = ((ByteBuffer)left.token).position()+((ByteBuffer)left.token).arrayOffset();
+            ll = ((ByteBuffer)left.token).limit();
+        }else{
+            //Handles other token types
+            return left.compareTo(right);
+        }
+            
+        if(right.token instanceof byte[])
+        {
+            r  = (byte[]) right.token;
+            ro = 0;
+            rl = r.length;
+        }
+        else
+        {
+            r  = ((ByteBuffer)right.token).array();
+            ro = ((ByteBuffer)right.token).position()+((ByteBuffer)right.token).arrayOffset();
+            rl = ((ByteBuffer)right.token).limit();
+        }
+       
+            
+        return FBUtilities.compareByteArrays(l, r, lo, ro, ll, rl);
     }
     
     public int compareTo(Range rhs)
@@ -222,7 +265,7 @@ public class Range extends AbstractBound
         if ( isWrapAround(rhs.left, rhs.right) )
             return 1;
         
-        return right.compareTo(rhs.right);
+        return compare(right,rhs.right);
     }
     
 
@@ -246,7 +289,7 @@ public class Range extends AbstractBound
         if (!(o instanceof Range))
             return false;
         Range rhs = (Range)o;
-        return left.equals(rhs.left) && right.equals(rhs.right);
+        return compare(left,rhs.left) == 0 && compare(right,rhs.right) == 0;
     }
     
     public String toString()

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/StringToken.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/StringToken.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/StringToken.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/StringToken.java Fri Oct 22 03:23:26 2010
@@ -18,7 +18,6 @@
 */
 package org.apache.cassandra.dht;
 
-import org.apache.cassandra.service.StorageService;
 
 public class StringToken extends Token<String>
 {

Modified: cassandra/trunk/src/java/org/apache/cassandra/dht/Token.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/dht/Token.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/dht/Token.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/dht/Token.java Fri Oct 22 03:23:26 2010
@@ -22,6 +22,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.io.Serializable;
+import java.nio.ByteBuffer;
 
 import org.apache.cassandra.io.ICompactSerializer2;
 import org.apache.cassandra.service.StorageService;
@@ -36,7 +37,7 @@ public abstract class Token<T> implement
         return serializer;
     }
 
-    T token;
+    public final T token;
 
     protected Token(T token)
     {
@@ -68,8 +69,8 @@ public abstract class Token<T> implement
 
     public static abstract class TokenFactory<T>
     {
-        public abstract byte[] toByteArray(Token<T> token);
-        public abstract Token<T> fromByteArray(byte[] bytes);
+        public abstract ByteBuffer toByteArray(Token<T> token);
+        public abstract Token<T> fromByteArray(ByteBuffer bytes);
         public abstract String toString(Token<T> token); // serialize as string, not necessarily human-readable
         public abstract Token<T> fromString(String string); // deserialize
     }
@@ -79,9 +80,9 @@ public abstract class Token<T> implement
         public void serialize(Token token, DataOutput dos) throws IOException
         {
             IPartitioner p = StorageService.getPartitioner();
-            byte[] b = p.getTokenFactory().toByteArray(token);
-            dos.writeInt(b.length);
-            dos.write(b);
+            ByteBuffer b = p.getTokenFactory().toByteArray(token);
+            dos.writeInt(b.remaining());
+            dos.write(b.array(),b.position()+b.arrayOffset(),b.remaining());
         }
 
         public Token deserialize(DataInput dis) throws IOException
@@ -90,7 +91,7 @@ public abstract class Token<T> implement
             int size = dis.readInt();
             byte[] bytes = new byte[size];
             dis.readFully(bytes);
-            return p.getTokenFactory().fromByteArray(bytes);
+            return p.getTokenFactory().fromByteArray(ByteBuffer.wrap(bytes));
         }
     }
 }

Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java Fri Oct 22 03:23:26 2010
@@ -23,29 +23,36 @@ package org.apache.cassandra.hadoop;
 
 import java.io.IOException;
 import java.net.InetAddress;
-import java.util.*;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.SortedMap;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.cassandra.db.IColumn;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.thrift.Cassandra;
 import org.apache.cassandra.thrift.InvalidRequestException;
 import org.apache.cassandra.thrift.TokenRange;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.mapreduce.*;
+import org.apache.hadoop.mapreduce.InputFormat;
+import org.apache.hadoop.mapreduce.InputSplit;
+import org.apache.hadoop.mapreduce.JobContext;
+import org.apache.hadoop.mapreduce.RecordReader;
+import org.apache.hadoop.mapreduce.TaskAttemptContext;
 import org.apache.thrift.TException;
 import org.apache.thrift.protocol.TBinaryProtocol;
-import org.apache.thrift.protocol.TProtocol;
 import org.apache.thrift.transport.TFramedTransport;
 import org.apache.thrift.transport.TSocket;
 import org.apache.thrift.transport.TTransport;
 import org.apache.thrift.transport.TTransportException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Hadoop InputFormat allowing map/reduce against Cassandra rows within one ColumnFamily.
@@ -64,7 +71,7 @@ import org.apache.thrift.transport.TTran
  *
  * The default split size is 64k rows.
  */
-public class ColumnFamilyInputFormat extends InputFormat<byte[], SortedMap<byte[], IColumn>>
+public class ColumnFamilyInputFormat extends InputFormat<ByteBuffer, SortedMap<ByteBuffer, IColumn>>
 {
     private static final Logger logger = LoggerFactory.getLogger(StorageService.class);
     
@@ -227,7 +234,7 @@ public class ColumnFamilyInputFormat ext
         return map;
     }
 
-    public RecordReader<byte[], SortedMap<byte[], IColumn>> createRecordReader(InputSplit inputSplit, TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException
+    public RecordReader<ByteBuffer, SortedMap<ByteBuffer, IColumn>> createRecordReader(InputSplit inputSplit, TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException
     {
         return new ColumnFamilyRecordReader();
     }

Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordReader.java Fri Oct 22 03:23:26 2010
@@ -24,18 +24,30 @@ package org.apache.cassandra.hadoop;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.*;
-
-import com.google.common.collect.AbstractIterator;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedMap;
+import java.util.TreeMap;
 
 import org.apache.cassandra.auth.SimpleAuthenticator;
-
 import org.apache.cassandra.config.ConfigurationException;
-import org.apache.cassandra.db.*;
+import org.apache.cassandra.db.IColumn;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.dht.IPartitioner;
-import org.apache.cassandra.thrift.*;
+import org.apache.cassandra.thrift.AuthenticationRequest;
+import org.apache.cassandra.thrift.Cassandra;
+import org.apache.cassandra.thrift.CfDef;
 import org.apache.cassandra.thrift.Column;
+import org.apache.cassandra.thrift.ColumnOrSuperColumn;
+import org.apache.cassandra.thrift.ColumnParent;
+import org.apache.cassandra.thrift.ConsistencyLevel;
+import org.apache.cassandra.thrift.KeyRange;
+import org.apache.cassandra.thrift.KeySlice;
+import org.apache.cassandra.thrift.KsDef;
+import org.apache.cassandra.thrift.SlicePredicate;
 import org.apache.cassandra.thrift.SuperColumn;
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.Pair;
@@ -48,11 +60,13 @@ import org.apache.thrift.protocol.TBinar
 import org.apache.thrift.transport.TFramedTransport;
 import org.apache.thrift.transport.TSocket;
 
-public class ColumnFamilyRecordReader extends RecordReader<byte[], SortedMap<byte[], IColumn>>
+import com.google.common.collect.AbstractIterator;
+
+public class ColumnFamilyRecordReader extends RecordReader<ByteBuffer, SortedMap<ByteBuffer, IColumn>>
 {
     private ColumnFamilySplit split;
     private RowIterator iter;
-    private Pair<byte[], SortedMap<byte[], IColumn>> currentRow;
+    private Pair<ByteBuffer, SortedMap<ByteBuffer, IColumn>> currentRow;
     private SlicePredicate predicate;
     private int totalRowCount; // total number of rows to fetch
     private int batchRowCount; // fetch this many per batch
@@ -71,12 +85,12 @@ public class ColumnFamilyRecordReader ex
         }
     }
     
-    public byte[] getCurrentKey()
+    public ByteBuffer getCurrentKey()
     {
         return currentRow.left;
     }
 
-    public SortedMap<byte[], IColumn> getCurrentValue()
+    public SortedMap<ByteBuffer, IColumn> getCurrentValue()
     {
         return currentRow.right;
     }
@@ -172,7 +186,7 @@ public class ColumnFamilyRecordReader ex
         return split.getLocations()[0];
     }
 
-    private class RowIterator extends AbstractIterator<Pair<byte[], SortedMap<byte[], IColumn>>>
+    private class RowIterator extends AbstractIterator<Pair<ByteBuffer, SortedMap<ByteBuffer, IColumn>>>
     {
         private List<KeySlice> rows;
         private String startToken;
@@ -255,7 +269,7 @@ public class ColumnFamilyRecordReader ex
                 
                 // prepare for the next slice to be read
                 KeySlice lastRow = rows.get(rows.size() - 1);
-                byte[] rowkey = lastRow.getKey();
+                ByteBuffer rowkey = lastRow.key;
                 startToken = partitioner.getTokenFactory().toString(partitioner.getToken(rowkey));
             }
             catch (Exception e)
@@ -273,7 +287,7 @@ public class ColumnFamilyRecordReader ex
         }
 
         @Override
-        protected Pair<byte[], SortedMap<byte[], IColumn>> computeNext()
+        protected Pair<ByteBuffer, SortedMap<ByteBuffer, IColumn>> computeNext()
         {
             maybeInit();
             if (rows == null)
@@ -281,13 +295,13 @@ public class ColumnFamilyRecordReader ex
             
             totalRead++;
             KeySlice ks = rows.get(i++);
-            SortedMap<byte[], IColumn> map = new TreeMap<byte[], IColumn>(comparator);
+            SortedMap<ByteBuffer, IColumn> map = new TreeMap<ByteBuffer, IColumn>(comparator);
             for (ColumnOrSuperColumn cosc : ks.columns)
             {
                 IColumn column = unthriftify(cosc);
                 map.put(column.name(), column);
             }
-            return new Pair<byte[], SortedMap<byte[], IColumn>>(ks.key, map);
+            return new Pair<ByteBuffer, SortedMap<ByteBuffer, IColumn>>(ks.key, map);
         }
 
         private IColumn unthriftify(ColumnOrSuperColumn cosc)

Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ColumnFamilyRecordWriter.java Fri Oct 22 03:23:26 2010
@@ -120,8 +120,7 @@ implements org.apache.hadoop.mapred.Reco
     @Override
     public void write(ByteBuffer keybuff, List<org.apache.cassandra.avro.Mutation> value) throws IOException
     {
-        byte[] key = copy(keybuff);
-        Range range = ringCache.getRange(key);
+        Range range = ringCache.getRange(keybuff);
 
         // get the client for the given range, or create a new one
         RangeClient client = clients.get(range);
@@ -134,7 +133,7 @@ implements org.apache.hadoop.mapred.Reco
         }
 
         for (org.apache.cassandra.avro.Mutation amut : value)
-            client.put(new Pair<byte[],Mutation>(key, avroToThrift(amut)));
+            client.put(new Pair<ByteBuffer,Mutation>(keybuff, avroToThrift(amut)));
     }
 
     /**
@@ -155,7 +154,7 @@ implements org.apache.hadoop.mapred.Reco
             else
             {
                 // super column
-                byte[] scolname = copy(acosc.super_column.name);
+                ByteBuffer scolname = acosc.super_column.name;
                 List<Column> scolcols = new ArrayList<Column>(acosc.super_column.columns.size());
                 for (org.apache.cassandra.avro.Column acol : acosc.super_column.columns)
                     scolcols.add(avroToThrift(acol));
@@ -174,9 +173,9 @@ implements org.apache.hadoop.mapred.Reco
             else if (apred.column_names != null)
             {
                 // column names
-                List<byte[]> names = new ArrayList<byte[]>(apred.column_names.size());
+                List<ByteBuffer> names = new ArrayList<ByteBuffer>(apred.column_names.size());
                 for (ByteBuffer name : apred.column_names)
-                    names.add(copy(name));
+                    names.add(name);
                 deletion.setPredicate(new SlicePredicate().setColumn_names(names));
             }
             else
@@ -190,12 +189,12 @@ implements org.apache.hadoop.mapred.Reco
 
     private SliceRange avroToThrift(org.apache.cassandra.avro.SliceRange asr)
     {
-        return new SliceRange(copy(asr.start), copy(asr.finish), asr.reversed, asr.count);
+        return new SliceRange(asr.start, asr.finish, asr.reversed, asr.count);
     }
 
     private Column avroToThrift(org.apache.cassandra.avro.Column acol)
     {
-        return new Column(copy(acol.name), copy(acol.value), acol.timestamp);
+        return new Column(acol.name, acol.value, acol.timestamp);
     }
 
     /**
@@ -241,7 +240,7 @@ implements org.apache.hadoop.mapred.Reco
         private final List<InetAddress> endpoints;
         private final String columnFamily = ConfigHelper.getOutputColumnFamily(conf);
         // A bounded queue of incoming mutations for this range
-        private final BlockingQueue<Pair<byte[], Mutation>> queue = new ArrayBlockingQueue<Pair<byte[],Mutation>>(queueSize);
+        private final BlockingQueue<Pair<ByteBuffer, Mutation>> queue = new ArrayBlockingQueue<Pair<ByteBuffer,Mutation>>(queueSize);
 
         private volatile boolean run = true;
         private volatile IOException lastException;
@@ -262,7 +261,7 @@ implements org.apache.hadoop.mapred.Reco
         /**
          * enqueues the given value to Cassandra
          */
-        public void put(Pair<byte[],Mutation> value) throws IOException
+        public void put(Pair<ByteBuffer,Mutation> value) throws IOException
         {
             while (true)
             {
@@ -306,7 +305,7 @@ implements org.apache.hadoop.mapred.Reco
             outer:
             while (run || !queue.isEmpty())
             {
-                Pair<byte[], Mutation> mutation;
+                Pair<ByteBuffer, Mutation> mutation;
                 try
                 {
                     mutation = queue.take();
@@ -317,7 +316,7 @@ implements org.apache.hadoop.mapred.Reco
                     continue;
                 }
 
-                Map<byte[], Map<String, List<Mutation>>> batch = new HashMap<byte[], Map<String, List<Mutation>>>();
+                Map<ByteBuffer, Map<String, List<Mutation>>> batch = new HashMap<ByteBuffer, Map<String, List<Mutation>>>();
                 while (batch.size() < batchThreshold)
                 {
                     Map<String, List<Mutation>> subBatch = Collections.singletonMap(columnFamily, Arrays.asList(mutation.right));

Modified: cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/hadoop/ConfigHelper.java Fri Oct 22 03:23:26 2010
@@ -20,6 +20,8 @@ package org.apache.cassandra.hadoop;
  * 
  */
 
+import java.nio.ByteBuffer;
+
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.thrift.SlicePredicate;
@@ -164,7 +166,7 @@ public class ConfigHelper
         TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
         try
         {
-            return FBUtilities.bytesToHex(serializer.serialize(predicate));
+            return FBUtilities.bytesToHex(ByteBuffer.wrap(serializer.serialize(predicate)));
         }
         catch (TException e)
         {

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/LazilyCompactedRow.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/LazilyCompactedRow.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/LazilyCompactedRow.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/LazilyCompactedRow.java Fri Oct 22 03:23:26 2010
@@ -193,7 +193,7 @@ public class LazilyCompactedRow extends 
         @Override
         protected boolean isEqual(IColumn o1, IColumn o2)
         {
-            return Arrays.equals(o1.name(), o2.name());
+            return o1.name().equals(o2.name());
         }
 
         public void reduce(IColumn current)

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/SerDeUtils.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/SerDeUtils.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/SerDeUtils.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/SerDeUtils.java Fri Oct 22 03:23:26 2010
@@ -61,9 +61,9 @@ public final class SerDeUtils
      * @param ob An empty object to deserialize into (must not be null).
      * @throws IOException
      */
-    public static <T extends SpecificRecord> T deserialize(Schema writer, byte[] bytes, T ob) throws IOException
+    public static <T extends SpecificRecord> T deserialize(Schema writer, ByteBuffer bytes, T ob) throws IOException
     {
-        BinaryDecoder dec = DIRECT_DECODERS.createBinaryDecoder(bytes, null);
+        BinaryDecoder dec = DIRECT_DECODERS.createBinaryDecoder(bytes.array(),bytes.position()+bytes.arrayOffset(),bytes.remaining(), null);
         SpecificDatumReader<T> reader = new SpecificDatumReader<T>(writer);
         reader.setExpected(ob.getSchema());
         return reader.read(ob, dec);
@@ -73,14 +73,14 @@ public final class SerDeUtils
      * Serializes a single object.
      * @param o Object to serialize
      */
-    public static <T extends SpecificRecord> byte[] serialize(T o) throws IOException
+    public static <T extends SpecificRecord> ByteBuffer serialize(T o) throws IOException
     {
         OutputBuffer buff = new OutputBuffer();
         BinaryEncoder enc = new BinaryEncoder(buff);
         SpecificDatumWriter<T> writer = new SpecificDatumWriter<T>(o.getSchema());
         writer.write(o, enc);
         enc.flush();
-        return buff.asByteArray();
+        return ByteBuffer.wrap(buff.asByteArray());
     }
 
 	/**
@@ -89,9 +89,9 @@ public final class SerDeUtils
      * @param bytes Array to deserialize from
      * @throws IOException
      */
-    public static <T extends SpecificRecord> T deserializeWithSchema(byte[] bytes, T ob) throws IOException
+    public static <T extends SpecificRecord> T deserializeWithSchema(ByteBuffer bytes, T ob) throws IOException
     {
-        BinaryDecoder dec = DIRECT_DECODERS.createBinaryDecoder(bytes, null);
+        BinaryDecoder dec = DIRECT_DECODERS.createBinaryDecoder(bytes.array(),bytes.position()+bytes.arrayOffset(), bytes.remaining(), null);
         Schema writer = Schema.parse(dec.readString(new Utf8()).toString());
         SpecificDatumReader<T> reader = new SpecificDatumReader<T>(writer);
         reader.setExpected(ob.getSchema());
@@ -103,7 +103,7 @@ public final class SerDeUtils
      * more efficient to store the Schema independently.
      * @param o Object to serialize
      */
-    public static <T extends SpecificRecord> byte[] serializeWithSchema(T o) throws IOException
+    public static <T extends SpecificRecord> ByteBuffer serializeWithSchema(T o) throws IOException
     {
         OutputBuffer buff = new OutputBuffer();
         BinaryEncoder enc = new BinaryEncoder(buff);
@@ -111,7 +111,7 @@ public final class SerDeUtils
         SpecificDatumWriter<T> writer = new SpecificDatumWriter<T>(o.getSchema());
         writer.write(o, enc);
         enc.flush();
-        return buff.asByteArray();
+        return ByteBuffer.wrap(buff.asByteArray());
     }
 
     /**

Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexHelper.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexHelper.java?rev=1026200&r1=1026199&r2=1026200&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexHelper.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/IndexHelper.java Fri Oct 22 03:23:26 2010
@@ -18,14 +18,23 @@
 
 package org.apache.cassandra.io.sstable;
 
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.DataOutput;
+import java.io.EOFException;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.utils.BloomFilter;
-import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.io.util.FileDataInput;
 import org.apache.cassandra.io.util.FileMark;
+import org.apache.cassandra.utils.BloomFilter;
+import org.apache.cassandra.utils.FBUtilities;
 
 /**
  * Provides helper to serialize, deserialize and use column indexes.
@@ -102,9 +111,9 @@ public class IndexHelper
      * the index of the IndexInfo in which @name will be found.
      * If the index is @indexList.size(), the @name appears nowhere.
      */
-    public static int indexFor(byte[] name, List<IndexInfo> indexList, AbstractType comparator, boolean reversed)
+    public static int indexFor(ByteBuffer name, List<IndexInfo> indexList, AbstractType comparator, boolean reversed)
     {
-        if (name.length == 0 && reversed)
+        if (name.remaining() == 0 && reversed)
             return indexList.size() - 1;
         IndexInfo target = new IndexInfo(name, name, 0, 0);
         int index = Collections.binarySearch(indexList, target, getComparator(comparator));
@@ -125,11 +134,11 @@ public class IndexHelper
     public static class IndexInfo
     {
         public final long width;
-        public final byte[] lastName;
-        public final byte[] firstName;
+        public final ByteBuffer lastName;
+        public final ByteBuffer firstName;
         public final long offset;
 
-        public IndexInfo(byte[] firstName, byte[] lastName, long offset, long width)
+        public IndexInfo(ByteBuffer firstName, ByteBuffer lastName, long offset, long width)
         {
             this.firstName = firstName;
             this.lastName = lastName;
@@ -147,7 +156,7 @@ public class IndexHelper
 
         public int serializedSize()
         {
-            return 2 + firstName.length + 2 + lastName.length + 8 + 8;
+            return 2 + firstName.remaining() + 2 + lastName.remaining() + 8 + 8;
         }
 
         public static IndexInfo deserialize(FileDataInput dis) throws IOException