BUG-5280: add executionTimeNanos
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / ResponseEnvelope.java
index 9f998e7fac49b81d71e97487ed306c7205a0dda8..7936baa1696059b184b8ff55f548ac5fd6e9229b 100644 (file)
@@ -7,10 +7,29 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
+import com.google.common.base.Preconditions;
+
 public abstract class ResponseEnvelope<T extends Response<?, ?>> extends Envelope<T> {
     private static final long serialVersionUID = 1L;
 
-    ResponseEnvelope(final T message, final long sessionId, final long txSequence) {
+    private final long executionTimeNanos;
+
+    ResponseEnvelope(final T message, final long sessionId, final long txSequence, final long executionTimeNanos) {
         super(message, sessionId, txSequence);
+        Preconditions.checkArgument(executionTimeNanos >= 0);
+        this.executionTimeNanos = executionTimeNanos;
     }
+
+    /**
+     * Return the time the request took to execute in nanoseconds. This may not reflect the actual CPU time, but rather
+     * a measure of the complexity involved in servicing the original request.
+     *
+     * @return Time the request took to execute in nanoseconds
+     */
+    public final long getExecutionTimeNanos() {
+        return executionTimeNanos;
+    }
+
+    @Override
+    abstract AbstractResponseEnvelopeProxy<T> createProxy();
 }