HADOOP-16700. Track response time separately in Server.Call to avoid negative RpcQueueTime values. Contributed by xuzq.
(cherry picked frombe77231452
) (cherry picked fromc1ed247459
)
This commit is contained in:
parent
5eb21b83df
commit
23f25418e8
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue