bug 8257 handling back to back logical switches 19/55119/4
authorK.V Suneelu Verma <k.v.suneelu.verma@ericsson.com>
Mon, 17 Apr 2017 12:45:14 +0000 (18:15 +0530)
committerAnil Vishnoi <vishnoianil@gmail.com>
Fri, 19 May 2017 08:05:40 +0000 (08:05 +0000)
Making logical switches update/remove participate in
dependency resolution workflow.

When logical switch delete requests comes it is held until
the previous logical switch add request finishes and vice versa.

Change-Id: I5d158759a977f7a0f66dcafd297c4d2f06fa3fd4
Signed-off-by: K.V Suneelu Verma <k.v.suneelu.verma@ericsson.com>
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchRemoveCommand.java
hwvtepsouthbound/hwvtepsouthbound-impl/src/main/java/org/opendaylight/ovsdb/hwvtepsouthbound/transact/LogicalSwitchUpdateCommand.java

index 48abea1481e8157e664bf50affad6fe50afcf0cb..cdc25f81d7b6169f53909dfb1468cbfe6006a4f5 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
 import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.Identifiable;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -74,9 +75,30 @@ public class LogicalSwitchRemoveCommand extends AbstractTransactCommand<LogicalS
         }
     }
 
-    private void removeLogicalSwitch(TransactionBuilder transaction,
-            InstanceIdentifier<Node> instanceIdentifier, List<LogicalSwitches> lswitchList) {
+    private void removeLogicalSwitch(final TransactionBuilder transaction,
+                                     final InstanceIdentifier<Node> nodeIid, final List<LogicalSwitches> lswitchList) {
         for (LogicalSwitches lswitch: lswitchList) {
+            InstanceIdentifier<LogicalSwitches> lsKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class).
+                    child(LogicalSwitches.class, lswitch.getKey());
+            onConfigUpdate(transaction, nodeIid, lswitch, lsKey);
+        }
+    }
+
+    @Override
+    public void onConfigUpdate(final TransactionBuilder transaction,
+                               final InstanceIdentifier<Node> nodeIid,
+                               final LogicalSwitches lswitch,
+                               final InstanceIdentifier lsKey,
+                               final Object... extraData) {
+        processDependencies(null, transaction, nodeIid, lsKey, lswitch);
+    }
+
+    @Override
+    public void doDeviceTransaction(final TransactionBuilder transaction,
+                                    final InstanceIdentifier<Node> instanceIdentifier,
+                                    final LogicalSwitches lswitch,
+                                    final InstanceIdentifier lsKey,
+                                    final Object... extraData) {
             LOG.debug("Removing logcial switch named: {}", lswitch.getHwvtepNodeName().getValue());
             Optional<LogicalSwitches> operationalSwitchOptional =
                     getOperationalState().getLogicalSwitches(instanceIdentifier, lswitch.getKey());
@@ -88,11 +110,11 @@ public class LogicalSwitchRemoveCommand extends AbstractTransactCommand<LogicalS
                 transaction.add(op.delete(logicalSwitch.getSchema())
                         .where(logicalSwitch.getUuidColumn().getSchema().opEqual(logicalSwitchUuid)).build());
                 transaction.add(op.comment("Logical Switch: Deleting " + lswitch.getHwvtepNodeName().getValue()));
+                getOperationalState().getDeviceInfo().markKeyAsInTransit(RemoteMcastMacs.class, lsKey);
             } else {
                 LOG.warn("Unable to delete logical switch {} because it was not found in the operational store",
                         lswitch.getHwvtepNodeName().getValue());
             }
-        }
     }
 
     @Override
index 19b88e87b89ab4a692ba4117018cc6cb90cb7d38..8b22d9ff68d110183fe6b4f653101a88d80b2f4b 100644 (file)
@@ -25,6 +25,7 @@ import org.opendaylight.ovsdb.lib.schema.typed.TyperUtils;
 import org.opendaylight.ovsdb.schema.hardwarevtep.LogicalSwitch;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LogicalSwitches;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.RemoteMcastMacs;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
@@ -52,11 +53,30 @@ public class LogicalSwitchUpdateCommand extends AbstractTransactCommand<LogicalS
         }
     }
 
-    private void updateLogicalSwitch(TransactionBuilder transaction,
-            InstanceIdentifier<Node> instanceIdentifier, List<LogicalSwitches> lswitchList) {
+    private void updateLogicalSwitch(final TransactionBuilder transaction,
+                                     final InstanceIdentifier<Node> nodeIid, final List<LogicalSwitches> lswitchList) {
         for (LogicalSwitches lswitch: lswitchList) {
-            InstanceIdentifier<LogicalSwitches> lsKey = instanceIdentifier.
-                    augmentation(HwvtepGlobalAugmentation.class).child(LogicalSwitches.class, lswitch.getKey());
+            InstanceIdentifier<LogicalSwitches> lsKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class).
+                    child(LogicalSwitches.class, lswitch.getKey());
+            onConfigUpdate(transaction, nodeIid, lswitch, lsKey);
+        }
+    }
+
+    @Override
+    public void onConfigUpdate(final TransactionBuilder transaction,
+                               final InstanceIdentifier<Node> nodeIid,
+                               final LogicalSwitches lswitch,
+                               final InstanceIdentifier lsKey,
+                               final Object... extraData) {
+        processDependencies(null, transaction, nodeIid, lsKey, lswitch);
+    }
+
+    @Override
+    public void doDeviceTransaction(final TransactionBuilder transaction,
+                                    final InstanceIdentifier<Node> instanceIdentifier,
+                                    final LogicalSwitches lswitch,
+                                    final InstanceIdentifier lsKey,
+                                    final Object... extraData) {
             LOG.debug("Creating logical switch named: {}", lswitch.getHwvtepNodeName());
             Optional<LogicalSwitches> operationalSwitchOptional =
                     getOperationalState().getLogicalSwitches(instanceIdentifier, lswitch.getKey());
@@ -69,7 +89,7 @@ public class LogicalSwitchUpdateCommand extends AbstractTransactCommand<LogicalS
                 transaction.add(op.insert(logicalSwitch).withId(TransactUtils.getLogicalSwitchId(lswitch)));
                 transaction.add(op.comment("Logical Switch: Creating " + lswitch.getHwvtepNodeName().getValue()));
                 UUID lsUuid = new UUID(TransactUtils.getLogicalSwitchId(lswitch));
-                updateCurrentTxData(LogicalSwitches.class, lsKey, lsUuid, lswitch);
+                getOperationalState().getDeviceInfo().markKeyAsInTransit(RemoteMcastMacs.class, lsKey);
             } else {
                 LogicalSwitches updatedLSwitch = operationalSwitchOptional.get();
                 String existingLogicalSwitchName = updatedLSwitch.getHwvtepNodeName().getValue();
@@ -82,7 +102,6 @@ public class LogicalSwitchUpdateCommand extends AbstractTransactCommand<LogicalS
                         .build());
                 transaction.add(op.comment("Logical Switch: Updating " + existingLogicalSwitchName));
             }
-        }
     }
 
     private void setDescription(LogicalSwitch logicalSwitch, LogicalSwitches inputSwitch) {