Policy exclusions & parallel netconf transactions
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / listener / VppNodeListener.java
index 086b51953249c43a10d37a309ed0eeb21fb586d7..ae809eae1e839634a116401adab697ef923737b5 100644 (file)
@@ -12,16 +12,18 @@ import java.util.Collection;
 
 import javax.annotation.Nonnull;
 
+import org.opendaylight.controller.md.sal.binding.api.ClusteredDataTreeChangeListener;
 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.DataTreeChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.event.NodeOperEvent;
 import org.opendaylight.groupbasedpolicy.renderer.vpp.manager.VppNodeManager;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
@@ -31,9 +33,10 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Preconditions;
 import com.google.common.eventbus.EventBus;
 
-public class VppNodeListener implements DataTreeChangeListener<Node>, AutoCloseable {
+public class VppNodeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(VppNodeListener.class);
+    private static final TopologyId TOPOLOGY_NETCONF = new TopologyId("topology-netconf");
 
     private final ListenerRegistration<VppNodeListener> listenerRegistration;
     private final VppNodeManager nodeManager;
@@ -44,22 +47,24 @@ public class VppNodeListener implements DataTreeChangeListener<Node>, AutoClosea
         this.eventBus = Preconditions.checkNotNull(eventBus);
         // Register listener
         final DataTreeIdentifier<Node> networkTopologyPath = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(Node.class).build());
+                InstanceIdentifier.builder(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(TOPOLOGY_NETCONF))
+                    .child(Node.class)
+                    .build());
         listenerRegistration =
                 Preconditions.checkNotNull(dataBroker.registerDataTreeChangeListener(networkTopologyPath, this));
-        LOG.info("Network-Topology VppNodelistener registered");
+        LOG.info("Network-Topology VppNodeListener registered");
     }
 
     @Override
     public void onDataTreeChanged(@Nonnull Collection<DataTreeModification<Node>> changes) {
-        LOG.debug("Topology Node changed. Changes {}", changes);
-
         for (DataTreeModification<Node> modification : changes) {
+            InstanceIdentifier<Node> iid = modification.getRootPath().getRootIdentifier();
+            LOG.debug("Change detected for network topology node {}.", iid.firstKeyOf(Node.class));
             DataObjectModification<Node> rootNode = modification.getRootNode();
             Node dataAfter = rootNode.getDataAfter();
             Node dataBefore = rootNode.getDataBefore();
-            NodeOperEvent event =
-                    new NodeOperEvent(modification.getRootPath().getRootIdentifier(), dataBefore, dataAfter);
+            NodeOperEvent event = new NodeOperEvent(iid, dataBefore, dataAfter);
             eventBus.post(event);
             nodeManager.syncNodes(dataAfter, dataBefore);
         }