Fix HOST event handling in MulticastRouteManager
Change-Id: I721470bd1879c1dc252346a0f4f085ca80f54156
(cherry picked from commit beea3e38fac2f6d763c62bb28bd7256b95bebd9c)
diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
index 9965818..e95c417 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastRouteData.java
@@ -97,9 +97,7 @@
*/
public void addSources(Set<ConnectPoint> sources) {
checkArgument(!sources.contains(null));
- sources.forEach(source -> {
- this.sources.put(source, true);
- });
+ sources.forEach(source -> this.sources.put(source, true));
}
/**
@@ -129,7 +127,12 @@
public void addSinks(HostId hostId, Set<ConnectPoint> sinks) {
checkNotNull(hostId);
checkArgument(!sinks.contains(null));
- this.sinks.put(hostId, sinks);
+ //if existing we add to current set, otherwise we put them all
+ if (this.sinks.containsKey(hostId)) {
+ this.sinks.get(hostId).addAll(sinks);
+ } else {
+ this.sinks.put(hostId, sinks);
+ }
}
/**
@@ -168,7 +171,10 @@
public void removeSinks(HostId hostId, Set<ConnectPoint> sinks) {
checkNotNull(hostId);
checkArgument(!sinks.contains(null));
- this.sinks.get(hostId).removeAll(sinks);
+ //if existing we remove from current set, otherwise just skip them
+ if (this.sinks.containsKey(hostId)) {
+ this.sinks.get(hostId).removeAll(sinks);
+ }
}
/**
diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
index 53d444b..aa429b2 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/McastStore.java
@@ -23,7 +23,7 @@
import java.util.Set;
/**
- * Entity responsible for storing multicast state information.
+ * Entity responsible for storing Multicast state information.
*/
@Beta
public interface McastStore extends Store<McastEvent, McastStoreDelegate> {
@@ -31,21 +31,21 @@
/**
* Updates the store with the route information.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void storeRoute(McastRoute route);
/**
- * Updates the store with the route information.
+ * Removes from the store the route information.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void removeRoute(McastRoute route);
/**
* Add to the store with source information for the given route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param sources a set of sources
*/
void storeSources(McastRoute route, Set<ConnectPoint> sources);
@@ -53,7 +53,7 @@
/**
* Removes from the store all the sources information for a given route.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void removeSources(McastRoute route);
@@ -61,7 +61,7 @@
* Removes from the store the source information for the given route.
* value.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param sources a set of sources
*/
void removeSources(McastRoute route, Set<ConnectPoint> sources);
@@ -70,7 +70,7 @@
* Updates the store with a host based sink information for a given route. There may be
* multiple sink connect points for the given host.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param hostId the host sink
* @param sinks the sinks
*/
@@ -81,7 +81,7 @@
* The sinks stored with this method are not tied with any host.
* Traffic will be sent to all of them.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param sinks set of specific connect points
*/
void addSinks(McastRoute route, Set<ConnectPoint> sinks);
@@ -89,73 +89,72 @@
/**
* Removes from the store all the sink information for a given route.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void removeSinks(McastRoute route);
/**
* Removes from the store the complete set of sink information for a given host for a given route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param hostId a specific host
*/
void removeSink(McastRoute route, HostId hostId);
/**
- * Removes from the store the given set of sink information for a given host for a given route.
+ * Removes a set of sink connect points for a given host the route.
*
- * @param route a multicast route
- * @param hostId the host
- * @param sinks a set of multicast sink connect points
+ * @param route the multicast route
+ * @param hostId a sink host
+ * @param connectPoints a given set of connect points to remove
*/
- void removeSinks(McastRoute route, HostId hostId, Set<ConnectPoint> sinks);
+ void removeSinks(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
/**
* Removes from the store the set of non host bind sink information for a given route.
*
- * @param route a multicast route
- * @param sinks a set of multicast sinks
+ * @param route a Multicast route
+ * @param sinks a set of Multicast sinks
*/
void removeSinks(McastRoute route, Set<ConnectPoint> sinks);
/**
- * Obtains the sources for a multicast route.
+ * Obtains the sources for a Multicast route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @return a connect point
*/
Set<ConnectPoint> sourcesFor(McastRoute route);
/**
- * Obtains the sinks for a multicast route.
+ * Obtains the sinks for a Multicast route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @return a set of sinks
*/
Set<ConnectPoint> sinksFor(McastRoute route);
/**
- * Obtains the sinks for a given host for a given multicast route.
+ * Obtains the sinks for a given host for a given Multicast route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param hostId the host
* @return a set of sinks
*/
Set<ConnectPoint> sinksFor(McastRoute route, HostId hostId);
-
/**
- * Gets the set of all known multicast routes.
+ * Gets the set of all known Multicast routes.
*
- * @return set of multicast routes.
+ * @return set of Multicast routes.
*/
Set<McastRoute> getRoutes();
/**
- * Gets the multicast data for a given route.
+ * Gets the Multicast data for a given route.
*
* @param route the route
- * @return set of multicast routes.
+ * @return set of Multicast routes.
*/
McastRouteData getRouteData(McastRoute route);
}
diff --git a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
index d9b1721..37ebcd5 100644
--- a/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
+++ b/apps/mcast/api/src/main/java/org/onosproject/mcast/api/MulticastRouteService.java
@@ -21,11 +21,10 @@
import org.onosproject.net.ConnectPoint;
import org.onosproject.net.HostId;
-import java.util.Optional;
import java.util.Set;
/**
- * A service interface for maintaining multicast information.
+ * A service interface for maintaining Multicast information.
*/
@Beta
public interface MulticastRouteService
@@ -34,73 +33,73 @@
/**
* Adds an empty route to the information base for the given group IP.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void add(McastRoute route);
/**
* Removes a route from the information base.
*
- * @param route a multicast route
+ * @param route a Multicast route
*/
void remove(McastRoute route);
/**
- * Gets all multicast routes in the system.
+ * Gets all Multicast routes in the system.
*
- * @return set of multicast routes
+ * @return set of Multicast routes
*/
Set<McastRoute> getRoutes();
/**
- * Gets a multicast route in the system.
+ * Gets a Multicast route in the system.
*
- * @param groupIp multicast group IP address
- * @param sourceIp multicasto source Ip address
- * @return set of multicast routes
+ * @param groupIp Multicast group IP address
+ * @param sourceIp Multicasto source Ip address
+ * @return set of Multicast routes
*/
- Optional<McastRoute> getRoute(IpAddress groupIp, IpAddress sourceIp);
+ Set<McastRoute> getRoute(IpAddress groupIp, IpAddress sourceIp);
/**
- * Adds a set of source to the route from where the
+ * Adds a set of sources connect points to the route from where the
* data stream is originating.
*
- * @param route the multicast route
+ * @param route the Multicast route
* @param sources a set of sources
*/
void addSources(McastRoute route, Set<ConnectPoint> sources);
/**
- * Removes all the sources from the route.
+ * Removes all the sources connect points from the route.
*
- * @param route the multicast route
+ * @param route the Multicast route
*/
void removeSources(McastRoute route);
/**
- * Removes a set of sources from the route.
+ * Removes a set of sources connect points from the route.
*
- * @param route the multicast route
+ * @param route the Multicast route
* @param sources a set of sources
*/
void removeSources(McastRoute route, Set<ConnectPoint> sources);
/**
- * Adds a set of sink to the route to which a data stream should be
+ * Adds a sink to the route to which a data stream should be
* sent to.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param hostId a sink host
*/
void addSink(McastRoute route, HostId hostId);
/**
* Adds a set of sink to the route to which a data stream should be
- * sent to. If this method is used this the connect points will all
- * be used a sink for that Mcast Tree. For dual-homed sinks please use
- * {@link #addSink(McastRoute route, HostId hostId) addSink}.
+ * sent to. If this method is used the connect points will all be
+ * used as different sinks for that Mcast Tree. For dual-homed sinks
+ * please use {@link #addSink(McastRoute route, HostId hostId) addSink}.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param sinks a set of sink connect point
*/
void addSink(McastRoute route, Set<ConnectPoint> sinks);
@@ -108,40 +107,31 @@
/**
* Removes all the sinks from the route.
*
- * @param route the multicast route
+ * @param route the Multicast route
*/
void removeSinks(McastRoute route);
/**
- * Removes a sink host from the route.
+ * Removes a sink from the route.
*
- * @param route the multicast route
+ * @param route the Multicast route
* @param hostId a sink host
*/
void removeSink(McastRoute route, HostId hostId);
/**
- * Removes a set of sink connect points for a given host the route.
- *
- * @param route the multicast route
- * @param hostId a sink host
- * @param connectPoints a given set of connect points to remove
- */
- void removeSinks(McastRoute route, HostId hostId, Set<ConnectPoint> connectPoints);
-
- /**
* Removes a set of sinks to the route to which a data stream should be
* sent to. If this method is used the mcast tree does not work
* for any other sink until it's added. For dual-homed sinks please use
* {@link #removeSink(McastRoute route, HostId hostId) removeSink}.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param sink a sink connect point
*/
void removeSinks(McastRoute route, Set<ConnectPoint> sink);
/**
- * Return the Data for this route.
+ * Return the Multicast data for this route.
*
* @param route route
* @return the mcast route data
@@ -149,9 +139,9 @@
McastRouteData routeData(McastRoute route);
/**
- * Find the data source association for this multicast route.
+ * Find the data source association for this Multicast route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @return a connect point
*/
Set<ConnectPoint> sources(McastRoute route);
@@ -159,24 +149,24 @@
/**
* Find the list of sinks for this route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @return a list of connect points
*/
Set<ConnectPoint> sinks(McastRoute route);
/**
- * Find the list of sinks for a given host for this route.
+ * Find the set of connect points for a given sink for this route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @param hostId the host
* @return a list of connect points
*/
Set<ConnectPoint> sinks(McastRoute route, HostId hostId);
/**
- * Obtains all the non host specific sinks for a multicast route.
+ * Obtains all the non host specific sinks for a Multicast route.
*
- * @param route a multicast route
+ * @param route a Multicast route
* @return a set of sinks
*/
Set<ConnectPoint> nonHostSinks(McastRoute route);