final Long vpnId, final String rd,
final VrfEntry vrfEntry) {
final BigInteger dpnId = localNextHopInfo.getDpnId();
- String jobKey = "FIB-" + vpnId.toString() + "-" + dpnId.toString() + "-" + vrfEntry.getDestPrefix();
+ String jobKey = FibUtil.getCreateLocalNextHopJobKey(vpnId, dpnId, vrfEntry.getDestPrefix());
final long groupId = nexthopManager.createLocalNextHop(vpnId, dpnId,
localNextHopInfo.getVpnInterfaceName(), localNextHopIP, vrfEntry.getDestPrefix(),
- vrfEntry.getGatewayMacAddress(), jobKey);
+ vrfEntry.getGatewayMacAddress());
LOG.debug("LocalNextHopGroup {} created/reused for prefix {} rd {} evi {} route-paths {}", groupId,
vrfEntry.getDestPrefix(), rd, vrfEntry.getL3vni(), vrfEntry.getRoutePaths());
final List<InstructionInfo> instructions = Collections.singletonList(
new InstructionApplyActions(
Collections.singletonList(new ActionGroup(groupId))));
- jobCoordinator.enqueueJob("FIB-" + vpnId.toString() + "-" + dpnId.toString()
- + "-" + vrfEntry.getDestPrefix(),
+ jobCoordinator.enqueueJob(jobKey,
() -> Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(
tx -> makeConnectedRoute(dpnId, vpnId, vrfEntry, rd, instructions, NwConstants.ADD_FLOW, tx,
null))));
public long createLocalNextHop(long vpnId, BigInteger dpnId, String ifName,
String primaryIpAddress, String currDestIpPrefix,
- String gwMacAddress, String jobKey) {
+ String gwMacAddress) {
String vpnName = fibUtil.getVpnNameFromId(vpnId);
if (vpnName == null) {
return 0;
return groupId;
}
String nextHopLockStr = vpnId + primaryIpAddress;
+ String jobKey = FibUtil.getCreateLocalNextHopJobKey(vpnId, dpnId, currDestIpPrefix);
jobCoordinator.enqueueJob(jobKey, () -> {
try {
if (FibUtil.lockCluster(lockManager, nextHopLockStr, WAIT_TIME_TO_ACQUIRE_LOCK)) {
}
GroupEntity groupEntity = MDSALUtil.buildGroupEntity(
dpnId, groupId, destPrefix, GroupTypes.GroupSelect, listBucketInfo);
- if (addOrRemove) {
- mdsalApiManager.syncInstallGroup(groupEntity);
- try {
- Thread.sleep(WAIT_TIME_FOR_SYNC_INSTALL);
- } catch (InterruptedException e1) {
- LOG.warn("Thread got interrupted while programming LB group {}", groupEntity);
- Thread.currentThread().interrupt();
+ String jobKey = FibUtil.getCreateLocalNextHopJobKey(parentVpnId, dpnId, destPrefix);
+ jobCoordinator.enqueueJob(jobKey, () -> {
+ if (addOrRemove) {
+ mdsalApiManager.syncInstallGroup(groupEntity);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Finished installing GroupEntity with jobCoordinator key {} groupEntity.groupId {}"
+ + " groupEntity.groupType {}", jobKey, groupEntity.getGroupId(),
+ groupEntity.getGroupType());
+ }
+ } else {
+ mdsalApiManager.removeGroup(groupEntity);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Finished removing GroupEntity with jobCoordinator key {} groupEntity.groupId {}"
+ + " groupEntity.groupType {}", jobKey, groupEntity.getGroupId(),
+ groupEntity.getGroupType());
+ }
}
- } else {
- mdsalApiManager.removeGroup(groupEntity);
- }
+ return Collections.emptyList();
+ });
return groupId;
}
clonedVpnExtraRoutes.remove(routes);
}
listBucketInfo.addAll(getBucketsForRemoteNexthop(vpnId, dpnId, vrfEntry, rd, clonedVpnExtraRoutes));
- return setupLoadBalancingNextHop(vpnId, dpnId, vrfEntry.getDestPrefix(), listBucketInfo, true);
+ return setupLoadBalancingNextHop(vpnId, dpnId, vrfEntry.getDestPrefix(), listBucketInfo,true);
}
private List<BucketInfo> getBucketsForLocalNexthop(Long vpnId, BigInteger dpnId,
VrfEntry vrfEntry, Routes routes) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("NexthopManager.getBucketsForLocalNexthop invoked with vpnId {} dpnId {} "
+ + " vrfEntry.routePaths {}, routes.nexthopList {}", vpnId, dpnId, vrfEntry.getRoutePaths(),
+ routes.getNexthopIpList());
+ }
List<BucketInfo> listBucketInfo = new CopyOnWriteArrayList<>();
routes.getNexthopIpList().parallelStream().forEach(nextHopIp -> {
String localNextHopIP;
List<String> usedRds = VpnExtraRouteHelper.getUsedRds(dataBroker, vpnId, localNextHopIP);
List<Routes> vpnExtraRoutes = VpnExtraRouteHelper.getAllVpnExtraRoutes(dataBroker,
vpnName, usedRds, localNextHopIP);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Creating Local fib entry with vpnName {} usedRds {} localNextHopIP {} vpnExtraRoutes {}",
+ vpnName, usedRds, localNextHopIP, vpnExtraRoutes);
+ }
boolean localNextHopSeen = false;
//Is this fib route an extra route? If yes, get the nexthop which would be an adjacency in the vpn
for (Routes vpnExtraRoute : vpnExtraRoutes) {
vpnId, rd, dpnId.toString());
return BigInteger.ZERO;
}
- String jobKey = FibUtil.getCreateLocalNextHopJobKey(vpnId, dpnId, vrfEntry.getDestPrefix());
String interfaceName = localNextHopInfo.getVpnInterfaceName();
String prefix = vrfEntry.getDestPrefix();
String gwMacAddress = vrfEntry.getGatewayMacAddress();
localNextHopIP = routes.getNexthopIpList().get(0) + NwConstants.IPV6PREFIX;
}
if (vpnExtraRoutes.size() > 1) {
- groupId = nextHopManager.createNextHopGroups(vpnId, rd, dpnId, vrfEntry, routes,
- vpnExtraRoutes);
+ groupId = nextHopManager.createNextHopGroups(vpnId, rd, dpnId, vrfEntry, routes, vpnExtraRoutes);
localGroupId = nextHopManager.getLocalNextHopGroup(vpnId, localNextHopIP);
} else if (routes.getNexthopIpList().size() > 1) {
- groupId = nextHopManager.createNextHopGroups(vpnId, rd, dpnId, vrfEntry, routes,
- vpnExtraRoutes);
+ groupId = nextHopManager.createNextHopGroups(vpnId, rd, dpnId, vrfEntry, routes, vpnExtraRoutes);
localGroupId = groupId;
} else {
groupId = nextHopManager.createLocalNextHop(vpnId, dpnId, interfaceName, localNextHopIP,
- prefix, gwMacAddress, jobKey);
+ prefix, gwMacAddress);
localGroupId = groupId;
}
} else {
groupId = nextHopManager.createLocalNextHop(vpnId, dpnId, interfaceName, localNextHopIP, prefix,
- gwMacAddress, jobKey);
+ gwMacAddress);
localGroupId = groupId;
}
if (groupId == FibConstants.INVALID_GROUP_ID) {
Arrays.asList(new ActionPopMpls(etherType), new ActionGroup(groupId))));
java.util.Optional<Long> optLabel = FibUtil.getLabelFromRoutePaths(vrfEntry);
List<String> nextHopAddressList = FibHelper.getNextHopListFromRoutePaths(vrfEntry);
+ String jobKey = FibUtil.getCreateLocalNextHopJobKey(vpnId, dpnId, vrfEntry.getDestPrefix());
jobCoordinator.enqueueJob(jobKey, () -> {
return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> {
baseVrfEntryHandler.makeConnectedRoute(dpnId, vpnId, vrfEntry, rd, instructions,