public class ElanInstanceManager extends AsyncDataTreeChangeListenerBase<ElanInstance, ElanInstanceManager> {
private static final Logger LOG = LoggerFactory.getLogger(ElanInstanceManager.class);
+ private static final Logger EVENT_LOGGER = LoggerFactory.getLogger("NetvirtEventLogger");
private final DataBroker broker;
private final ManagedNewTransactionRunner txRunner;
protected void remove(InstanceIdentifier<ElanInstance> identifier, ElanInstance deletedElan) {
LOG.trace("Remove ElanInstance - Key: {}, value: {}", identifier, deletedElan);
String elanName = deletedElan.getElanInstanceName();
+ EVENT_LOGGER.debug("ELAN-Instance, REMOVE {}",elanName);
elanInterfaceCache.getInterfaceNames(elanName).forEach(
elanInterfaceName -> jobCoordinator.enqueueJob(ElanUtils.getElanInterfaceJobKey(elanInterfaceName),
() -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, tx -> {
@Override
protected void update(InstanceIdentifier<ElanInstance> identifier, ElanInstance original, ElanInstance update) {
+ EVENT_LOGGER.debug("ELAN-Instance, UPDATE {}", original.getElanInstanceName());
Uint32 existingElanTag = original.getElanTag();
String elanName = update.getElanInstanceName();
if (existingElanTag == null || !existingElanTag.equals(update.getElanTag())) {
protected void add(InstanceIdentifier<ElanInstance> identifier, ElanInstance elanInstanceAdded) {
LoggingFutures.addErrorLogging(txRunner.callWithNewReadWriteTransactionAndSubmit(OPERATIONAL, operTx -> {
String elanInstanceName = elanInstanceAdded.getElanInstanceName();
+ EVENT_LOGGER.debug("ELAN-Instance, ADD {}", elanInstanceName);
Elan elanInfo = ElanUtils.getElanByName(operTx, elanInstanceName);
if (elanInfo == null) {
LoggingFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanInterface, ElanInterfaceManager>
implements RecoverableListener {
private static final Logger LOG = LoggerFactory.getLogger(ElanInterfaceManager.class);
+ private static final Logger EVENT_LOGGER = LoggerFactory.getLogger("NetvirtEventLogger");
public static final long WAIT_TIME_FOR_SYNC_INSTALL = Long.getLong("wait.time.sync.install", 300L);
private static final boolean SH_FLAG_SET = true;
private static final boolean SH_FLAG_UNSET = false;
protected void remove(InstanceIdentifier<ElanInterface> identifier, ElanInterface del) {
String interfaceName = del.getName();
String elanInstanceName = del.getElanInstanceName();
+ EVENT_LOGGER.debug("ELAN-Interface, REMOVE {} Instance {}", interfaceName, elanInstanceName);
Queue<ElanInterface> elanInterfaces = unProcessedElanInterfaces.get(elanInstanceName);
if (elanInterfaces != null && elanInterfaces.contains(del)) {
elanInterfaces.remove(del);
public List<ListenableFuture<Void>> removeElanInterface(ElanInstance elanInfo, String interfaceName,
InterfaceInfo interfaceInfo) {
String elanName = elanInfo.getElanInstanceName();
+ EVENT_LOGGER.debug("ELAN-InterfaceState, REMOVE {} Instance {}", interfaceName, elanName);
Uint32 elanTag = elanInfo.getElanTag();
// We use two transaction so we don't suffer on multiple shards (interfaces and flows)
List<ListenableFuture<Void>> futures = new ArrayList<>();
if (dpnInterfaces == null || dpnInterfaces.getInterfaces() == null
|| dpnInterfaces.getInterfaces().isEmpty()) {
// No more Elan Interfaces in this DPN
+ EVENT_LOGGER.debug("ELAN-Flows, REMOVE {} Instance {}", interfaceName, elanName);
LOG.debug("deleting the elan: {} present on dpId: {}", elanInfo.getElanInstanceName(),
holder.dpId);
if (!elanUtils.isOpenstackVniSemanticsEnforced()) {
List<ListenableFuture<Void>> removeEntriesForElanInterface(ElanInstance elanInfo, InterfaceInfo
interfaceInfo, String interfaceName, boolean isLastElanInterface) {
String elanName = elanInfo.getElanInstanceName();
+ EVENT_LOGGER.debug("ELAN-InterfaceEntries, REMOVE {} Instance {}", interfaceName, elanName);
List<ListenableFuture<Void>> futures = new ArrayList<>();
futures.add(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, flowTx -> {
futures.add(txRunner.callWithNewReadWriteTransactionAndSubmit(OPERATIONAL, interfaceTx -> {
if (!isLastElanInterface && macEntryOptional.isPresent()) {
interfaceTx.delete(ElanUtils.getMacEntryOperationalDataPath(elanName, macAddress));
}
+ EVENT_LOGGER.debug("ELAN-MacFlows, REMOVE {} Instance {} Mac {}",
+ interfaceName, elanName, macAddress);
elanUtils.deleteMacFlows(elanInfo, interfaceInfo, macEntry, flowTx);
macAddresses.add(macAddress);
}
String elanName = update.getElanInstanceName();
String interfaceName = update.getName();
LOG.info("Update static mac entries for elan interface {} in elan instance {}", interfaceName, elanName);
+ EVENT_LOGGER.debug("ELAN-Interface, UPDATE {} Instance {}", original.getName(), elanName);
List<StaticMacEntries> originalStaticMacEntries = original.getStaticMacEntries();
List<StaticMacEntries> updatedStaticMacEntries = update.getStaticMacEntries();
addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, operTx -> {
String elanInstanceName = elanInterfaceAdded.getElanInstanceName();
String interfaceName = elanInterfaceAdded.getName();
+ EVENT_LOGGER.debug("ELAN-Interface, ADD {} Instance {}", interfaceName, elanInstanceName);
InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName);
if (interfaceInfo == null) {
LOG.info("Interface {} is removed from Interface Oper DS due to port down ", interfaceName);
String interfaceName = elanInterface.getName();
String elanInstanceName = elanInterface.getElanInstanceName();
LOG.trace("Adding elan interface: interface name {} , instance name {}", interfaceName, elanInstanceName);
+ EVENT_LOGGER.debug("ELAN-InterfaceState, ADD {} Instance {}", interfaceName, elanInstanceName);
List<ListenableFuture<Void>> futures = new ArrayList<>();
AddElanInterfaceHolder holder = new AddElanInterfaceHolder();
"programming smac and dmacs for {} on source and other DPNs for elan {} and interface"
+ " {}",
macAddress, elanInstanceName, interfaceName);
+ EVENT_LOGGER.debug("ELAN-MacFlows, ADD {} Instance {} Mac {}",
+ interfaceName, elanInstanceName, macAddress);
elanUtils.setupMacFlows(elanInstance, interfaceInfo, ElanConstants.STATIC_MAC_TIMEOUT,
staticMacEntry.getMacAddress().getValue(), true, confTx);
}
InterfaceInfo interfaceInfo, boolean isFirstInterfaceInDpn, TypedWriteTransaction<Configuration> confTx) {
if (!isOperational(interfaceInfo)) {
LOG.warn("Interface {} is not operational", elanInterface.getName());
+ EVENT_LOGGER.debug("ELAN-InterfaceEntries, ADD {} Instance {} Interface Status {}, returning",
+ elanInterface.getName(), elanInstance.getElanInstanceName(), interfaceInfo.getOpState());
return;
}
Uint64 dpId = interfaceInfo.getDpId();
if (!isOperational(interfaceInfo)) {
LOG.warn("Entries for interface on dpn {} not installed since interface {} is not operational",
dpnInterfaces.getDpId(), interfaceInfo.getInterfaceName());
+ EVENT_LOGGER.debug("ELAN-1stInterfaceEntries, ADD {} Instance {} Interface Status {}, returning",
+ interfaceInfo.getInterfaceName(), elanInfo.getElanInstanceName(), interfaceInfo.getOpState());
return;
}
+ EVENT_LOGGER.debug("ELAN-1stInterfaceEntries, ADD {} Instance {}",
+ interfaceInfo.getInterfaceName(), elanInfo.getElanInstanceName());
// LocalBroadcast Group creation with elan-Interfaces
LOG.info("Installing entries for interface {} on dpn {}", interfaceInfo.getInterfaceName(),
dpnInterfaces.getDpId());
private void setupLocalBroadcastGroups(ElanInstance elanInfo, DpnInterfaces newDpnInterface,
InterfaceInfo interfaceInfo, TypedWriteTransaction<Configuration> confTx) {
+ if (!isOperational(interfaceInfo)) {
+ EVENT_LOGGER.debug("ELAN-LBG, ADD {} Instance {} Interface Status {}, returning",
+ interfaceInfo.getInterfaceName(), elanInfo.getElanInstanceName(), interfaceInfo.getOpState());
+ return;
+ }
setupStandardLocalBroadcastGroups(elanInfo, newDpnInterface, interfaceInfo, confTx);
setupLeavesLocalBroadcastGroups(elanInfo, newDpnInterface, interfaceInfo, confTx);
}