Author: jbellis Date: Mon Feb 28 08:05:51 2011 New Revision: 1075231 URL: http://svn.apache.org/viewvc?rev=1075231&view=rev Log: cache IColumn and reverse comparators in AbstractType patch by jbellis; reviewed by slebresne for CASSANDRA-2075
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/avro/AvroValidation.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/QueryFilter.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/avro/AvroValidation.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/avro/AvroValidation.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/avro/AvroValidation.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/avro/AvroValidation.java Mon Feb 28 08:05:51 2011 @@ -203,7 +203,7 @@ public class AvroValidation if (range.count < 0) throw newInvalidRequestException("Ranges require a non-negative count."); - Comparator<ByteBuffer> orderedComparator = range.reversed ? comparator.getReverseComparator() : comparator; + Comparator<ByteBuffer> orderedComparator = range.reversed ? comparator.reverseComparator : comparator; if (range.start.remaining() > 0 && range.finish.remaining() > 0 && orderedComparator.compare(range.start, range.finish) > 0) throw newInvalidRequestException("range finish must come after start in the order of traversal"); } Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/NamesQueryFilter.java Mon Feb 28 08:05:51 2011 @@ -26,7 +26,6 @@ import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; -import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.*; import org.apache.cassandra.db.columniterator.IColumnIterator; import org.apache.cassandra.db.columniterator.SSTableNamesIterator; @@ -88,6 +87,6 @@ public class NamesQueryFilter implements public Comparator<IColumn> getColumnComparator(AbstractType comparator) { - return QueryFilter.getColumnComparator(comparator); + return comparator.columnComparator; } } Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/QueryFilter.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/QueryFilter.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/QueryFilter.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/QueryFilter.java Mon Feb 28 08:05:51 2011 @@ -88,18 +88,6 @@ public class QueryFilter return superFilter.getSSTableColumnIterator(sstable, file, key); } - // here so it can be used by SQF and NQF. non-package callers should call IFilter.getColumnComparator - static Comparator<IColumn> getColumnComparator(final Comparator<ByteBuffer> comparator) - { - return new Comparator<IColumn>() - { - public int compare(IColumn c1, IColumn c2) - { - return comparator.compare(c1.name(), c2.name()); - } - }; - } - public void collectCollatedColumns(final ColumnFamily returnCF, Iterator<IColumn> collatedColumns, final int gcBefore) { // define a 'reduced' iterator that merges columns w/ the same name, which Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/filter/SliceQueryFilter.java Mon Feb 28 08:05:51 2011 @@ -28,12 +28,10 @@ import java.util.Iterator; import java.util.List; import org.apache.commons.collections.IteratorUtils; -import org.apache.commons.collections.comparators.ReverseComparator; import org.apache.commons.collections.iterators.ReverseListIterator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.*; import org.apache.cassandra.db.columniterator.IColumnIterator; import org.apache.cassandra.db.columniterator.SSTableSliceIterator; @@ -90,7 +88,7 @@ public class SliceQueryFilter implements } // iterate until we get to the "real" start column - Comparator<ByteBuffer> comparator = reversed ? superColumn.getComparator().getReverseComparator() : superColumn.getComparator(); + Comparator<ByteBuffer> comparator = reversed ? superColumn.getComparator().reverseComparator : superColumn.getComparator(); while (subcolumns.hasNext()) { IColumn column = subcolumns.next(); @@ -107,7 +105,7 @@ public class SliceQueryFilter implements public Comparator<IColumn> getColumnComparator(AbstractType comparator) { - return reversed ? new ReverseComparator(QueryFilter.getColumnComparator(comparator)) : QueryFilter.getColumnComparator(comparator); + return reversed ? comparator.columnReverseComparator : comparator.columnComparator; } public void collectReducedColumns(IColumnContainer container, Iterator<IColumn> reducedColumns, int gcBefore) Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AbstractType.java Mon Feb 28 08:05:51 2011 @@ -40,42 +40,41 @@ public abstract class AbstractType imple { public final Comparator<IndexInfo> indexComparator; public final Comparator<IndexInfo> indexReverseComparator; + public final Comparator<IColumn> columnComparator; + public final Comparator<IColumn> columnReverseComparator; + public final Comparator<ByteBuffer> reverseComparator; protected AbstractType() { - final AbstractType that = this; indexComparator = new Comparator<IndexInfo>() { public int compare(IndexInfo o1, IndexInfo o2) { - return that.compare(o1.lastName, o2.lastName); + return AbstractType.this.compare(o1.lastName, o2.lastName); } }; indexReverseComparator = new Comparator<IndexInfo>() { public int compare(IndexInfo o1, IndexInfo o2) { - return that.compare(o1.firstName, o2.firstName); + return AbstractType.this.compare(o1.firstName, o2.firstName); } }; - } - - /** get a string representation of the bytes suitable for log messages */ - public abstract String getString(ByteBuffer bytes); - - /** get a byte representation of the given string. - * defaults to unsupportedoperation so people deploying custom Types can update at their leisure. */ - public ByteBuffer fromString(String source) - { - throw new UnsupportedOperationException(); - } - - /* validate that the byte array is a valid sequence for the type we are supposed to be comparing */ - public abstract void validate(ByteBuffer bytes) throws MarshalException; - - public Comparator<ByteBuffer> getReverseComparator() - { - return new Comparator<ByteBuffer>() + columnComparator = new Comparator<IColumn>() + { + public int compare(IColumn c1, IColumn c2) + { + return AbstractType.this.compare(c1.name(), c2.name()); + } + }; + columnReverseComparator = new Comparator<IColumn>() + { + public int compare(IColumn c1, IColumn c2) + { + return AbstractType.this.compare(c2.name(), c1.name()); + } + }; + reverseComparator = new Comparator<ByteBuffer>() { public int compare(ByteBuffer o1, ByteBuffer o2) { @@ -93,6 +92,25 @@ public abstract class AbstractType imple }; } + /** @deprecated; use reverseComparator field instead */ + public Comparator<ByteBuffer> getReverseComparator() + { + return reverseComparator; + } + + /** get a string representation of the bytes suitable for log messages */ + public abstract String getString(ByteBuffer bytes); + + /** get a byte representation of the given string. + * defaults to unsupportedoperation so people deploying custom Types can update at their leisure. */ + public ByteBuffer fromString(String source) + { + throw new UnsupportedOperationException(); + } + + /* validate that the byte array is a valid sequence for the type we are supposed to be comparing */ + public abstract void validate(ByteBuffer bytes) throws MarshalException; + /* convenience method */ public String getString(Collection<ByteBuffer> names) { Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1075231&r1=1075230&r2=1075231&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java Mon Feb 28 08:05:51 2011 @@ -207,7 +207,7 @@ public class ThriftValidation if (range.count < 0) throw new InvalidRequestException("get_slice requires non-negative count"); - Comparator<ByteBuffer> orderedComparator = range.isReversed() ? comparator.getReverseComparator() : comparator; + Comparator<ByteBuffer> orderedComparator = range.isReversed() ? comparator.reverseComparator : comparator; if (range.start.remaining() > 0 && range.finish.remaining() > 0 && orderedComparator.compare(range.start, range.finish) > 0)