*/
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.DataStoreJobCoordinator;
+import org.opendaylight.genius.datastoreutils.listeners.AbstractSyncDataTreeChangeListener;
import org.opendaylight.genius.interfacemanager.IfmConstants;
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 DataBroker dataBroker;
- private final IdManagerService idManager;
- private final AlivenessMonitorService alivenessMonitorService;
- private final IMdsalApiManager mdsalApiManager;
- @Inject
- public VlanMemberConfigListener(final DataBroker dataBroker, final IdManagerService idManagerService,
- final IMdsalApiManager iMdsalApiManager, final AlivenessMonitorService alivenessMonitorService) {
- super(Interface.class, VlanMemberConfigListener.class);
- this.dataBroker = dataBroker;
- this.idManager = idManagerService;
- this.mdsalApiManager = iMdsalApiManager;
- this.alivenessMonitorService = alivenessMonitorService;
- this.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker);
- }
+ private final JobCoordinator coordinator;
+ private final OvsVlanMemberConfigAddHelper ovsVlanMemberConfigAddHelper;
+ private final OvsVlanMemberConfigRemoveHelper ovsVlanMemberConfigRemoveHelper;
+ private final OvsVlanMemberConfigUpdateHelper ovsVlanMemberConfigUpdateHelper;
- @Override
- protected InstanceIdentifier<Interface> getWildCardPath() {
- return InstanceIdentifier.create(Interfaces.class).child(Interface.class);
+ @Inject
+ public VlanMemberConfigListener(final DataBroker dataBroker,
+ final JobCoordinator coordinator,
+ final OvsVlanMemberConfigAddHelper ovsVlanMemberConfigAddHelper,
+ final OvsVlanMemberConfigRemoveHelper ovsVlanMemberConfigRemoveHelper,
+ final OvsVlanMemberConfigUpdateHelper ovsVlanMemberConfigUpdateHelper) {
+ super(dataBroker, LogicalDatastoreType.CONFIGURATION,
+ InstanceIdentifier.create(Interfaces.class).child(Interface.class));
+ this.coordinator = coordinator;
+ this.ovsVlanMemberConfigAddHelper = ovsVlanMemberConfigAddHelper;
+ this.ovsVlanMemberConfigRemoveHelper = ovsVlanMemberConfigRemoveHelper;
+ this.ovsVlanMemberConfigUpdateHelper = ovsVlanMemberConfigUpdateHelper;
}
@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) {
- IfL2vlan ifL2vlan = deleted.getAugmentation(IfL2vlan.class);
- 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;
}
-
- DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
- RendererConfigRemoveWorker removeWorker = new RendererConfigRemoveWorker(key, deleted, parentRefs, ifL2vlan);
- 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;
}
-
- DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
- RendererConfigUpdateWorker updateWorker = new RendererConfigUpdateWorker(key, 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) {
- IfL2vlan ifL2vlan = added.getAugmentation(IfL2vlan.class);
+ 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;
}
-
- DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
- RendererConfigAddWorker configWorker = new RendererConfigAddWorker(key, added, parentRefs, ifL2vlan);
- coordinator.enqueueJob(lowerLayerIf, configWorker, IfmConstants.JOB_MAX_RETRIES);
- }
-
- @Override
- protected VlanMemberConfigListener getDataTreeChangeListener() {
- return VlanMemberConfigListener.this;
- }
-
- private class RendererConfigAddWorker implements Callable<List<ListenableFuture<Void>>> {
- InstanceIdentifier<Interface> key;
- Interface interfaceNew;
- IfL2vlan ifL2vlan;
- ParentRefs parentRefs;
-
- RendererConfigAddWorker(InstanceIdentifier<Interface> key, Interface interfaceNew, ParentRefs parentRefs,
- IfL2vlan ifL2vlan) {
- this.key = key;
- this.interfaceNew = interfaceNew;
- this.ifL2vlan = ifL2vlan;
- this.parentRefs = parentRefs;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- // If another renderer(for eg : CSS) needs to be supported, check
- // can be performed here
- // to call the respective helpers.
- return OvsVlanMemberConfigAddHelper.addConfiguration(dataBroker, parentRefs, interfaceNew, ifL2vlan,
- idManager);
- }
- }
-
- private class RendererConfigUpdateWorker implements Callable<List<ListenableFuture<Void>>> {
- InstanceIdentifier<Interface> key;
- Interface interfaceNew;
- Interface interfaceOld;
- IfL2vlan ifL2vlanNew;
- ParentRefs parentRefsNew;
-
- RendererConfigUpdateWorker(InstanceIdentifier<Interface> key, Interface interfaceNew, Interface interfaceOld,
- ParentRefs parentRefsNew, IfL2vlan ifL2vlanNew) {
- this.key = key;
- this.interfaceNew = interfaceNew;
- this.interfaceOld = interfaceOld;
- this.ifL2vlanNew = ifL2vlanNew;
- this.parentRefsNew = parentRefsNew;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- // If another renderer(for eg : CSS) needs to be supported, check
- // can be performed here
- // to call the respective helpers.
- return OvsVlanMemberConfigUpdateHelper.updateConfiguration(dataBroker, alivenessMonitorService,
- parentRefsNew, interfaceOld, ifL2vlanNew, interfaceNew, idManager, mdsalApiManager);
- }
- }
-
- private class RendererConfigRemoveWorker implements Callable<List<ListenableFuture<Void>>> {
- InstanceIdentifier<Interface> key;
- Interface interfaceOld;
- IfL2vlan ifL2vlan;
- ParentRefs parentRefs;
-
- RendererConfigRemoveWorker(InstanceIdentifier<Interface> key, Interface interfaceOld, ParentRefs parentRefs,
- IfL2vlan ifL2vlan) {
- this.key = key;
- this.interfaceOld = interfaceOld;
- this.ifL2vlan = ifL2vlan;
- this.parentRefs = parentRefs;
- }
-
- @Override
- public List<ListenableFuture<Void>> call() {
- // If another renderer(for eg : CSS) needs to be supported, check
- // can be performed here
- // to call the respective helpers.
- return OvsVlanMemberConfigRemoveHelper.removeConfiguration(dataBroker, parentRefs, interfaceOld, ifL2vlan,
- idManager);
- }
+ coordinator.enqueueJob(lowerLayerIf, () -> ovsVlanMemberConfigAddHelper.addConfiguration(parentRefs, added),
+ IfmConstants.JOB_MAX_RETRIES);
}
}