You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/08/11 01:17:08 UTC

svn commit: r802953 - in /incubator/cassandra/trunk: interface/ interface/gen-java/org/apache/cassandra/service/ src/java/org/apache/cassandra/db/ src/java/org/apache/cassandra/db/filter/ src/java/org/apache/cassandra/io/ src/java/org/apache/cassandra/...

Author: jbellis
Date: Mon Aug 10 23:17:08 2009
New Revision: 802953

URL: http://svn.apache.org/viewvc?rev=802953&view=rev
Log:
switch "!isAscending" for "reversed."
patch by jbellis, Carl Bystrom, and Bill de hOra. reviewed by Eric Evans for CASSANDRA-311

Modified:
    incubator/cassandra/trunk/interface/cassandra.thrift
    incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/SliceRange.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IndexHelper.java
    incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
    incubator/cassandra/trunk/test/system/test_server.py
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
    incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java

Modified: incubator/cassandra/trunk/interface/cassandra.thrift
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/cassandra.thrift?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/cassandra.thrift (original)
+++ incubator/cassandra/trunk/interface/cassandra.thrift Mon Aug 10 23:17:08 2009
@@ -93,11 +93,11 @@
 # service api
 #
 
-enum ConsistencyLevel { 
-    ZERO = 0, 
-    ONE = 1, 
-    QUORUM = 2, 
-    ALL = 3, 
+enum ConsistencyLevel {
+    ZERO = 0,
+    ONE = 1,
+    QUORUM = 2,
+    ALL = 3,
 }
 
 struct ColumnParent {
@@ -114,7 +114,7 @@
 struct SliceRange {
     1: binary          start,
     2: binary          finish,
-    3: bool            is_ascending=1,
+    3: bool            reversed=0,
     4: i32             count=100,
 }
 
@@ -152,7 +152,7 @@
   throws (1: InvalidRequestException ire, 2: UnavailableException ue),
 
   # range query: returns matching keys
-  list<string>   get_key_range(1:string keyspace, 2:string column_family, 3:string start="", 4:string finish="", 5:i32 count=100) 
+  list<string>   get_key_range(1:string keyspace, 2:string column_family, 3:string start="", 4:string finish="", 5:i32 count=100)
   throws (1: InvalidRequestException ire),
 
   /////////////////////////////////////////////////////////////////////////////////////

Modified: incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/SliceRange.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/SliceRange.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/SliceRange.java (original)
+++ incubator/cassandra/trunk/interface/gen-java/org/apache/cassandra/service/SliceRange.java Mon Aug 10 23:17:08 2009
@@ -22,21 +22,21 @@
   private static final TStruct STRUCT_DESC = new TStruct("SliceRange");
   private static final TField START_FIELD_DESC = new TField("start", TType.STRING, (short)1);
   private static final TField FINISH_FIELD_DESC = new TField("finish", TType.STRING, (short)2);
-  private static final TField IS_ASCENDING_FIELD_DESC = new TField("is_ascending", TType.BOOL, (short)3);
+  private static final TField REVERSED_FIELD_DESC = new TField("reversed", TType.BOOL, (short)3);
   private static final TField COUNT_FIELD_DESC = new TField("count", TType.I32, (short)4);
 
   public byte[] start;
   public static final int START = 1;
   public byte[] finish;
   public static final int FINISH = 2;
-  public boolean is_ascending;
-  public static final int IS_ASCENDING = 3;
+  public boolean reversed;
+  public static final int REVERSED = 3;
   public int count;
   public static final int COUNT = 4;
 
   private final Isset __isset = new Isset();
   private static final class Isset implements java.io.Serializable {
-    public boolean is_ascending = false;
+    public boolean reversed = false;
     public boolean count = false;
   }
 
@@ -45,7 +45,7 @@
         new FieldValueMetaData(TType.STRING)));
     put(FINISH, new FieldMetaData("finish", TFieldRequirementType.DEFAULT, 
         new FieldValueMetaData(TType.STRING)));
