X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Frouting%2Fdijkstra_implementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Frouting%2Fdijkstra_implementation%2Finternal%2FDijkstraImplementation.java;fp=opendaylight%2Frouting%2Fdijkstra_implementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Frouting%2Fdijkstra_implementation%2Finternal%2FDijkstraImplementation.java;h=77e6d95dc953c597158be0c734355f51f2663fee;hp=386b226567c7e938545d4b05d609a7d03bf68127;hb=cdd14ba56a3898e80e73e72a0605f9d63b8ca774;hpb=0a980f274122e5b73f40dfb9a85783f3023e08a6 diff --git a/opendaylight/routing/dijkstra_implementation/src/main/java/org/opendaylight/controller/routing/dijkstra_implementation/internal/DijkstraImplementation.java b/opendaylight/routing/dijkstra_implementation/src/main/java/org/opendaylight/controller/routing/dijkstra_implementation/internal/DijkstraImplementation.java index 386b226567..77e6d95dc9 100644 --- a/opendaylight/routing/dijkstra_implementation/src/main/java/org/opendaylight/controller/routing/dijkstra_implementation/internal/DijkstraImplementation.java +++ b/opendaylight/routing/dijkstra_implementation/src/main/java/org/opendaylight/controller/routing/dijkstra_implementation/internal/DijkstraImplementation.java @@ -25,12 +25,12 @@ import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.core.Path; import org.opendaylight.controller.sal.core.Property; import org.opendaylight.controller.sal.core.UpdateType; -import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType; import org.opendaylight.controller.sal.reader.IReadService; import org.opendaylight.controller.sal.routing.IListenRoutingUpdates; import org.opendaylight.controller.sal.routing.IRouting; -import org.opendaylight.controller.sal.topology.IListenTopoUpdates; import org.opendaylight.controller.switchmanager.ISwitchManager; +import org.opendaylight.controller.topologymanager.ITopologyManager; +import org.opendaylight.controller.topologymanager.ITopologyManagerAware; import edu.uci.ics.jung.algorithms.shortestpath.DijkstraShortestPath; import edu.uci.ics.jung.graph.Graph; @@ -39,6 +39,7 @@ import edu.uci.ics.jung.graph.util.EdgeType; import java.lang.Exception; import java.lang.IllegalArgumentException; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.Map; @@ -48,7 +49,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.collections15.Transformer; -public class DijkstraImplementation implements IRouting, IListenTopoUpdates { +public class DijkstraImplementation implements IRouting, ITopologyManagerAware { private static Logger log = LoggerFactory .getLogger(DijkstraImplementation.class); private ConcurrentMap> topologyBWAware; @@ -56,6 +57,7 @@ public class DijkstraImplementation implements IRouting, IListenTopoUpdates { DijkstraShortestPath mtp; //Max Throughput Path private Set routingAware; private ISwitchManager switchManager; + private ITopologyManager topologyManager; private IReadService readService; private static final long DEFAULT_LINK_SPEED = Bandwidth.BW1Gbps; @@ -64,7 +66,7 @@ public class DijkstraImplementation implements IRouting, IListenTopoUpdates { this.routingAware = new HashSet(); } if (this.routingAware != null) { - log.debug("Adding routingAware listener"); + log.debug("Adding routingAware listener: " + i); this.routingAware.add(i); } } @@ -81,19 +83,6 @@ public class DijkstraImplementation implements IRouting, IListenTopoUpdates { } } - @SuppressWarnings( { "unchecked", "rawtypes" }) - public DijkstraImplementation() { - this.topologyBWAware = (ConcurrentMap>) new ConcurrentHashMap(); - this.sptBWAware = (ConcurrentMap>) new ConcurrentHashMap(); - // Now create the default topology, which doesn't consider the - // BW, also create the corresponding Dijkstra calculation - Graph g = new SparseMultigraph(); - Short sZero = Short.valueOf((short) 0); - this.topologyBWAware.put(sZero, g); - this.sptBWAware.put(sZero, new DijkstraShortestPath(g)); - // Topologies for other BW will be added on a needed base - } - @Override public synchronized void initMaxThroughput( final Map EdgeWeightMap) { @@ -383,14 +372,66 @@ public class DijkstraImplementation implements IRouting, IListenTopoUpdates { } } - public void startUp() { - log.debug(this.getClass().getName() + ":startUp Method Called"); + /** + * Function called by the dependency manager when all the required + * dependencies are satisfied + * + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void init() { + log.debug("Routing init() is called"); + this.topologyBWAware = (ConcurrentMap>) new ConcurrentHashMap(); + this.sptBWAware = (ConcurrentMap>) new ConcurrentHashMap(); + // Now create the default topology, which doesn't consider the + // BW, also create the corresponding Dijkstra calculation + Graph g = new SparseMultigraph(); + Short sZero = Short.valueOf((short) 0); + this.topologyBWAware.put(sZero, g); + this.sptBWAware.put(sZero, new DijkstraShortestPath(g)); + // Topologies for other BW will be added on a needed base } - - public void shutDown() { - log.debug(this.getClass().getName() + ":shutDown Method Called"); + /** + * Function called by the dependency manager when at least one dependency + * become unsatisfied or when the component is shutting down because for + * example bundle is being stopped. + * + */ + void destroy() { + log.debug("Routing destroy() is called"); } + /** + * Function called by dependency manager after "init ()" is called + * and after the services provided by the class are registered in + * the service registry + * + */ + void start() { + log.debug("Routing start() is called"); + // build the routing database from the topology if it exists. + Map> edges = topologyManager.getEdges(); + if (edges.isEmpty()) { + return; + } + log.debug("Creating routing database from the topology"); + for (Iterator>> i = edges.entrySet().iterator(); i.hasNext();) { + Map.Entry> entry = i.next(); + Edge e = entry.getKey(); + Set props = entry.getValue(); + edgeUpdate(e, UpdateType.ADDED, props); + } + } + + /** + * Function called by the dependency manager before the services exported by + * the component are unregistered, this will be followed by a "destroy ()" + * calls + * + */ + public void stop() { + log.debug("Routing stop() is called"); + } + @Override public void edgeOverUtilized(Edge edge) { // TODO Auto-generated method stub @@ -422,4 +463,14 @@ public class DijkstraImplementation implements IRouting, IListenTopoUpdates { this.readService = null; } } + + public void setTopologyManager(ITopologyManager tm) { + this.topologyManager = tm; + } + + public void unsetTopologyManager(ITopologyManager tm) { + if (this.topologyManager == tm) { + this.topologyManager = null; + } + } }