BUG:7896 OptimisticLockFailedException 19/53519/2
authorepgoraj <p.govinda.rajulu@ericsson.com>
Wed, 1 Mar 2017 06:54:03 +0000 (12:24 +0530)
committerVivekanandan Narasimhan <n.vivekanandan@ericsson.com>
Sun, 19 Mar 2017 11:40:09 +0000 (11:40 +0000)
Change-Id: I977feeb0226613b1a93cfb8092d4afa88926979e
Signed-off-by: epgoraj <p.govinda.rajulu@ericsson.com>
Signed-off-by: Vivekanandan Narasimhan <n.vivekanandan@ericsson.com>
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceManager.java
vpnservice/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanSmacFlowEventListener.java

index 9af562a68b6fd556f28ce0b4548607cb3c7dea6a..9976426afbb2210044983c0dddbd0380d9799f34 100644 (file)
@@ -1380,8 +1380,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         BoundServices serviceInfo = ElanUtils.getBoundServices(
                 String.format("%s.%s.%s", "elan", elanInstanceName, interfaceName), elanServiceIndex,
                 ElanConstants.ELAN_SERVICE_PRIORITY, NwConstants.COOKIE_ELAN_INGRESS_TABLE, instructions);
-        tx.put(LogicalDatastoreType.CONFIGURATION,
+        InstanceIdentifier<BoundServices> bindServiceId = ElanUtils.buildServiceId(interfaceName, elanServiceIndex);
+        Optional<BoundServices> existingElanService = elanUtils.read(broker, LogicalDatastoreType.CONFIGURATION,
+                bindServiceId);
+        if (!existingElanService.isPresent()) {
+            tx.put(LogicalDatastoreType.CONFIGURATION,
                 ElanUtils.buildServiceId(interfaceName, elanServiceIndex), serviceInfo, true);
+        }
     }
 
     private void bindEtreeService(ElanInstance elanInfo, ElanInterface elanInterface, int lportTag,
index 6de9ad54187f3d2015ccc64799d33e03cf9f332d..1b212925e39efa09a6660e819e8d77b50abda5ba 100644 (file)
@@ -103,7 +103,11 @@ public class ElanSmacFlowEventListener implements SalFlowListener {
             if (existingInterfaceMacEntry.isPresent()) {
                 tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInterface);
             }
-            tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInstance);
+            Optional<MacEntry> existingMacEntryForElanInstance = elanUtils.read(broker,
+                LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInstance);
+            if (existingMacEntryForElanInstance.isPresent()) {
+                tx.delete(LogicalDatastoreType.OPERATIONAL, macEntryIdForElanInstance);
+            }
             ListenableFuture<Void> writeResult = tx.submit();
             addCallBack(writeResult, srcMacAddress);
         }