Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestScanner.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestScanner.java (revision 1182097) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestScanner.java (working copy) @@ -110,9 +110,11 @@ InternalScanner s = r.getScanner(scan); int count = 0; - while (s.next(results)) { + boolean hasMore; + do { + hasMore = s.next(results); count++; - } + } while (hasMore); s.close(); assertEquals(0, count); // Now do something a bit more imvolved. @@ -373,7 +375,9 @@ scan.addColumn(COLS[0], EXPLICIT_COLS[ii]); } scanner = r.getScanner(scan); - while (scanner.next(results)) { + boolean hasMore; + do { + hasMore = scanner.next(results); assertTrue(hasColumn(results, HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER)); byte [] val = getColumn(results, HConstants.CATALOG_FAMILY, @@ -400,7 +404,7 @@ String server = Bytes.toString(val); assertEquals(0, server.compareTo(serverName)); } - } + } while (hasMore); } finally { InternalScanner s = scanner; scanner = null; Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java (revision 1182097) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java (working copy) @@ -29,13 +29,14 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseTestCase; import org.apache.hadoop.hbase.HConstants; -import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.Delete; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.Scan; +import org.apache.hadoop.hbase.client.TestGet; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Writables; import org.apache.hadoop.hdfs.MiniDFSCluster; @@ -94,10 +95,12 @@ InternalScanner s = mr.getScanner(new Scan()); try { List keys = new ArrayList(); - while(s.next(keys)) { + boolean hasMore; + do { + hasMore = s.next(keys); LOG.info(keys); keys.clear(); - } + } while (hasMore); } finally { s.close(); } @@ -117,10 +120,12 @@ s = mr.getScanner(scan); try { List keys = new ArrayList(); - while (s.next(keys)) { + boolean hasMore; + do { + hasMore = s.next(keys); mr.delete(new Delete(keys.get(0).getRow()), null, false); keys.clear(); - } + } while (hasMore); } finally { s.close(); } Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java (revision 1182097) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestMemStore.java (working copy) @@ -26,8 +26,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.NavigableSet; -import java.util.TreeSet; import java.util.concurrent.atomic.AtomicReference; import junit.framework.TestCase; @@ -39,7 +37,6 @@ import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.KeyValueTestUtil; -import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; @@ -93,13 +90,15 @@ this.memstore.comparator, null, memstorescanners); int count = 0; try { - while (s.next(result)) { + boolean hasMore; + do { + hasMore = s.next(result); LOG.info(result); count++; // Row count is same as column count. assertEquals(rowCount, result.size()); result.clear(); - } + } while (hasMore); } finally { s.close(); } @@ -558,7 +557,7 @@ Integer.MAX_VALUE, this.memstore.comparator, null, memstore.getScanners()); List results = new ArrayList(); - for (int i = 0; scanner.next(results); i++) { + for (int i = 0; scanner.next(results) || !results.isEmpty(); i++) { int rowId = startRowId + i; assertTrue("Row name", KeyValue.COMPARATOR.compareRows(results.get(0), Index: src/main/java/org/apache/hadoop/hbase/util/HMerge.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/util/HMerge.java (revision 1182097) +++ src/main/java/org/apache/hadoop/hbase/util/HMerge.java (working copy) @@ -19,6 +19,12 @@ */ package org.apache.hadoop.hbase.util; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Random; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -44,12 +50,6 @@ import org.apache.hadoop.hbase.regionserver.InternalScanner; import org.apache.hadoop.hbase.regionserver.wal.HLog; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.NoSuchElementException; -import java.util.Random; - /** * A non-instantiable class that has a static method capable of compacting * a table by merging adjacent regions. @@ -370,14 +370,16 @@ try { List results = new ArrayList(); - while(rootScanner.next(results)) { + boolean hasMore; + do { + hasMore = rootScanner.next(results); for(KeyValue kv: results) { HRegionInfo info = Writables.getHRegionInfoOrNull(kv.getValue()); if (info != null) { metaRegions.add(info); } } - } + } while (hasMore); } finally { rootScanner.close(); try { Index: src/main/java/org/apache/hadoop/hbase/regionserver/Store.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/Store.java (revision 1182097) +++ src/main/java/org/apache/hadoop/hbase/regionserver/Store.java (working copy) @@ -52,8 +52,8 @@ import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.ClassSize; +import org.apache.hadoop.hbase.util.CollectionBackedScanner; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; -import org.apache.hadoop.hbase.util.CollectionBackedScanner; import org.apache.hadoop.util.StringUtils; import com.google.common.base.Preconditions; @@ -1148,7 +1148,9 @@ // we have to use a do/while loop. ArrayList kvs = new ArrayList(); // Limit to "hbase.hstore.compaction.kv.max" (default 10) to avoid OOME - while (scanner.next(kvs,this.compactionKVMax)) { + boolean hasMore; + do { + hasMore = scanner.next(kvs, this.compactionKVMax); if (writer == null && !kvs.isEmpty()) { writer = createWriterInTmp(maxKeyCount, this.compactionCompression); @@ -1178,7 +1180,7 @@ } } kvs.clear(); - } + } while (hasMore); } finally { if (scanner != null) { scanner.close();