Add TODO memos
- Point to ignore self originating event
- Point to dispatch local topology event
- Note about 2 mode of removeLink to handle potentially outdated Outgoing Link
- Reading Link from DB requires pre-condition check
Change-Id: Ib24b35af118b239410615595d4f2bf6bcda175c6
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
index d34ac46..126d299 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
@@ -164,7 +164,7 @@
public void addLink(LinkEvent linkEvent) {
log.debug("Adding link {}", linkEvent);
-
+
RCLink rcLink = new RCLink(linkEvent.getSrc().getDpid(), linkEvent.getSrc().getNumber(),
linkEvent.getDst().getDpid(), linkEvent.getDst().getNumber());
@@ -219,6 +219,7 @@
//rcDstPort.read();
rcLink.read();
} catch (ObjectDoesntExistException e) {
+ // XXX Note: This error might be harmless, if triggered by out-dated remove Link event
log.error("Remove link failed {}", linkEvent, e);
return;
}
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
index 921907e..176e793 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphImpl.java
@@ -119,6 +119,7 @@
*/
private void processEvents(Collection<EventEntry<TopologyEvent>> events) {
for (EventEntry<TopologyEvent> event : events) {
+ // TODO ignore event triggered by myself
TopologyEvent topologyEvent = event.eventData();
switch (event.eventType()) {
case ENTRY_ADD:
@@ -285,6 +286,9 @@
@Override
public void removeLinkEvent(LinkEvent linkEvent) {
+ // TODO may need to distinguish internal event, which checks
+ // ownership of dst-dpid of this link, and only write to DB
+ // if it is owner of the dpid
if (prepareForRemoveLinkEvent(linkEvent)) {
datastore.removeLink(linkEvent);
removeLink(linkEvent);
@@ -421,6 +425,8 @@
log.debug("Removing Link {} on Port {}", link, portEvt);
LinkEvent linkEvent = new LinkEvent(link.getSourceSwitchDpid(), link.getSourcePortNumber(), link.getDestinationSwitchDpid(), link.getDestinationPortNumber());
// calling Discovery API to wipe from DB, etc.
+ // XXX call internal remove Link, which will check
+ // ownership and modify only if it is the owner
removeLinkEvent(linkEvent);
}
return true;
@@ -559,6 +565,7 @@
putSwitch(switchEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -567,6 +574,7 @@
removeSwitch(switchEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -575,6 +583,7 @@
putPort(portEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -583,6 +592,7 @@
removePort(portEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -591,6 +601,7 @@
putLink(linkEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -599,6 +610,7 @@
removeLink(linkEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -607,6 +619,7 @@
putDevice(deviceEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
@Override
@@ -615,6 +628,7 @@
removeDevice(deviceEvent);
}
// TODO handle invariant violation
+ // TODO trigger instance local topology event handler
}
/* ************************************************
@@ -675,7 +689,7 @@
PortEvent portEvt = new PortEvent(port.getDpid(), port.getNumber());
portsToRemove.add(portEvt);
}
- for (PortEvent portEvt : portsToRemove ) {
+ for (PortEvent portEvt : portsToRemove) {
// XXX calling removePortEvent() may trigger duplicate event, once at prepare phase, second time here
// If event can be squashed, ignored etc. at receiver side it shouldn't be a problem, but if not
// need to re-visit this issue.
@@ -1062,7 +1076,8 @@
@Deprecated
public void loadWholeTopologyFromDB() {
- // XXX clear everything first?
+ // XXX May need to clear whole topology first, depending on
+ // how we initially subscribe to replication events
for (RCSwitch sw : RCSwitch.getAllSwitches()) {
if ( sw.getStatus() != RCSwitch.STATUS.ACTIVE ) {
@@ -1087,6 +1102,7 @@
// }
for (RCLink l : RCLink.getAllLinks()) {
+ // TODO check if src/dst switch/port exist before triggering event
putLinkReplicationEvent( new LinkEvent(l.getSrc().dpid, l.getSrc().number, l.getDst().dpid, l.getDst().number));
}
}