You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/10/05 23:25:18 UTC

svn commit: r822024 - in /hadoop/hbase/trunk: ./ src/java/org/apache/hadoop/hbase/client/ src/java/org/apache/hadoop/hbase/master/ src/java/org/apache/hadoop/hbase/regionserver/

Author: stack
Date: Mon Oct  5 21:25:09 2009
New Revision: 822024

URL: http://svn.apache.org/viewvc?rev=822024&view=rev
Log:
HBASE-1832 Faster enable/disable/delete

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/ScannerCallable.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RetryableMetaOperation.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/TableOperation.java
    hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon Oct  5 21:25:09 2009
@@ -94,6 +94,7 @@
                away from the HBase cluster (Andrei Dragomir via Stack)
    HBASE-1879  ReadOnly transactions generate WAL activity (Clint Morgan via Stack)
    HBASE-1875  Compression test utility
+   HBASE-1832  Faster enable/disable/delete
 
   OPTIMIZATIONS
 

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Mon Oct  5 21:25:09 2009
@@ -330,16 +330,17 @@
     }
 
     // Wait until all regions are enabled
-    
-    for (int tries = 0;
-        (tries < numRetries) && (!isTableEnabled(tableName));
-        tries++) {
+    boolean enabled = false;
+    for (int tries = 0; tries < this.numRetries; tries++) {
+      enabled = isTableEnabled(tableName);
+      if (enabled) break;
+      long sleep = getPauseTime(tries);
       if (LOG.isDebugEnabled()) {
-        LOG.debug("Sleep. Waiting for all regions to be enabled from " +
-          Bytes.toString(tableName));
+        LOG.debug("Sleeping= " + sleep + "ms, waiting for all regions to be " +
+          "enabled in " + Bytes.toString(tableName));
       }
       try {
-        Thread.sleep(getPauseTime(tries));
+        Thread.sleep(sleep);
       } catch (InterruptedException e) {
         // continue
       }
@@ -348,8 +349,8 @@
           Bytes.toString(tableName));
       }
     }
-    if (!isTableEnabled(tableName))
-      throw new IOException("unable to enable table " +
+    if (!enabled)
+      throw new IOException("Unable to enable table " +
         Bytes.toString(tableName));
     LOG.info("Enabled table " + Bytes.toString(tableName));
   }
@@ -385,9 +386,10 @@
     }
 
     // Wait until all regions are disabled
-    for (int tries = 0;
-        (tries < numRetries) && (!isTableDisabled(tableName));
-        tries++) {
+    boolean disabled = false;
+    for (int tries = 0; tries < this.numRetries; tries++) {
+      disabled = isTableDisabled(tableName);
+      if (disabled) break;
       if (LOG.isDebugEnabled()) {
         LOG.debug("Sleep. Waiting for all regions to be disabled from " +
           Bytes.toString(tableName));
@@ -402,7 +404,7 @@
           Bytes.toString(tableName));
       }
     }
