Barrier turn on/off - PacketOut bypass 37/28037/4
authorVaclav Demcak <vdemcak@cisco.com>
Thu, 8 Oct 2015 01:07:06 +0000 (03:07 +0200)
committerVaclav Demcak <vdemcak@cisco.com>
Tue, 27 Oct 2015 20:10:10 +0000 (21:10 +0100)
Note: PacketOut doesn't need to wait for any response
so it's marked as completed during the process of flushing

Change-Id: Ib7372e77cefbafe921f28d48bc6c63d9ff12388c
Signed-off-by: Vaclav Demcak <vdemcak@cisco.com>
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/connection/OutboundQueueEntry.java

index 4b8820bd9b430317e7dd4a6b0ddd6d65d091e0ea..a97a50e9b8d1fb1e3843bfeff61b00f03c9432ff 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueExcept
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.BarrierInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,10 +58,18 @@ final class OutboundQueueEntry {
 
     OfHeader takeMessage() {
         final OfHeader ret = message;
+        checkCompletionNeed();
         message = null;
         return ret;
     }
 
+    private void checkCompletionNeed() {
+        if (callback == null || PacketOutInput.class.isInstance(message)) {
+            completed = true;
+            callback = null;
+        }
+    }
+
     boolean complete(final OfHeader response) {
         Preconditions.checkState(!completed, "Attempted to complete a completed message with response %s", response);