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:43 UTC

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

Repository: hbase
Updated Branches:
  refs/heads/branch-1 99189f284 -> 0953eb7ed
  refs/heads/branch-1.2 9faebd268 -> d54931688
  refs/heads/branch-1.3 5eb88aa54 -> 3fb612549
  refs/heads/branch-1.4 bae88b4cf -> 89605929a


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/0953eb7e
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0953eb7e
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0953eb7e

Branch: refs/heads/branch-1
Commit: 0953eb7ed986dbea97ac754ca0e1039f17ba2b4c
Parents: 99189f2
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:54:54 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/0953eb7e/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 d68add6..fafc9fe 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;
     }
 
@@ -4616,6 +4616,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;
@@ -4626,6 +4627,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()
@@ -4683,7 +4691,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);
@@ -4740,6 +4748,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/0953eb7e/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


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

Posted by ap...@apache.org.
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


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

Posted by ap...@apache.org.
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/3fb61254
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/3fb61254
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/3fb61254

Branch: refs/heads/branch-1.3
Commit: 3fb61254957b1d5282f14d2a3f1825d80e46db8c
Parents: 5eb88aa
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:42 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/3fb61254/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 7074f97..e9c17ef 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
@@ -773,7 +773,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;
     }
 
@@ -4537,6 +4537,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;
@@ -4547,6 +4548,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()
@@ -4604,7 +4612,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);
@@ -4661,6 +4669,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/3fb61254/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


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

Posted by ap...@apache.org.
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/d5493168
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d5493168
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d5493168

Branch: refs/heads/branch-1.2
Commit: d54931688d9aa7cccce55ea181f67a4d0cfe44c2
Parents: 9faebd2
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:50 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/d5493168/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 61714c8..0903608 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
@@ -771,7 +771,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;
     }
@@ -1197,7 +1197,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;
     }
 
@@ -4445,6 +4445,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;
@@ -4455,6 +4456,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()
@@ -4512,7 +4520,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);
@@ -4569,6 +4577,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/d5493168/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