-    if (!isTableDisabled(tableName)) {
+    if (!disabled) {
       throw new RegionException("Retries exhausted, it took too long to wait"+
         " for the table " + Bytes.toString(tableName) + " to be disabled.");
     }

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/HConnectionManager.java Mon Oct  5 21:25:09 2009
@@ -450,8 +450,8 @@
      *   Returns true if all regions are offline
      *   Returns false in any other case
      */
-    private boolean testTableOnlineState(byte[] tableName, 
-        boolean online) throws IOException {
+    private boolean testTableOnlineState(byte[] tableName, boolean online)
+    throws IOException {
       if (!tableExists(tableName)) {
         throw new TableNotFoundException(Bytes.toString(tableName));
       }
@@ -459,7 +459,6 @@
         // The root region is always enabled
         return true;
       }
-      
       int rowsScanned = 0;
       int rowsOffline = 0;
       byte[] startKey =
@@ -468,6 +467,8 @@
       HRegionInfo currentRegion = null;
       Scan scan = new Scan(startKey);
       scan.addColumn(CATALOG_FAMILY, REGIONINFO_QUALIFIER);
+      int rows = this.conf.getInt("hbase.meta.scanner.caching", 100);
+      scan.setCaching(rows);
       ScannerCallable s = new ScannerCallable(this, 
           (Bytes.equals(tableName, HConstants.META_TABLE_NAME) ?
               HConstants.ROOT_TABLE_NAME : HConstants.META_TABLE_NAME), scan);
@@ -482,10 +483,14 @@
           currentRegion = s.getHRegionInfo();
           Result r = null;
           Result [] rrs = null;
-          while ((rrs = getRegionServerWithRetries(s)) != null) {
+          do {
+            rrs = getRegionServerWithRetries(s);
+            if (rrs == null || rrs.length == 0 || rrs[0].size() == 0) {
+              break; //exit completely
+            }
             r = rrs[0];
-            byte [] value = r.getValue(HConstants.CATALOG_FAMILY, 
-                HConstants.REGIONINFO_QUALIFIER);
+            byte [] value = r.getValue(HConstants.CATALOG_FAMILY,
+              HConstants.REGIONINFO_QUALIFIER);
             if (value != null) {
               HRegionInfo info = Writables.getHRegionInfoOrNull(value);
               if (info != null) {
@@ -495,20 +500,21 @@
                 }
               }
             }
-          }
+          } while(true);
           endKey = currentRegion.getEndKey();
-        } while (!(endKey == null || 
+        } while (!(endKey == null ||
             Bytes.equals(endKey, HConstants.EMPTY_BYTE_ARRAY)));
-      }
-      finally {
+      } finally {
         s.setClose();
+        // Doing below will call 'next' again and this will close the scanner
+        // Without it we leave scanners open.
+        getRegionServerWithRetries(s);
       }
-      boolean onlineOffline = 
-        online ? rowsOffline == 0 : rowsOffline == rowsScanned;
-      return rowsScanned > 0 && onlineOffline;
-      
+      LOG.debug("Rowscanned=" + rowsScanned + ", rowsOffline=" + rowsOffline);
+      boolean onOffLine = online? rowsOffline == 0: rowsOffline == rowsScanned;
+      return rowsScanned > 0 && onOffLine;
     }
