KUDU-2374: Add RpcContext::GetTimeReceived()

This change adds RpcContext::GetTimeReceived() which returns
the time at which the inbound call associated with the RpcContext
was received. It's helpful to make this accessible to the RPC
handlers for its own book-keeping purpose (e.g. reporting the
average dispatch latency as part of query profile in Impala).

Change-Id: I6b39c7f2ea856eccfdab8c1bb1433829e979ae13
Reviewed-on: http://gerrit.cloudera.org:8080/9796
Tested-by: Kudu Jenkins
Reviewed-by: Todd Lipcon <[email protected]>
Reviewed-on: http://gerrit.cloudera.org:8080/9807
Reviewed-by: Joe McDonnell <[email protected]>
Tested-by: Impala Public Jenkins


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/dadcf557
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/dadcf557
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/dadcf557

Branch: refs/heads/2.x
Commit: dadcf557fdd14f40a5000a1862a2463fd5af7a7f
Parents: 5ce2bc4
Author: Michael Ho <[email protected]>
Authored: Sat Mar 24 17:49:58 2018 -0700
Committer: Impala Public Jenkins <[email protected]>
Committed: Tue Mar 27 03:35:01 2018 +0000

----------------------------------------------------------------------
 be/src/kudu/rpc/rpc-test-base.h | 3 +++
 be/src/kudu/rpc/rpc_context.cc  | 4 ++++
 be/src/kudu/rpc/rpc_context.h   | 3 +++
 3 files changed, 10 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/dadcf557/be/src/kudu/rpc/rpc-test-base.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/rpc-test-base.h b/be/src/kudu/rpc/rpc-test-base.h
index 332a7a1..5a5652e 100644
--- a/be/src/kudu/rpc/rpc-test-base.h
+++ b/be/src/kudu/rpc/rpc-test-base.h
@@ -41,6 +41,7 @@
 #include "kudu/util/env.h"
 #include "kudu/util/faststring.h"
 #include "kudu/util/mem_tracker.h"
+#include "kudu/util/monotime.h"
 #include "kudu/util/net/sockaddr.h"
 #include "kudu/util/path_util.h"
 #include "kudu/util/pb_util.h"
@@ -210,6 +211,8 @@ class GenericCalculatorService : public ServiceIf {
 
     LOG(INFO) << "got call: " << SecureShortDebugString(req);
     SleepFor(MonoDelta::FromMicroseconds(req.sleep_micros()));
+    MonoDelta 
duration(MonoTime::Now().GetDeltaSince(incoming->GetTimeReceived()));
+    CHECK_GE(duration.ToMicroseconds(), req.sleep_micros());
     SleepResponsePB resp;
     incoming->RespondSuccess(resp);
   }

http://git-wip-us.apache.org/repos/asf/impala/blob/dadcf557/be/src/kudu/rpc/rpc_context.cc
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/rpc_context.cc b/be/src/kudu/rpc/rpc_context.cc
index 274966b..3f5d556 100644
--- a/be/src/kudu/rpc/rpc_context.cc
+++ b/be/src/kudu/rpc/rpc_context.cc
@@ -183,6 +183,10 @@ MonoTime RpcContext::GetClientDeadline() const {
   return call_->GetClientDeadline();
 }
 
+MonoTime RpcContext::GetTimeReceived() const {
+  return call_->GetTimeReceived();
+}
+
 Trace* RpcContext::trace() {
   return call_->trace();
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/dadcf557/be/src/kudu/rpc/rpc_context.h
----------------------------------------------------------------------
diff --git a/be/src/kudu/rpc/rpc_context.h b/be/src/kudu/rpc/rpc_context.h
index 938576c..353bedd 100644
--- a/be/src/kudu/rpc/rpc_context.h
+++ b/be/src/kudu/rpc/rpc_context.h
@@ -192,6 +192,9 @@ class RpcContext {
   // If the client did not specify a deadline, returns MonoTime::Max().
   MonoTime GetClientDeadline() const;
 
+  // Return the time when the inbound call was received.
+  MonoTime GetTimeReceived() const;
+
   // Whether the results of this RPC are tracked with a ResultTracker.
   // If this returns true, both result_tracker() and request_id() should 
return non-null results.
   bool AreResultsTracked() const { return result_tracker_.get() != nullptr; }

Reply via email to