import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
import static org.opendaylight.genius.infra.Datastore.OPERATIONAL;
+import static org.opendaylight.infrautils.utils.concurrent.LoggingFutures.addErrorLogging;
import static org.opendaylight.netvirt.elan.utils.ElanUtils.isVxlanNetworkOrVxlanSegment;
import com.google.common.base.Optional;
import org.opendaylight.genius.utils.JvmGlobalLocks;
import org.opendaylight.genius.utils.ServiceIndex;
import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
-import org.opendaylight.infrautils.utils.concurrent.ListenableFutures;
+import org.opendaylight.infrautils.utils.concurrent.LoggingFutures;
+import org.opendaylight.infrautils.utils.concurrent.NamedSimpleReentrantLock.Acquired;
import org.opendaylight.netvirt.elan.cache.ElanInstanceCache;
import org.opendaylight.netvirt.elan.cache.ElanInterfaceCache;
import org.opendaylight.netvirt.elan.l2gw.utils.ElanL2GatewayMulticastUtils;
}
}
- private Elan removeElanStateForInterface(ElanInstance elanInfo, String interfaceName,
+ private static Elan removeElanStateForInterface(ElanInstance elanInfo, String interfaceName,
TypedReadWriteTransaction<Operational> tx) throws ExecutionException, InterruptedException {
String elanName = elanInfo.getElanInstanceName();
Elan elanState = ElanUtils.getElanByName(tx, elanName);
tx.delete(ElanUtils.getElanInstanceOperationalDataPath(elanName));
tx.delete(ElanUtils.getElanMacTableOperationalDataPath(elanName));
tx.delete(ElanUtils.getElanInfoEntriesOperationalDataPath(elanInfo.getElanTag()));
+ tx.delete(ElanUtils.getElanDpnOperationDataPath(elanName));
} else {
Elan updateElanState = new ElanBuilder().setElanInterfaces(elanInterfaces).setName(elanName)
.withKey(new ElanKey(elanName)).build();
private void deleteAllRemoteMacsInADpn(String elanName, BigInteger dpId, long elanTag) {
List<DpnInterfaces> dpnInterfaces = elanUtils.getInvolvedDpnsInElan(elanName);
- ListenableFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, confTx -> {
+ addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, confTx -> {
for (DpnInterfaces dpnInterface : dpnInterfaces) {
BigInteger currentDpId = dpnInterface.getDpId();
if (!currentDpId.equals(dpId) && dpnInterface.getInterfaces() != null) {
for (StaticMacEntries staticMacEntry : updatedEntries) {
InstanceIdentifier<MacEntry> macEntryIdentifier = getMacEntryOperationalDataPath(elanName,
staticMacEntry.getMacAddress());
- ListenableFutures.addErrorLogging(ElanUtils.waitForTransactionToComplete(
+ addErrorLogging(ElanUtils.waitForTransactionToComplete(
txRunner.callWithNewReadWriteTransactionAndSubmit(OPERATIONAL, tx -> {
Optional<MacEntry> existingMacEntry = tx.read(macEntryIdentifier).get();
if (existingMacEntry.isPresent()) {
@Override
protected void add(InstanceIdentifier<ElanInterface> identifier, ElanInterface elanInterfaceAdded) {
- ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, operTx -> {
+ addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, operTx -> {
String elanInstanceName = elanInterfaceAdded.getElanInstanceName();
String interfaceName = elanInterfaceAdded.getName();
InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
return interfaces.size() == dummyInterfaceCount;
}
- private InstanceIdentifier<MacEntry> getMacEntryOperationalDataPath(String elanName, PhysAddress physAddress) {
+ private static InstanceIdentifier<MacEntry> getMacEntryOperationalDataPath(String elanName,
+ PhysAddress physAddress) {
return InstanceIdentifier.builder(ElanForwardingTables.class).child(MacTable.class, new MacTableKey(elanName))
.child(MacEntry.class, new MacEntryKey(physAddress)).build();
}
}
}
- private List<MatchInfo> buildMatchesForVni(Long vni) {
+ private static List<MatchInfo> buildMatchesForVni(Long vni) {
List<MatchInfo> mkMatches = new ArrayList<>();
MatchInfo match = new MatchTunnelId(BigInteger.valueOf(vni));
mkMatches.add(match);
return mkMatches;
}
- private List<InstructionInfo> getInstructionsForOutGroup(long groupId) {
+ private static List<InstructionInfo> getInstructionsForOutGroup(long groupId) {
List<InstructionInfo> mkInstructions = new ArrayList<>();
mkInstructions.add(new InstructionWriteActions(Collections.singletonList(new ActionGroup(groupId))));
return mkInstructions;
}
- private List<MatchInfo> getMatchesForElanTag(long elanTag, boolean isSHFlagSet) {
+ private static List<MatchInfo> getMatchesForElanTag(long elanTag, boolean isSHFlagSet) {
List<MatchInfo> mkMatches = new ArrayList<>();
// Matching metadata
mkMatches.add(new MatchMetadata(
* elanTag to be written in metadata when flow is selected
* @return the instructions ready to be installed in a flow
*/
- private List<InstructionInfo> getInstructionsIntOrExtTunnelTable(Long elanTag) {
+ private static List<InstructionInfo> getInstructionsIntOrExtTunnelTable(Long elanTag) {
List<InstructionInfo> mkInstructions = new ArrayList<>();
mkInstructions.add(new InstructionWriteMetadata(ElanHelper.getElanMetadataLabel(elanTag), ElanHelper
.getElanMetadataMask()));
String macAddress = macEntry.getMacAddress().getValue();
LOG.info("Installing remote dmac for mac address {} and interface {}", macAddress,
interfaceName);
- synchronized (ElanUtils.getElanMacDPNKey(elanInfo.getElanTag(), macAddress,
+ try (Acquired lock = ElanUtils.lockElanMacDPN(elanInfo.getElanTag(), macAddress,
interfaceInfo.getDpId())) {
LOG.info("Acquired lock for mac : {}, proceeding with remote dmac install operation",
macAddress);
return emptyList();
}
- private void createDropBucket(List<Bucket> listBucket) {
+ private static void createDropBucket(List<Bucket> listBucket) {
List<Action> actionsInfos = new ArrayList<>();
actionsInfos.add(new ActionDrop().buildAction());
Bucket dropBucket = MDSALUtil.buildBucket(actionsInfos, MDSALUtil.GROUP_WEIGHT, 0, MDSALUtil.WATCH_PORT,
}
}
- private boolean isStandardElanService(ElanInterface elanInterface) {
+ private static boolean isStandardElanService(ElanInterface elanInterface) {
return elanInterface.augmentation(EtreeInterface.class) == null;
}
}
}
- private String getFlowRef(long tableId, long elanTag) {
+ private static String getFlowRef(long tableId, long elanTag) {
return String.valueOf(tableId) + elanTag;
}
- private String getFlowRef(long tableId, long elanTag, String flowName) {
- return new StringBuffer().append(tableId).append(NwConstants.FLOWID_SEPARATOR).append(elanTag)
+ private static String getFlowRef(long tableId, long elanTag, String flowName) {
+ return new StringBuilder().append(tableId).append(NwConstants.FLOWID_SEPARATOR).append(elanTag)
.append(NwConstants.FLOWID_SEPARATOR).append(flowName).toString();
}
- private String getUnknownDmacFlowRef(long tableId, long elanTag, boolean shFlag) {
+ private static String getUnknownDmacFlowRef(long tableId, long elanTag, boolean shFlag) {
return String.valueOf(tableId) + elanTag + shFlag;
}
- private List<Action> getInterfacePortActions(InterfaceInfo interfaceInfo) {
+ private static List<Action> getInterfacePortActions(InterfaceInfo interfaceInfo) {
List<Action> listAction = new ArrayList<>();
int actionKey = 0;
listAction.add(
return listAction;
}
- private DpnInterfaces updateElanDpnInterfacesList(String elanInstanceName, BigInteger dpId,
+ private static DpnInterfaces updateElanDpnInterfacesList(String elanInstanceName, BigInteger dpId,
List<String> interfaceNames, TypedWriteTransaction<Operational> tx) {
DpnInterfaces dpnInterface = new DpnInterfacesBuilder().setDpId(dpId).setInterfaces(interfaceNames)
.withKey(new DpnInterfacesKey(dpId)).build();
* @param dpId
* the dp id
*/
- private void deleteElanDpnInterface(String elanInstanceName, BigInteger dpId,
+ private static void deleteElanDpnInterface(String elanInstanceName, BigInteger dpId,
TypedReadWriteTransaction<Operational> tx) throws ExecutionException, InterruptedException {
InstanceIdentifier<DpnInterfaces> dpnInterfacesId = ElanUtils
.getElanDpnInterfaceOperationalDataPath(elanInstanceName, dpId);
}
}
- private DpnInterfaces createElanInterfacesList(String elanInstanceName, String interfaceName, BigInteger dpId,
- TypedWriteTransaction<Operational> tx) {
+ private static DpnInterfaces createElanInterfacesList(String elanInstanceName, String interfaceName,
+ BigInteger dpId, TypedWriteTransaction<Operational> tx) {
List<String> interfaceNames = new ArrayList<>();
interfaceNames.add(interfaceName);
DpnInterfaces dpnInterface = new DpnInterfacesBuilder().setDpId(dpId).setInterfaces(interfaceNames)
return dpnInterface;
}
- private void createElanInterfaceTablesList(String interfaceName, TypedReadWriteTransaction<Operational> tx)
+ private static void createElanInterfaceTablesList(String interfaceName, TypedReadWriteTransaction<Operational> tx)
throws ExecutionException, InterruptedException {
InstanceIdentifier<ElanInterfaceMac> elanInterfaceMacTables = ElanUtils
.getElanInterfaceMacEntriesOperationalDataPath(interfaceName);
}
}
- private void createElanStateList(String elanInstanceName, String interfaceName,
+ private static void createElanStateList(String elanInstanceName, String interfaceName,
TypedReadWriteTransaction<Operational> tx) throws ExecutionException, InterruptedException {
InstanceIdentifier<Elan> elanInstance = ElanUtils.getElanInstanceOperationalDataPath(elanInstanceName);
Optional<Elan> elanInterfaceLists = tx.read(elanInstance).get();
}
}
- private boolean isOperational(InterfaceInfo interfaceInfo) {
- if (interfaceInfo == null) {
- return false;
- }
- return interfaceInfo.getAdminState() == InterfaceInfo.InterfaceAdminState.ENABLED;
+ private static boolean isOperational(InterfaceInfo interfaceInfo) {
+ return interfaceInfo != null && interfaceInfo.getAdminState() == InterfaceInfo.InterfaceAdminState.ENABLED;
}
@SuppressWarnings("checkstyle:IllegalCatch")
LOG.debug("Elan instance:{} is present in Dpn:{} ", elanName, dpId);
final BigInteger finalDpId = dpId;
- ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
+ LoggingFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
confTx -> elanL2GatewayMulticastUtils.setupElanBroadcastGroups(elanInfo, finalDpId, confTx)), LOG,
"Error setting up ELAN BGs");
// install L2gwDevices local macs in dpn.
return false;
}
- private List<MatchInfo> getMatchesForFilterEqualsLPortTag(int lportTag) {
+ private static List<MatchInfo> getMatchesForFilterEqualsLPortTag(int lportTag) {
List<MatchInfo> mkMatches = new ArrayList<>();
// Matching metadata
mkMatches.add(
public void handleExternalInterfaceEvent(ElanInstance elanInstance, DpnInterfaces dpnInterfaces,
BigInteger dpId) {
LOG.debug("setting up remote BC group for elan {}", elanInstance.getPhysicalNetworkName());
- ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
+ addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
confTx -> elanL2GatewayMulticastUtils.setupStandardElanBroadcastGroups(elanInstance, dpnInterfaces, dpId,
confTx)), LOG, "Error setting up remote BC group for ELAN {}", elanInstance.getPhysicalNetworkName());
try {