*Issue: Unbind was not called during interface state change.
Interfacemanager used to handle unbind during state change. Recently,
other apps started unbinding itself during state change. Due to this
stale entries are coming in table 17 for elan
*Fix: Unbind the elan service during interface state change
Change-Id: I1422f3690fac7d7587930a04207d93361a29bea0
Signed-off-by: eceghkl <manu.b@ericsson.com>
InstanceIdentifier<ElanInterface> elanInterfaceId = ElanUtils
.getElanInterfaceConfigurationDataPathId(elanInterfaceName);
InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(elanInterfaceName);
- elanInterfaceManager.removeElanInterface(deletedElan, elanInterfaceName, interfaceInfo, false);
+ elanInterfaceManager.removeElanInterface(deletedElan, elanInterfaceName, interfaceInfo);
ElanUtils.delete(broker, LogicalDatastoreType.CONFIGURATION,
elanInterfaceId);
}
}
String elanInstanceName = elanInfo.getElanInstanceName();
InterfaceRemoveWorkerOnElan configWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInfo,
- interfaceName, interfaceInfo, false, this);
+ interfaceName, interfaceInfo, this);
jobCoordinator.enqueueJob(elanInstanceName, configWorker, ElanConstants.JOB_MAX_RETRIES);
}
public List<ListenableFuture<Void>> removeElanInterface(ElanInstance elanInfo, String interfaceName,
- InterfaceInfo interfaceInfo, boolean isInterfaceStateRemoved) {
+ InterfaceInfo interfaceInfo) {
String elanName = elanInfo.getElanInstanceName();
boolean isLastElanInterface = false;
boolean isLastInterfaceOnDpn = false;
setElanAndEtreeBCGrouponOtherDpns(elanInfo, dpId);
}
InterfaceRemoveWorkerOnElanInterface removeInterfaceWorker = new InterfaceRemoveWorkerOnElanInterface(
- interfaceName, elanInfo, interfaceInfo, isInterfaceStateRemoved, this, isLastElanInterface);
+ interfaceName, elanInfo, interfaceInfo, this, isLastElanInterface);
jobCoordinator.enqueueJob(ElanUtils.getElanInterfaceJobKey(interfaceName), removeInterfaceWorker,
ElanConstants.JOB_MAX_RETRIES);
}
List<ListenableFuture<Void>> removeEntriesForElanInterface(ElanInstance elanInfo, InterfaceInfo
- interfaceInfo, String interfaceName, boolean isInterfaceStateRemoved, boolean isLastElanInterface) {
+ interfaceInfo, String interfaceName, boolean isLastElanInterface) {
String elanName = elanInfo.getElanInstanceName();
WriteTransaction interfaceTx = broker.newWriteOnlyTransaction();
WriteTransaction flowTx = broker.newWriteOnlyTransaction();
if (existingElanInterfaceMac.isPresent()) {
interfaceTx.delete(LogicalDatastoreType.OPERATIONAL, elanInterfaceId);
}
- if (!isInterfaceStateRemoved) {
- unbindService(interfaceName, interfaceTx);
- }
+ unbindService(interfaceName, interfaceTx);
deleteElanInterfaceFromConfigDS(interfaceName, interfaceTx);
List<ListenableFuture<Void>> futures = new ArrayList<>();
futures.add(ElanUtils.waitForTransactionToComplete(interfaceTx));
return;
}
InterfaceRemoveWorkerOnElan removeWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInstance,
- interfaceName, interfaceInfo, true, elanInterfaceManager);
+ interfaceName, interfaceInfo, elanInterfaceManager);
jobCoordinator.enqueueJob(elanInstanceName, removeWorker, ElanConstants.JOB_MAX_RETRIES);
}
private final ElanInstance elanInfo;
private final String interfaceName;
private final InterfaceInfo interfaceInfo;
- private final boolean isInterfaceStateRemoved;
private final ElanInterfaceManager dataChangeListener;
public InterfaceRemoveWorkerOnElan(String key, ElanInstance elanInfo, String interfaceName,
- InterfaceInfo interfaceInfo, boolean isInterfaceStateRemoved, ElanInterfaceManager dataChangeListener) {
+ InterfaceInfo interfaceInfo, ElanInterfaceManager dataChangeListener) {
this.key = key;
this.elanInfo = elanInfo;
this.interfaceName = interfaceName;
this.interfaceInfo = interfaceInfo;
- this.isInterfaceStateRemoved = isInterfaceStateRemoved;
this.dataChangeListener = dataChangeListener;
}
public List<ListenableFuture<Void>> call() throws Exception {
List<ListenableFuture<Void>> futures = new ArrayList<>();
try {
- futures.addAll(dataChangeListener.removeElanInterface(elanInfo, interfaceName, interfaceInfo,
- isInterfaceStateRemoved));
+ futures.addAll(dataChangeListener.removeElanInterface(elanInfo, interfaceName, interfaceInfo));
} catch (RuntimeException e) {
LOG.error("Error while processing key {} for elan interface {} and elan {}",
key, interfaceName, elanInfo, e);
private final String interfaceName;
private final ElanInstance elanInfo;
private final InterfaceInfo interfaceInfo;
- private final boolean isInterfaceStateRemoved;
private final ElanInterfaceManager dataChangeListener;
private final boolean isLastElanInterface;
public InterfaceRemoveWorkerOnElanInterface(String interfaceName, ElanInstance elanInfo,
- InterfaceInfo interfaceInfo, boolean isInterfaceStateRemoved, ElanInterfaceManager dataChangeListener,
- boolean isLastElanInterface) {
+ InterfaceInfo interfaceInfo, ElanInterfaceManager dataChangeListener, boolean isLastElanInterface) {
this.interfaceName = interfaceName;
this.elanInfo = elanInfo;
this.interfaceInfo = interfaceInfo;
- this.isInterfaceStateRemoved = isInterfaceStateRemoved;
this.dataChangeListener = dataChangeListener;
this.isLastElanInterface = isLastElanInterface;
}
@Override
public String toString() {
return "InterfaceRemoveWorkerOnElanInterface [key=" + interfaceName + ", elanInfo=" + elanInfo
- + ", interfaceInfo=" + interfaceInfo + ", isInterfaceStateRemoved=" + isInterfaceStateRemoved
- + ", isLastElanInterface=" + isLastElanInterface + "]";
+ + ", interfaceInfo=" + interfaceInfo + ", isLastElanInterface=" + isLastElanInterface + "]";
}
@Override
List<ListenableFuture<Void>> futures = new ArrayList<>();
try {
futures.addAll(dataChangeListener.removeEntriesForElanInterface(elanInfo, interfaceInfo, interfaceName,
- isInterfaceStateRemoved, isLastElanInterface));
+ isLastElanInterface));
} catch (RuntimeException e) {
LOG.error("Error while processing for interface {} and elan {}", interfaceName, elanInfo, e);
ElanUtils.addToListenableFutureIfTxException(e, futures);