bug 8257 handling back to back mcast mac updates
[ovsdb.git] / hwvtepsouthbound / hwvtepsouthbound-impl / src / main / java / org / opendaylight / ovsdb / hwvtepsouthbound / transact / McastMacsRemoteRemoveCommand.java
index 95814f61741b47e38f66e8ab69e13c0ac780281b..8aeff6a790b651d2030bd450c73c172d9bc0cb19 100644 (file)
@@ -70,9 +70,30 @@ public class McastMacsRemoteRemoveCommand extends AbstractTransactCommand<Remote
         }
     }
 
-    private void removeMcastMacRemote(TransactionBuilder transaction,
-            InstanceIdentifier<Node> instanceIdentifier, List<RemoteMcastMacs> macList) {
-        for (RemoteMcastMacs mac: macList) {
+    private void removeMcastMacRemote(final TransactionBuilder transaction,
+                                      final InstanceIdentifier<Node> nodeIid, final List<RemoteMcastMacs> macList) {
+        for (RemoteMcastMacs mac : macList) {
+            InstanceIdentifier<RemoteMcastMacs> macKey = nodeIid.augmentation(HwvtepGlobalAugmentation.class).
+                    child(RemoteMcastMacs.class, mac.getKey());
+            onConfigUpdate(transaction, nodeIid, mac, macKey);
+        }
+    }
+
+    @Override
+    public void onConfigUpdate(final TransactionBuilder transaction,
+                               final InstanceIdentifier<Node> nodeIid,
+                               final RemoteMcastMacs remoteMcastMac,
+                               final InstanceIdentifier macKey,
+                               final Object... extraData) {
+        processDependencies(null, transaction, nodeIid, macKey, remoteMcastMac);
+    }
+
+    @Override
+    public void doDeviceTransaction(final TransactionBuilder transaction,
+                                    final InstanceIdentifier<Node> instanceIdentifier,
+                                    final RemoteMcastMacs mac,
+                                    final InstanceIdentifier macIid,
+                                    final Object... extraData) {
             LOG.debug("Removing remoteMcastMacs, mac address: {}", mac.getMacEntryKey().getValue());
             Optional<RemoteMcastMacs> operationalMacOptional =
                     getOperationalState().getRemoteMcastMacs(instanceIdentifier, mac.getKey());
@@ -86,14 +107,12 @@ public class McastMacsRemoteRemoveCommand extends AbstractTransactCommand<Remote
                 transaction.add(op.delete(mcastMacsRemote.getSchema()).
                         where(mcastMacsRemote.getUuidColumn().getSchema().opEqual(macEntryUUID)).build());
                 transaction.add(op.comment("McastMacRemote: Deleting " + mac.getMacEntryKey().getValue()));
+                getOperationalState().getDeviceInfo().markKeyAsInTransit(RemoteMcastMacs.class, macIid);
             } else {
                 LOG.warn("Unable to delete remoteMcastMacs {} because it was not found in the operational store",
                         mac.getMacEntryKey().getValue());
             }
-            InstanceIdentifier<RemoteMcastMacs> macIid = instanceIdentifier.augmentation(HwvtepGlobalAugmentation.class).
-                    child(RemoteMcastMacs.class, mac.getKey());
             updateCurrentTxDeleteData(RemoteMcastMacs.class, macIid, mac);
-        }
     }
 
     @Override
@@ -105,4 +124,9 @@ public class McastMacsRemoteRemoveCommand extends AbstractTransactCommand<Remote
     protected boolean areEqual(RemoteMcastMacs a, RemoteMcastMacs b) {
         return a.getKey().equals(b.getKey()) && Objects.equals(a.getLocatorSet(), b.getLocatorSet());
     }
+
+    @Override
+    protected boolean isRemoveCommand() {
+        return true;
+    }
 }