HADOOP-14732. ProtobufRpcEngine should use Time.monotonicNow to measure durations. Contributed by Hanisha Koneru.

This commit is contained in:
Arpit Agarwal 2017-08-14 15:53:35 -07:00
parent 5558792894
commit 8bef4eca28

View File

@ -190,7 +190,7 @@ public Message invoke(Object proxy, final Method method, Object[] args)
throws ServiceException {
long startTime = 0;
if (LOG.isDebugEnabled()) {
startTime = Time.now();
startTime = Time.monotonicNow();
}
if (args.length != 2) { // RpcController + Message
@ -245,7 +245,7 @@ public Message invoke(Object proxy, final Method method, Object[] args)
}
if (LOG.isDebugEnabled()) {
long callTime = Time.now() - startTime;
long callTime = Time.monotonicNow() - startTime;
LOG.debug("Call: " + method.getName() + " took " + callTime + "ms");
}
@ -373,19 +373,19 @@ public ProtobufRpcEngineCallbackImpl() {
this.server = currentCallInfo.get().server;
this.call = Server.getCurCall().get();
this.methodName = currentCallInfo.get().methodName;
this.setupTime = Time.now();
this.setupTime = Time.monotonicNow();
}
@Override
public void setResponse(Message message) {
long processingTime = Time.now() - setupTime;
long processingTime = Time.monotonicNow() - setupTime;
call.setDeferredResponse(RpcWritable.wrap(message));
server.updateDeferredMetrics(methodName, processingTime);
}
@Override
public void error(Throwable t) {
long processingTime = Time.now() - setupTime;
long processingTime = Time.monotonicNow() - setupTime;
String detailedMetricsName = t.getClass().getSimpleName();
server.updateDeferredMetrics(detailedMetricsName, processingTime);
call.setDeferredError(t);
@ -513,7 +513,7 @@ public Writable call(RPC.Server server, String connectionProtocolName,
Message param = request.getValue(prototype);
Message result;
long startTime = Time.now();
long startTime = Time.monotonicNow();
int qTime = (int) (startTime - receiveTime);
Exception exception = null;
boolean isDeferred = false;
@ -537,7 +537,7 @@ public Writable call(RPC.Server server, String connectionProtocolName,
throw e;
} finally {
currentCallInfo.set(null);
int processingTime = (int) (Time.now() - startTime);
int processingTime = (int) (Time.monotonicNow() - startTime);
if (LOG.isDebugEnabled()) {
String msg =
"Served: " + methodName + (isDeferred ? ", deferred" : "") +