HBASE-4890 fix possible NPE in HConnectionManager

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1298272 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2012-03-08 05:00:01 +00:00
parent edc6696bc5
commit 0f7285a81a
1 changed files with 20 additions and 1 deletions

View File

@ -676,7 +676,17 @@ public class HBaseClient {
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 @@ public class HBaseClient {
}
}
/**
* 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;