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:13 UTC

[2/3] cassandra git commit: Cleanup cell equality

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