You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/03/18 12:01:12 UTC
[1/3] cassandra git commit: Cleanup cell equality
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.1 828496492 -> 69ffd1fa0
refs/heads/trunk 7bef6f93a -> c2dc31c1f
Cleanup cell equality
patch by benedict; reviewed by sylvain for CASSANDRA-8947
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/69ffd1fa
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/69ffd1fa
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/69ffd1fa
Branch: refs/heads/cassandra-2.1
Commit: 69ffd1fa01dd9a5b7118cbcaf63dd2dffc1fa508
Parents: 8284964
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Wed Mar 18 11:00:29 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Wed Mar 18 11:00:29 2015 +0000
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/AbstractCell.java | 3 +-
.../apache/cassandra/db/BufferCounterCell.java | 7 +---
.../apache/cassandra/db/BufferDeletedCell.java | 5 ---
.../apache/cassandra/db/BufferExpiringCell.java | 13 ++----
.../apache/cassandra/db/NativeCounterCell.java | 8 +---
.../apache/cassandra/db/NativeDeletedCell.java | 6 ---
.../apache/cassandra/db/NativeExpiringCell.java | 13 ++----
test/unit/org/apache/cassandra/db/CellTest.java | 44 ++++++++++++++++++++
9 files changed, 58 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 68df77e..2af8df6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.4
+ * Cleanup cell equality (CASSANDRA-8947)
* Introduce intra-cluster message coalescing (CASSANDRA-8692)
* DatabaseDescriptor throws NPE when rpc_interface is used (CASSANDRA-8839)
* Don't check if an sstable is live for offline compactions (CASSANDRA-8841)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/AbstractCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AbstractCell.java b/src/java/org/apache/cassandra/db/AbstractCell.java
index f27871f..37d483f 100644
--- a/src/java/org/apache/cassandra/db/AbstractCell.java
+++ b/src/java/org/apache/cassandra/db/AbstractCell.java
@@ -136,7 +136,8 @@ public abstract class AbstractCell implements Cell
public boolean equals(Cell cell)
{
- return timestamp() == cell.timestamp() && name().equals(cell.name()) && value().equals(cell.value());
+ return timestamp() == cell.timestamp() && name().equals(cell.name()) && value().equals(cell.value())
+ && serializationFlags() == cell.serializationFlags();
}
public int hashCode()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferCounterCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferCounterCell.java b/src/java/org/apache/cassandra/db/BufferCounterCell.java
index bdd97a7..827182a 100644
--- a/src/java/org/apache/cassandra/db/BufferCounterCell.java
+++ b/src/java/org/apache/cassandra/db/BufferCounterCell.java
@@ -171,11 +171,6 @@ public class BufferCounterCell extends BufferCell implements CounterCell
@Override
public boolean equals(Cell cell)
{
- return cell instanceof CounterCell && equals((CounterCell) cell);
- }
-
- public boolean equals(CounterCell cell)
- {
- return super.equals(cell) && timestampOfLastDelete == cell.timestampOfLastDelete();
+ return super.equals(cell) && timestampOfLastDelete == ((CounterCell) cell).timestampOfLastDelete();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferDeletedCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferDeletedCell.java b/src/java/org/apache/cassandra/db/BufferDeletedCell.java
index bcc170f..a38f322 100644
--- a/src/java/org/apache/cassandra/db/BufferDeletedCell.java
+++ b/src/java/org/apache/cassandra/db/BufferDeletedCell.java
@@ -107,11 +107,6 @@ public class BufferDeletedCell extends BufferCell implements DeletedCell
throw new MarshalException("The local deletion time should not be negative");
}
- public boolean equals(Cell cell)
- {
- return timestamp() == cell.timestamp() && getLocalDeletionTime() == cell.getLocalDeletionTime() && name().equals(cell.name());
- }
-
@Override
public void updateDigest(MessageDigest digest)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferExpiringCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferExpiringCell.java b/src/java/org/apache/cassandra/db/BufferExpiringCell.java
index 347604a..25172c8 100644
--- a/src/java/org/apache/cassandra/db/BufferExpiringCell.java
+++ b/src/java/org/apache/cassandra/db/BufferExpiringCell.java
@@ -167,15 +167,10 @@ public class BufferExpiringCell extends BufferCell implements ExpiringCell
@Override
public boolean equals(Cell cell)
{
- return cell instanceof ExpiringCell && equals((ExpiringCell) cell);
- }
-
- public boolean equals(ExpiringCell cell)
- {
- // super.equals() returns false if o is not a CounterCell
- return super.equals(cell)
- && getLocalDeletionTime() == cell.getLocalDeletionTime()
- && getTimeToLive() == cell.getTimeToLive();
+ if (!super.equals(cell))
+ return false;
+ ExpiringCell that = (ExpiringCell) cell;
+ return getLocalDeletionTime() == that.getLocalDeletionTime() && getTimeToLive() == that.getTimeToLive();
}
/** @return Either a DeletedCell, or an ExpiringCell. */
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeCounterCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeCounterCell.java b/src/java/org/apache/cassandra/db/NativeCounterCell.java
index 3fe73ce..c16cc44 100644
--- a/src/java/org/apache/cassandra/db/NativeCounterCell.java
+++ b/src/java/org/apache/cassandra/db/NativeCounterCell.java
@@ -178,13 +178,9 @@ public class NativeCounterCell extends NativeCell implements CounterCell
return SIZE;
}
+ @Override
public boolean equals(Cell cell)
{
- return cell instanceof CounterCell && equals((CounterCell) cell);
- }
-
- public boolean equals(CounterCell cell)
- {
- return super.equals(cell) && timestampOfLastDelete() == cell.timestampOfLastDelete();
+ return super.equals(cell) && timestampOfLastDelete() == ((CounterCell) cell).timestampOfLastDelete();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeDeletedCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeDeletedCell.java b/src/java/org/apache/cassandra/db/NativeDeletedCell.java
index e900635..6bdef43 100644
--- a/src/java/org/apache/cassandra/db/NativeDeletedCell.java
+++ b/src/java/org/apache/cassandra/db/NativeDeletedCell.java
@@ -106,12 +106,6 @@ public class NativeDeletedCell extends NativeCell implements DeletedCell
}
@Override
- public boolean equals(Cell cell)
- {
- return timestamp() == cell.timestamp() && getLocalDeletionTime() == cell.getLocalDeletionTime() && name().equals(cell.name());
- }
-
- @Override
public long unsharedHeapSizeExcludingData()
{
return SIZE;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeExpiringCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeExpiringCell.java b/src/java/org/apache/cassandra/db/NativeExpiringCell.java
index d97e080..6369536 100644
--- a/src/java/org/apache/cassandra/db/NativeExpiringCell.java
+++ b/src/java/org/apache/cassandra/db/NativeExpiringCell.java
@@ -152,15 +152,10 @@ public class NativeExpiringCell extends NativeCell implements ExpiringCell
public boolean equals(Cell cell)
{
- return cell instanceof ExpiringCell && equals((ExpiringCell) cell);
- }
-
- protected boolean equals(ExpiringCell cell)
- {
- // super.equals() returns false if o is not a CounterCell
- return super.equals(cell)
- && getLocalDeletionTime() == cell.getLocalDeletionTime()
- && getTimeToLive() == cell.getTimeToLive();
+ if (!super.equals(cell))
+ return false;
+ ExpiringCell that = (ExpiringCell) cell;
+ return getLocalDeletionTime() == that.getLocalDeletionTime() && getTimeToLive() == that.getTimeToLive();
}
@Override
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/test/unit/org/apache/cassandra/db/CellTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/CellTest.java b/test/unit/org/apache/cassandra/db/CellTest.java
index 63d6f4c..493dbbf 100644
--- a/test/unit/org/apache/cassandra/db/CellTest.java
+++ b/test/unit/org/apache/cassandra/db/CellTest.java
@@ -21,6 +21,8 @@ package org.apache.cassandra.db;
*/
+import java.nio.ByteBuffer;
+
import org.junit.Test;
import junit.framework.Assert;
@@ -37,6 +39,29 @@ public class CellTest
private static NativeAllocator allocator = new NativePool(Integer.MAX_VALUE, Integer.MAX_VALUE, 1f, null).newAllocator();
@Test
+ public void testConflictingTypeEquality()
+ {
+ boolean[] tf = new boolean[]{ true, false };
+ for (boolean lhs : tf)
+ {
+ for (boolean rhs : tf)
+ {
+ // don't test equality for both sides native, as this is based on CellName resolution
+ if (lhs && rhs)
+ continue;
+ Cell a = expiring("a", "a", 1, 1, lhs);
+ Cell b = regular("a", "a", 1, rhs);
+ Assert.assertNotSame(a, b);
+ Assert.assertNotSame(b, a);
+ a = deleted("a", 1, 1, lhs);
+ b = regular("a", ByteBufferUtil.bytes(1), 1, rhs);
+ Assert.assertNotSame(a, b);
+ Assert.assertNotSame(b, a);
+ }
+ }
+ }
+
+ @Test
public void testExpiringCellReconile()
{
// equal
@@ -94,4 +119,23 @@ public class CellTest
return cell;
}
+ private Cell regular(String name, ByteBuffer value, long timestamp, boolean nativeCell)
+ {
+ Cell cell = new BufferCell(Util.cellname(name), value, timestamp);
+ if (nativeCell)
+ cell = new NativeCell(allocator, order.getCurrent(), cell);
+ return cell;
+ }
+ private Cell regular(String name, String value, long timestamp, boolean nativeCell)
+ {
+ return regular(name, ByteBufferUtil.bytes(value), timestamp, nativeCell);
+ }
+
+ private Cell deleted(String name, int localDeletionTime, long timestamp, boolean nativeCell)
+ {
+ DeletedCell cell = new BufferDeletedCell(Util.cellname(name), localDeletionTime, timestamp);
+ if (nativeCell)
+ cell = new NativeDeletedCell(allocator, order.getCurrent(), cell);
+ return cell;
+ }
}
[3/3] cassandra git commit: Merge branch 'cassandra-2.1' into trunk
Posted by be...@apache.org.
Merge branch 'cassandra-2.1' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c2dc31c1
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c2dc31c1
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c2dc31c1
Branch: refs/heads/trunk
Commit: c2dc31c1f0f6b7564ef955b3815d9d89bdc58df2
Parents: 7bef6f9 69ffd1f
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Wed Mar 18 11:00:59 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Wed Mar 18 11:00:59 2015 +0000
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/AbstractCell.java | 3 +-
.../apache/cassandra/db/BufferCounterCell.java | 7 +---
.../apache/cassandra/db/BufferDeletedCell.java | 5 ---
.../apache/cassandra/db/BufferExpiringCell.java | 13 ++----
.../apache/cassandra/db/NativeCounterCell.java | 8 +---
.../apache/cassandra/db/NativeDeletedCell.java | 6 ---
.../apache/cassandra/db/NativeExpiringCell.java | 13 ++----
test/unit/org/apache/cassandra/db/CellTest.java | 44 ++++++++++++++++++++
9 files changed, 58 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c2dc31c1/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index ae98f56,2af8df6..997bf04
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,78 -1,5 +1,79 @@@
+3.0
+ * Partition intra-cluster message streams by size, not type (CASSANDRA-8789)
+ * Add nodetool command to validate all sstables in a node (CASSANDRA-5791)
+ * Add WriteFailureException to native protocol, notify coordinator of
+ write failures (CASSANDRA-8592)
+ * Convert SequentialWriter to nio (CASSANDRA-8709)
+ * Add role based access control (CASSANDRA-7653, 8650, 7216, 8760, 8849, 8761, 8850)
+ * Record client ip address in tracing sessions (CASSANDRA-8162)
+ * Indicate partition key columns in response metadata for prepared
+ statements (CASSANDRA-7660)
+ * Merge UUIDType and TimeUUIDType parse logic (CASSANDRA-8759)
+ * Avoid memory allocation when searching index summary (CASSANDRA-8793)
+ * Optimise (Time)?UUIDType Comparisons (CASSANDRA-8730)
+ * Make CRC32Ex into a separate maven dependency (CASSANDRA-8836)
+ * Use preloaded jemalloc w/ Unsafe (CASSANDRA-8714)
+ * Avoid accessing partitioner through StorageProxy (CASSANDRA-8244, 8268)
+ * Upgrade Metrics library and remove depricated metrics (CASSANDRA-5657)
+ * Serializing Row cache alternative, fully off heap (CASSANDRA-7438)
+ * Duplicate rows returned when in clause has repeated values (CASSANDRA-6707)
+ * Make CassandraException unchecked, extend RuntimeException (CASSANDRA-8560)
+ * Support direct buffer decompression for reads (CASSANDRA-8464)
+ * DirectByteBuffer compatible LZ4 methods (CASSANDRA-7039)
+ * Group sstables for anticompaction correctly (CASSANDRA-8578)
+ * Add ReadFailureException to native protocol, respond
+ immediately when replicas encounter errors while handling
+ a read request (CASSANDRA-7886)
+ * Switch CommitLogSegment from RandomAccessFile to nio (CASSANDRA-8308)
+ * Allow mixing token and partition key restrictions (CASSANDRA-7016)
+ * Support index key/value entries on map collections (CASSANDRA-8473)
+ * Modernize schema tables (CASSANDRA-8261)
+ * Support for user-defined aggregation functions (CASSANDRA-8053)
+ * Fix NPE in SelectStatement with empty IN values (CASSANDRA-8419)
+ * Refactor SelectStatement, return IN results in natural order instead
+ of IN value list order and ignore duplicate values in partition key IN restrictions (CASSANDRA-7981)
+ * Support UDTs, tuples, and collections in user-defined
+ functions (CASSANDRA-7563)
+ * Fix aggregate fn results on empty selection, result column name,
+ and cqlsh parsing (CASSANDRA-8229)
+ * Mark sstables as repaired after full repair (CASSANDRA-7586)
+ * Extend Descriptor to include a format value and refactor reader/writer
+ APIs (CASSANDRA-7443)
+ * Integrate JMH for microbenchmarks (CASSANDRA-8151)
+ * Keep sstable levels when bootstrapping (CASSANDRA-7460)
+ * Add Sigar library and perform basic OS settings check on startup (CASSANDRA-7838)
+ * Support for aggregation functions (CASSANDRA-4914)
+ * Remove cassandra-cli (CASSANDRA-7920)
+ * Accept dollar quoted strings in CQL (CASSANDRA-7769)
+ * Make assassinate a first class command (CASSANDRA-7935)
+ * Support IN clause on any partition key column (CASSANDRA-7855)
+ * Support IN clause on any clustering column (CASSANDRA-4762)
+ * Improve compaction logging (CASSANDRA-7818)
+ * Remove YamlFileNetworkTopologySnitch (CASSANDRA-7917)
+ * Do anticompaction in groups (CASSANDRA-6851)
+ * Support user-defined functions (CASSANDRA-7395, 7526, 7562, 7740, 7781, 7929,
+ 7924, 7812, 8063, 7813, 7708)
+ * Permit configurable timestamps with cassandra-stress (CASSANDRA-7416)
+ * Move sstable RandomAccessReader to nio2, which allows using the
+ FILE_SHARE_DELETE flag on Windows (CASSANDRA-4050)
+ * Remove CQL2 (CASSANDRA-5918)
+ * Add Thrift get_multi_slice call (CASSANDRA-6757)
+ * Optimize fetching multiple cells by name (CASSANDRA-6933)
+ * Allow compilation in java 8 (CASSANDRA-7028)
+ * Make incremental repair default (CASSANDRA-7250)
+ * Enable code coverage thru JaCoCo (CASSANDRA-7226)
+ * Switch external naming of 'column families' to 'tables' (CASSANDRA-4369)
+ * Shorten SSTable path (CASSANDRA-6962)
+ * Use unsafe mutations for most unit tests (CASSANDRA-6969)
+ * Fix race condition during calculation of pending ranges (CASSANDRA-7390)
+ * Fail on very large batch sizes (CASSANDRA-8011)
+ * Improve concurrency of repair (CASSANDRA-6455, 8208)
+ * Select optimal CRC32 implementation at runtime (CASSANDRA-8614)
+ * Evaluate MurmurHash of Token once per query (CASSANDRA-7096)
+ * Generalize progress reporting (CASSANDRA-8901)
+
2.1.4
+ * Cleanup cell equality (CASSANDRA-8947)
* Introduce intra-cluster message coalescing (CASSANDRA-8692)
* DatabaseDescriptor throws NPE when rpc_interface is used (CASSANDRA-8839)
* Don't check if an sstable is live for offline compactions (CASSANDRA-8841)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c2dc31c1/src/java/org/apache/cassandra/db/AbstractCell.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c2dc31c1/src/java/org/apache/cassandra/db/BufferExpiringCell.java
----------------------------------------------------------------------
[2/3] cassandra git commit: Cleanup cell equality
Posted by be...@apache.org.
Cleanup cell equality
patch by benedict; reviewed by sylvain for CASSANDRA-8947
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/69ffd1fa
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/69ffd1fa
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/69ffd1fa
Branch: refs/heads/trunk
Commit: 69ffd1fa01dd9a5b7118cbcaf63dd2dffc1fa508
Parents: 8284964
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Wed Mar 18 11:00:29 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Wed Mar 18 11:00:29 2015 +0000
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/AbstractCell.java | 3 +-
.../apache/cassandra/db/BufferCounterCell.java | 7 +---
.../apache/cassandra/db/BufferDeletedCell.java | 5 ---
.../apache/cassandra/db/BufferExpiringCell.java | 13 ++----
.../apache/cassandra/db/NativeCounterCell.java | 8 +---
.../apache/cassandra/db/NativeDeletedCell.java | 6 ---
.../apache/cassandra/db/NativeExpiringCell.java | 13 ++----
test/unit/org/apache/cassandra/db/CellTest.java | 44 ++++++++++++++++++++
9 files changed, 58 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 68df77e..2af8df6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.4
+ * Cleanup cell equality (CASSANDRA-8947)
* Introduce intra-cluster message coalescing (CASSANDRA-8692)
* DatabaseDescriptor throws NPE when rpc_interface is used (CASSANDRA-8839)
* Don't check if an sstable is live for offline compactions (CASSANDRA-8841)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/AbstractCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/AbstractCell.java b/src/java/org/apache/cassandra/db/AbstractCell.java
index f27871f..37d483f 100644
--- a/src/java/org/apache/cassandra/db/AbstractCell.java
+++ b/src/java/org/apache/cassandra/db/AbstractCell.java
@@ -136,7 +136,8 @@ public abstract class AbstractCell implements Cell
public boolean equals(Cell cell)
{
- return timestamp() == cell.timestamp() && name().equals(cell.name()) && value().equals(cell.value());
+ return timestamp() == cell.timestamp() && name().equals(cell.name()) && value().equals(cell.value())
+ && serializationFlags() == cell.serializationFlags();
}
public int hashCode()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferCounterCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferCounterCell.java b/src/java/org/apache/cassandra/db/BufferCounterCell.java
index bdd97a7..827182a 100644
--- a/src/java/org/apache/cassandra/db/BufferCounterCell.java
+++ b/src/java/org/apache/cassandra/db/BufferCounterCell.java
@@ -171,11 +171,6 @@ public class BufferCounterCell extends BufferCell implements CounterCell
@Override
public boolean equals(Cell cell)
{
- return cell instanceof CounterCell && equals((CounterCell) cell);
- }
-
- public boolean equals(CounterCell cell)
- {
- return super.equals(cell) && timestampOfLastDelete == cell.timestampOfLastDelete();
+ return super.equals(cell) && timestampOfLastDelete == ((CounterCell) cell).timestampOfLastDelete();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferDeletedCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferDeletedCell.java b/src/java/org/apache/cassandra/db/BufferDeletedCell.java
index bcc170f..a38f322 100644
--- a/src/java/org/apache/cassandra/db/BufferDeletedCell.java
+++ b/src/java/org/apache/cassandra/db/BufferDeletedCell.java
@@ -107,11 +107,6 @@ public class BufferDeletedCell extends BufferCell implements DeletedCell
throw new MarshalException("The local deletion time should not be negative");
}
- public boolean equals(Cell cell)
- {
- return timestamp() == cell.timestamp() && getLocalDeletionTime() == cell.getLocalDeletionTime() && name().equals(cell.name());
- }
-
@Override
public void updateDigest(MessageDigest digest)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/BufferExpiringCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/BufferExpiringCell.java b/src/java/org/apache/cassandra/db/BufferExpiringCell.java
index 347604a..25172c8 100644
--- a/src/java/org/apache/cassandra/db/BufferExpiringCell.java
+++ b/src/java/org/apache/cassandra/db/BufferExpiringCell.java
@@ -167,15 +167,10 @@ public class BufferExpiringCell extends BufferCell implements ExpiringCell
@Override
public boolean equals(Cell cell)
{
- return cell instanceof ExpiringCell && equals((ExpiringCell) cell);
- }
-
- public boolean equals(ExpiringCell cell)
- {
- // super.equals() returns false if o is not a CounterCell
- return super.equals(cell)
- && getLocalDeletionTime() == cell.getLocalDeletionTime()
- && getTimeToLive() == cell.getTimeToLive();
+ if (!super.equals(cell))
+ return false;
+ ExpiringCell that = (ExpiringCell) cell;
+ return getLocalDeletionTime() == that.getLocalDeletionTime() && getTimeToLive() == that.getTimeToLive();
}
/** @return Either a DeletedCell, or an ExpiringCell. */
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeCounterCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeCounterCell.java b/src/java/org/apache/cassandra/db/NativeCounterCell.java
index 3fe73ce..c16cc44 100644
--- a/src/java/org/apache/cassandra/db/NativeCounterCell.java
+++ b/src/java/org/apache/cassandra/db/NativeCounterCell.java
@@ -178,13 +178,9 @@ public class NativeCounterCell extends NativeCell implements CounterCell
return SIZE;
}
+ @Override
public boolean equals(Cell cell)
{
- return cell instanceof CounterCell && equals((CounterCell) cell);
- }
-
- public boolean equals(CounterCell cell)
- {
- return super.equals(cell) && timestampOfLastDelete() == cell.timestampOfLastDelete();
+ return super.equals(cell) && timestampOfLastDelete() == ((CounterCell) cell).timestampOfLastDelete();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeDeletedCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeDeletedCell.java b/src/java/org/apache/cassandra/db/NativeDeletedCell.java
index e900635..6bdef43 100644
--- a/src/java/org/apache/cassandra/db/NativeDeletedCell.java
+++ b/src/java/org/apache/cassandra/db/NativeDeletedCell.java
@@ -106,12 +106,6 @@ public class NativeDeletedCell extends NativeCell implements DeletedCell
}
@Override
- public boolean equals(Cell cell)
- {
- return timestamp() == cell.timestamp() && getLocalDeletionTime() == cell.getLocalDeletionTime() && name().equals(cell.name());
- }
-
- @Override
public long unsharedHeapSizeExcludingData()
{
return SIZE;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/src/java/org/apache/cassandra/db/NativeExpiringCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/NativeExpiringCell.java b/src/java/org/apache/cassandra/db/NativeExpiringCell.java
index d97e080..6369536 100644
--- a/src/java/org/apache/cassandra/db/NativeExpiringCell.java
+++ b/src/java/org/apache/cassandra/db/NativeExpiringCell.java
@@ -152,15 +152,10 @@ public class NativeExpiringCell extends NativeCell implements ExpiringCell
public boolean equals(Cell cell)
{
- return cell instanceof ExpiringCell && equals((ExpiringCell) cell);
- }
-
- protected boolean equals(ExpiringCell cell)
- {
- // super.equals() returns false if o is not a CounterCell
- return super.equals(cell)
- && getLocalDeletionTime() == cell.getLocalDeletionTime()
- && getTimeToLive() == cell.getTimeToLive();
+ if (!super.equals(cell))
+ return false;
+ ExpiringCell that = (ExpiringCell) cell;
+ return getLocalDeletionTime() == that.getLocalDeletionTime() && getTimeToLive() == that.getTimeToLive();
}
@Override
http://git-wip-us.apache.org/repos/asf/cassandra/blob/69ffd1fa/test/unit/org/apache/cassandra/db/CellTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/CellTest.java b/test/unit/org/apache/cassandra/db/CellTest.java
index 63d6f4c..493dbbf 100644
--- a/test/unit/org/apache/cassandra/db/CellTest.java
+++ b/test/unit/org/apache/cassandra/db/CellTest.java
@@ -21,6 +21,8 @@ package org.apache.cassandra.db;
*/
+import java.nio.ByteBuffer;
+
import org.junit.Test;
import junit.framework.Assert;
@@ -37,6 +39,29 @@ public class CellTest
private static NativeAllocator allocator = new NativePool(Integer.MAX_VALUE, Integer.MAX_VALUE, 1f, null).newAllocator();
@Test
+ public void testConflictingTypeEquality()
+ {
+ boolean[] tf = new boolean[]{ true, false };
+ for (boolean lhs : tf)
+ {
+ for (boolean rhs : tf)
+ {
+ // don't test equality for both sides native, as this is based on CellName resolution
+ if (lhs && rhs)
+ continue;
+ Cell a = expiring("a", "a", 1, 1, lhs);
+ Cell b = regular("a", "a", 1, rhs);
+ Assert.assertNotSame(a, b);
+ Assert.assertNotSame(b, a);
+ a = deleted("a", 1, 1, lhs);
+ b = regular("a", ByteBufferUtil.bytes(1), 1, rhs);
+ Assert.assertNotSame(a, b);
+ Assert.assertNotSame(b, a);
+ }
+ }
+ }
+
+ @Test
public void testExpiringCellReconile()
{
// equal
@@ -94,4 +119,23 @@ public class CellTest
return cell;
}
+ private Cell regular(String name, ByteBuffer value, long timestamp, boolean nativeCell)
+ {
+ Cell cell = new BufferCell(Util.cellname(name), value, timestamp);
+ if (nativeCell)
+ cell = new NativeCell(allocator, order.getCurrent(), cell);
+ return cell;
+ }
+ private Cell regular(String name, String value, long timestamp, boolean nativeCell)
+ {
+ return regular(name, ByteBufferUtil.bytes(value), timestamp, nativeCell);
+ }
+
+ private Cell deleted(String name, int localDeletionTime, long timestamp, boolean nativeCell)
+ {
+ DeletedCell cell = new BufferDeletedCell(Util.cellname(name), localDeletionTime, timestamp);
+ if (nativeCell)
+ cell = new NativeDeletedCell(allocator, order.getCurrent(), cell);
+ return cell;
+ }
}