-    
+
     private static class HTableDescriptorFinder 
     implements MetaScanner.MetaScannerVisitor {
         byte[] tableName;

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/ScannerCallable.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/ScannerCallable.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/ScannerCallable.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/client/ScannerCallable.java Mon Oct  5 21:25:09 2009
@@ -94,20 +94,20 @@
   }
   
   private void close() {
-	if (this.scannerId == -1L) {
-	  return;
-	}
-	try {
-		this.server.close(this.scannerId);
-	} catch (IOException e) {
-		Log.warn("Ignore, probably already closed", e);
-	}
-	this.scannerId = -1L;
+    if (this.scannerId == -1L) {
+      return;
+    }
+    try {
+      this.server.close(this.scannerId);
+    } catch (IOException e) {
+      Log.warn("Ignore, probably already closed", e);
+    }
+    this.scannerId = -1L;
   }
 
   protected long openScanner() throws IOException {
-    return server.openScanner(
-        this.location.getRegionInfo().getRegionName(), scan);
+    return this.server.openScanner(this.location.getRegionInfo().getRegionName(),
+      this.scan);
   }
   
   protected Scan getScan() {
@@ -118,7 +118,7 @@
    * Call this when the next invocation of call should close the scanner
    */
   public void setClose() {
-    closed = true;
+    this.closed = true;
   }
   
   /**
@@ -146,4 +146,4 @@
   public void setCaching(int caching) {
     this.caching = caching;
   }
-}
\ No newline at end of file
+}

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ChangeTableState.java Mon Oct  5 21:25:09 2009
@@ -20,9 +20,9 @@
 package org.apache.hadoop.hbase.master;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.TreeMap;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -32,14 +32,15 @@
 import org.apache.hadoop.hbase.ipc.HRegionInterface;
 import org.apache.hadoop.hbase.util.Writables;
 
-/** Instantiated to enable or disable a table */
+/**
+ * Instantiated to enable or disable a table
+ */
 class ChangeTableState extends TableOperation {
   private final Log LOG = LogFactory.getLog(this.getClass());
   private boolean online;
-
+  // Do in order.
   protected final Map<String, HashSet<HRegionInfo>> servedRegions =
-    new HashMap<String, HashSet<HRegionInfo>>();
-  
+    new TreeMap<String, HashSet<HRegionInfo>>();
   protected long lockid;
 
   ChangeTableState(final HMaster master, final byte [] tableName, 
@@ -51,14 +52,13 @@
 
   @Override
   protected void processScanItem(String serverName, HRegionInfo info) {
-      
     if (isBeingServed(serverName)) {
-      HashSet<HRegionInfo> regions = servedRegions.get(serverName);
+      HashSet<HRegionInfo> regions = this.servedRegions.get(serverName);
       if (regions == null) {
         regions = new HashSet<HRegionInfo>();
       }
       regions.add(info);
-      servedRegions.put(serverName, regions);
+      this.servedRegions.put(serverName, regions);
     }
   }
 
@@ -67,13 +67,13 @@
   throws IOException {
     // Process regions not being served
     if (LOG.isDebugEnabled()) {
-      LOG.debug("processing unserved regions");
+      LOG.debug("Processing unserved regions");
     }
-    for (HRegionInfo i: unservedRegions) {
+    for (HRegionInfo i: this.unservedRegions) {
       if (i.isOffline() && i.isSplit()) {
         if (LOG.isDebugEnabled()) {
           LOG.debug("Skipping region " + i.toString() +
-              " because it is offline because it has been split");
+            " because it is offline and split");
         }
         continue;
       }
@@ -81,36 +81,36 @@
       // Update meta table
       Put put = updateRegionInfo(i);
       server.put(m.getRegionName(), put);
-      
       Delete delete = new Delete(i.getRegionName());
       delete.deleteColumns(CATALOG_FAMILY, SERVER_QUALIFIER);
       delete.deleteColumns(CATALOG_FAMILY, STARTCODE_QUALIFIER);
       server.delete(m.getRegionName(), delete);
       if (LOG.isDebugEnabled()) {
-        LOG.debug("Updated columns in row: " + i.getRegionNameAsString());
+        LOG.debug("Removed server and startcode from row and set online=" +
+          this.online + ": " + i.getRegionNameAsString());
       }
-
       synchronized (master.regionManager) {
-        if (online) {
+        if (this.online) {
           // Bring offline regions on-line
-          if (!master.regionManager.regionIsOpening(i.getRegionNameAsString())) {
-            master.regionManager.setUnassigned(i, false);
+          if (!this.master.regionManager.regionIsOpening(i.getRegionNameAsString())) {
+            this.master.regionManager.setUnassigned(i, false);
           }
         } else {
           // Prevent region from getting assigned.
-          master.regionManager.removeRegion(i);
+          this.master.regionManager.removeRegion(i);
         }
       }
     }
 
     // Process regions currently being served
     if (LOG.isDebugEnabled()) {
-      LOG.debug("processing regions currently being served");
+      LOG.debug("Processing regions currently being served");
     }
-    synchronized (master.regionManager) {
-      for (Map.Entry<String, HashSet<HRegionInfo>> e: servedRegions.entrySet()) {
+    synchronized (this.master.regionManager) {
+      for (Map.Entry<String, HashSet<HRegionInfo>> e:
+          this.servedRegions.entrySet()) {
         String serverName = e.getKey();
-        if (online) {
+        if (this.online) {
           LOG.debug("Already online");
           continue;                             // Already being served
         }
@@ -118,14 +118,15 @@
         // Cause regions being served to be taken off-line and disabled
         for (HRegionInfo i: e.getValue()) {
           if (LOG.isDebugEnabled()) {
-            LOG.debug("adding region " + i.getRegionNameAsString() + " to kill list");
+            LOG.debug("Adding region " + i.getRegionNameAsString() +
+              " to setClosing list");
           }
           // this marks the regions to be closed
-          master.regionManager.setClosing(serverName, i, true);
+          this.master.regionManager.setClosing(serverName, i, true);
         }
       }
     }
-    servedRegions.clear();
+    this.servedRegions.clear();
   }
 
   protected Put updateRegionInfo(final HRegionInfo i)

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/HMaster.java Mon Oct  5 21:25:09 2009
@@ -844,8 +844,7 @@
       Scan scan = new Scan(firstRowInTable);
       scan.addColumn(CATALOG_FAMILY, REGIONINFO_QUALIFIER);
       scan.addColumn(CATALOG_FAMILY, SERVER_QUALIFIER);
-      long scannerid = 
-        srvr.openScanner(metaRegionName, scan);
+      long scannerid = srvr.openScanner(metaRegionName, scan);
       try {
         while (true) {
           Result data = srvr.next(scannerid);
@@ -882,8 +881,7 @@
       Scan scan = new Scan(firstRowInTable);
       scan.addColumn(CATALOG_FAMILY, REGIONINFO_QUALIFIER);
       scan.addColumn(CATALOG_FAMILY, SERVER_QUALIFIER);
-      long scannerid = 
-        srvr.openScanner(metaRegionName, scan);
+      long scannerid = srvr.openScanner(metaRegionName, scan);
       try {
         while (true) {
           Result data = srvr.next(scannerid);

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RegionManager.java Mon Oct  5 21:25:09 2009
@@ -50,6 +50,7 @@
 import org.apache.hadoop.hbase.HServerLoad;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.ipc.HRegionInterface;
+import org.apache.hadoop.hbase.regionserver.HLog;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.Pair;
@@ -511,25 +512,30 @@
     LOG.info("Skipped " + skipped + " region(s) that are in transition states");
   }
 
+  /*
+   * PathFilter that accepts hbase tables only.
+   */
   static class TableDirFilter implements PathFilter {
-
     public boolean accept(Path path) {
       // skip the region servers' log dirs && version file
-      // HBASE-1112 want to sperate the log dirs from table's data dirs by a special character.
+      // HBASE-1112 want to separate the log dirs from table's data dirs by a
+      // special character.
       String pathname = path.getName();
-      return !pathname.startsWith("log_") && !pathname.equals(VERSION_FILE_NAME);
+      return !pathname.equals(HLog.HREGION_LOGDIR_NAME) &&
+        !pathname.equals(VERSION_FILE_NAME);
     }
     
   }
-  
-  static class RegionDirFilter implements PathFilter {
 
+  /*
+   * PathFilter that accepts all but compaction.dir names.
+   */
+  static class RegionDirFilter implements PathFilter {
     public boolean accept(Path path) { 
       return !path.getName().equals(HREGION_COMPACTIONDIR_NAME);
     }
-    
   }
-  
+
   /**
    * @return the rough number of the regions on fs
    * Note: this method simply counts the regions on fs by accumulating all the dirs 
@@ -538,10 +544,8 @@
    */
   public int countRegionsOnFS() throws IOException {
     int regions = 0;
-    
-    FileStatus[] tableDirs = 
+    FileStatus[] tableDirs =
       master.fs.listStatus(master.rootdir, new TableDirFilter());
-    
     FileStatus[] regionDirs;
     RegionDirFilter rdf = new RegionDirFilter();
     for(FileStatus tabledir : tableDirs) {
@@ -550,7 +554,6 @@
         regions += regionDirs.length;
       }
     }
-    
     return regions;
   }
   
@@ -1650,4 +1653,4 @@
       return Bytes.compareTo(getRegionName(), o.getRegionName());
     }
   }
-}
+}
\ No newline at end of file

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RetryableMetaOperation.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RetryableMetaOperation.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RetryableMetaOperation.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/RetryableMetaOperation.java Mon Oct  5 21:25:09 2009
@@ -56,12 +56,13 @@
   protected T doWithRetries()
   throws IOException, RuntimeException {
     List<IOException> exceptions = new ArrayList<IOException>();
-    for(int tries = 0; tries < master.numRetries; tries++) {
-      if (master.closed.get()) {
+    for (int tries = 0; tries < this.master.numRetries; tries++) {
+      if (this.master.closed.get()) {
         return null;
       }
       try {
-        this.server = master.connection.getHRegionConnection(m.getServer());
+        this.server =
+          this.master.connection.getHRegionConnection(m.getServer());
         return this.call();
       } catch (IOException e) {
         if (e instanceof TableNotFoundException ||
@@ -94,8 +95,8 @@
         LOG.debug("Exception in RetryableMetaOperation: ", e);
         throw new RuntimeException(e);
       }
-      sleeper.sleep();
+      this.sleeper.sleep();
     }
     return null;    
   }
-}
+}
\ No newline at end of file

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/ServerManager.java Mon Oct  5 21:25:09 2009
@@ -477,7 +477,7 @@
       
       // Should we tell it close regions because its overloaded?  If its
       // currently opening regions, leave it alone till all are open.
-      if ((openingCount < this.nobalancingCount)) {
+      if (openingCount < this.nobalancingCount) {
         this.master.regionManager.assignRegions(serverInfo, mostLoadedRegions,
             returnMsgs);
       }

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/TableOperation.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/TableOperation.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/TableOperation.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/master/TableOperation.java Mon Oct  5 21:25:09 2009
@@ -21,9 +21,9 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.TreeSet;
 
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.HRegionInfo;
@@ -44,7 +44,8 @@
 abstract class TableOperation implements HConstants {
   private final Set<MetaRegion> metaRegions;
   protected final byte [] tableName;
-  protected final Set<HRegionInfo> unservedRegions = new HashSet<HRegionInfo>();
+  // Do regions in order.
+  protected final Set<HRegionInfo> unservedRegions = new TreeSet<HRegionInfo>();
   protected HMaster master;
 
   protected TableOperation(final HMaster master, final byte [] tableName)
@@ -79,15 +80,17 @@
 
       // Open a scanner on the meta region
       byte [] tableNameMetaStart =
-          Bytes.toBytes(Bytes.toString(tableName) + ",,");
+        Bytes.toBytes(Bytes.toString(tableName) + ",,");
       Scan scan = new Scan(tableNameMetaStart).addFamily(CATALOG_FAMILY);
-      long scannerId = server.openScanner(m.getRegionName(), scan);
-
+      long scannerId = this.server.openScanner(m.getRegionName(), scan);
+      int rows = this.master.getConfiguration().
+        getInt("hbase.meta.scanner.caching", 100);
+      scan.setCaching(rows);
       List<byte []> emptyRows = new ArrayList<byte []>();
       try {
         while (true) {
-          Result values = server.next(scannerId);
-          if(values == null || values.isEmpty()) {
+          Result values = this.server.next(scannerId);
+          if (values == null || values.isEmpty()) {
             break;
           }
           HRegionInfo info = this.master.getHRegionInfo(values.getRow(), values);
@@ -119,7 +122,7 @@
       } finally {
         if (scannerId != -1L) {
           try {
-            server.close(scannerId);
+            this.server.close(scannerId);
           } catch (IOException e) {
             e = RemoteExceptionHandler.checkIOException(e);
             LOG.error("closing scanner", e);
@@ -143,7 +146,6 @@
 
       postProcessMeta(m, server);
       unservedRegions.clear();
-
       return Boolean.TRUE;
     }
   }

Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java?rev=822024&r1=822023&r2=822024&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java Mon Oct  5 21:25:09 2009
@@ -1888,9 +1888,7 @@
     requestCount.incrementAndGet();
     try {
       HRegion r = getRegion(regionName);
-      InternalScanner s = r.getScanner(scan);
-      long scannerId = addScanner(s);
-      return scannerId;
+      return addScanner(r.getScanner(scan));
     } catch (Throwable t) {
       throw convertThrowableToIOE(cleanup(t, "Failed openScanner"));
     }