-    put(IS_ASCENDING, new FieldMetaData("is_ascending", TFieldRequirementType.DEFAULT, 
+    put(REVERSED, new FieldMetaData("reversed", TFieldRequirementType.DEFAULT, 
         new FieldValueMetaData(TType.BOOL)));
     put(COUNT, new FieldMetaData("count", TFieldRequirementType.DEFAULT, 
         new FieldValueMetaData(TType.I32)));
@@ -56,7 +56,7 @@
   }
 
   public SliceRange() {
-    this.is_ascending = true;
+    this.reversed = false;
 
     this.count = 100;
 
@@ -65,14 +65,14 @@
   public SliceRange(
     byte[] start,
     byte[] finish,
-    boolean is_ascending,
+    boolean reversed,
     int count)
   {
     this();
     this.start = start;
     this.finish = finish;
-    this.is_ascending = is_ascending;
-    this.__isset.is_ascending = true;
+    this.reversed = reversed;
+    this.__isset.reversed = true;
     this.count = count;
     this.__isset.count = true;
   }
@@ -89,8 +89,8 @@
       this.finish = new byte[other.finish.length];
       System.arraycopy(other.finish, 0, finish, 0, other.finish.length);
     }
-    __isset.is_ascending = other.__isset.is_ascending;
-    this.is_ascending = other.is_ascending;
+    __isset.reversed = other.__isset.reversed;
+    this.reversed = other.reversed;
     __isset.count = other.__isset.count;
     this.count = other.count;
   }
@@ -148,27 +148,27 @@
     }
   }
 
-  public boolean isIs_ascending() {
-    return this.is_ascending;
+  public boolean isReversed() {
+    return this.reversed;
   }
 
-  public SliceRange setIs_ascending(boolean is_ascending) {
-    this.is_ascending = is_ascending;
-    this.__isset.is_ascending = true;
+  public SliceRange setReversed(boolean reversed) {
+    this.reversed = reversed;
+    this.__isset.reversed = true;
     return this;
   }
 
-  public void unsetIs_ascending() {
-    this.__isset.is_ascending = false;
+  public void unsetReversed() {
+    this.__isset.reversed = false;
   }
 
-  // Returns true if field is_ascending is set (has been asigned a value) and false otherwise
-  public boolean isSetIs_ascending() {
-    return this.__isset.is_ascending;
+  // Returns true if field reversed is set (has been asigned a value) and false otherwise
+  public boolean isSetReversed() {
+    return this.__isset.reversed;
   }
 
-  public void setIs_ascendingIsSet(boolean value) {
-    this.__isset.is_ascending = value;
+  public void setReversedIsSet(boolean value) {
+    this.__isset.reversed = value;
   }
 
   public int getCount() {
@@ -212,11 +212,11 @@
       }
       break;
 
-    case IS_ASCENDING:
+    case REVERSED:
       if (value == null) {
-        unsetIs_ascending();
+        unsetReversed();
       } else {
-        setIs_ascending((Boolean)value);
+        setReversed((Boolean)value);
       }
       break;
 
@@ -241,8 +241,8 @@
     case FINISH:
       return getFinish();
 
-    case IS_ASCENDING:
-      return new Boolean(isIs_ascending());
+    case REVERSED:
+      return new Boolean(isReversed());
 
     case COUNT:
       return new Integer(getCount());
@@ -259,8 +259,8 @@
       return isSetStart();
     case FINISH:
       return isSetFinish();
-    case IS_ASCENDING:
-      return isSetIs_ascending();
+    case REVERSED:
+      return isSetReversed();
     case COUNT:
       return isSetCount();
     default:
@@ -299,12 +299,12 @@
         return false;
     }
 
-    boolean this_present_is_ascending = true;
-    boolean that_present_is_ascending = true;
-    if (this_present_is_ascending || that_present_is_ascending) {
-      if (!(this_present_is_ascending && that_present_is_ascending))
+    boolean this_present_reversed = true;
+    boolean that_present_reversed = true;
+    if (this_present_reversed || that_present_reversed) {
+      if (!(this_present_reversed && that_present_reversed))
         return false;
-      if (this.is_ascending != that.is_ascending)
+      if (this.reversed != that.reversed)
         return false;
     }
 
@@ -350,10 +350,10 @@
             TProtocolUtil.skip(iprot, field.type);
           }
           break;
-        case IS_ASCENDING:
+        case REVERSED:
           if (field.type == TType.BOOL) {
-            this.is_ascending = iprot.readBool();
-            this.__isset.is_ascending = true;
+            this.reversed = iprot.readBool();
+            this.__isset.reversed = true;
           } else { 
             TProtocolUtil.skip(iprot, field.type);
           }
@@ -393,8 +393,8 @@
       oprot.writeBinary(this.finish);
       oprot.writeFieldEnd();
     }
-    oprot.writeFieldBegin(IS_ASCENDING_FIELD_DESC);
-    oprot.writeBool(this.is_ascending);
+    oprot.writeFieldBegin(REVERSED_FIELD_DESC);
+    oprot.writeBool(this.reversed);
     oprot.writeFieldEnd();
     oprot.writeFieldBegin(COUNT_FIELD_DESC);
     oprot.writeI32(this.count);
@@ -434,8 +434,8 @@
     }
     first = false;
     if (!first) sb.append(", ");
-    sb.append("is_ascending:");
-    sb.append(this.is_ascending);
+    sb.append("reversed:");
+    sb.append(this.reversed);
     first = false;
     if (!first) sb.append(", ");
     sb.append("count:");

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Aug 10 23:17:08 2009
@@ -1356,9 +1356,9 @@
         return writeStats_.mean();
     }
 
-    public ColumnFamily getColumnFamily(String key, QueryPath path, byte[] start, byte[] finish, boolean isAscending, int limit) throws IOException
+    public ColumnFamily getColumnFamily(String key, QueryPath path, byte[] start, byte[] finish, boolean reversed, int limit) throws IOException
     {
-        return getColumnFamily(new SliceQueryFilter(key, path, start, finish, isAscending, limit));
+        return getColumnFamily(new SliceQueryFilter(key, path, start, finish, reversed, limit));
     }
 
     public ColumnFamily getColumnFamily(QueryFilter filter) throws IOException
@@ -1547,7 +1547,7 @@
                 }
                 // make sure there is actually non-tombstone content associated w/ this key
                 // TODO record the key source(s) somehow and only check that source (e.g., memtable or sstable)
