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

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

View File

@ -750,8 +750,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;
@ -788,6 +788,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;
@ -1586,7 +1587,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;
}
@ -1650,7 +1651,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 {