HONEYCOMB-99: perform write/update after delete for all list writers
authorMarek Gradzki <[email protected]>
Wed, 22 Jun 2016 08:59:16 +0000 (10:59 +0200)
committerMarek Gradzki <[email protected]>
Wed, 22 Jun 2016 09:02:17 +0000 (11:02 +0200)
Order of delete/write/update operations can have side-effects for
devices like VPP:

Adding more than one IPv4 address can in some circumstances
be silently ignored by VPP, therefore in case of updating IPs list,
addresses have to be deleted first.

Change-Id: I8712827e3c95232dac20a9ee35be1bc5b567bd54
Signed-off-by: Marek Gradzki <[email protected]>
v3po/translate-impl/src/main/java/io/fd/honeycomb/v3po/translate/impl/write/CompositeListWriter.java

index de1ac39..fe9e8d5 100644 (file)
@@ -138,6 +138,16 @@ public class CompositeListWriter<D extends DataObject & Identifiable<K>, K exten
         final Map<Object, D> dataBefore = listOfIdentifiableToMap(customizer.extract(currentId, parentDataBefore));
         final Map<Object, D> dataAfter = listOfIdentifiableToMap(customizer.extract(currentId, parentDataAfter));
 
+        // The order of delete/write/update operations can have side-effects for devices like VPP
+        // TODO make it configurable
+
+        // First perform delete:
+        for (Object deletedNodeKey : Sets.difference(dataBefore.keySet(), dataAfter.keySet())) {
+            final D deleted = dataBefore.get(deletedNodeKey);
+            deleteCurrent(currentId, deleted, ctx);
+        }
+
+        // Then write/update:
         for (Map.Entry<Object, D> after : dataAfter.entrySet()) {
             final D before = dataBefore.get(after.getKey());
             if(before == null) {
@@ -147,12 +157,6 @@ public class CompositeListWriter<D extends DataObject & Identifiable<K>, K exten
             }
         }
 
-        // Delete the rest in dataBefore
-        for (Object deletedNodeKey : Sets.difference(dataBefore.keySet(), dataAfter.keySet())) {
-            final D deleted = dataBefore.get(deletedNodeKey);
-            deleteCurrent(currentId, deleted, ctx);
-        }
-
     }
 
     @Override