Listener registration moved out from constructor
to overcome cases when data already exist in DS
and change event might be received before class
initialization is finished.
Change-Id: I7898eb4fa9472e91b8cff2d127d9beb51b55c3de
Signed-off-by: Tomas Cechvala <tcechval@cisco.com>
16 files changed:
private class PolicyChangeListener extends DataTreeChangeHandler<Tenant> {
protected PolicyChangeListener(DataBroker dataProvider, DataTreeIdentifier<Tenant> pointOfInterest) {
private class PolicyChangeListener extends DataTreeChangeHandler<Tenant> {
protected PolicyChangeListener(DataBroker dataProvider, DataTreeIdentifier<Tenant> pointOfInterest) {
- super(dataProvider, pointOfInterest);
+ super(dataProvider);
+ registerDataTreeChangeListener(pointOfInterest);
private final PolicyValidatorRegistry validatorRegistry;
public SupportedClassifierDefinitionListener(DataBroker dataProvider, PolicyValidatorRegistry validatorRegistry) {
private final PolicyValidatorRegistry validatorRegistry;
public SupportedClassifierDefinitionListener(DataBroker dataProvider, PolicyValidatorRegistry validatorRegistry) {
- super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
- IidFactory.supportedClassifierDefinitionIidWildcard()));
this.validatorRegistry = validatorRegistry;
if (validatorRegistry == null) {
LOG.info(
this.validatorRegistry = validatorRegistry;
if (validatorRegistry == null) {
LOG.info(
"{} service was found. Automatic registration of simple classifier-instance validators is available for renderers.",
PolicyValidatorRegistry.class.getCanonicalName());
}
"{} service was found. Automatic registration of simple classifier-instance validators is available for renderers.",
PolicyValidatorRegistry.class.getCanonicalName());
}
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.supportedClassifierDefinitionIidWildcard()));
* The purpose of this class is to eliminate boilerplate code used in most of
* {@link DataTreeChangeListener} implementations.
*
* The purpose of this class is to eliminate boilerplate code used in most of
* {@link DataTreeChangeListener} implementations.
*
+ * @param <T> target class
*/
public abstract class DataTreeChangeHandler<T extends DataObject> implements DataTreeChangeListener<T>, AutoCloseable {
protected final DataBroker dataProvider;
*/
public abstract class DataTreeChangeHandler<T extends DataObject> implements DataTreeChangeListener<T>, AutoCloseable {
protected final DataBroker dataProvider;
- protected final ListenerRegistration<DataTreeChangeHandler<T>> registeredListener;
+ protected ListenerRegistration<DataTreeChangeHandler<T>> registeredListener;
- * Registers {@link DataTreeChangeListener} for {@code pointOfInterest} by using
- * {@code dataProvider}
*
* @param dataProvider cannot be {@code null}
*
* @param dataProvider cannot be {@code null}
- * @param pointOfInterest cannot be {@code null}
- * @throws NullPointerException if at least one paramter is {@code null}
+ * @throws NullPointerException if <b>dataProvider</b> is {@code null}
- protected DataTreeChangeHandler(DataBroker dataProvider, DataTreeIdentifier<T> pointOfInterest) {
+ protected DataTreeChangeHandler(DataBroker dataProvider) {
this.dataProvider = checkNotNull(dataProvider);
this.dataProvider = checkNotNull(dataProvider);
+ }
+
+ /**
+ *
+ * @param pointOfInterest identifier of root node
+ * @throws NullPointerException if <b>pointOfInterest</b> is {@code null}
+ */
+ protected void registerDataTreeChangeListener(DataTreeIdentifier<T> pointOfInterest) {
registeredListener = dataProvider.registerDataTreeChangeListener(checkNotNull(pointOfInterest), this);
}
registeredListener = dataProvider.registerDataTreeChangeListener(checkNotNull(pointOfInterest), this);
}
import javax.annotation.Nonnull;
import org.opendaylight.controller.config.yang.config.neutron_ovsdb.impl.IntegrationBridgeSetting;
import javax.annotation.Nonnull;
import org.opendaylight.controller.config.yang.config.neutron_ovsdb.impl.IntegrationBridgeSetting;
+import org.opendaylight.controller.config.yang.config.neutron_ovsdb.impl.NeutronOvsdbModule;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
private final Map<InstanceIdentifier<Node>, NeutronBridgeWithExtPort> bridgeByNodeIid = new HashMap<>();
public OvsdbNodeListener(DataBroker dataProvider, IntegrationBridgeSetting brSettings) {
private final Map<InstanceIdentifier<Node>, NeutronBridgeWithExtPort> bridgeByNodeIid = new HashMap<>();
public OvsdbNodeListener(DataBroker dataProvider, IntegrationBridgeSetting brSettings) {
- super(dataProvider,
- new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
- InstanceIdentifier.create(NetworkTopology.class)
- .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
- .child(Node.class)));
intBrSettings = brSettings;
intBrSettings = brSettings;
+ this.registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.create(NetworkTopology.class)
+ .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+ .child(Node.class)));
private static final String TAP = "tap";
public PortByEndpointListener(DataBroker dataProvider) {
private static final String TAP = "tap";
public PortByEndpointListener(DataBroker dataProvider) {
- super(dataProvider,
- new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
- InstanceIdentifier.builder(Mappings.class)
- .child(NeutronByGbpMappings.class)
- .child(PortsByEndpoints.class)
- .child(PortByEndpoint.class)
- .build()));
+ super(dataProvider);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(Mappings.class)
+ .child(NeutronByGbpMappings.class)
+ .child(PortsByEndpoints.class)
+ .child(PortByEndpoint.class)
+ .build()));
private static final Logger LOG = LoggerFactory.getLogger(ProviderPhysicalNetworkListener.class);
protected ProviderPhysicalNetworkListener(DataBroker dataProvider) {
private static final Logger LOG = LoggerFactory.getLogger(ProviderPhysicalNetworkListener.class);
protected ProviderPhysicalNetworkListener(DataBroker dataProvider) {
- super(dataProvider,
- new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ super(dataProvider);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
InstanceIdentifier.builder(Mappings.class)
.child(NeutronByGbpMappings.class)
.child(ProviderPhysicalNetworksAsL2FloodDomains.class)
InstanceIdentifier.builder(Mappings.class)
.child(NeutronByGbpMappings.class)
.child(ProviderPhysicalNetworksAsL2FloodDomains.class)
private static final Logger LOG = LoggerFactory.getLogger(IovisorResolvedEndpointListener.class);
protected IovisorResolvedEndpointListener(DataBroker dataprovider) {
private static final Logger LOG = LoggerFactory.getLogger(IovisorResolvedEndpointListener.class);
protected IovisorResolvedEndpointListener(DataBroker dataprovider) {
- super(dataprovider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ super(dataprovider);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
IovisorIidFactory.iovisorResolvedEndpointsByTenantIdByEndpointGroupIdWildCardIid()));
}
IovisorIidFactory.iovisorResolvedEndpointsByTenantIdByEndpointGroupIdWildCardIid()));
}
private IovisorModuleManager iovisorModuleManager;
public ResolvedPolicyListener(DataBroker dataBroker, IovisorModuleManager iovisorModuleManager) {
private IovisorModuleManager iovisorModuleManager;
public ResolvedPolicyListener(DataBroker dataBroker, IovisorModuleManager iovisorModuleManager) {
- super(dataBroker, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
- InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
this.iovisorModuleManager = iovisorModuleManager;
this.iovisorModuleManager = iovisorModuleManager;
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
private final EndpointManager endpointManager;
public EndpointListener(DataBroker dataProvider, EndpointManager endpointManager) {
private final EndpointManager endpointManager;
public EndpointListener(DataBroker dataProvider, EndpointManager endpointManager) {
- super(dataProvider,
- new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, IidFactory.l3EndpointsIidWildcard()));
this.endpointManager = endpointManager;
this.endpointManager = endpointManager;
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ IidFactory.l3EndpointsIidWildcard()));
public class IovisorModuleListener extends DataTreeChangeHandler<IovisorModuleInstance> {
public IovisorModuleListener(DataBroker dataProvider) {
public class IovisorModuleListener extends DataTreeChangeHandler<IovisorModuleInstance> {
public IovisorModuleListener(DataBroker dataProvider) {
- super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ super(dataProvider);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
IovisorIidFactory.iovisorModuleInstanceWildCardIid().child(IovisorModuleInstance.class)));
}
IovisorIidFactory.iovisorModuleInstanceWildCardIid().child(IovisorModuleInstance.class)));
}
private static String DELETED = "removed";
public ActionDefinitionListener(DataBroker dataBroker) {
private static String DELETED = "removed";
public ActionDefinitionListener(DataBroker dataBroker) {
- super(dataBroker, new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
+ super(dataBroker);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ActionDefinition.class).build()));
}
InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ActionDefinition.class).build()));
}
.build();
public ClassifierDefinitionListener(DataBroker dataBroker) {
.build();
public ClassifierDefinitionListener(DataBroker dataBroker) {
- super(dataBroker, new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
+ super(dataBroker);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ClassifierDefinition.class).build()));
}
InstanceIdentifier.builder(SubjectFeatureDefinitions.class).child(ClassifierDefinition.class).build()));
}
private final SwitchManager swManager;
public OfOverlayContextListener(DataBroker dataProvider, SwitchManager swManager) {
private final SwitchManager swManager;
public OfOverlayContextListener(DataBroker dataProvider, SwitchManager swManager) {
- super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
- .builder(Endpoints.class).child(Endpoint.class).augmentation(OfOverlayContext.class).build()));
this.swManager = checkNotNull(swManager);
this.swManager = checkNotNull(swManager);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
+ .builder(Endpoints.class).child(Endpoint.class).augmentation(OfOverlayContext.class).build()));
private final SwitchManager swManager;
public OfOverlayL3ContextListener(DataBroker dataProvider, SwitchManager swManager) {
private final SwitchManager swManager;
public OfOverlayL3ContextListener(DataBroker dataProvider, SwitchManager swManager) {
- super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
- .builder(Endpoints.class).child(EndpointL3.class).augmentation(OfOverlayL3Context.class).build()));
this.swManager = checkNotNull(swManager);
this.swManager = checkNotNull(swManager);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
+ .builder(Endpoints.class).child(EndpointL3.class).augmentation(OfOverlayL3Context.class).build()));
private final OFStatisticsManager ofStatsManager;
public ResolvedPolicyClassifierListener(DataBroker dataProvider, OFStatisticsManager ofStatsManager) {
private final OFStatisticsManager ofStatsManager;
public ResolvedPolicyClassifierListener(DataBroker dataProvider, OFStatisticsManager ofStatsManager) {
- super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
- InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
this.ofStatsManager = checkNotNull(ofStatsManager);
this.ofStatsManager = checkNotNull(ofStatsManager);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+ InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
private ResolvedPolicyClassifierListener classifierListener;
public SflowClientSettingsListener(DataBroker dataprovider, ScheduledExecutorService executor, StatisticsManager statisticsManager) {
private ResolvedPolicyClassifierListener classifierListener;
public SflowClientSettingsListener(DataBroker dataprovider, ScheduledExecutorService executor, StatisticsManager statisticsManager) {
- super(dataprovider, new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, IID));
this.statisticsManager = Preconditions.checkNotNull(statisticsManager);
this.executor = Preconditions.checkNotNull(executor);
this.statisticsManager = Preconditions.checkNotNull(statisticsManager);
this.executor = Preconditions.checkNotNull(executor);
+ registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, IID));