Author: jbellis
Date: Fri Apr 30 14:25:57 2010
New Revision: 939687

URL: http://svn.apache.org/viewvc?rev=939687&view=rev
Log:
make resolving timestamp ties deterministic.  patch by Roland Hänel; reviewed 
by jbellis and Sylvain Lebresne for CASSANDRA-1039

Modified:
    cassandra/branches/cassandra-0.6/CHANGES.txt
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/Column.java

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=939687&r1=939686&r2=939687&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Fri Apr 30 14:25:57 2010
@@ -3,6 +3,8 @@
  * split CommitLogExecutorService into BatchCommitLogExecutorService and 
    PeriodicCommitLogExecutorService (CASSANDRA-1014)
  * add latency histograms to CFSMBean (CASSANDRA-1024)
+ * make resolving timestamp ties deterministic by using value bytes
+   as a tiebreaker (CASSANDRA-1039)
 
 
 0.6.1

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/Column.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/Column.java?rev=939687&r1=939686&r2=939687&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/Column.java 
(original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/Column.java 
Fri Apr 30 14:25:57 2010
@@ -28,6 +28,7 @@ import org.apache.commons.lang.ArrayUtil
 
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.utils.FBUtilities;
 
 
 /**
@@ -194,11 +195,17 @@ public class Column implements IColumn
     // note that we do not call this simply compareTo since it also makes 
sense to compare Columns by name
     public long comparePriority(Column o)
     {
+        // tombstone always wins ties.
         if (isMarkedForDelete)
-        {
-            // tombstone always wins ties.
             return timestamp < o.timestamp ? -1 : 1;
-        }
+        if (o.isMarkedForDelete)
+            return timestamp > o.timestamp ? 1 : -1;
+        
+        // compare value as tie-breaker for equal timestamps
+        if (timestamp == o.timestamp)
+            return FBUtilities.compareByteArrays(value, o.value);
+
+        // neither is tombstoned and timestamps are different
         return timestamp - o.timestamp;
     }
 


Reply via email to