You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by an...@apache.org on 2015/06/23 08:44:12 UTC
hbase git commit: HBASE-13906 Improve handling of
NeedUnmanagedConnectionException
Repository: hbase
Updated Branches:
refs/heads/branch-1 272404f67 -> 7d778e892
HBASE-13906 Improve handling of NeedUnmanagedConnectionException
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7d778e89
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7d778e89
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7d778e89
Branch: refs/heads/branch-1
Commit: 7d778e892cfbd7426337e7a92aa1d335ef2a72fa
Parents: 272404f
Author: Mikhail Antonov <an...@apache.org>
Authored: Mon Jun 22 23:34:47 2015 -0700
Committer: Mikhail Antonov <an...@apache.org>
Committed: Mon Jun 22 23:36:04 2015 -0700
----------------------------------------------------------------------
.../java/org/apache/hadoop/hbase/client/AsyncProcess.java | 3 ++-
.../org/apache/hadoop/hbase/client/ClientScanner.java | 2 +-
.../java/org/apache/hadoop/hbase/client/HBaseAdmin.java | 3 ++-
.../hbase/client/PreemptiveFastFailInterceptor.java | 3 +++
.../hadoop/hbase/client/RegionAdminServiceCallable.java | 2 ++
.../client/RetriesExhaustedWithDetailsException.java | 3 ++-
.../org/apache/hadoop/hbase/client/RpcRetryingCaller.java | 10 ++++++++--
.../hbase/client/RpcRetryingCallerWithReadReplicas.java | 6 ++++++
.../org/apache/hadoop/hbase/rest/RowResultGenerator.java | 3 ++-
.../main/java/org/apache/hadoop/hbase/ipc/RpcServer.java | 4 +++-
.../main/java/org/apache/hadoop/hbase/tool/Canary.java | 3 ++-
11 files changed, 33 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
index 7b90168..9c5e48d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AsyncProcess.java
@@ -1087,7 +1087,8 @@ class AsyncProcess {
public Retry manageError(int originalIndex, Row row, Retry canRetry,
Throwable throwable, ServerName server) {
if (canRetry == Retry.YES
- && throwable != null && throwable instanceof DoNotRetryIOException) {
+ && throwable != null && (throwable instanceof DoNotRetryIOException ||
+ throwable instanceof NeedUnmanagedConnectionException)) {
canRetry = Retry.NO_NOT_RETRIABLE;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
index 562cb56..05cd92d 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
@@ -415,7 +415,7 @@ public class ClientScanner extends AbstractClientScanner {
continue;
}
retryAfterOutOfOrderException = true;
- } catch (DoNotRetryIOException e) {
+ } catch (DoNotRetryIOException | NeedUnmanagedConnectionException e) {
// An exception was thrown which makes any partial results that we were collecting
// invalid. The scanner will need to be reset to the beginning of a row.
clearPartialResults();
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/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 63d0b7b..ab73f50 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
@@ -4148,7 +4148,8 @@ public class HBaseAdmin implements Admin {
LOG.warn("failed to get the procedure result procId=" + procId, serviceEx);
// Not much to do, if we have a DoNotRetryIOException
- if (serviceEx instanceof DoNotRetryIOException) {
+ if (serviceEx instanceof DoNotRetryIOException ||
+ serviceEx instanceof NeedUnmanagedConnectionException) {
// TODO: looks like there is no way to unwrap this exception and get the proper
// UnsupportedOperationException aside from looking at the message.
// anyway, if we fail here we just failover to the compatibility side
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java
index 64cd03d..ce21ee9 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/PreemptiveFastFailInterceptor.java
@@ -203,6 +203,9 @@ class PreemptiveFastFailInterceptor extends RetryingCallerInterceptor {
if (t instanceof DoNotRetryIOException) {
throw (DoNotRetryIOException) t;
}
+ if (t instanceof NeedUnmanagedConnectionException) {
+ throw new DoNotRetryIOException(t);
+ }
if (t instanceof Error) {
throw (Error) t;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java
index 0d1fa02..d314777 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RegionAdminServiceCallable.java
@@ -170,6 +170,8 @@ public abstract class RegionAdminServiceCallable<T> implements RetryingCallable<
rl = connection.locateRegion(tableName, row, useCache, true, replicaId);
} catch (DoNotRetryIOException e) {
throw e;
+ } catch (NeedUnmanagedConnectionException e) {
+ throw new DoNotRetryIOException(e);
} catch (RetriesExhaustedException e) {
throw e;
} catch (InterruptedIOException e) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java
index 253ff8b..5c179a1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java
@@ -88,7 +88,8 @@ extends RetriesExhaustedException {
// If all of the exceptions are DNRIOE not exception
for (Throwable t : exceptions) {
- if ( !(t instanceof DoNotRetryIOException)) {
+ if ( !(t instanceof DoNotRetryIOException ||
+ t instanceof NeedUnmanagedConnectionException)) {
res = true;
}
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java
index 896222c..bb19d5f 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCaller.java
@@ -231,8 +231,12 @@ public class RpcRetryingCaller<T> {
if (t instanceof ServiceException) {
ServiceException se = (ServiceException)t;
Throwable cause = se.getCause();
- if (cause != null && cause instanceof DoNotRetryIOException) {
- throw (DoNotRetryIOException)cause;
+ if (cause != null) {
+ if (cause instanceof DoNotRetryIOException) {
+ throw (DoNotRetryIOException)cause;
+ } else if (cause instanceof NeedUnmanagedConnectionException) {
+ throw new DoNotRetryIOException(cause);
+ }
}
// Don't let ServiceException out; its rpc specific.
t = cause;
@@ -240,6 +244,8 @@ public class RpcRetryingCaller<T> {
translateException(t);
} else if (t instanceof DoNotRetryIOException) {
throw (DoNotRetryIOException)t;
+ } else if (t instanceof NeedUnmanagedConnectionException) {
+ throw new DoNotRetryIOException(t);
}
return t;
}
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java
index a2bedb4..025daa0 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.java
@@ -262,6 +262,10 @@ public class RpcRetryingCallerWithReadReplicas {
throw (DoNotRetryIOException) t;
}
+ if (t instanceof NeedUnmanagedConnectionException) {
+ throw new DoNotRetryIOException(t);
+ }
+
RetriesExhaustedException.ThrowableWithExtraContext qt =
new RetriesExhaustedException.ThrowableWithExtraContext(t,
EnvironmentEdgeManager.currentTime(), null);
@@ -302,6 +306,8 @@ public class RpcRetryingCallerWithReadReplicas {
}
} catch (DoNotRetryIOException e) {
throw e;
+ } catch (NeedUnmanagedConnectionException e) {
+ throw new DoNotRetryIOException(e);
} catch (RetriesExhaustedException e) {
throw e;
} catch (InterruptedIOException e) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
----------------------------------------------------------------------
diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
index 74afcd9..d07d81b 100644
--- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
+++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/RowResultGenerator.java
@@ -30,6 +30,7 @@ import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.DoNotRetryIOException;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.NeedUnmanagedConnectionException;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.Filter;
@@ -70,7 +71,7 @@ public class RowResultGenerator extends ResultGenerator {
if (result != null && !result.isEmpty()) {
valuesI = result.listCells().iterator();
}
- } catch (DoNotRetryIOException e) {
+ } catch (DoNotRetryIOException | NeedUnmanagedConnectionException e) {
// Warn here because Stargate will return 404 in the case if multiple
// column families were specified but one did not exist -- currently
// HBase will fail the whole Get.
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
index 461a8f0..07a3033 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RpcServer.java
@@ -78,6 +78,7 @@ import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.client.NeedUnmanagedConnectionException;
import org.apache.hadoop.hbase.client.Operation;
import org.apache.hadoop.hbase.codec.Codec;
import org.apache.hadoop.hbase.exceptions.RegionMovedException;
@@ -390,7 +391,8 @@ public class RpcServer implements RpcServerInterface {
ExceptionResponse.Builder exceptionBuilder = ExceptionResponse.newBuilder();
exceptionBuilder.setExceptionClassName(t.getClass().getName());
exceptionBuilder.setStackTrace(errorMsg);
- exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException);
+ exceptionBuilder.setDoNotRetry(t instanceof DoNotRetryIOException ||
+ t instanceof NeedUnmanagedConnectionException);
if (t instanceof RegionMovedException) {
// Special casing for this exception. This is only one carrying a payload.
// Do this instead of build a generic system for allowing exceptions carry
http://git-wip-us.apache.org/repos/asf/hbase/blob/7d778e89/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java
index 24bff16..2cf34b3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/tool/Canary.java
@@ -59,6 +59,7 @@ import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.NeedUnmanagedConnectionException;
import org.apache.hadoop.hbase.client.RegionLocator;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
@@ -272,7 +273,7 @@ public final class Canary implements Tool {
} catch (TableNotEnabledException tnee) {
// This is considered a success since we got a response.
LOG.debug("The targeted table was disabled. Assuming success.");
- } catch (DoNotRetryIOException dnrioe) {
+ } catch (DoNotRetryIOException | NeedUnmanagedConnectionException dnrioe) {
sink.publishReadFailure(tableName.getNameAsString(), serverName);
LOG.error(dnrioe);
} catch (IOException e) {