You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2018/07/09 23:07:44 UTC

[2/4] hbase git commit: HBASE-20771 PUT operation fail with "No server address listed in hbase:meta for region xxxxx"

HBASE-20771 PUT operation fail with "No server address listed in hbase:meta for region xxxxx"

Signed-off-by: Andrew Purtell <ap...@apache.org>


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

Branch: refs/heads/branch-1.4
Commit: 89605929a0ba488e88894fa55a9d1f9bc0c71c38
Parents: bae88b4
Author: Pankaj <pa...@huawei.com>
Authored: Sat Jun 30 22:35:28 2018 +0530
Committer: Andrew Purtell <ap...@apache.org>
Committed: Mon Jul 9 15:55:35 2018 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hbase/client/HBaseAdmin.java  | 15 +++++++++---
 .../hbase/client/TestProcedureFuture.java       | 24 ++++++++++++++++++++
 2 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/89605929/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 507c6fb..76b2584 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
@@ -774,7 +774,7 @@ public class HBaseAdmin implements Admin {
 
     public CreateTableFuture(final HBaseAdmin admin, final HTableDescriptor desc,
         final byte[][] splitKeys, final CreateTableResponse response) {
-      super(admin, (response != null && response.hasProcId()) ? response.getProcId() : null);
+      super(admin, (response != null && response.hasProcId()) ? response.getProcId() : null, true);
       this.splitKeys = splitKeys;
       this.desc = desc;
     }
@@ -1199,7 +1199,7 @@ public class HBaseAdmin implements Admin {
 
     public EnableTableFuture(final HBaseAdmin admin, final TableName tableName,
         final EnableTableResponse response) {
-      super(admin, (response != null && response.hasProcId()) ? response.getProcId() : null);
+      super(admin, (response != null && response.hasProcId()) ? response.getProcId() : null, true);
       this.tableName = tableName;
     }
 
@@ -4601,6 +4601,7 @@ public class HBaseAdmin implements Admin {
     private boolean procResultFound = false;
     private boolean done = false;
     private boolean cancelled = false;
+    private boolean waitForOpResult = false;
     private V result = null;
 
     private final HBaseAdmin admin;
@@ -4611,6 +4612,13 @@ public class HBaseAdmin implements Admin {
       this.procId = procId;
     }
 
+    public ProcedureFuture(final HBaseAdmin admin, final Long procId,
+        final boolean waitForOpResult) {
+      this.admin = admin;
+      this.procId = procId;
+      this.waitForOpResult = waitForOpResult;
+    }
+
     @Override
     public boolean cancel(boolean mayInterruptIfRunning) {
       AbortProcedureRequest abortProcRequest = AbortProcedureRequest.newBuilder()
@@ -4668,7 +4676,7 @@ public class HBaseAdmin implements Admin {
               result = waitProcedureResult(procId, deadlineTs);
             }
             // if we don't have a proc result, try the compatibility wait
-            if (!procResultFound) {
+            if (!procResultFound || waitForOpResult) {
               result = waitOperationResult(deadlineTs);
             }
             result = postOperationResult(result, deadlineTs);
@@ -4725,6 +4733,7 @@ public class HBaseAdmin implements Admin {
             // and that is always a valid solution.
             LOG.warn("Proc-v2 is unsupported on this master: " + serviceEx.getMessage(), serviceEx);
             procResultFound = false;
+            waitForOpResult = false;
             return null;
           }
         }

http://git-wip-us.apache.org/repos/asf/hbase/blob/89605929/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestProcedureFuture.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestProcedureFuture.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestProcedureFuture.java
index 4bd6571..5a6e546 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestProcedureFuture.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestProcedureFuture.java
@@ -51,6 +51,10 @@ public class TestProcedureFuture {
       super(admin, procId);
     }
 
+    public TestFuture(final HBaseAdmin admin, final Long procId, final boolean waitForOpResult) {
+      super(admin, procId, waitForOpResult);
+    }
+
     public boolean wasPostOperationResultCalled() {
       return postOperationResultCalled;
     }
@@ -182,4 +186,24 @@ public class TestProcedureFuture {
     assertTrue("expected waitOperationResult() to be called", f.wasWaitOperationResultCalled());
     assertTrue("expected postOperationResult() to be called", f.wasPostOperationResultCalled());
   }
+
+  /**
+   * When master return a result by submitting the request asynchronously. we are skipping the
+   * waitOperationResult() call, since we are getting the procedure result.
+   */
+  @Test(timeout = 60000)
+  public void testWaitOperationResult() throws Exception {
+    HBaseAdmin admin = Mockito.mock(HBaseAdmin.class);
+    TestFuture f = new TestFuture(admin, 100L, true) {
+      @Override
+      protected GetProcedureResultResponse
+          getProcedureResult(final GetProcedureResultRequest request) throws IOException {
+        return GetProcedureResultResponse.newBuilder()
+            .setState(GetProcedureResultResponse.State.FINISHED).build();
+      }
+    };
+    f.get(1, TimeUnit.MINUTES);
+
+    assertTrue("expected waitOperationResult() to be called", f.wasWaitOperationResultCalled());
+  }
 }
\ No newline at end of file