import java.util.List;
import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.locks.ReentrantLock;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
+import org.opendaylight.genius.utils.JvmGlobalLocks;
import org.opendaylight.netvirt.vpnmanager.api.IVpnManager;
-import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTarget;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanInstances;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstanceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.vpn.instance.vpntargets.VpnTarget;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NetworkAttributes.NetworkType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
if (isBgpVpn && subnetmap.getRouterId() == null) {
Set<VpnTarget> routeTargets = vpnManager.getRtListForVpn(vpnId.getValue());
if (!routeTargets.isEmpty()) {
- synchronized (subnetmap.getSubnetIp().intern()) {
+ // FIXME: separate this out somehow?
+ final ReentrantLock lock = JvmGlobalLocks.getLockForString(subnetmap.getSubnetIp());
+ lock.lock();
+ try {
vpnManager.updateRouteTargetsToSubnetAssociation(routeTargets, subnetmap.getSubnetIp(),
vpnId.getValue());
+ } finally {
+ lock.unlock();
}
}
}
vpnSubnetRouteHandler.onSubnetDeletedFromVpn(subnetmapOriginal, true);
}
// subnet updated in VPN
- if (vpnIdOld != null && vpnIdNew != null && (!vpnIdNew.equals(vpnIdOld))) {
+ if (vpnIdOld != null && vpnIdNew != null && !vpnIdNew.equals(vpnIdOld)) {
vpnSubnetRouteHandler.onSubnetUpdatedInVpn(subnetmapUpdate, elanTag);
}
}
LogicalDatastoreType.CONFIGURATION, elanIdentifierId);
if (elanInstance.isPresent()) {
if (elanInstance.get().getElanTag() != null) {
- elanTag = elanInstance.get().getElanTag();
+ elanTag = elanInstance.get().getElanTag().toJava();
} else {
LOG.error("Notification failed because of failure in fetching elanTag for ElanInstance {}",
elanInstanceName);