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/05/05 09:28:22 UTC
[2/4] git commit: Fix super column filter conversion
Fix super column filter conversion
patch by slebresne; reviewed by thobbs for CASSANDRA-7138
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7e8efd1b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7e8efd1b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7e8efd1b
Branch: refs/heads/trunk
Commit: 7e8efd1bbc8e25c9503883bee895df168e5a99b8
Parents: 706afc3
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 5 09:21:46 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 5 09:21:46 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/SuperColumns.java | 5 ++++-
.../org/apache/cassandra/thrift/CassandraServer.java | 14 ++++++++++----
3 files changed, 15 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5332c65..ddcb09c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
2.1.0-rc1
* Parallel streaming for sstableloader (CASSANDRA-3668)
+ * Fix bugs in supercolumns handling (CASSANDRA-7138)
Merged from 2.0:
* Make batchlog replica selection rack-aware (CASSANDRA-6551)
* Suggest CTRL-C or semicolon after three blank lines in cqlsh (CASSANDRA-7142)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/src/java/org/apache/cassandra/db/SuperColumns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SuperColumns.java b/src/java/org/apache/cassandra/db/SuperColumns.java
index bab46eb..2006cbd 100644
--- a/src/java/org/apache/cassandra/db/SuperColumns.java
+++ b/src/java/org/apache/cassandra/db/SuperColumns.java
@@ -184,7 +184,10 @@ public class SuperColumns
int i = 0;
for (CellName name : filter.columns)
{
- slices[i++] = name.slice();
+ // Note that, because the filter in argument is the one from thrift, 'name' are SimpleDenseCellName.
+ // So calling name.slice() would be incorrect, as simple cell names don't handle the EOC properly.
+ // This is why we call toByteBuffer() and rebuild a Composite of the right type before call slice().
+ slices[i++] = type.make(name.toByteBuffer()).slice();
}
return new SliceQueryFilter(slices, false, slices.length, 1);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index 069cec7..5a296f3 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -381,12 +381,18 @@ public class CassandraServer implements Cassandra.Iface
private SliceQueryFilter toInternalFilter(CFMetaData metadata, ColumnParent parent, SliceRange range)
{
+ if (metadata.isSuper())
+ {
+ CellNameType columnType = new SimpleDenseCellNameType(metadata.comparator.subtype(parent.isSetSuper_column() ? 1 : 0));
+ Composite start = columnType.fromByteBuffer(range.start);
+ Composite finish = columnType.fromByteBuffer(range.finish);
+ SliceQueryFilter filter = new SliceQueryFilter(start, finish, range.reversed, range.count);
+ return SuperColumns.fromSCSliceFilter(metadata.comparator, parent.bufferForSuper_column(), filter);
+ }
+
Composite start = metadata.comparator.fromByteBuffer(range.start);
Composite finish = metadata.comparator.fromByteBuffer(range.finish);
- SliceQueryFilter filter = new SliceQueryFilter(start, finish, range.reversed, range.count);
- if (metadata.isSuper())
- filter = SuperColumns.fromSCSliceFilter(metadata.comparator, parent.bufferForSuper_column(), filter);
- return filter;
+ return new SliceQueryFilter(start, finish, range.reversed, range.count);
}
private IDiskAtomFilter toInternalFilter(CFMetaData metadata, ColumnParent parent, SlicePredicate predicate)