Permalink
Browse files

HBASE-4890 fix possible NPE in HConnectionManager

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1298272 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information...
1 parent 6b134da commit 6e1209ac551af75e0d32b1d5cc9170c4b252364a Michael Stack committed Mar 8, 2012
Showing with 20 additions and 1 deletion.
  1. +20 −1 src/main/java/org/apache/hadoop/hbase/ipc/HBaseClient.java
View
21 src/main/java/org/apache/hadoop/hbase/ipc/HBaseClient.java
@@ -676,7 +676,17 @@ protected void cleanupCalls(long rpcTimeout) {
Call c = itor.next().getValue();
long waitTime = System.currentTimeMillis() - c.getStartTime();
if (waitTime >= rpcTimeout) {
- c.setException(closeException); // local exception
+ if (this.closeException == null) {
+ // There may be no exception in the case that there are many calls
+ // being multiplexed over this connection and these are succeeding
+ // fine while this Call object is taking a long time to finish
+ // over on the server; e.g. I just asked the regionserver to bulk
+ // open 3k regions or its a big fat multiput into a heavily-loaded
+ // server (Perhaps this only happens at the extremes?)
+ this.closeException = new CallTimeoutException("Call id=" + c.id +
+ ", waitTime=" + waitTime + ", rpcTimetout=" + rpcTimeout);
+ }
+ c.setException(this.closeException);
synchronized (c) {
c.notifyAll();
}
@@ -705,6 +715,15 @@ protected void cleanupCalls(long rpcTimeout) {
}
}
+ /**
+ * Client-side call timeout
+ */
+ public static class CallTimeoutException extends IOException {
+ public CallTimeoutException(final String msg) {
+ super(msg);
+ }
+ }
+
/** Call implementation used for parallel calls. */
protected class ParallelCall extends Call {
private final ParallelResults results;

0 comments on commit 6e1209a

Please sign in to comment.