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 <[email protected]> Authored: Fri Feb 28 08:47:48 2014 +0100 Committer: Sylvain Lebresne <[email protected]> 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)
