BUG-5280: add executionTimeNanos
[controller.git] / opendaylight / md-sal / cds-access-api / src / main / java / org / opendaylight / controller / cluster / access / concepts / AbstractResponseEnvelopeProxy.java
index 526c97ce32b3d5dd2eabcc0443fe9efdcc39866b..1dbb86bb2f073de2e0d17223870dbe57cfcdfa51 100644 (file)
@@ -7,17 +7,41 @@
  */
 package org.opendaylight.controller.cluster.access.concepts;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.opendaylight.yangtools.concepts.WritableObjects;
+
 abstract class AbstractResponseEnvelopeProxy<T extends Response<?, ?>> extends AbstractEnvelopeProxy<T> {
     private static final long serialVersionUID = 1L;
 
-    protected AbstractResponseEnvelopeProxy() {
+    private long executionTimeNanos;
+
+    AbstractResponseEnvelopeProxy() {
         // for Externalizable
     }
 
     AbstractResponseEnvelopeProxy(final ResponseEnvelope<T> envelope) {
         super(envelope);
+        this.executionTimeNanos = envelope.getExecutionTimeNanos();
+    }
+
+    @Override
+    public final void writeExternal(final ObjectOutput out) throws IOException {
+        super.writeExternal(out);
+        WritableObjects.writeLong(out, executionTimeNanos);
     }
 
     @Override
-    abstract ResponseEnvelope<T> createEnvelope(T message, long sequence, long retry);
+    public final void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        executionTimeNanos = WritableObjects.readLong(in);
+    }
+
+    @Override
+    final ResponseEnvelope<T> createEnvelope(final T message, final long sessionId, final long txSequence) {
+        return createEnvelope(message, sessionId, txSequence, executionTimeNanos);
+    }
+
+    abstract ResponseEnvelope<T> createEnvelope(T message, long sessionId, long txSequence, long executionTimeNanos);
 }