Return-Path: Delivered-To: apmail-incubator-cassandra-commits-archive@minotaur.apache.org Received: (qmail 60124 invoked from network); 7 Aug 2009 16:24:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 7 Aug 2009 16:24:30 -0000 Received: (qmail 79768 invoked by uid 500); 7 Aug 2009 16:24:38 -0000 Delivered-To: apmail-incubator-cassandra-commits-archive@incubator.apache.org Received: (qmail 79731 invoked by uid 500); 7 Aug 2009 16:24:38 -0000 Mailing-List: contact cassandra-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: cassandra-dev@incubator.apache.org Delivered-To: mailing list cassandra-commits@incubator.apache.org Received: (qmail 79721 invoked by uid 99); 7 Aug 2009 16:24:38 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Aug 2009 16:24:38 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Aug 2009 16:24:33 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B4F0B23888BB; Fri, 7 Aug 2009 16:24:12 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r802073 - in /incubator/cassandra/trunk/src/java/org/apache/cassandra: db/ColumnIndexer.java db/filter/SSTableNamesIterator.java db/filter/SSTableSliceIterator.java db/filter/SliceQueryFilter.java io/IndexHelper.java Date: Fri, 07 Aug 2009 16:24:12 -0000 To: cassandra-commits@incubator.apache.org From: jbellis@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090807162412.B4F0B23888BB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jbellis Date: Fri Aug 7 16:24:12 2009 New Revision: 802073 URL: http://svn.apache.org/viewvc?rev=802073&view=rev Log: move comparator out of IndexInfo patch by jbellis; reviewed by Jun Rao for CASSANDRA-332 Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnIndexer.java incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.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 Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnIndexer.java URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnIndexer.java?rev=802073&r1=802072&r2=802073&view=diff ============================================================================== --- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnIndexer.java (original) +++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnIndexer.java Fri Aug 7 16:24:12 2009 @@ -129,7 +129,7 @@ /* if we hit the column index size that we have to index after, go ahead and index it. */ if (endPosition - startPosition >= DatabaseDescriptor.getColumnIndexSize()) { - IndexHelper.IndexInfo cIndexInfo = new IndexHelper.IndexInfo(firstColumn.name(), column.name(), startPosition, endPosition - startPosition, null); + IndexHelper.IndexInfo cIndexInfo = new IndexHelper.IndexInfo(firstColumn.name(), column.name(), startPosition, endPosition - startPosition); indexList.add(cIndexInfo); indexSizeInBytes += cIndexInfo.serializedSize(); firstColumn = null; @@ -138,7 +138,7 @@ // the last column may have fallen on an index boundary already. if not, index it explicitly. if (indexList.isEmpty() || comparator.compare(indexList.get(indexList.size() - 1).lastName, column.name()) != 0) { - IndexHelper.IndexInfo cIndexInfo = new IndexHelper.IndexInfo(firstColumn.name(), column.name(), startPosition, endPosition - startPosition, null); + IndexHelper.IndexInfo cIndexInfo = new IndexHelper.IndexInfo(firstColumn.name(), column.name(), startPosition, endPosition - startPosition); indexList.add(cIndexInfo); indexSizeInBytes += cIndexInfo.serializedSize(); } Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java?rev=802073&r1=802072&r2=802073&view=diff ============================================================================== --- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java (original) +++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableNamesIterator.java Fri Aug 7 16:24:12 2009 @@ -5,7 +5,9 @@ import org.apache.cassandra.db.ColumnFamily; import org.apache.cassandra.db.IColumn; +import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.io.*; +import org.apache.cassandra.config.DatabaseDescriptor; public class SSTableNamesIterator extends SimpleAbstractColumnIterator { @@ -37,16 +39,17 @@ /* Read the bloom filter summarizing the columns */ IndexHelper.defreezeBloomFilter(file); - List indexList = IndexHelper.deserializeIndex(ssTable.getTableName(), cfName, file); + List indexList = IndexHelper.deserializeIndex(file); cf = ColumnFamily.serializer().deserializeEmpty(file); file.readInt(); // column count /* get the various column ranges we have to read */ - SortedSet ranges = new TreeSet(); + AbstractType comparator = DatabaseDescriptor.getComparator(SSTable.parseTableName(filename), cfName); + SortedSet ranges = new TreeSet(IndexHelper.getComparator(comparator)); for (byte[] name : columns) { - ranges.add(indexList.get(IndexHelper.indexFor(name, indexList))); + ranges.add(indexList.get(IndexHelper.indexFor(name, indexList, comparator))); } /* seek to the correct offset to the data */ 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=802073&r1=802072&r2=802073&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 Fri Aug 7 16:24:12 2009 @@ -3,8 +3,6 @@ import java.util.*; import java.io.IOException; -import org.apache.commons.lang.ArrayUtils; - import org.apache.cassandra.db.IColumn; import org.apache.cassandra.db.ColumnFamily; import org.apache.cassandra.db.marshal.AbstractType; @@ -20,12 +18,11 @@ protected boolean isAscending; private byte[] startColumn; private int curColumnIndex; - private ColumnFamily curCF = null; private ArrayList curColumns = new ArrayList(); private ColumnGroupReader reader; private AbstractType comparator; - public SSTableSliceIterator(String filename, String key, String cfName, AbstractType comparator, byte[] startColumn, boolean isAscending) + public SSTableSliceIterator(String filename, String key, AbstractType comparator, byte[] startColumn, boolean isAscending) throws IOException { this.isAscending = isAscending; @@ -33,10 +30,9 @@ /* Morph key into actual key based on the partition type. */ String decoratedKey = ssTable.getPartitioner().decorateKey(key); - AbstractType comparator1 = DatabaseDescriptor.getComparator(ssTable.getTableName(), cfName); long position = ssTable.getPosition(decoratedKey); if (position >= 0) - reader = new ColumnGroupReader(ssTable.getFilename(), decoratedKey, cfName, comparator1, startColumn, isAscending, position); + reader = new ColumnGroupReader(ssTable.getFilename(), decoratedKey, comparator, startColumn, isAscending, position); this.comparator = comparator; this.startColumn = startColumn; curColumnIndex = isAscending ? 0 : -1; @@ -64,8 +60,6 @@ private void getColumnsFromBuffer() throws IOException { - if (curCF == null) - curCF = reader.getEmptyColumnFamily().cloneMeShallow(); curColumns.clear(); while (true) { @@ -84,7 +78,7 @@ public ColumnFamily getColumnFamily() { - return curCF; + return reader.getEmptyColumnFamily(); } protected IColumn computeNext() @@ -135,9 +129,6 @@ */ public static class ColumnGroupReader { - private String key_; - private String cfName_; - private AbstractType comparator_; private boolean isAscending_; private ColumnFamily emptyColumnFamily; @@ -147,27 +138,18 @@ private BufferedRandomAccessFile file_; private Queue blockColumns = new ArrayDeque(); - public ColumnGroupReader(String filename, String key, String cfName, AbstractType comparator, byte[] startColumn, boolean isAscending, long position) throws IOException + public ColumnGroupReader(String filename, String key, AbstractType comparator, byte[] startColumn, boolean isAscending, long position) throws IOException { this.file_ = new BufferedRandomAccessFile(filename, "r"); - this.cfName_ = cfName; - this.comparator_ = comparator; - this.key_ = key; this.isAscending_ = isAscending; - init(startColumn, position); - } - private void init(byte[] startColumn, long position) throws IOException - { file_.seek(position); String keyInDisk = file_.readUTF(); - assert keyInDisk.equals(key_); + assert keyInDisk.equals(key); file_.readInt(); // row size IndexHelper.skipBloomFilter(file_); - - /* read the index */ - indexList_ = IndexHelper.deserializeIndex(SSTableReader.parseTableName(file_.getPath()), cfName_, file_); + indexList_ = IndexHelper.deserializeIndex(file_); /* need to do two things here. * 1. move the file pointer to the beginning of the list of stored columns @@ -184,10 +166,7 @@ } else { - int index = Collections.binarySearch(indexList_, new IndexHelper.IndexInfo(startColumn, startColumn, 0, 0, comparator_)); - curRangeIndex_ = index < 0 ? -1 * (index + 1): index; - if (curRangeIndex_ < 0) - curRangeIndex_ = 0; + curRangeIndex_ = IndexHelper.indexFor(startColumn, indexList_, comparator); } } @@ -201,29 +180,24 @@ return blockColumns.poll(); } - private boolean getBlockFromCurIndex() throws IOException + public boolean getNextBlock() throws IOException { if (curRangeIndex_ < 0 || curRangeIndex_ >= indexList_.size()) return false; - IndexHelper.IndexInfo curColPostion = indexList_.get(curRangeIndex_); /* seek to the correct offset to the data, and calculate the data size */ + IndexHelper.IndexInfo curColPostion = indexList_.get(curRangeIndex_); file_.seek(columnStartPosition_ + curColPostion.offset); while (file_.getFilePointer() < columnStartPosition_ + curColPostion.offset + curColPostion.width) { blockColumns.add(emptyColumnFamily.getColumnSerializer().deserialize(file_)); } - return true; - } - public boolean getNextBlock() throws IOException - { - boolean result = getBlockFromCurIndex(); if (isAscending_) curRangeIndex_++; else curRangeIndex_--; - return result; + return true; } public void close() throws IOException 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=802073&r1=802072&r2=802073&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 Fri Aug 7 16:24:12 2009 @@ -33,7 +33,7 @@ public ColumnIterator getSSTableColumnIterator(SSTableReader sstable, AbstractType comparator) throws IOException { - return new SSTableSliceIterator(sstable.getFilename(), key, getColumnFamilyName(), comparator, start, isAscending); + return new SSTableSliceIterator(sstable.getFilename(), key, comparator, start, isAscending); } public void filterSuperColumn(SuperColumn superColumn, int gcBefore) 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=802073&r1=802072&r2=802073&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 Fri Aug 7 16:24:12 2009 @@ -89,16 +89,15 @@ * Deserialize the index into a structure and return the number of bytes read. * @throws IOException */ - public static ArrayList deserializeIndex(String tableName, String cfName, RandomAccessFile in) throws IOException + public static ArrayList deserializeIndex(RandomAccessFile in) throws IOException { ArrayList indexList = new ArrayList(); int columnIndexSize = in.readInt(); long start = in.getFilePointer(); - AbstractType comparator = DatabaseDescriptor.getComparator(tableName, cfName); while (in.getFilePointer() < start + columnIndexSize) { - indexList.add(IndexInfo.deserialize(in, comparator)); + indexList.add(IndexInfo.deserialize(in)); } assert in.getFilePointer() == start + columnIndexSize; @@ -121,33 +120,37 @@ return BloomFilter.serializer().deserialize(bufIn); } - public static int indexFor(byte[] name, List indexList) + public static int indexFor(byte[] name, List indexList, AbstractType comparator) { - IndexInfo target = new IndexInfo(name, name, 0, 0, indexList.get(0).comparator); - int index = Collections.binarySearch(indexList, target); + IndexInfo target = new IndexInfo(name, name, 0, 0); + int index = Collections.binarySearch(indexList, target, getComparator(comparator)); return index < 0 ? -1 * (index + 1) : index; } - public static class IndexInfo implements Comparable + public static Comparator getComparator(final AbstractType nameComparator) + { + return new Comparator() + { + public int compare(IndexInfo o1, IndexInfo o2) + { + return nameComparator.compare(o1.lastName, o2.lastName); + } + }; + } + + public static class IndexInfo { public final long width; public final byte[] lastName; - private AbstractType comparator; public final byte[] firstName; public final long offset; - public IndexInfo(byte[] firstName, byte[] lastName, long offset, long width, AbstractType comparator) + public IndexInfo(byte[] firstName, byte[] lastName, long offset, long width) { this.firstName = firstName; this.lastName = lastName; this.offset = offset; this.width = width; - this.comparator = comparator; - } - - public int compareTo(IndexInfo rhs) - { - return comparator.compare(lastName, rhs.lastName); } public void serialize(DataOutputStream dos) throws IOException @@ -163,9 +166,9 @@ return 2 + firstName.length + 2 + lastName.length + 8 + 8; } - public static IndexInfo deserialize(RandomAccessFile dis, AbstractType comparator) throws IOException + public static IndexInfo deserialize(RandomAccessFile dis) throws IOException { - return new IndexInfo(ColumnSerializer.readName(dis), ColumnSerializer.readName(dis), dis.readLong(), dis.readLong(), comparator); + return new IndexInfo(ColumnSerializer.readName(dis), ColumnSerializer.readName(dis), dis.readLong(), dis.readLong()); } }