Modify the topology event handling procedure
Change-Id: I7bda0b9a6554aee2488c4204d2ffb48a293dbe13
diff --git a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
index 429eadc..98427bb 100644
--- a/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
+++ b/src/main/java/net/onrc/onos/apps/segmentrouting/SegmentRoutingManager.java
@@ -302,13 +302,13 @@
private void handleTopologyChangeEvents() {
numOfEventProcess ++;
- Collection<LinkData> linkEntriesAdded = new ArrayList<LinkData>();
- Collection<PortData> portEntriesAdded = new ArrayList<PortData>();
- Collection<PortData> portEntriesRemoved = new ArrayList<PortData>();
- Collection<LinkData> linkEntriesRemoved = new ArrayList<LinkData>();
- Collection<SwitchData> switchAdded = new ArrayList<SwitchData>();
- Collection<SwitchData> switchRemoved = new ArrayList<SwitchData>();
- Collection<MastershipData> mastershipRemoved = new ArrayList<MastershipData>();
+ Collection<LinkData> linkEntriesAddedAll = new ArrayList<LinkData>();
+ Collection<PortData> portEntriesAddedAll = new ArrayList<PortData>();
+ Collection<PortData> portEntriesRemovedAll = new ArrayList<PortData>();
+ Collection<LinkData> linkEntriesRemovedAll = new ArrayList<LinkData>();
+ Collection<SwitchData> switchAddedAll = new ArrayList<SwitchData>();
+ Collection<SwitchData> switchRemovedAll = new ArrayList<SwitchData>();
+ Collection<MastershipData> mastershipRemovedAll = new ArrayList<MastershipData>();
while (!topologyEventQueue.isEmpty()) {
// We should handle the events in the order of when they happen
@@ -316,14 +316,24 @@
// and shoot only the final state.
// Ex: link s1-s2 down, link s1-s2 up --> Do nothing
// Ex: ink s1-s2 up, s1-p1,p2 down --> link s1-s2 down
+
TopologyEvents topologyEvents = topologyEventQueue.poll();
- linkEntriesAdded.addAll(topologyEvents.getAddedLinkDataEntries());
- portEntriesAdded.addAll(topologyEvents.getAddedPortDataEntries());
- portEntriesRemoved.addAll(topologyEvents.getRemovedPortDataEntries());
- linkEntriesRemoved.addAll(topologyEvents.getRemovedLinkDataEntries());
- switchAdded.addAll(topologyEvents.getAddedSwitchDataEntries());
- switchRemoved.addAll(topologyEvents.getRemovedSwitchDataEntries());
- mastershipRemoved.addAll(topologyEvents.getRemovedMastershipDataEntries());
+
+ Collection<LinkData> linkEntriesAdded = topologyEvents.getAddedLinkDataEntries();
+ Collection<PortData> portEntriesAdded = topologyEvents.getAddedPortDataEntries();
+ Collection<PortData> portEntriesRemoved = topologyEvents.getRemovedPortDataEntries();
+ Collection<LinkData> linkEntriesRemoved = topologyEvents.getRemovedLinkDataEntries();
+ Collection<SwitchData> switchAdded = topologyEvents.getAddedSwitchDataEntries();
+ Collection<SwitchData> switchRemoved = topologyEvents.getRemovedSwitchDataEntries();
+ Collection<MastershipData> mastershipRemoved = topologyEvents.getRemovedMastershipDataEntries();
+
+ linkEntriesAddedAll.addAll(linkEntriesAdded);
+ portEntriesAddedAll.addAll(portEntriesAdded);
+ portEntriesRemovedAll.addAll(portEntriesRemoved);
+ linkEntriesRemovedAll.addAll(linkEntriesRemoved);
+ switchAddedAll.addAll(switchAdded);
+ switchRemovedAll.addAll(switchRemoved);
+ mastershipRemovedAll.addAll(mastershipRemoved);
numOfEvents++;
if (!portEntriesRemoved.isEmpty()) {
@@ -353,6 +363,8 @@
if (!switchAdded.isEmpty()) {
processSwitchAdd(switchAdded);
}
+
+ /*
linkEntriesAdded.clear();
portEntriesAdded.clear();
portEntriesRemoved.clear();
@@ -360,20 +372,20 @@
switchAdded.clear();
switchRemoved.clear();
mastershipRemoved.clear();
-
+ */
}
// TODO: 100ms is enough to check both mastership removed events
// and the port removed events? What if the PORT_STATUS packets comes late?
- if (!mastershipRemoved.isEmpty()) {
- if (portEntriesRemoved.isEmpty()) {
+ if (!mastershipRemovedAll.isEmpty()) {
+ if (portEntriesRemovedAll.isEmpty()) {
log.debug("Just mastership is removed. Do not do anthing.");
}
else {
HashMap<String, MastershipData> mastershipToRemove =
new HashMap<String, MastershipData>();
- for (MastershipData ms: mastershipRemoved) {
- for (PortData port: portEntriesRemoved) {
+ for (MastershipData ms: mastershipRemovedAll) {
+ for (PortData port: portEntriesRemovedAll) {
// TODO: check ALL ports of the switch are dead ..
if (port.getDpid().equals(ms.getDpid())) {
mastershipToRemove.put(ms.getDpid().toString(), ms);
@@ -1144,7 +1156,7 @@
* @param sw
* @param mplsLabel
*/
- private void setPolicyTable(MACAddress srcMac, MACAddress dstMac,
+ public void setPolicyTable(MACAddress srcMac, MACAddress dstMac,
Short etherType, IPv4Net srcIp, IPv4Net dstIp, Byte ipProto,
Short srcTcpPort, Short dstTcpPort, int tid) {