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 2014/11/07 21:30:23 UTC
[3/3] hbase git commit: HBASE-12432 RpcRetryingCaller should log
after fixed number of retries like AsyncProcess
HBASE-12432 RpcRetryingCaller should log after fixed number of retries like AsyncProcess
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/2d9bb9d3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2d9bb9d3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2d9bb9d3
Branch: refs/heads/0.98
Commit: 2d9bb9d340eeef468f74500209ea2324d5988bb8
Parents: 3a71af8
Author: Nick Dimiduk <nd...@apache.org>
Authored: Wed Nov 5 18:31:44 2014 -0800
Committer: Andrew Purtell <ap...@apache.org>
Committed: Fri Nov 7 12:27:48 2014 -0800
----------------------------------------------------------------------
.../apache/hadoop/hbase/client/AsyncProcess.java | 17 +++++++++++++----
.../hadoop/hbase/client/RpcRetryingCaller.java | 12 ++++++++----
.../hbase/client/RpcRetryingCallerFactory.java | 5 ++++-
.../hadoop/hbase/client/TestAsyncProcess.java | 4 ++--
4 files changed, 27 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/2d9bb9d3/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 61a73c3..d206c71 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
@@ -92,6 +92,17 @@ import com.google.common.base.Preconditions;
*/
class AsyncProcess<CResult> {
private static final Log LOG = LogFactory.getLog(AsyncProcess.class);
+
+ /**
+ * Configure the number of failures after which the client will start logging. A few failures
+ * is fine: region moved, then is not opened, then is overloaded. We try to have an acceptable
+ * heuristic for the number of errors we don't log. 9 was chosen because we wait for 1s at
+ * this stage.
+ */
+ public static final String START_LOG_ERRORS_AFTER_COUNT_KEY =
+ "hbase.client.start.log.errors.counter";
+ public static final int DEFAULT_START_LOG_ERRORS_AFTER_COUNT = 9;
+
protected static final AtomicLong COUNTER = new AtomicLong();
protected final long id;
private final int startLogErrorsCnt;
@@ -230,10 +241,8 @@ class AsyncProcess<CResult> {
this.maxConcurrentTasksPerRegion = conf.getInt(HConstants.HBASE_CLIENT_MAX_PERREGION_TASKS,
HConstants.DEFAULT_HBASE_CLIENT_MAX_PERREGION_TASKS);
- // A few failure is fine: region moved, then is not opened, then is overloaded. We try
- // to have an acceptable heuristic for the number of errors we don't log.
- // 9 was chosen because we wait for 1s at this stage.
- this.startLogErrorsCnt = conf.getInt("hbase.client.start.log.errors.counter", 9);
+ this.startLogErrorsCnt =
+ conf.getInt(START_LOG_ERRORS_AFTER_COUNT_KEY, DEFAULT_START_LOG_ERRORS_AFTER_COUNT);
if (this.maxTotalConcurrentTasks <= 0) {
throw new IllegalArgumentException("maxTotalConcurrentTasks=" + maxTotalConcurrentTasks);
http://git-wip-us.apache.org/repos/asf/hbase/blob/2d9bb9d3/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 4344201..9552992 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
@@ -60,13 +60,16 @@ public class RpcRetryingCaller<T> {
* Start and end times for a single call.
*/
private final static int MIN_RPC_TIMEOUT = 2000;
+ /** How many retries are allowed before we start to log */
+ private final int startLogErrorsCnt;
private final long pause;
private final int retries;
- public RpcRetryingCaller(long pause, int retries) {
+ public RpcRetryingCaller(long pause, int retries, int startLogErrorsCnt) {
this.pause = pause;
this.retries = retries;
+ this.startLogErrorsCnt = startLogErrorsCnt;
}
private void beforeCall() {
@@ -113,9 +116,10 @@ public class RpcRetryingCaller<T> {
callable.prepare(tries != 0); // if called with false, check table status on ZK
return callable.call();
} catch (Throwable t) {
- if (LOG.isTraceEnabled()) {
- LOG.trace("Call exception, tries=" + tries + ", retries=" + retries + ", retryTime=" +
- (EnvironmentEdgeManager.currentTimeMillis() - this.globalStartTime) + "ms", t);
+ if (tries > startLogErrorsCnt) {
+ LOG.info("Call exception, tries=" + tries + ", retries=" + retries + ", retryTime=" +
+ (EnvironmentEdgeManager.currentTimeMillis() - this.globalStartTime) + "ms, msg="
+ + callable.getExceptionMessageAdditionalDetail());
}
// translateException throws exception when should not retry: i.e. when request is bad.
t = translateException(t);
http://git-wip-us.apache.org/repos/asf/hbase/blob/2d9bb9d3/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.java
index 9b070a5..53d5c58 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.java
@@ -31,6 +31,7 @@ public class RpcRetryingCallerFactory {
protected final Configuration conf;
private final long pause;
private final int retries;
+ private final int startLogErrorsCnt;
public RpcRetryingCallerFactory(Configuration conf) {
this.conf = conf;
@@ -38,12 +39,14 @@ public class RpcRetryingCallerFactory {
HConstants.DEFAULT_HBASE_CLIENT_PAUSE);
retries = conf.getInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,
HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER);
+ startLogErrorsCnt = conf.getInt(AsyncProcess.START_LOG_ERRORS_AFTER_COUNT_KEY,
+ AsyncProcess.DEFAULT_START_LOG_ERRORS_AFTER_COUNT);
}
public <T> RpcRetryingCaller<T> newCaller() {
// We store the values in the factory instance. This way, constructing new objects
// is cheap as it does not require parsing a complex structure.
- return new RpcRetryingCaller<T>(pause, retries);
+ return new RpcRetryingCaller<T>(pause, retries, startLogErrorsCnt);
}
public static RpcRetryingCallerFactory instantiate(Configuration configuration) {
http://git-wip-us.apache.org/repos/asf/hbase/blob/2d9bb9d3/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java
index 74fbb17..91a5a90 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestAsyncProcess.java
@@ -107,7 +107,7 @@ public class TestAsyncProcess {
protected RpcRetryingCaller<MultiResponse> createCaller(MultiServerCallable<Row> callable) {
final MultiResponse mr = createMultiResponse(callable.getLocation(), callable.getMulti(),
nbMultiResponse, nbActions);
- return new RpcRetryingCaller<MultiResponse>(100, 10) {
+ return new RpcRetryingCaller<MultiResponse>(100, 10, 9) {
@Override
public MultiResponse callWithoutRetries(RetryingCallable<MultiResponse> callable, int to)
throws IOException, RuntimeException {
@@ -127,7 +127,7 @@ public class TestAsyncProcess {
static class CallerWithFailure extends RpcRetryingCaller<MultiResponse>{
public CallerWithFailure() {
- super(100, 100);
+ super(100, 100, 9);
}
@Override