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 2010/06/16 17:27:40 UTC
svn commit: r955272 - in
/cassandra/trunk/src/java/org/apache/cassandra/io/sstable:
SSTableIdentityIterator.java SSTableScanner.java
Author: jbellis
Date: Wed Jun 16 15:27:40 2010
New Revision: 955272
URL: http://svn.apache.org/viewvc?rev=955272&view=rev
Log:
do more in constructor of SSTableIdentityIterator to reduce the number of methods that have to seek
patch by jbellis; reviewed by Stu Hood for CASSANDRA-16
Modified:
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableScanner.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java?rev=955272&r1=955271&r2=955272&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableIdentityIterator.java Wed Jun 16 15:27:40 2010
@@ -22,7 +22,6 @@ package org.apache.cassandra.io.sstable;
import java.io.*;
-import java.util.ArrayList;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.DecoratedKey;
@@ -35,10 +34,14 @@ public class SSTableIdentityIterator imp
private final DecoratedKey key;
private final long finishedAt;
private final BufferedRandomAccessFile file;
- private SSTableReader sstable;
- private long dataStart;
+ private final SSTableReader sstable;
+ private final long dataStart;
private final long dataSize;
+ private final ColumnFamily columnFamily;
+ private final int columnCount;
+ private final long columnPosition;
+
/**
* Used to iterate through the columns of a row.
* @param sstable SSTable we are reading ffrom.
@@ -57,6 +60,21 @@ public class SSTableIdentityIterator imp
this.dataStart = dataStart;
this.dataSize = dataSize;
finishedAt = dataStart + dataSize;
+
+ try
+ {
+ file.seek(this.dataStart);
+ IndexHelper.skipBloomFilter(file);
+ IndexHelper.skipIndex(file);
+ columnFamily = sstable.makeColumnFamily();
+ ColumnFamily.serializer().deserializeFromSSTableNoColumns(columnFamily, file);
+ columnCount = file.readInt();
+ columnPosition = file.getFilePointer();
+ }
+ catch (IOException e)
+ {
+ throw new IOError(e);
+ }
}
public DecoratedKey getKey()
@@ -64,97 +82,84 @@ public class SSTableIdentityIterator imp
return key;
}
- public String getPath()
- {
- return file.getPath();
- }
-
- public long getDataSize()
+ public ColumnFamily getColumnFamily()
{
- return dataSize;
+ return columnFamily;
}
- public void echoData(DataOutput out) throws IOException
+ public boolean hasNext()
{
- file.seek(dataStart);
- while (file.getFilePointer() < finishedAt)
- {
- out.write(file.readByte());
- }
+ return file.getFilePointer() < finishedAt;
}
- public ColumnFamily getColumnFamily()
+ public IColumn next()
{
- ColumnFamily cf;
try
{
- file.seek(dataStart);
- IndexHelper.skipBloomFilter(file);
- IndexHelper.skipIndex(file);
- cf = sstable.makeColumnFamily();
- ColumnFamily.serializer().deserializeFromSSTableNoColumns(cf, file);
+ return sstable.getColumnSerializer().deserialize(file);
}
catch (IOException e)
{
- throw new RuntimeException(e);
+ throw new IOError(e);
}
+ }
- return cf;
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
}
- public int getColumnCount()
+ public void close() throws IOException
{
- getColumnFamily(); // skips to column count
- try
- {
- return file.readInt();
- }
- catch (IOException e)
- {
- throw new IOError(e);
- }
+ // creator is responsible for closing file when finished
}
- public ColumnFamily getColumnFamilyWithColumns() throws IOException
+ public String getPath()
{
- ColumnFamily cf = getColumnFamily();
- ColumnFamily.serializer().deserializeColumns(file, cf);
- return cf;
+ return file.getPath();
}
- public boolean hasNext()
+ public long getDataSize()
{
- return file.getFilePointer() < finishedAt;
+ return dataSize;
}
- public IColumn next()
+ public void echoData(DataOutput out) throws IOException
{
- try
- {
- return sstable.getColumnSerializer().deserialize(file);
- }
- catch (IOException e)
+ file.seek(dataStart);
+ while (file.getFilePointer() < finishedAt)
{
- throw new IOError(e);
+ out.write(file.readByte());
}
}
- public void remove()
+ public int getColumnCount()
{
- throw new UnsupportedOperationException();
+ return columnCount;
}
- public int compareTo(SSTableIdentityIterator o)
+ public ColumnFamily getColumnFamilyWithColumns() throws IOException
{
- return key.compareTo(o.key);
+ file.seek(columnPosition - 4); // seek to before column count int
+ ColumnFamily cf = columnFamily.cloneMeShallow();
+ ColumnFamily.serializer().deserializeColumns(file, cf);
+ return cf;
}
- public void reset()
+ public int compareTo(SSTableIdentityIterator o)
{
- getColumnCount();
+ return key.compareTo(o.key);
}
- public void close() throws IOException
+ public void reset()
{
+ try
+ {
+ file.seek(columnPosition);
+ }
+ catch (IOException e)
+ {
+ throw new IOError(e);
+ }
}
}
\ No newline at end of file
Modified: cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableScanner.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableScanner.java?rev=955272&r1=955271&r2=955272&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableScanner.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableScanner.java Wed Jun 16 15:27:40 2010
@@ -176,7 +176,6 @@ public class SSTableScanner implements I
if (filter == null)
{
row = new SSTableIdentityIterator(sstable, file, key, dataStart, dataSize);
- ((SSTableIdentityIterator)row).reset();
return row;
}
else