NETVIRT-1144 : Using JC for ExternalNetGroup Installation 62/69262/4
authorxcheara <chetan.arakere@altencalsoftlabs.com>
Thu, 8 Mar 2018 12:36:05 +0000 (18:06 +0530)
committerSam Hague <shague@redhat.com>
Sun, 11 Mar 2018 13:13:43 +0000 (13:13 +0000)
Description:
Due to OptimisticLockFailedException during installtion of external
network subnet group, the installation of default FIB rule for
external-subnet CIDR been not installed resulting in PNF UC failure.

Change done to use JobCordinator fo installing this group there by
preventing multiple listeners attempting to install the same group
symultanously.

Change-Id: I667077eb2750e9e48019e5a2ad70520d3ada4d8b
Signed-off-by: xcheara <chetan.arakere@altencalsoftlabs.com>
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalNetworkGroupInstaller.java

index 8f736c0bb9e4b24b67fdfbb188d73648d40b9544..cce5582db342e432929f76dc543617104667e4b8 100644 (file)
@@ -9,10 +9,12 @@
 package org.opendaylight.netvirt.natservice.internal;
 
 import com.google.common.base.Strings;
+
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -24,6 +26,7 @@ import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.actions.ActionDrop;
 import org.opendaylight.genius.mdsalutil.actions.ActionSetFieldEthernetDestination;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
@@ -42,16 +45,19 @@ public class ExternalNetworkGroupInstaller {
     private final IElanService elanService;
     private final IdManagerService idManager;
     private final OdlInterfaceRpcService interfaceManager;
+    private final JobCoordinator coordinator;
 
     @Inject
     public ExternalNetworkGroupInstaller(final DataBroker broker, final IMdsalApiManager mdsalManager,
                                      final IElanService elanService, final IdManagerService idManager,
-                                     final OdlInterfaceRpcService interfaceManager) {
+                                     final OdlInterfaceRpcService interfaceManager,
+                                     final JobCoordinator coordinator) {
         this.broker = broker;
         this.mdsalManager = mdsalManager;
         this.elanService = elanService;
         this.idManager = idManager;
         this.interfaceManager = interfaceManager;
+        this.coordinator = coordinator;
     }
 
     public void installExtNetGroupEntries(Subnetmap subnetMap) {
@@ -157,10 +163,14 @@ public class ExternalNetworkGroupInstaller {
 
     private void installExtNetGroupEntry(long groupId, String subnetName, String extInterface,
             String macAddress, BigInteger dpnId) {
-        GroupEntity groupEntity = buildExtNetGroupEntity(macAddress, subnetName, groupId, extInterface, dpnId);
-        if (groupEntity != null) {
-            mdsalManager.syncInstallGroup(groupEntity);
-        }
+
+        coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + subnetName + extInterface, () -> {
+            GroupEntity groupEntity = buildExtNetGroupEntity(macAddress, subnetName, groupId, extInterface, dpnId);
+            if (groupEntity != null) {
+                mdsalManager.syncInstallGroup(groupEntity);
+            }
+            return Collections.emptyList();
+        });
     }
 
     public void removeExtNetGroupEntries(Subnetmap subnetMap) {