hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From te...@apache.org
Subject svn commit: r1145914 - /hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
Date Wed, 13 Jul 2011 08:57:50 GMT
Author: tedyu
Date: Wed Jul 13 08:57:50 2011
New Revision: 1145914

URL: http://svn.apache.org/viewvc?rev=1145914&view=rev
Log:
HBASE-3904 Reapply patch v6 for TRUNK with addendum

Modified:
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java?rev=1145914&r1=1145913&r2=1145914&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java Wed Jul 13 08:57:50
2011
@@ -21,6 +21,7 @@ package org.apache.hadoop.hbase.client;
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.io.InterruptedIOException;
 import java.net.SocketTimeoutException;
 import java.util.Arrays;
 import java.util.LinkedList;
@@ -333,49 +334,52 @@ public class HBaseAdmin implements Abort
     } catch (SocketTimeoutException ste) {
       LOG.warn("Creating " + desc.getNameAsString() + " took too long", ste);
     }
-    int numRegs = splitKeys == null ? 1 : splitKeys.length+1;
-    for (int tries = 0; tries < numRetries; tries++) {
-      try {
-        // Wait for new table to come on-line
-        final AtomicInteger actualRegCount = new AtomicInteger(0);
-
-        MetaScannerVisitor visitor = new MetaScannerVisitor() {
-          public boolean processRow(Result rowResult) throws IOException {
-            HRegionInfo info = Writables.getHRegionInfo(
-                rowResult.getValue(HConstants.CATALOG_FAMILY,
-                    HConstants.REGIONINFO_QUALIFIER));
-
-            if (!(Bytes.equals(info.getTableName(), desc.getName()))) {
-              return false;
-            }
-
-            String hostAndPort = null;
-            byte [] value = rowResult.getValue(HConstants.CATALOG_FAMILY,
-                HConstants.SERVER_QUALIFIER);
-            if (value != null && value.length > 0) {
-              hostAndPort = Bytes.toString(value);
-            }
-
-            if (!(info.isOffline() || info.isSplit()) && hostAndPort != null) {
-              actualRegCount.incrementAndGet();
-            }
-            return true;
+    int numRegs = splitKeys == null ? 1 : splitKeys.length + 1;
+    int prevRegCount = 0;
+    for (int tries = 0; tries < numRetries; ++tries) {
+      // Wait for new table to come on-line
+      final AtomicInteger actualRegCount = new AtomicInteger(0);
+      MetaScannerVisitor visitor = new MetaScannerVisitor() {
+        @Override
+        public boolean processRow(Result rowResult) throws IOException {
+          HRegionInfo info = Writables.getHRegionInfo(
+              rowResult.getValue(HConstants.CATALOG_FAMILY,
+                  HConstants.REGIONINFO_QUALIFIER));
+          if (!(Bytes.equals(info.getTableName(), desc.getName()))) {
+            return false;
           }
-
-        };
-        MetaScanner.metaScan(conf, visitor, desc.getName());
-        if (actualRegCount.get() == numRegs)
-          break;
-      } catch (RegionException e) {
+          String hostAndPort = null;
+          byte [] value = rowResult.getValue(HConstants.CATALOG_FAMILY,
+              HConstants.SERVER_QUALIFIER);
+          // Make sure that regions are assigned to server
+          if (value != null && value.length > 0) {
+            hostAndPort = Bytes.toString(value);
+          }
+          if (!(info.isOffline() || info.isSplit()) && hostAndPort != null) {
+            actualRegCount.incrementAndGet();
+          }
+          return true;
+        }
+      };
+      MetaScanner.metaScan(conf, visitor, desc.getName());
+      if (actualRegCount.get() != numRegs) {
         if (tries == numRetries - 1) {
-          // Ran out of tries
-          throw e;
+          throw new RegionOfflineException("Only " + actualRegCount.get() + 
+              " of " + numRegs + " regions are online; retries exhausted.");
         }
-      }
-      try {
-        Thread.sleep(getPauseTime(tries));
-      } catch (InterruptedException e) {
-        // Just continue; ignore the interruption.
+        try { // Sleep
+          Thread.sleep(getPauseTime(tries));
+        } catch (InterruptedException e) {
+          throw new InterruptedIOException("Interrupted when opening" +
+              " regions; " + actualRegCount.get() + " of " + numRegs + 
+              " regions processed so far");
+        }
+        if (actualRegCount.get() > prevRegCount) { // Making progress
+          prevRegCount = actualRegCount.get();
+          tries = -1;
+        }
+      } else {
+        return;
       }
     }
   }



Mime
View raw message