You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2014/02/28 08:49:11 UTC

git commit: Fix ClassCastException for compact table with composites

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 7e9cdff96 -> 15728ad8d


Fix ClassCastException for compact table with composites

patch by slebresne; reviewed by iamaleksey for CASSANDRA-6738


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/15728ad8
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/15728ad8
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/15728ad8

Branch: refs/heads/cassandra-2.1
Commit: 15728ad8dfbc8991acaf2bee6ad213a39330606a
Parents: 7e9cdff
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri Feb 28 08:47:48 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Fri Feb 28 08:47:48 2014 +0100

----------------------------------------------------------------------
 CHANGES.txt                                                    | 1 +
 .../org/apache/cassandra/db/composites/CompoundComposite.java  | 6 +++++-
 .../apache/cassandra/db/composites/CompoundDenseCellName.java  | 5 +++++
 .../cassandra/db/composites/CompoundDenseCellNameType.java     | 3 +--
 4 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/15728ad8/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 4f91a0e..2bb67dd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,7 @@
  * Fix assertion error in ALTER TYPE RENAME (CASSANDRA-6705)
  * Scrub should not always clear out repaired status (CASSANDRA-5351)
  * Improve handling of range tombstone for wide partitions (CASSANDRA-6446)
+ * Fix ClassCastException for compact table with composites (CASSANDRA-6738)
 
 2.1.0-beta1
  * Add flush directory distinct from compaction directories (CASSANDRA-6357)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/15728ad8/src/java/org/apache/cassandra/db/composites/CompoundComposite.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CompoundComposite.java b/src/java/org/apache/cassandra/db/composites/CompoundComposite.java
index 9475cc0..cae1c9e 100644
--- a/src/java/org/apache/cassandra/db/composites/CompoundComposite.java
+++ b/src/java/org/apache/cassandra/db/composites/CompoundComposite.java
@@ -50,7 +50,11 @@ public class CompoundComposite extends AbstractComposite
 
     public ByteBuffer get(int i)
     {
-        return elements[i];
+        // Note: most consumer should validate that i is within bounds. However, for backward compatibility
+        // reasons, composite dense tables can have names that don't have all their component of the clustering
+        // columns, which may end up here with i > size(). For those calls, it's actually simpler to return null
+        // than to force the caller to special case.
+        return i >= size() ? null : elements[i];
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cassandra/blob/15728ad8/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java
index e16e390..0f5b2f5 100644
--- a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java
+++ b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java
@@ -34,6 +34,11 @@ public class CompoundDenseCellName extends CompoundComposite implements CellName
         super(elements, elements.length, false);
     }
 
+    CompoundDenseCellName(ByteBuffer[] elements, int size)
+    {
+        super(elements, size, false);
+    }
+
     public int clusteringSize()
     {
         return size;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/15728ad8/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
index 06b25b0..635b997 100644
--- a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
+++ b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
@@ -69,8 +69,7 @@ public class CompoundDenseCellNameType extends AbstractCompoundCellNameType
         if (size < fullSize || eoc != Composite.EOC.NONE)
             return new CompoundComposite(components, size, false).withEOC(eoc);
 
-        assert components.length == size;
-        return new CompoundDenseCellName(components);
+        return new CompoundDenseCellName(components, size);
     }
 
     protected Composite copyAndMakeWith(ByteBuffer[] components, int size, Composite.EOC eoc, boolean isStatic)