import com.google.common.base.Optional;
import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.ListenableFuture;
+import java.math.BigInteger;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator;
-import org.opendaylight.genius.mdsalutil.*;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AddDpnEvent;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.OdlL3vpnListener;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.RemoveDpnEvent;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.remove.dpn.event.RemoveEventData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry
- .VpnToDpnList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-
public class DpnInVpnChangeListener implements OdlL3vpnListener {
private static final Logger LOG = LoggerFactory.getLogger(DpnInVpnChangeListener.class);
- private DataBroker dataBroker;
- private IMdsalApiManager mdsalManager;
- private IdManagerService idManager;
+ private final DataBroker dataBroker;
public DpnInVpnChangeListener(DataBroker dataBroker) {
this.dataBroker = dataBroker;
Optional<VpnInstanceOpDataEntry> vpnOpValue = VpnUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, id);
if (vpnOpValue.isPresent()) {
- LOG.trace(" Active Dpn count {} in VpnInstOpData", vpnOpValue.get().getActiveDpnCount());
- if (vpnOpValue.get().getActiveDpnCount() == 0) {
- final Collection<VpnToDpnList> vpnToDpnList = vpnOpValue.get().getVpnToDpnList();
-
- DataStoreJobCoordinator dataStoreCoordinator = DataStoreJobCoordinator.getInstance();
- dataStoreCoordinator.enqueueJob("VPN-" + vpnName + "-DPN-" + dpnId.toString() ,
- new Callable<List<ListenableFuture<Void>>>() {
- @Override
- public List<ListenableFuture<Void>> call() throws Exception {
- WriteTransaction writeTxn = dataBroker.newWriteOnlyTransaction();
- deleteDpn(vpnToDpnList , rd , writeTxn);
- CheckedFuture<Void, TransactionCommitFailedException> futures = writeTxn.submit();
- try {
- futures.get();
- } catch (InterruptedException | ExecutionException e) {
- LOG.error("Error removing dpnToVpnList for vpn {} ", vpnName);
- throw new RuntimeException(e.getMessage());
- }
- return null;
- }
- });
-
+ VpnInstanceOpDataEntry vpnInstOpData = vpnOpValue.get();
+ List<VpnToDpnList> vpnToDpnList = vpnInstOpData.getVpnToDpnList();
+ boolean flushDpnsOnVpn = true;
+ for (VpnToDpnList dpn: vpnToDpnList) {
+ if (dpn.getDpnState() == VpnToDpnList.DpnState.Active) {
+ flushDpnsOnVpn = false;
+ break;
+ }
+ }
+ if (flushDpnsOnVpn) {
+ WriteTransaction writeTxn = dataBroker.newWriteOnlyTransaction();
+ deleteDpn(vpnToDpnList , rd , writeTxn);
+ CheckedFuture<Void, TransactionCommitFailedException> futures = writeTxn.submit();
+ try {
+ futures.get();
+ } catch (InterruptedException | ExecutionException e) {
+ LOG.error("Error removing dpnToVpnList for vpn {} ", vpnName);
+ throw new RuntimeException(e.getMessage());
+ }
}
}
}