Bug 5540 - FlowConvertor, FlowStatsResponseConvertor, FlowInstructionResponseConvertor
[openflowplugin.git] / openflowplugin-impl / src / main / java / org / opendaylight / openflowplugin / impl / services / AbstractRequestCallback.java
index 47692c7956af6dd2934c99dea2b33d2fa884d222..ca6ddd759dca10f6b814bc8c4ee570666145126f 100644 (file)
@@ -13,8 +13,10 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import org.opendaylight.openflowjava.protocol.api.connection.DeviceRequestFailedException;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
+import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.EventIdentifier;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy;
 import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy.STATISTIC_GROUP;
+import org.opendaylight.openflowplugin.impl.statistics.ofpspecific.EventsTimeCounter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.Error;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yangtools.yang.common.RpcError;
@@ -25,6 +27,8 @@ abstract class AbstractRequestCallback<T> implements FutureCallback<OfHeader> {
     private final RequestContext<T> context;
     private final Class<?> requestType;
     private final MessageSpy spy;
+    private EventIdentifier eventIdentifier;
+
 
     protected AbstractRequestCallback(final RequestContext<T> context, final Class<?> requestType, final MessageSpy spy) {
         this.context = Preconditions.checkNotNull(context);
@@ -32,6 +36,16 @@ abstract class AbstractRequestCallback<T> implements FutureCallback<OfHeader> {
         this.spy = Preconditions.checkNotNull(spy);
     }
 
+    protected AbstractRequestCallback(final RequestContext<T> context,
+                                      final Class<?> requestType,
+                                      final MessageSpy spy,
+                                      final EventIdentifier eventIdentifier) {
+        this.context = Preconditions.checkNotNull(context);
+        this.requestType = Preconditions.checkNotNull(requestType);
+        this.spy = Preconditions.checkNotNull(spy);
+        this.eventIdentifier = eventIdentifier;
+    }
+
     protected final void setResult(@Nullable final RpcResult<T> result) {
         context.setResult(result);
         context.close();
@@ -41,9 +55,16 @@ abstract class AbstractRequestCallback<T> implements FutureCallback<OfHeader> {
         spy.spyMessage(requestType, Preconditions.checkNotNull(group));
     }
 
+    public EventIdentifier getEventIdentifier() {
+        return eventIdentifier;
+    }
+
     @Override
     public final void onFailure(final Throwable t) {
         final RpcResultBuilder<T> builder;
+        if (null != eventIdentifier) {
+            EventsTimeCounter.markEnd(eventIdentifier);
+        }
         if (t instanceof DeviceRequestFailedException) {
             final Error err = ((DeviceRequestFailedException) t).getError();
             final String errorString = String.format("Device reported error type %s code %s", err.getTypeString(), err.getCodeString());
@@ -56,6 +77,6 @@ abstract class AbstractRequestCallback<T> implements FutureCallback<OfHeader> {
         }
 
         context.setResult(builder.build());
-        RequestContextUtil.closeRequstContext(context);
+        RequestContextUtil.closeRequestContext(context);
     }
 }