X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=applications%2Ftopology-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fapplications%2Ftopology%2Fmanager%2FDataTreeChangeListenerImpl.java;h=056d07e7661d9c1efb7eadb6ccfe5e070934a1fc;hb=dfadca522536e6cfe7a9eba0255b0cd483d68b66;hp=362857368d4f8e379806100397ba87fcd743faac;hpb=0afa00220329e3e01b96baa934d45e05786476e6;p=openflowplugin.git diff --git a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataTreeChangeListenerImpl.java b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataTreeChangeListenerImpl.java index 362857368d..056d07e766 100644 --- a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataTreeChangeListenerImpl.java +++ b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataTreeChangeListenerImpl.java @@ -7,11 +7,13 @@ */ package org.opendaylight.openflowplugin.applications.topology.manager; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; -import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.openflowplugin.common.wait.SimpleTaskRetryLooper; +import static java.util.Objects.requireNonNull; + +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.binding.api.DataTreeChangeListener; +import org.opendaylight.mdsal.binding.api.DataTreeIdentifier; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; @@ -19,68 +21,57 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. 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.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public abstract class DataTreeChangeListenerImpl implements DataTreeChangeListener, AutoCloseable { +public abstract class DataTreeChangeListenerImpl implements DataTreeChangeListener, + AutoCloseable { + static final InstanceIdentifier II_TO_TOPOLOGY = InstanceIdentifier.create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(new TopologyId(FlowCapableTopologyProvider.TOPOLOGY_ID))); - private static final Logger LOG = LoggerFactory.getLogger(DataTreeChangeListenerImpl.class); - private static final long STARTUP_LOOP_TICK = 500L; - private static final int STARTUP_LOOP_MAX_RETRIES = 8; - protected final ListenerRegistration listenerRegistration; + protected final Registration listenerRegistration; protected OperationProcessor operationProcessor; - /** - * instance identifier to Node in network topology model (yangtools) - */ - static final InstanceIdentifier II_TO_TOPOLOGY = - InstanceIdentifier - .create(NetworkTopology.class) - .child(Topology.class, new TopologyKey(new TopologyId(FlowCapableTopologyProvider.TOPOLOGY_ID))); - - DataTreeChangeListenerImpl(final OperationProcessor operationProcessor, - final DataBroker dataBroker, - final InstanceIdentifier ii) { - final DataTreeIdentifier identifier = new DataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, ii); - final SimpleTaskRetryLooper looper = new SimpleTaskRetryLooper(STARTUP_LOOP_TICK, STARTUP_LOOP_MAX_RETRIES); - try { - listenerRegistration = looper.loopUntilNoException(() -> - dataBroker.registerDataTreeChangeListener(identifier, DataTreeChangeListenerImpl.this)); - } catch (Exception e) { - LOG.error("Data listener registration failed!"); - throw new IllegalStateException("TopologyManager startup fail! TM bundle needs restart.", e); - } - this.operationProcessor = operationProcessor; + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", + justification = "'this' passed to registerDataTreeChangeListener") + protected DataTreeChangeListenerImpl(final OperationProcessor operationProcessor, final DataBroker dataBroker, + final InstanceIdentifier ii) { + this.operationProcessor = requireNonNull(operationProcessor); + listenerRegistration = dataBroker.registerDataTreeChangeListener( + DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, ii), this); } @Override - public void close() throws Exception { + public void close() { listenerRegistration.close(); } - void sendToTransactionChain(final T node, final InstanceIdentifier iiToTopologyNode) { - operationProcessor.enqueueOperation(manager -> manager.mergeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToTopologyNode, node, true)); + void sendToTransactionChain(final O node, final InstanceIdentifier iiToTopologyNode) { + operationProcessor.enqueueOperation( + manager -> manager.mergeToTransaction(LogicalDatastoreType.OPERATIONAL, iiToTopologyNode, node, true)); } - InstanceIdentifier provideIIToTopologyNode( + InstanceIdentifier provideIIToTopologyNode( final NodeId nodeIdInTopology) { - org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey nodeKeyInTopology = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey( + org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology + .NodeKey + nodeKeyInTopology + = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network + .topology.topology.NodeKey( nodeIdInTopology); - return II_TO_TOPOLOGY - .builder() - .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class, - nodeKeyInTopology).build(); + return II_TO_TOPOLOGY.builder() + .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network + .topology.topology.Node.class, + nodeKeyInTopology).build(); } - NodeId provideTopologyNodeId(InstanceIdentifier iiToNodeInInventory) { + NodeId provideTopologyNodeId(final InstanceIdentifier iiToNodeInInventory) { final NodeKey inventoryNodeKey = iiToNodeInInventory.firstKeyOf(Node.class); if (inventoryNodeKey != null) { return new NodeId(inventoryNodeKey.getId().getValue()); } return null; } - }