Author: jake
Date: Fri Sep 30 18:20:28 2011
New Revision: 1177766
URL: http://svn.apache.org/viewvc?rev=1177766&view=rev
Log:
Performance improvement for ByteBufferUtil.compareUnsigned
Patch by tjake; reviewed by jbellis for CASSANDRA-3286
Modified:
cassandra/branches/cassandra-1.0/CHANGES.txt
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/FBUtilities.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1177766&r1=1177765&r2=1177766&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Fri Sep 30 18:20:28 2011
@@ -1,6 +1,7 @@
1.0.1
* describe_ring should include datacenter/topology information
(CASSANDRA-2882)
* Thrift sockets are not properly buffered (CASSANDRA-3261)
+ * performance improvement for bytebufferutil compare function (CASSANDRA-3286)
1.0.0-final
Modified:
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/ByteBufferUtil.java?rev=1177766&r1=1177765&r2=1177766&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
(original)
+++
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
Fri Sep 30 18:20:28 2011
@@ -83,6 +83,12 @@ public class ByteBufferUtil
assert o1 != null;
assert o2 != null;
+ if (o1.hasArray() && o2.hasArray())
+ {
+ return FBUtilities.compareUnsigned(o1.array(), o2.array(),
o1.position() + o1.arrayOffset(),
+ o2.position() + o2.arrayOffset(), o1.remaining(),
o2.remaining());
+ }
+
int minLength = Math.min(o1.remaining(), o2.remaining());
for (int x = 0, i = o1.position(), j = o2.position(); x < minLength;
x++, i++, j++)
{
Modified:
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/FBUtilities.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=1177766&r1=1177765&r2=1177766&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/FBUtilities.java
(original)
+++
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/FBUtilities.java
Fri Sep 30 18:20:28 2011
@@ -348,7 +348,7 @@ public class FBUtilities
}
if (bytes2 == null) return 1;
- int minLength = Math.min(len1 - offset1, len2 - offset2);
+ int minLength = Math.min(len1, len2);
for (int x = 0, i = offset1, j = offset2; x < minLength; x++, i++, j++)
{
if (bytes1[i] == bytes2[j])
@@ -356,8 +356,8 @@ public class FBUtilities
// compare non-equal bytes as unsigned
return (bytes1[i] & 0xFF) < (bytes2[j] & 0xFF) ? -1 : 1;
}
- if ((len1 - offset1) == (len2 - offset2)) return 0;
- else return ((len1 - offset1) < (len2 - offset2)) ? -1 : 1;
+ if (len1 == len2) return 0;
+ else return (len1 < len2) ? -1 : 1;
}
/**