-                QueryFilter filter = new SliceQueryFilter(current, new QueryPath(columnFamily_), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 1);
+                QueryFilter filter = new SliceQueryFilter(current, new QueryPath(columnFamily_), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 1);
                 if (getColumnFamily(filter, Integer.MAX_VALUE) != null)
                 {
                     keys.add(current);

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java Mon Aug 10 23:17:08 2009
@@ -267,7 +267,7 @@
 
         final IColumn columns[] = (cf == null ? columnFamily : cf).getSortedColumns().toArray(new IColumn[columnFamily.getSortedColumns().size()]);
         // TODO if we are dealing with supercolumns, we need to clone them while we have the read lock since they can be modified later
-        if (!filter.isAscending)
+        if (filter.reversed)
             ArrayUtils.reverse(columns);
         IColumn startIColumn;
         if (DatabaseDescriptor.getColumnFamilyType(table_, filter.getColumnFamilyName()).equals("Standard"))
@@ -279,7 +279,7 @@
         // our dummy column, since the time there is arbitrary).
         Comparator<IColumn> comparator = filter.getColumnComparator(typeComparator);
         int index;
-        if (filter.start.length == 0 && !filter.isAscending)
+        if (filter.start.length == 0 && filter.reversed)
         {
             /* scan from the largest column in descending order */
             index = 0;

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SliceFromReadCommand.java Mon Aug 10 23:17:08 2009
@@ -28,20 +28,20 @@
 public class SliceFromReadCommand extends ReadCommand
 {
     public final byte[] start, finish;
-    public final boolean isAscending;
+    public final boolean reversed;
     public final int count;
 
-    public SliceFromReadCommand(String table, String key, ColumnParent column_parent, byte[] start, byte[] finish, boolean isAscending, int count)
+    public SliceFromReadCommand(String table, String key, ColumnParent column_parent, byte[] start, byte[] finish, boolean reversed, int count)
     {
-        this(table, key, new QueryPath(column_parent), start, finish, isAscending, count);
+        this(table, key, new QueryPath(column_parent), start, finish, reversed, count);
     }
 
-    public SliceFromReadCommand(String table, String key, QueryPath path, byte[] start, byte[] finish, boolean isAscending, int count)
+    public SliceFromReadCommand(String table, String key, QueryPath path, byte[] start, byte[] finish, boolean reversed, int count)
     {
         super(table, key, path, CMD_TYPE_GET_SLICE);
         this.start = start;
         this.finish = finish;
-        this.isAscending = isAscending;
+        this.reversed = reversed;
         this.count = count;
     }
 
@@ -54,7 +54,7 @@
     @Override
     public ReadCommand copy()
     {
-        ReadCommand readCommand = new SliceFromReadCommand(table, key, queryPath, start, finish, isAscending, count);
+        ReadCommand readCommand = new SliceFromReadCommand(table, key, queryPath, start, finish, reversed, count);
         readCommand.setDigestQuery(isDigestQuery());
         return readCommand;
     }
@@ -62,7 +62,7 @@
     @Override
     public Row getRow(Table table) throws IOException
     {
-        return table.getRow(new SliceQueryFilter(key, queryPath, start, finish, isAscending, count));
+        return table.getRow(new SliceQueryFilter(key, queryPath, start, finish, reversed, count));
     }
 
     @Override
@@ -74,7 +74,7 @@
                ", column_parent='" + queryPath + '\'' +
                ", start='" + getComparator().getString(start) + '\'' +
                ", finish='" + getComparator().getString(finish) + '\'' +
-               ", isAscending=" + isAscending +
+               ", reversed=" + reversed +
                ", count=" + count +
                ')';
     }
@@ -92,7 +92,7 @@
         realRM.queryPath.serialize(dos);
         ColumnSerializer.writeName(realRM.start, dos);
         ColumnSerializer.writeName(realRM.finish, dos);
-        dos.writeBoolean(realRM.isAscending);
+        dos.writeBoolean(realRM.reversed);
         dos.writeInt(realRM.count);
     }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/IdentityQueryFilter.java Mon Aug 10 23:17:08 2009
@@ -11,7 +11,7 @@
      */
     public IdentityQueryFilter(String key, QueryPath path)
     {
-        super(key, path, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, Integer.MAX_VALUE);
+        super(key, path, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, Integer.MAX_VALUE);
     }
 
     public SuperColumn filterSuperColumn(SuperColumn superColumn, int gcBefore)

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java Mon Aug 10 23:17:08 2009
@@ -14,16 +14,16 @@
  */
 class SSTableSliceIterator extends AbstractIterator<IColumn> implements ColumnIterator
 {
-    private final boolean isAscending;
+    private final boolean reversed;
     private final byte[] startColumn;
     private final AbstractType comparator;
     private ColumnGroupReader reader;
 
-    public SSTableSliceIterator(String filename, String key, AbstractType comparator, byte[] startColumn, boolean isAscending)
+    public SSTableSliceIterator(String filename, String key, AbstractType comparator, byte[] startColumn, boolean reversed)
     throws IOException
     {
         // TODO push finishColumn down here too, so we can tell when we're done and optimize away the slice when the index + start/stop shows there's nothing to scan for
-        this.isAscending = isAscending;
+        this.reversed = reversed;
         SSTableReader ssTable = SSTableReader.open(filename);
 
         /* Morph key into actual key based on the partition type. */
@@ -37,9 +37,9 @@
 
     private boolean isColumnNeeded(IColumn column)
     {
-        return isAscending
-               ? comparator.compare(column.name(), startColumn) >= 0
-               : startColumn.length == 0 || comparator.compare(column.name(), startColumn) <= 0;
+        return reversed
+               ? startColumn.length == 0 || comparator.compare(column.name(), startColumn) <= 0
+               : comparator.compare(column.name(), startColumn) >= 0;
     }
 
     public ColumnFamily getColumnFamily()
@@ -100,8 +100,8 @@
             file.readInt(); // column count
 
             columnStartPosition = file.getFilePointer();
-            curRangeIndex = IndexHelper.indexFor(startColumn, indexes, comparator, isAscending);
-            if (!isAscending && curRangeIndex == indexes.size())
+            curRangeIndex = IndexHelper.indexFor(startColumn, indexes, comparator, reversed);
+            if (reversed && curRangeIndex == indexes.size())
                 curRangeIndex--;
         }
 
@@ -139,16 +139,16 @@
             while (file.getFilePointer() < columnStartPosition + curColPostion.offset + curColPostion.width)
             {
                 IColumn column = emptyColumnFamily.getColumnSerializer().deserialize(file);
-                if (isAscending)
-                    blockColumns.addLast(column);
-                else
+                if (reversed)
                     blockColumns.addFirst(column);
+                else
+                    blockColumns.addLast(column);
             }
 
-            if (isAscending)
-                curRangeIndex++;
-            else
+            if (reversed)
                 curRangeIndex--;
+            else
+                curRangeIndex++;
             return true;
         }
 

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java Mon Aug 10 23:17:08 2009
@@ -16,15 +16,15 @@
 public class SliceQueryFilter extends QueryFilter
 {
     public final byte[] start, finish;
-    public final boolean isAscending;
+    public final boolean reversed;
     public final int count;
 
-    public SliceQueryFilter(String key, QueryPath columnParent, byte[] start, byte[] finish, boolean ascending, int count)
+    public SliceQueryFilter(String key, QueryPath columnParent, byte[] start, byte[] finish, boolean reversed, int count)
     {
         super(key, columnParent);
         this.start = start;
         this.finish = finish;
-        isAscending = ascending;
+        this.reversed = reversed;
         this.count = count;
     }
 
@@ -35,21 +35,21 @@
 
     public ColumnIterator getSSTableColumnIterator(SSTableReader sstable, AbstractType comparator) throws IOException
     {
-        return new SSTableSliceIterator(sstable.getFilename(), key, comparator, start, isAscending);
+        return new SSTableSliceIterator(sstable.getFilename(), key, comparator, start, reversed);
     }
 
     public SuperColumn filterSuperColumn(SuperColumn superColumn, int gcBefore)
     {
         SuperColumn scFiltered = superColumn.cloneMeShallow();
         Iterator<IColumn> subcolumns;
-        if (isAscending)
+        if (reversed)
         {
-            subcolumns = superColumn.getSubColumns().iterator();
+            List<IColumn> columnsAsList = new ArrayList<IColumn>(superColumn.getSubColumns());
+            subcolumns = new ReverseListIterator(columnsAsList);
         }
         else
         {
-            List<IColumn> columnsAsList = new ArrayList<IColumn>(superColumn.getSubColumns());
-            subcolumns = new ReverseListIterator(columnsAsList);
+            subcolumns = superColumn.getSubColumns().iterator();
         }
         collectReducedColumns(scFiltered, subcolumns, gcBefore);
         return scFiltered;
@@ -58,7 +58,7 @@
     @Override
     public Comparator<IColumn> getColumnComparator(AbstractType comparator)
     {
-        return isAscending ? super.getColumnComparator(comparator) : new ReverseComparator(super.getColumnComparator(comparator));
+        return reversed ? new ReverseComparator(super.getColumnComparator(comparator)) : super.getColumnComparator(comparator);
     }
 
     public void collectReducedColumns(IColumnContainer container, Iterator<IColumn> reducedColumns, int gcBefore)
@@ -72,8 +72,8 @@
             if (liveColumns >= count)
                 break;
             if (finish.length > 0
-                && ((isAscending && comparator.compare(column.name(), finish) > 0))
-                    || (!isAscending && comparator.compare(column.name(), finish) < 0))
+                && ((!reversed && comparator.compare(column.name(), finish) > 0))
+                    || (reversed && comparator.compare(column.name(), finish) < 0))
                 break;
 
             if (!column.isMarkedForDelete())

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IndexHelper.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IndexHelper.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IndexHelper.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/io/IndexHelper.java Mon Aug 10 23:17:08 2009
@@ -124,9 +124,9 @@
      * the index of the IndexInfo in which @name will be found.
      * If the index is @indexList.size(), the @name appears nowhere.
      */
-    public static int indexFor(byte[] name, List<IndexInfo> indexList, AbstractType comparator, boolean ascending)
+    public static int indexFor(byte[] name, List<IndexInfo> indexList, AbstractType comparator, boolean reversed)
     {
-        if (name.length == 0 && !ascending)
+        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));

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/CassandraServer.java Mon Aug 10 23:17:08 2009
@@ -171,12 +171,7 @@
     private List<ColumnOrSuperColumn> getSlice(ReadCommand command, int consistency_level) throws InvalidRequestException
     {
         ColumnFamily cfamily = readColumnFamily(command, consistency_level);
-        boolean reverseOrder = false;
-
-        if (command instanceof SliceFromReadCommand)
-        {
-            reverseOrder = !((SliceFromReadCommand)command).isAscending;
-        }
+        boolean reverseOrder = command instanceof SliceFromReadCommand && ((SliceFromReadCommand)command).reversed;
 
         if (cfamily == null || cfamily.getColumnsMap().size() == 0)
         {

Modified: incubator/cassandra/trunk/test/system/test_server.py
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/system/test_server.py?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/system/test_server.py (original)
+++ incubator/cassandra/trunk/test/system/test_server.py Mon Aug 10 23:17:08 2009
@@ -53,7 +53,7 @@
     client.batch_insert('Keyspace1', BatchMutation(key='key1', cfmap=cfmap), consistencyLevel)
 
 def _big_slice(keyspace, key, column_parent):
-    p = SlicePredicate(slice_range=SliceRange('', '', True, 1000))
+    p = SlicePredicate(slice_range=SliceRange('', '', False, 1000))
     return client.get_slice(keyspace, key, column_parent, p, ConsistencyLevel.ONE)
 
 def _verify_batch():
@@ -81,23 +81,23 @@
     time.sleep(0.1)
 
 def _verify_range():
-    p = SlicePredicate(slice_range=SliceRange('c1', 'c2', True, 1000))
+    p = SlicePredicate(slice_range=SliceRange('c1', 'c2', False, 1000))
     result = client.get_slice('Keyspace1','key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE)
     assert len(result) == 2
     assert result[0].column.name == 'c1'
     assert result[1].column.name == 'c2'
 
-    p = SlicePredicate(slice_range=SliceRange('c3', 'c2', False, 1000))
+    p = SlicePredicate(slice_range=SliceRange('c3', 'c2', True, 1000))
     result = client.get_slice('Keyspace1','key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE)
     assert len(result) == 2
     assert result[0].column.name == 'c3'
     assert result[1].column.name == 'c2'
 
-    p = SlicePredicate(slice_range=SliceRange('a', 'z', True, 1000))
+    p = SlicePredicate(slice_range=SliceRange('a', 'z', False, 1000))
     result = client.get_slice('Keyspace1','key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE)
     assert len(result) == 3, result
     
-    p = SlicePredicate(slice_range=SliceRange('a', 'z', True, 2))
+    p = SlicePredicate(slice_range=SliceRange('a', 'z', False, 2))
     result = client.get_slice('Keyspace1','key1', ColumnParent('Standard1'), p, ConsistencyLevel.ONE)
     assert len(result) == 2, result
 	 	
@@ -109,13 +109,13 @@
     time.sleep(0.1)
 
 def _verify_super_range():
-    p = SlicePredicate(slice_range=SliceRange('sc2', 'sc3', True, 2))
+    p = SlicePredicate(slice_range=SliceRange('sc2', 'sc3', False, 2))
     result = client.get_slice('Keyspace1', 'key1', ColumnParent('Super1'), p, ConsistencyLevel.ONE)
     assert len(result) == 2
     assert result[0].super_column.name == 'sc2'
     assert result[1].super_column.name == 'sc3'
 
-    p = SlicePredicate(slice_range=SliceRange('sc3', 'sc2', False, 2))
+    p = SlicePredicate(slice_range=SliceRange('sc3', 'sc2', True, 2))
     result = client.get_slice('Keyspace1', 'key1', ColumnParent('Super1'), p, ConsistencyLevel.ONE)
     assert len(result) == 2
     assert result[0].super_column.name == 'sc3'
@@ -169,12 +169,12 @@
 
     def test_super_subcolumn_limit(self):
         _insert_super()
-        p = SlicePredicate(slice_range=SliceRange('', '', True, 1))
+        p = SlicePredicate(slice_range=SliceRange('', '', False, 1))
         column_parent = ColumnParent('Super1', 'sc2')
         slice = [result.column
                  for result in client.get_slice('Keyspace1', 'key1', column_parent, p, ConsistencyLevel.ONE)]
         assert slice == [Column(_i64(5), 'value5', 0)], slice
-        p = SlicePredicate(slice_range=SliceRange('', '', False, 1))
+        p = SlicePredicate(slice_range=SliceRange('', '', True, 1))
         slice = [result.column
                  for result in client.get_slice('Keyspace1', 'key1', column_parent, p, ConsistencyLevel.ONE)]
         assert slice == [Column(_i64(6), 'value6', 0)], slice

Modified: incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java (original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java Mon Aug 10 23:17:08 2009
@@ -82,7 +82,7 @@
                 cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard3"), new TreeSet<byte[]>()));
                 assertColumns(cf);
 
-                cf = cfStore.getColumnFamily(new SliceQueryFilter(TEST_KEY, new QueryPath("Standard3"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 0));
+                cf = cfStore.getColumnFamily(new SliceQueryFilter(TEST_KEY, new QueryPath("Standard3"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 0));
                 assertColumns(cf);
 
                 cf = cfStore.getColumnFamily(new NamesQueryFilter(TEST_KEY, new QueryPath("Standard3"), "col99".getBytes()));
@@ -137,16 +137,16 @@
         rm.add(cf);
         rm.apply();
         
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "c".getBytes(), true, 100);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "c".getBytes(), false, 100);
         assertEquals(2, cf.getColumnCount());
         
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "b".getBytes(), true, 100);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "b".getBytes(), false, 100);
         assertEquals(1, cf.getColumnCount());
         
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "c".getBytes(), true, 1);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "b".getBytes(), "c".getBytes(), false, 1);
         assertEquals(1, cf.getColumnCount());
         
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "c".getBytes(), "b".getBytes(), true, 1);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "c".getBytes(), "b".getBytes(), false, 1);
         assertNull(cf);
     }
 
