import org.opendaylight.genius.mdsalutil.cache.InstanceIdDataObjectCache;
import org.opendaylight.infrautils.caches.CacheProvider;
import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
+import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnEndpoints;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
protected void added(InstanceIdentifier<DPNTEPsInfo> path, DPNTEPsInfo dpnTepsInfo) {
LOG.info("DPNTepsInfo Add Received for {}", dpnTepsInfo.getDPNID());
String dpnId = dpnTepsInfo.getDPNID().toString();
- directTunnelUtils.getTunnelLocks().lock(dpnId);
- Collection<TunnelStateInfo> tunnelStateInfoList = unprocessedNodeConnectorEndPointCache.remove(dpnId);
- directTunnelUtils.getTunnelLocks().unlock(dpnId);
+
+ Collection<TunnelStateInfo> tunnelStateInfoList;
+ try (Acquired lock = directTunnelUtils.lockTunnel(dpnId)) {
+ tunnelStateInfoList = unprocessedNodeConnectorEndPointCache.remove(dpnId);
+ }
if (tunnelStateInfoList != null) {
for (TunnelStateInfo tsInfo : tunnelStateInfoList) {
dstDpnTepsInfo = tsInfo.getDstDpnTepsInfo();
if (dstDpnTepsInfo == null) {
// Check if the destination End Point has come
- try {
- directTunnelUtils.getTunnelLocks().lock(tunnelEndPointInfo.getDstEndPointInfo());
+ try (Acquired lock = directTunnelUtils.lockTunnel(tunnelEndPointInfo.getDstEndPointInfo())) {
Optional<DPNTEPsInfo> dstInfoOpt = getDPNTepFromDPNId(
new BigInteger(tunnelEndPointInfo.getDstEndPointInfo()));
if (dstInfoOpt.isPresent()) {
unprocessedNodeConnectorEndPointCache.add(tunnelEndPointInfo
.getDstEndPointInfo(), tunnelStateInfoNew);
}
- } finally {
- directTunnelUtils.getTunnelLocks().unlock(tunnelEndPointInfo.getDstEndPointInfo());
}
}
} else if (dpnId.equals(tunnelEndPointInfo.getDstEndPointInfo())) {
srcDpnTepsInfo = tsInfo.getSrcDpnTepsInfo();
// Check if the destination End Point has come
if (srcDpnTepsInfo == null) {
- try {
- directTunnelUtils.getTunnelLocks().lock(tunnelEndPointInfo.getSrcEndPointInfo());
+ try (Acquired lock = directTunnelUtils.lockTunnel(tunnelEndPointInfo.getSrcEndPointInfo())) {
Optional<DPNTEPsInfo> srcInfoOpt = getDPNTepFromDPNId(
new BigInteger(tunnelEndPointInfo.getSrcEndPointInfo()));
if (srcInfoOpt.isPresent()) {
unprocessedNodeConnectorEndPointCache.add(tunnelEndPointInfo.getSrcEndPointInfo(),
tunnelStateInfoNew);
}
- } finally {
- directTunnelUtils.getTunnelLocks().unlock(tunnelEndPointInfo.getSrcEndPointInfo());
}
}
}
import org.opendaylight.genius.mdsalutil.cache.DataObjectCache;
import org.opendaylight.infrautils.caches.CacheProvider;
import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
+import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBfd;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.DpnTepsState;
TunnelStateInfo tunnelStateInfoNew = null;
- directTunnelUtils.getTunnelLocks().lock(remoteDpns.getTunnelName());
- TunnelStateInfo tunnelStateInfo = unprocessedNCCache.remove(remoteDpns.getTunnelName());
- directTunnelUtils.getTunnelLocks().unlock(remoteDpns.getTunnelName());
+ TunnelStateInfo tunnelStateInfo;
+ try (Acquired lock = directTunnelUtils.lockTunnel(remoteDpns.getTunnelName())) {
+ tunnelStateInfo = unprocessedNCCache.remove(remoteDpns.getTunnelName());
+ }
if (tunnelStateInfo != null) {
LOG.debug("Processing the Unprocessed NodeConnector for Tunnel {}", remoteDpns.getTunnelName());
tunnelStateInfoNew = builder.build();
if (tunnelStateInfoNew.getSrcDpnTepsInfo() == null) {
String srcDpnId = tunnelStateInfoNew.getTunnelEndPointInfo().getSrcEndPointInfo();
- directTunnelUtils.getTunnelLocks().lock(srcDpnId);
- LOG.debug("Source DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
- remoteDpns.getTunnelName(), srcDpnId);
- unprocessedNodeConnectorEndPointCache.add(srcDpnId, tunnelStateInfoNew);
- directTunnelUtils.getTunnelLocks().unlock(srcDpnId);
+ try (Acquired lock = directTunnelUtils.lockTunnel(srcDpnId)) {
+ LOG.debug("Source DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
+ remoteDpns.getTunnelName(), srcDpnId);
+ unprocessedNodeConnectorEndPointCache.add(srcDpnId, tunnelStateInfoNew);
+ }
}
if (tunnelStateInfoNew.getDstDpnTepsInfo() == null) {
String dstDpnId = tunnelStateInfo.getTunnelEndPointInfo().getDstEndPointInfo();
- directTunnelUtils.getTunnelLocks().lock(dstDpnId);
- LOG.debug("Destination DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
- remoteDpns.getTunnelName(), dstDpnId);
- unprocessedNodeConnectorEndPointCache.add(dstDpnId, tunnelStateInfoNew);
- directTunnelUtils.getTunnelLocks().unlock(dstDpnId);
+ try (Acquired lock = directTunnelUtils.lockTunnel(dstDpnId)) {
+ LOG.debug("Destination DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
+ remoteDpns.getTunnelName(), dstDpnId);
+ unprocessedNodeConnectorEndPointCache.add(dstDpnId, tunnelStateInfoNew);
+ }
}
}
import org.opendaylight.genius.itm.utils.TunnelStateInfo;
import org.opendaylight.genius.itm.utils.TunnelStateInfoBuilder;
import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
+import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
import org.opendaylight.serviceutils.tools.mdsal.listener.AbstractClusteredSyncDataTreeChangeListener;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
new NodeConnectorInfoBuilder().setNodeConnectorId(key).setNodeConnector(fcNodeConnectorNew).build();
TunnelStateInfo tunnelStateInfo = null;
TunnelEndPointInfo tunnelEndPtInfo = null;
- try {
- directTunnelUtils.getTunnelLocks().lock(portName);
+ try (Acquired lock = directTunnelUtils.lockTunnel(portName)) {
if (!dpnTepStateCache.isConfigAvailable(portName)) {
// Park the notification
LOG.debug("Unable to process the NodeConnector ADD event for {} as Config not available."
LOG.debug("{} Interface is not a internal tunnel I/f, so no-op", portName);
return;
}
- } finally {
- directTunnelUtils.getTunnelLocks().unlock(portName);
}
if (DirectTunnelUtils.TUNNEL_PORT_PREDICATE.test(portName) && dpnTepStateCache.isInternal(portName)) {
tunnelStateInfo = builder.setTunnelEndPointInfo(tunnelEndPtInfo)
.setDpnTepInterfaceInfo(dpnTepStateCache.getTunnelFromCache(portName)).build();
if (tunnelStateInfo.getSrcDpnTepsInfo() == null) {
- directTunnelUtils.getTunnelLocks().lock(tunnelEndPtInfo.getSrcEndPointInfo());
- LOG.debug("Source DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
+ try (Acquired lock = directTunnelUtils.lockTunnel(tunnelEndPtInfo.getSrcEndPointInfo())) {
+ LOG.debug("Source DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
portName, tunnelEndPtInfo.getSrcEndPointInfo());
- unprocessedNodeConnectorEndPointCache.add(tunnelEndPtInfo.getSrcEndPointInfo(), tunnelStateInfo);
- directTunnelUtils.getTunnelLocks().unlock(tunnelEndPtInfo.getSrcEndPointInfo());
+ unprocessedNodeConnectorEndPointCache.add(tunnelEndPtInfo.getSrcEndPointInfo(), tunnelStateInfo);
+ }
}
if (tunnelStateInfo.getDstDpnTepsInfo() == null) {
- directTunnelUtils.getTunnelLocks().lock(tunnelEndPtInfo.getDstEndPointInfo());
- LOG.debug("Destination DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
+ try (Acquired lock = directTunnelUtils.lockTunnel(tunnelEndPtInfo.getDstEndPointInfo())) {
+ LOG.debug("Destination DPNTepsInfo is null for tunnel {}. Hence Parking with key {}",
portName, tunnelEndPtInfo.getDstEndPointInfo());
- unprocessedNodeConnectorEndPointCache.add(tunnelEndPtInfo.getDstEndPointInfo(), tunnelStateInfo);
- directTunnelUtils.getTunnelLocks().unlock(tunnelEndPtInfo.getDstEndPointInfo());
+ unprocessedNodeConnectorEndPointCache.add(tunnelEndPtInfo.getDstEndPointInfo(), tunnelStateInfo);
+ }
}
}
}
private boolean modifyOpState(DpnTepInterfaceInfo dpnTepInterfaceInfo, boolean opStateModified) {
- return opStateModified && (dpnTepInterfaceInfo != null);
+ return opStateModified && dpnTepInterfaceInfo != null;
}
private boolean modifyTunnelOpState(DpnTepInterfaceInfo dpnTepInterfaceInfo, boolean opStateModified) {
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.util.concurrent.ListenableFuture;
+import edu.umd.cs.findbugs.annotations.CheckReturnValue;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchRegister;
import org.opendaylight.genius.mdsalutil.nxmatches.NxMatchTunnelSourceIp;
import org.opendaylight.genius.utils.clustering.EntityOwnershipUtils;
-import org.opendaylight.infrautils.utils.concurrent.KeyedLocks;
+import org.opendaylight.infrautils.utils.concurrent.NamedLocks;
+import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
private static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
private static final long INVALID_ID = 0;
- private final KeyedLocks<String> tunnelLocks = new KeyedLocks<>();
+ private final NamedLocks<String> tunnelLocks = new NamedLocks<>();
// To keep the mapping between Tunnel Types and Tunnel Interfaces
this.itmConfig = itmConfig;
}
- public KeyedLocks<String> getTunnelLocks() {
- return tunnelLocks;
+ @CheckReturnValue
+ public @NonNull Acquired lockTunnel(String tunnelName) {
+ return tunnelLocks.acquire(tunnelName);
}
public BigInteger getDpnId(DatapathId datapathId) {
.substring(0, 12).replace("-", "");
return String.format("%s%s", "of", uuidStr);
}
-}
\ No newline at end of file
+}