* Added a new class TopologyEvents that encapsulated the collections
of all possible topology-related events.
* Updated the ITopologyListener API to use the new class TopologyEvents
* Updated the code that is affected by the ITopologyListener API change.
Change-Id: Ib836141d6a21e5317d645619eb685ff0b13788a2
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyManager.java b/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
index 3cff46a..3a07693 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyManager.java
@@ -27,10 +27,13 @@
import net.onrc.onos.core.util.Dpid;
import net.onrc.onos.core.util.EventEntry;
import net.onrc.onos.core.util.SwitchPort;
+import net.onrc.onos.core.util.serializers.KryoFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.esotericsoftware.kryo.Kryo;
+
/**
* The TopologyManager receives topology updates from the southbound discovery
* modules and from other ONOS instances. These updates are processed and
@@ -59,6 +62,7 @@
private final TopologyImpl topology = new TopologyImpl();
private final IControllerRegistryService registryService;
private CopyOnWriteArrayList<ITopologyListener> topologyListeners;
+ private Kryo kryo = KryoFactory.newKryoObject();
//
// Local state for keeping track of reordered events.
@@ -457,16 +461,19 @@
}
// Deliver the events
+ long timestamp = System.nanoTime();
for (ITopologyListener listener : this.topologyListeners) {
- // TODO: Should copy before handing them over to listener?
- listener.topologyEvents(apiAddedSwitchEvents,
- apiRemovedSwitchEvents,
- apiAddedPortEvents,
- apiRemovedPortEvents,
- apiAddedLinkEvents,
- apiRemovedLinkEvents,
- apiAddedDeviceEvents,
- apiRemovedDeviceEvents);
+ TopologyEvents events =
+ new TopologyEvents(timestamp,
+ kryo.copy(apiAddedSwitchEvents),
+ kryo.copy(apiRemovedSwitchEvents),
+ kryo.copy(apiAddedPortEvents),
+ kryo.copy(apiRemovedPortEvents),
+ kryo.copy(apiAddedLinkEvents),
+ kryo.copy(apiRemovedLinkEvents),
+ kryo.copy(apiAddedDeviceEvents),
+ kryo.copy(apiRemovedDeviceEvents));
+ listener.topologyEvents(events);
}
//