HADOOP-16700. Track response time separately in Server.Call to avoid negative RpcQueueTime values. Contributed by xuzq.

(cherry picked from be77231452)
This commit is contained in:
Erik Krogen 2019-11-20 07:56:33 -08:00 committed by Erik Krogen
parent c47d4d9c3f
commit c1ed247459
1 changed files with 5 additions and 4 deletions

View File

@ -749,8 +749,8 @@ public abstract class Server {
private volatile String detailedMetricsName = "";
final int callId; // the client's call id
final int retryCount; // the retry count of the call
long timestampNanos; // time received when response is null
// time served when response is not null
long timestampNanos; // time the call was received
long responseTimestampNanos; // time the call was served
private AtomicInteger responseWaitCount = new AtomicInteger(1);
final RPC.RpcKind rpcKind;
final byte[] clientId;
@ -787,6 +787,7 @@ public abstract class Server {
this.callId = id;
this.retryCount = retryCount;
this.timestampNanos = Time.monotonicNowNanos();
this.responseTimestampNanos = timestampNanos;
this.rpcKind = kind;
this.clientId = clientId;
this.traceScope = traceScope;
@ -1585,7 +1586,7 @@ public abstract class Server {
Iterator<RpcCall> iter = responseQueue.listIterator(0);
while (iter.hasNext()) {
call = iter.next();
if (now > call.timestampNanos + PURGE_INTERVAL_NANOS) {
if (now > call.responseTimestampNanos + PURGE_INTERVAL_NANOS) {
closeConnection(call.connection);
break;
}
@ -1649,7 +1650,7 @@ public abstract class Server {
if (inHandler) {
// set the serve time when the response has to be sent later
call.timestampNanos = Time.monotonicNowNanos();
call.responseTimestampNanos = Time.monotonicNowNanos();
incPending();
try {