Bug 5510 - Modifying DataTreeChangeHandler 10/37410/9
authorTomas Cechvala <tcechval@cisco.com>
Wed, 20 Apr 2016 10:54:19 +0000 (12:54 +0200)
committerTomas Cechvala <tcechval@cisco.com>
Fri, 22 Apr 2016 07:27:43 +0000 (07:27 +0000)
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:
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/resolver/PolicyResolver.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/sf/SupportedClassifierDefinitionListener.java
groupbasedpolicy/src/main/java/org/opendaylight/groupbasedpolicy/util/DataTreeChangeHandler.java
neutron-ovsdb/src/main/java/org/opendaylight/groupbasedpolicy/neutron/ovsdb/OvsdbNodeListener.java
neutron-ovsdb/src/main/java/org/opendaylight/groupbasedpolicy/neutron/ovsdb/PortByEndpointListener.java
neutron-ovsdb/src/main/java/org/opendaylight/groupbasedpolicy/neutron/ovsdb/ProviderPhysicalNetworkListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/IovisorResolvedEndpointListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/ResolvedPolicyListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/endpoint/EndpointListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/module/IovisorModuleListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ActionDefinitionListener.java
renderers/iovisor/src/main/java/org/opendaylight/groupbasedpolicy/renderer/iovisor/sf/ClassifierDefinitionListener.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayContextListener.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/endpoint/OfOverlayL3ContextListener.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/ResolvedPolicyClassifierListener.java
renderers/ofoverlay/src/main/java/org/opendaylight/groupbasedpolicy/renderer/ofoverlay/statistics/SflowClientSettingsListener.java

index 370f82bc7d52ce81a199c7fc8de425ecae6264ff..4ed80025e626a2b26e624d7fb2caab8a8896d878 100755 (executable)
@@ -309,7 +309,8 @@ public class PolicyResolver implements PolicyValidatorRegistry, AutoCloseable {
     private class PolicyChangeListener extends DataTreeChangeHandler<Tenant> {
 
         protected PolicyChangeListener(DataBroker dataProvider, DataTreeIdentifier<Tenant> pointOfInterest) {
-            super(dataProvider, pointOfInterest);
+            super(dataProvider);
+            registerDataTreeChangeListener(pointOfInterest);
         }
 
         @Override
index e152fd6674e4c03152ed989bf1673d01cb7196ee..07f1950ac8b7e5728e9c83ff94f21b75d7f01408 100644 (file)
@@ -53,8 +53,7 @@ public class SupportedClassifierDefinitionListener extends DataTreeChangeHandler
     private final PolicyValidatorRegistry validatorRegistry;
 
     public SupportedClassifierDefinitionListener(DataBroker dataProvider, PolicyValidatorRegistry validatorRegistry) {
-        super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
-                IidFactory.supportedClassifierDefinitionIidWildcard()));
+        super(dataProvider);
         this.validatorRegistry = validatorRegistry;
         if (validatorRegistry == null) {
             LOG.info(
@@ -65,6 +64,8 @@ public class SupportedClassifierDefinitionListener extends DataTreeChangeHandler
                     "{} service was found. Automatic registration of simple classifier-instance validators is available for renderers.",
                     PolicyValidatorRegistry.class.getCanonicalName());
         }
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                IidFactory.supportedClassifierDefinitionIidWildcard()));
     }
 
     @Override
index d321e32be787d15efd796ab6b45315dfcb127c73..ae72a3a655bb1609b1e5064037120f27217262a8 100644 (file)
@@ -26,23 +26,28 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * The purpose of this class is to eliminate boilerplate code used in most of
  * {@link DataTreeChangeListener} implementations.
  *
- * @param <T>
+ * @param <T> target class
  */
 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 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);
