Author: jbellis
Date: Fri Mar 18 18:10:58 2011
New Revision: 1083000
URL: http://svn.apache.org/viewvc?rev=1083000&view=rev
Log:
fix reversed slices on large supercolumn rows
Modified:
cassandra/branches/cassandra-0.6/CHANGES.txt
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/IndexHelper.java
Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1083000&r1=1082999&r2=1083000&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Fri Mar 18 18:10:58 2011
@@ -1,5 +1,6 @@
0.6.13
* shut down server for OOM on a Thrift thread (CASSANDRA-2269)
+ * fix reversed slices on large supercolumn rows (CASSANDRA-2212)
0.6.12
Modified:
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java?rev=1083000&r1=1082999&r2=1083000&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java
(original)
+++
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java
Fri Mar 18 18:10:58 2011
@@ -80,7 +80,7 @@ public class SSTableNamesIterator extend
/* get the various column ranges we have to read */
AbstractType comparator = ssTable.getColumnComparator();
- SortedSet<IndexHelper.IndexInfo> ranges = new
TreeSet<IndexHelper.IndexInfo>(IndexHelper.getComparator(comparator));
+ SortedSet<IndexHelper.IndexInfo> ranges = new
TreeSet<IndexHelper.IndexInfo>(IndexHelper.getComparator(comparator, false));
for (byte[] name : filteredColumnNames)
{
int index = IndexHelper.indexFor(name, indexList, comparator,
false);
Modified:
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java?rev=1083000&r1=1082999&r2=1083000&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
(original)
+++
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
Fri Mar 18 18:10:58 2011
@@ -139,8 +139,6 @@ class SSTableSliceIterator extends Abstr
file.mark();
curRangeIndex = IndexHelper.indexFor(startColumn, indexes,
comparator, reversed);
- if (reversed && curRangeIndex == indexes.size())
- curRangeIndex--;
}
public ColumnFamily getEmptyColumnFamily()
Modified:
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/IndexHelper.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/IndexHelper.java?rev=1083000&r1=1082999&r2=1083000&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/IndexHelper.java
(original)
+++
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/io/IndexHelper.java
Fri Mar 18 18:10:58 2011
@@ -103,26 +103,39 @@ public class IndexHelper
/**
* the index of the IndexInfo in which @name will be found.
- * If the index is @indexList.size(), the @name appears nowhere.
+ * If the index is @indexList.size() or -1, the @name appears nowhere.
*/
public static int indexFor(byte[] name, List<IndexInfo> indexList,
AbstractType comparator, boolean reversed)
{
if (name.length == 0 && reversed)
return indexList.size() - 1;
IndexInfo target = new IndexInfo(name, name, 0, 0);
- int index = Collections.binarySearch(indexList, target,
getComparator(comparator));
- return index < 0 ? -1 * (index + 1) : index;
+ int index = Collections.binarySearch(indexList, target,
getComparator(comparator, reversed));
+ return index < 0 ? -index - (reversed ? 2 : 1) : index;
}
- public static Comparator<IndexInfo> getComparator(final AbstractType
nameComparator)
+ public static Comparator<IndexInfo> getComparator(final AbstractType
nameComparator, boolean reversed)
{
- return new Comparator<IndexInfo>()
+ if (reversed)
{
- public int compare(IndexInfo o1, IndexInfo o2)
+ return new Comparator<IndexInfo>()
{
- return nameComparator.compare(o1.lastName, o2.lastName);
- }
- };
+ public int compare(IndexInfo o1, IndexInfo o2)
+ {
+ return nameComparator.compare(o1.firstName, o2.firstName);
+ }
+ };
+ }
+ else
+ {
+ return new Comparator<IndexInfo>()
+ {
+ public int compare(IndexInfo o1, IndexInfo o2)
+ {
+ return nameComparator.compare(o1.lastName, o2.lastName);
+ }
+ };
+ }
}
public static class IndexInfo