Bug 8790 - Local Macs getting cleared 71/59871/2
authoreaksahu <a.k.sahu@ericsson.com>
Mon, 3 Jul 2017 12:38:35 +0000 (18:08 +0530)
committerSam Hague <shague@redhat.com>
Fri, 14 Jul 2017 22:24:03 +0000 (22:24 +0000)
Local Macs are getting cleared from HA parent node , in case only one of
the HA child node is diconnected.
It should be cleared if both the HA nodes are disconnected .

Change-Id: I222bc69aa7e4aa477870014a793e0ae5d73de26c
Signed-off-by: eaksahu <a.k.sahu@ericsson.com>
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/ha/listeners/HwvtepNodeDataListener.java

index 1100e01f9752c6298bf22fa6b1365f6383d37edc..9975f9fe18828363c99e2ceceb56d4d4769f1dd2 100644 (file)
@@ -95,7 +95,10 @@ public abstract class HwvtepNodeDataListener<T extends DataObject>
                 boolean create = false;
                 ReadWriteTransaction tx = broker.newReadWriteTransaction();
                 if (LogicalDatastoreType.OPERATIONAL == datastoreType.getDatastoreType()) {
-                    copyToParent(identifier, dataRemoved, create, tx);
+                    if (isNodeConnected(identifier, tx)) {
+                        //Do not process the remove from disconnected child node
+                        copyToParent(identifier, dataRemoved, create, tx);
+                    }
                 } else {
                     copyToChild(identifier, dataRemoved, create, tx);
                 }
@@ -105,6 +108,12 @@ public abstract class HwvtepNodeDataListener<T extends DataObject>
         });
     }
 
+    protected boolean isNodeConnected(InstanceIdentifier<T> identifier, ReadWriteTransaction tx)
+            throws ReadFailedException {
+        return tx.read(LogicalDatastoreType.OPERATIONAL, identifier.firstIdentifierOf(Node.class))
+                .checkedGet().isPresent();
+    }
+
     <T extends DataObject> boolean isDataUpdated(Optional<T> existingDataOptional, T newData) {
         return !existingDataOptional.isPresent() || !Objects.equals(existingDataOptional.get(), newData);
     }