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