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:45 UTC
[3/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/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