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