@@ -176,11 +176,11 @@
         ColumnFamily cf;
 
         // key before the rows that exists
-        cf = cfStore.getColumnFamily("a", new QueryPath("Standard2"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 1);
+        cf = cfStore.getColumnFamily("a", new QueryPath("Standard2"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 1);
         assertColumns(cf);
 
         // key after the rows that exist
-        cf = cfStore.getColumnFamily("z", new QueryPath("Standard2"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 1);
+        cf = cfStore.getColumnFamily("z", new QueryPath("Standard2"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 1);
         assertColumns(cf);
     }
 
@@ -213,26 +213,26 @@
             {
                 ColumnFamily cf;
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
                 assertColumns(cf, "col5", "col7");
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col4".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col4".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
                 assertColumns(cf, "col4", "col5", "col7");
                 assertColumns(ColumnFamilyStore.removeDeleted(cf, Integer.MAX_VALUE), "col5", "col7");
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col5".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
                 assertColumns(cf, "col3", "col4", "col5");
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col6".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col6".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
                 assertColumns(cf, "col3", "col4", "col5");
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
                 assertColumns(cf, "col7", "col9");
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col95".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col95".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
                 assertColumns(cf);
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col0".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 2);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col0".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 2);
                 assertColumns(cf);
             }
         };
@@ -274,7 +274,7 @@
             {
                 ColumnFamily cf;
 
-                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col2".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
+                cf = cfStore.getColumnFamily(ROW, new QueryPath("Standard1"), "col2".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
                 assertColumns(cf, "col2", "col3", "col4");
                 assertEquals(new String(cf.getColumn("col2".getBytes()).value()), "valx");
                 assertEquals(new String(cf.getColumn("col3".getBytes()).value()), "valx");
@@ -322,19 +322,19 @@
     {
         String key = "row3";
         ColumnFamily cf;
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
         assertColumns(cf, "col1000", "col1001", "col1002");
         assertEquals(new String(cf.getColumn("col1000".getBytes()).value()), "v1000");
         assertEquals(new String(cf.getColumn("col1001".getBytes()).value()), "v1001");
         assertEquals(new String(cf.getColumn("col1002".getBytes()).value()), "v1002");
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1195".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1195".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
         assertColumns(cf, "col1195", "col1196", "col1197");
         assertEquals(new String(cf.getColumn("col1195".getBytes()).value()), "v1195");
         assertEquals(new String(cf.getColumn("col1196".getBytes()).value()), "v1196");
         assertEquals(new String(cf.getColumn("col1197".getBytes()).value()), "v1197");
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1996".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 1000);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1996".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 1000);
         IColumn[] columns = cf.getSortedColumns().toArray(new IColumn[0]);
         for (int i = 1000; i < 1996; i++)
         {
@@ -344,22 +344,22 @@
             assert Arrays.equals(column.value(), ("v" + i).getBytes());
         }
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1990".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col1990".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
         assertColumns(cf, "col1990", "col1991", "col1992");
         assertEquals(new String(cf.getColumn("col1990".getBytes()).value()), "v1990");
         assertEquals(new String(cf.getColumn("col1991".getBytes()).value()), "v1991");
         assertEquals(new String(cf.getColumn("col1992".getBytes()).value()), "v1992");
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
         assertColumns(cf, "col1997", "col1998", "col1999");
         assertEquals(new String(cf.getColumn("col1999".getBytes()).value()), "v1999");
         assertEquals(new String(cf.getColumn("col1998".getBytes()).value()), "v1998");
         assertEquals(new String(cf.getColumn("col1997".getBytes()).value()), "v1997");
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col9000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col9000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
         assertColumns(cf, "col1997", "col1998", "col1999");
 
-        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col9000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, true, 3);
+        cf = cfStore.getColumnFamily(key, new QueryPath("Standard1"), "col9000".getBytes(), ArrayUtils.EMPTY_BYTE_ARRAY, false, 3);
         assertColumns(cf);
     }
 
@@ -383,7 +383,7 @@
         {
             public void run() throws Exception
             {
-                ColumnFamily cf = cfStore.getColumnFamily(ROW, new QueryPath("Super1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 10);
+                ColumnFamily cf = cfStore.getColumnFamily(ROW, new QueryPath("Super1"), ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, false, 10);
                 assertColumns(cf, "sc1");
                 assertEquals(new String(cf.getColumn("sc1".getBytes()).getSubColumn(getBytes(1)).value()), "val1");
             }

Modified: incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java?rev=802953&r1=802952&r2=802953&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java (original)
+++ incubator/cassandra/trunk/test/unit/org/apache/cassandra/db/TimeSortTest.java Mon Aug 10 23:17:08 2009
@@ -50,7 +50,7 @@
         rm.add(new QueryPath("StandardLong1", null, getBytes(0)), "b".getBytes(), 0);
         rm.apply();
 
-        ColumnFamily cf = cfStore.getColumnFamily("key0", new QueryPath("StandardLong1"), getBytes(10), ArrayUtils.EMPTY_BYTE_ARRAY, true, 1000);
+        ColumnFamily cf = cfStore.getColumnFamily("key0", new QueryPath("StandardLong1"), getBytes(10), ArrayUtils.EMPTY_BYTE_ARRAY, false, 1000);
         Collection<IColumn> columns = cf.getSortedColumns();
         assert columns.size() == 1;
     }
@@ -91,7 +91,7 @@
         rm.apply();
 
         // verify
-        ColumnFamily cf = cfStore.getColumnFamily(key, new QueryPath("StandardLong1"), getBytes(0), ArrayUtils.EMPTY_BYTE_ARRAY, true, 1000);
+        ColumnFamily cf = cfStore.getColumnFamily(key, new QueryPath("StandardLong1"), getBytes(0), ArrayUtils.EMPTY_BYTE_ARRAY, false, 1000);
         Collection<IColumn> columns = cf.getSortedColumns();
         assertEquals(12, columns.size());
         Iterator<IColumn> iter = columns.iterator();
@@ -116,7 +116,7 @@
             String key = Integer.toString(i);
             for (int j = 0; j < 8; j += 3)
             {
-                ColumnFamily cf = table.getColumnFamilyStore("StandardLong1").getColumnFamily(key, new QueryPath("StandardLong1"), getBytes(j * 2), ArrayUtils.EMPTY_BYTE_ARRAY, true, 1000);
+                ColumnFamily cf = table.getColumnFamilyStore("StandardLong1").getColumnFamily(key, new QueryPath("StandardLong1"), getBytes(j * 2), ArrayUtils.EMPTY_BYTE_ARRAY, false, 1000);
                 Collection<IColumn> columns = cf.getSortedColumns();
                 assert columns.size() == 8 - j;
                 int k = j;