diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedException.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedException.java index f0df7e09cf91..d19172d29797 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedException.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RetriesExhaustedException.java @@ -48,7 +48,7 @@ public RetriesExhaustedException(final String msg, final IOException e) { */ @InterfaceAudience.Private public static class ThrowableWithExtraContext { - private final Throwable throwable; + public final Throwable throwable; private final long whenAsEpochMilli; private final String extras; diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java index 7a850eeb9d13..c0900c8fc74c 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java @@ -32,6 +32,8 @@ import org.apache.hadoop.hbase.CallQueueTooBigException; import org.apache.hadoop.hbase.DoNotRetryIOException; import org.apache.hadoop.hbase.exceptions.PreemptiveFastFailException; +import org.apache.hadoop.hbase.quotas.RpcThrottlingException; +import org.apache.hadoop.hbase.quotas.ThrottlingException; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.ExceptionUtil; import org.apache.hadoop.ipc.RemoteException; @@ -102,7 +104,13 @@ public T callWithRetries(RetryingCallable callable, int callTimeout) long expectedSleep; try { // bad cache entries are cleared in the call to RetryingCallable#throwable() in catch block - callable.prepare(tries != 0); + Throwable t = null; + if (exceptions != null && !exceptions.isEmpty()) { + t = exceptions.get(exceptions.size() - 1).throwable; + } + if (!(t instanceof RpcThrottlingException)) { + callable.prepare(tries != 0); + } interceptor.intercept(context.prepare(callable, tries)); return callable.call(getTimeout(callTimeout)); } catch (PreemptiveFastFailException e) {