+    }
+
+    /**
+     *
+     * @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);
     }
 
index f8fc121dac28433f5593743a7dbb24608037b19c..c191a1397af73a1ae87007fce8c51991cc27dbc8 100644 (file)
@@ -20,6 +20,7 @@ import java.util.Set;
 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;
@@ -94,12 +95,12 @@ public class OvsdbNodeListener extends DataTreeChangeHandler<Node> {
     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)));
+        super(dataProvider);
         intBrSettings = brSettings;
+        this.registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.create(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
+                    .child(Node.class)));
     }
 
     @Override
index 4997259671a57052bc02edf533ac91f653235533..764567e8dcde4dec3e3893c0ff01e43aed10f92c 100644 (file)
@@ -48,13 +48,13 @@ public class PortByEndpointListener extends DataTreeChangeHandler<PortByEndpoint
     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()));
     }
 
     @Override
index 72233f336abdb1d5b42d5454fd789669e9e4906a..d0bc88803085a85ca386a8f84682d731afa00cb7 100644 (file)
@@ -35,8 +35,8 @@ public class ProviderPhysicalNetworkListener extends DataTreeChangeHandler<Provi
     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)
index 81f7e9104e0e71548b8d333d665f3b8eabfc6a96..a47e1e8d786744e6bf1b4cf1ef17b8868023b612 100644 (file)
@@ -35,7 +35,8 @@ public class IovisorResolvedEndpointListener
     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()));
     }
 
index 7b40f86ea104f7562b5ee61015c24ec98c916f92..5c459a783d62f7bbf07f323144c60547887017ea 100644 (file)
@@ -39,9 +39,10 @@ public class ResolvedPolicyListener extends DataTreeChangeHandler<ResolvedPolicy
     private IovisorModuleManager iovisorModuleManager;
 
     public ResolvedPolicyListener(DataBroker dataBroker, IovisorModuleManager iovisorModuleManager) {
-        super(dataBroker, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
+        super(dataBroker);
         this.iovisorModuleManager = iovisorModuleManager;
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
     }
 
     @Override
index 1c49a0ea8c6f209514a1237df5bde5626cafbff5..6a00e74ef34d8170c408d2f81de769d839defd8b 100644 (file)
@@ -22,9 +22,10 @@ public class EndpointListener extends DataTreeChangeHandler<EndpointL3> {
     private final EndpointManager endpointManager;
 
     public EndpointListener(DataBroker dataProvider, EndpointManager endpointManager) {
-        super(dataProvider,
-                new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, IidFactory.l3EndpointsIidWildcard()));
+        super(dataProvider);
         this.endpointManager = endpointManager;
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                IidFactory.l3EndpointsIidWildcard()));
     }
 
     @Override
index 9366111e368efac60b36783657c2f9c497bd9b42..8ecfce91d8886c0208ffa7d317bd1ca83ac9f830 100644 (file)
@@ -22,7 +22,8 @@ import org.slf4j.LoggerFactory;
 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)));
     }
 
index 926b4c0d88c38655588a887c2397544739f99985..efc1c7a67e89003c0755cd6370eb2969387072f5 100644 (file)
@@ -44,7 +44,8 @@ public class ActionDefinitionListener extends DataTreeChangeHandler<ActionDefini
     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()));
     }
 
index 433e162fab025535f5b95202306f28ea253a7f07..b34652e6f937d715c4de8beabfe83a4176be8000 100755 (executable)
@@ -46,7 +46,8 @@ public class ClassifierDefinitionListener extends DataTreeChangeHandler<Classifi
         .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()));
     }
 
index d3029ac70d79df86e64f012375a4bf38d69dd139..1b22aaf8ff89152292fde0d5b9878a59d8d5700f 100644 (file)
@@ -39,9 +39,10 @@ public class OfOverlayContextListener extends DataTreeChangeHandler<OfOverlayCon
     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()));
+        super(dataProvider);
         this.swManager = checkNotNull(swManager);
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
+                .builder(Endpoints.class).child(Endpoint.class).augmentation(OfOverlayContext.class).build()));
     }
 
     @Override
index 60ff2d7004b68c468dea2f58c293ed934e31eee9..581104c1679a8303ffaa3954a70d771a94b153dd 100644 (file)
@@ -39,9 +39,10 @@ public class OfOverlayL3ContextListener extends DataTreeChangeHandler<OfOverlayL
     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()));
+        super(dataProvider);
         this.swManager = checkNotNull(swManager);
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier
+                .builder(Endpoints.class).child(EndpointL3.class).augmentation(OfOverlayL3Context.class).build()));
     }
 
     @Override
index e7faaace41d1e5225e73f28204405cc4816204fa..91fc2edc9a429be434434faab736730ad7e5c078 100644 (file)
@@ -39,9 +39,10 @@ public class ResolvedPolicyClassifierListener extends DataTreeChangeHandler<Reso
     private final OFStatisticsManager ofStatsManager;
 
     public ResolvedPolicyClassifierListener(DataBroker dataProvider, OFStatisticsManager ofStatsManager) {
-        super(dataProvider, new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
+        super(dataProvider);
         this.ofStatsManager = checkNotNull(ofStatsManager);
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
+                InstanceIdentifier.builder(ResolvedPolicies.class).child(ResolvedPolicy.class).build()));
     }
 
     @Override
index ec0a0bf17df5f79eff5dd2f27e59cd61b340445f..ca485f103367a884896f862303b9f6e3d8a8601c 100755 (executable)
@@ -36,9 +36,10 @@ public class SflowClientSettingsListener extends DataTreeChangeHandler<SflowClie
     private ResolvedPolicyClassifierListener classifierListener;
 
     public SflowClientSettingsListener(DataBroker dataprovider, ScheduledExecutorService executor, StatisticsManager statisticsManager) {
-        super(dataprovider, new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, IID));
+        super(dataprovider);
         this.statisticsManager = Preconditions.checkNotNull(statisticsManager);
         this.executor = Preconditions.checkNotNull(executor);
+        registerDataTreeChangeListener(new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, IID));
     }
 
     @Override