*/
package org.opendaylight.genius.interfacemanager.listeners;
-import com.google.common.util.concurrent.ListenableFuture;
-import java.util.List;
-import java.util.concurrent.Callable;
+import javax.annotation.Nonnull;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
+import org.opendaylight.genius.datastoreutils.listeners.AbstractSyncDataTreeChangeListener;
import org.opendaylight.genius.interfacemanager.IfmConstants;
-import org.opendaylight.genius.interfacemanager.commons.InterfaceManagerCommonUtils;
import org.opendaylight.genius.interfacemanager.renderer.ovs.confighelpers.OvsVlanMemberConfigAddHelper;
import org.opendaylight.genius.interfacemanager.renderer.ovs.confighelpers.OvsVlanMemberConfigRemoveHelper;
import org.opendaylight.genius.interfacemanager.renderer.ovs.confighelpers.OvsVlanMemberConfigUpdateHelper;
-import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
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.alivenessmonitor.rev160411.AlivenessMonitorService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.LoggerFactory;
@Singleton
-public class VlanMemberConfigListener extends AsyncDataTreeChangeListenerBase<Interface, VlanMemberConfigListener> {
+public class VlanMemberConfigListener extends AbstractSyncDataTreeChangeListener<Interface> {
+
private static final Logger LOG = LoggerFactory.getLogger(VlanMemberConfigListener.class);
+
private final JobCoordinator coordinator;
private final OvsVlanMemberConfigAddHelper ovsVlanMemberConfigAddHelper;
private final OvsVlanMemberConfigRemoveHelper ovsVlanMemberConfigRemoveHelper;
private final OvsVlanMemberConfigUpdateHelper ovsVlanMemberConfigUpdateHelper;
@Inject
- public VlanMemberConfigListener(final DataBroker dataBroker, final IdManagerService idManagerService,
- final IMdsalApiManager mdsalApiManager, final AlivenessMonitorService alivenessMonitorService,
- final JobCoordinator coordinator, final InterfaceManagerCommonUtils interfaceManagerCommonUtils,
+ public VlanMemberConfigListener(final DataBroker dataBroker,
+ final JobCoordinator coordinator,
final OvsVlanMemberConfigAddHelper ovsVlanMemberConfigAddHelper,
final OvsVlanMemberConfigRemoveHelper ovsVlanMemberConfigRemoveHelper,
final OvsVlanMemberConfigUpdateHelper ovsVlanMemberConfigUpdateHelper) {
- super(Interface.class, VlanMemberConfigListener.class);
+ super(dataBroker, LogicalDatastoreType.CONFIGURATION,
+ InstanceIdentifier.create(Interfaces.class).child(Interface.class));
this.coordinator = coordinator;
this.ovsVlanMemberConfigAddHelper = ovsVlanMemberConfigAddHelper;
this.ovsVlanMemberConfigRemoveHelper = ovsVlanMemberConfigRemoveHelper;
this.ovsVlanMemberConfigUpdateHelper = ovsVlanMemberConfigUpdateHelper;
- this.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
- }
-
- @Override
- protected InstanceIdentifier<Interface> getWildCardPath() {
- return InstanceIdentifier.create(Interfaces.class).child(Interface.class);
}
@Override
- protected void remove(InstanceIdentifier<Interface> key, Interface interfaceOld) {
- IfL2vlan ifL2vlan = interfaceOld.getAugmentation(IfL2vlan.class);
+ public void remove(@Nonnull Interface removedInterface) {
+ IfL2vlan ifL2vlan = removedInterface.getAugmentation(IfL2vlan.class);
if (ifL2vlan == null || IfL2vlan.L2vlanMode.TrunkMember != ifL2vlan.getL2vlanMode()) {
return;
}
- removeVlanMember(key, interfaceOld);
+ removeVlanMember(removedInterface);
}
- private void removeVlanMember(InstanceIdentifier<Interface> key, Interface deleted) {
- ParentRefs parentRefs = deleted.getAugmentation(ParentRefs.class);
+ private void removeVlanMember(Interface removedInterface) {
+ ParentRefs parentRefs = removedInterface.getAugmentation(ParentRefs.class);
if (parentRefs == null) {
- LOG.error("Attempt to remove Vlan Trunk-Member {} without a parent interface", deleted);
+ LOG.error("Attempt to remove Vlan Trunk-Member {} without a parent interface", removedInterface);
return;
}
String lowerLayerIf = parentRefs.getParentInterface();
- if (lowerLayerIf.equals(deleted.getName())) {
- LOG.error("Attempt to remove Vlan Trunk-Member {} with same parent interface name.", deleted);
+ if (lowerLayerIf.equals(removedInterface.getName())) {
+ LOG.error("Attempt to remove Vlan Trunk-Member {} with same parent interface name.", removedInterface);
return;
}
-
- RendererConfigRemoveWorker removeWorker = new RendererConfigRemoveWorker(deleted, parentRefs);
- coordinator.enqueueJob(lowerLayerIf, removeWorker, IfmConstants.JOB_MAX_RETRIES);
+ coordinator.enqueueJob(lowerLayerIf,
+ () -> ovsVlanMemberConfigRemoveHelper.removeConfiguration(parentRefs, removedInterface),
+ IfmConstants.JOB_MAX_RETRIES);
}
@Override
- protected void update(InstanceIdentifier<Interface> key, Interface interfaceOld, Interface interfaceNew) {
- IfL2vlan ifL2vlanNew = interfaceNew.getAugmentation(IfL2vlan.class);
+ public void update(@Nonnull Interface originalInterface, @Nonnull Interface updatedInterface) {
+ IfL2vlan ifL2vlanNew = updatedInterface.getAugmentation(IfL2vlan.class);
if (ifL2vlanNew == null) {
return;
}
- IfL2vlan ifL2vlanOld = interfaceOld.getAugmentation(IfL2vlan.class);
+ IfL2vlan ifL2vlanOld = originalInterface.getAugmentation(IfL2vlan.class);
if (IfL2vlan.L2vlanMode.TrunkMember == ifL2vlanNew.getL2vlanMode()
&& IfL2vlan.L2vlanMode.Trunk == ifL2vlanOld.getL2vlanMode()) {
// Trunk subport add use case
- addVlanMember(key, interfaceNew);
+ addVlanMember(updatedInterface);
return;
} else if (IfL2vlan.L2vlanMode.Trunk == ifL2vlanNew.getL2vlanMode()
&& IfL2vlan.L2vlanMode.TrunkMember == ifL2vlanOld.getL2vlanMode()) {
// Trunk subport remove use case
- removeVlanMember(key, interfaceOld);
+ removeVlanMember(originalInterface);
} else if (IfL2vlan.L2vlanMode.TrunkMember != ifL2vlanNew.getL2vlanMode()) {
return;
}
- ParentRefs parentRefsNew = interfaceNew.getAugmentation(ParentRefs.class);
+ ParentRefs parentRefsNew = updatedInterface.getAugmentation(ParentRefs.class);
if (parentRefsNew == null) {
LOG.error("Configuration Error. Attempt to update Vlan Trunk-Member {} without a " + "parent interface",
- interfaceNew);
+ updatedInterface);
return;
}
String lowerLayerIf = parentRefsNew.getParentInterface();
- if (lowerLayerIf.equals(interfaceNew.getName())) {
+ if (lowerLayerIf.equals(updatedInterface.getName())) {
LOG.error(
"Configuration Error. Attempt to update Vlan Trunk-Member {} with same parent " + "interface name.",
- interfaceNew);
+ updatedInterface);
return;
}
-
- RendererConfigUpdateWorker updateWorker = new RendererConfigUpdateWorker(interfaceNew, interfaceOld,
- parentRefsNew, ifL2vlanNew);
- coordinator.enqueueJob(lowerLayerIf, updateWorker, IfmConstants.JOB_MAX_RETRIES);
+ coordinator.enqueueJob(lowerLayerIf, () -> ovsVlanMemberConfigUpdateHelper
+ .updateConfiguration(parentRefsNew, originalInterface, ifL2vlanNew,
+ updatedInterface),
+ IfmConstants.JOB_MAX_RETRIES);
}
@Override
- protected void add(InstanceIdentifier<Interface> key, Interface interfaceNew) {
- IfL2vlan ifL2vlan = interfaceNew.getAugmentation(IfL2vlan.class);
+ public void add(@Nonnull Interface newInterface) {
+ IfL2vlan ifL2vlan = newInterface.getAugmentation(IfL2vlan.class);
if (ifL2vlan == null || IfL2vlan.L2vlanMode.TrunkMember != ifL2vlan.getL2vlanMode()) {
return;
}
- addVlanMember(key, interfaceNew);
+ addVlanMember(newInterface);
}
- private void addVlanMember(InstanceIdentifier<Interface> key, Interface added) {
+ private void addVlanMember(Interface added) {
ParentRefs parentRefs = added.getAugmentation(ParentRefs.class);
if (parentRefs == null) {
return;
LOG.error("Attempt to add Vlan Trunk-Member {} with same parent interface name.", added);
return;
}
-
- RendererConfigAddWorker configWorker = new RendererConfigAddWorker(added, parentRefs);
- coordinator.enqueueJob(lowerLayerIf, configWorker, IfmConstants.JOB_MAX_RETRIES);
- }
-
- @Override
- protected VlanMemberConfigListener getDataTreeChangeListener() {
- return VlanMemberConfigListener.this;
- }
-
- private class RendererConfigAddWorker implements Callable<List<ListenableFuture<Void>>> {
- Interface interfaceNew;
- ParentRefs parentRefs;
-
- RendererConfigAddWorker(Interface interfaceNew, ParentRefs parentRefs) {
- this.interfaceNew = interfaceNew;
- this.parentRefs = parentRefs;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- return ovsVlanMemberConfigAddHelper.addConfiguration(parentRefs, interfaceNew);
- }
- }
-
- private class RendererConfigUpdateWorker implements Callable<List<ListenableFuture<Void>>> {
- Interface interfaceNew;
- Interface interfaceOld;
- IfL2vlan ifL2vlanNew;
- ParentRefs parentRefsNew;
-
- RendererConfigUpdateWorker(Interface interfaceNew, Interface interfaceOld, ParentRefs parentRefsNew,
- IfL2vlan ifL2vlanNew) {
- this.interfaceNew = interfaceNew;
- this.interfaceOld = interfaceOld;
- this.ifL2vlanNew = ifL2vlanNew;
- this.parentRefsNew = parentRefsNew;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- return ovsVlanMemberConfigUpdateHelper.updateConfiguration(parentRefsNew, interfaceOld, ifL2vlanNew,
- interfaceNew);
- }
- }
-
- private class RendererConfigRemoveWorker implements Callable<List<ListenableFuture<Void>>> {
- Interface interfaceOld;
- ParentRefs parentRefs;
-
- RendererConfigRemoveWorker(Interface interfaceOld, ParentRefs parentRefs) {
- this.interfaceOld = interfaceOld;
- this.parentRefs = parentRefs;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- return ovsVlanMemberConfigRemoveHelper.removeConfiguration(parentRefs, interfaceOld);
- }
+ coordinator.enqueueJob(lowerLayerIf, () -> ovsVlanMemberConfigAddHelper.addConfiguration(parentRefs, added),
+ IfmConstants.JOB_MAX_RETRIES);
}
}