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/05/08 16:54:27 UTC

svn commit: r773017 - /incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java

Author: jbellis
Date: Fri May  8 14:54:27 2009
New Revision: 773017

URL: http://svn.apache.org/viewvc?rev=773017&view=rev
Log:
fix iteration bug.  it would always return hasNext=false if seekTo was called first.  fixing this with maybeInit proved difficult, so init is now done in constructor and iterator itself is created lazily.
patch by jbellis; tested by nk11 for CASSANDRA-153

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java?rev=773017&r1=773016&r2=773017&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/FileStruct.java Fri May  8 14:54:27 2009
@@ -37,7 +37,7 @@
     private DataInputBuffer bufIn;
     private DataOutputBuffer bufOut;
     private IPartitioner partitioner;
-    private FileStructIterator iterator = new FileStructIterator();
+    private FileStructIterator iterator;
 
     public FileStruct(IFileReader reader, IPartitioner partitioner)
     {
@@ -150,12 +150,16 @@
 
     public boolean hasNext()
     {
+        if (iterator == null)
+            iterator = new FileStructIterator();
         return iterator.hasNext();
     }
 
     /** do not mix with manual calls to advance(). */
     public String next()
     {
+        if (iterator == null)
+            iterator = new FileStructIterator();
         return iterator.next();
     }
 
@@ -168,6 +172,18 @@
     {
         String saved;
 
+        public FileStructIterator()
+        {
+            if (key == null)
+            {
+                if (!isExhausted())
+                {
+                    forward();
+                }
+            }
+            saved = key;
+        }
+
         private void forward()
         {
             try
@@ -181,23 +197,13 @@
             saved = isExhausted() ? null : key;
         }
 
-        private void maybeInit()
-        {
-            if (key == null && !isExhausted())
-            {
-                forward();
-            }
-        }
-
         public boolean hasNext()
         {
-            maybeInit();
             return saved != null;
         }
 
         public String next()
         {
-            maybeInit();
             if (saved == null)
             {
                 throw new IndexOutOfBoundsException();