Repository: hbase
Updated Branches:
  refs/heads/0.98 88a620892 -> c4fa84965


HBASE-14453 HBaseAdmin#deleteTable should relocate META when cached location is 
stale


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/c4fa8496
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/c4fa8496
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/c4fa8496

Branch: refs/heads/0.98
Commit: c4fa84965b48b1dae3ecd005ec80cac8872d1ece
Parents: 88a6208
Author: Andrew Purtell <[email protected]>
Authored: Fri Sep 18 19:17:49 2015 -0700
Committer: Andrew Purtell <[email protected]>
Committed: Fri Sep 18 19:17:49 2015 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/client/HBaseAdmin.java  | 48 ++++++++------------
 1 file changed, 20 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/c4fa8496/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
----------------------------------------------------------------------
diff --git 
a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java 
b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index f86dd84..e3fcc6e 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -67,11 +67,9 @@ import 
org.apache.hadoop.hbase.exceptions.DeserializationException;
 import org.apache.hadoop.hbase.exceptions.MergeRegionException;
 import org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel;
 import org.apache.hadoop.hbase.ipc.MasterCoprocessorRpcChannel;
-import org.apache.hadoop.hbase.ipc.PayloadCarryingRpcController;
 import org.apache.hadoop.hbase.ipc.RegionServerCoprocessorRpcChannel;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
 import org.apache.hadoop.hbase.protobuf.RequestConverter;
-import org.apache.hadoop.hbase.protobuf.ResponseConverter;
 import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.AdminService;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionResponse;
@@ -83,9 +81,6 @@ import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoRespo
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterRequest;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.RollWALWriterResponse;
 import 
org.apache.hadoop.hbase.protobuf.generated.AdminProtos.StopServerRequest;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ClientService;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest;
-import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanResponse;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos;
 import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.NameStringPair;
 import 
org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription;
@@ -672,27 +667,25 @@ public class HBaseAdmin implements Abortable, Closeable {
     // Wait until all regions deleted
     for (int tries = 0; tries < (this.numRetries * 
this.retryLongerMultiplier); tries++) {
       try {
-        HRegionLocation firstMetaServer = 
getFirstMetaServerForTable(tableName);
-        Scan scan = MetaReader.getScanForTableName(tableName);
-        scan.addColumn(HConstants.CATALOG_FAMILY, 
HConstants.REGIONINFO_QUALIFIER);
-        ScanRequest request = RequestConverter.buildScanRequest(
-          firstMetaServer.getRegionInfo().getRegionName(), scan, 1, true);
-        Result[] values = null;
-        // Get a batch at a time.
-        ClientService.BlockingInterface server = 
connection.getClient(firstMetaServer
-            .getServerName());
-        PayloadCarryingRpcController controller = new 
PayloadCarryingRpcController();
-        try {
-          controller.setPriority(tableName);
-          ScanResponse response = server.scan(controller, request);
-          values = ResponseConverter.getResults(controller.cellScanner(), 
response);
-        } catch (ServiceException se) {
-          throw ProtobufUtil.getRemoteException(se);
-        }
-
+        final AtomicInteger count = new AtomicInteger(0);
+        MetaScannerVisitor visitor = new MetaScannerVisitorBase() {
+          @Override
+          public boolean processRow(Result rowResult) throws IOException {
+            HRegionInfo info = HRegionInfo.getHRegionInfo(rowResult);
+            if (info == null) {
+              return true;
+            }
+            if (!info.getTable().equals(tableName)) {
+              return false;
+            }
+            count.incrementAndGet();
+            return true;
+          }
+        };
+        MetaScanner.metaScan(conf, connection, visitor, tableName);
         // let us wait until hbase:meta table is updated and
         // HMaster removes the table from its HTableDescriptors
-        if (values == null || values.length == 0) {
+        if (count.get() == 0) {
           tableExists = false;
           GetTableDescriptorsResponse htds;
           MasterKeepAliveConnection master = 
connection.getKeepAliveMasterService();
@@ -712,12 +705,11 @@ public class HBaseAdmin implements Abortable, Closeable {
         }
       } catch (IOException ex) {
         failures++;
-        if(failures == numRetries - 1) {           // no more tries left
+        if (failures == numRetries - 1) {           // no more tries left
           if (ex instanceof RemoteException) {
-            throw ((RemoteException) ex).unwrapRemoteException();
-          } else {
-            throw ex;
+            ex = ((RemoteException) ex).unwrapRemoteException();
           }
+          throw ex;
         }
       }
       try {

Reply via email to