Added cleanup thread to RCNetworkGraphPublisher
Change-Id: I5c663b146d68f8bb8634ecd4e74953026da79c13
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
index 9040fe7..eff5952 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraph.java
@@ -12,13 +12,13 @@
*/
public interface NetworkGraph {
public Switch getSwitch(Long dpid);
- public Iterable<? extends Switch> getSwitches();
+ public Iterable<Switch> getSwitches();
// TODO Not sure about the use-case of this method? Remove if not used at the end.
- public Iterable<? extends Link> getLinks();
+ public Iterable<Link> getLinks();
// XXX next 2 method can be removed. getSwitch(dpid).getOutgoingLinks() is equivalent
- public Iterable<? extends Link> getOutgoingLinksFromSwitch(Long dpid); // Toshi: unnecessary
- public Iterable<? extends Link> getIncomingLinksFromSwitch(Long dpid); // Toshi: unnecessary
+ public Iterable<Link> getOutgoingLinksFromSwitch(Long dpid); // Toshi: unnecessary
+ public Iterable<Link> getIncomingLinksFromSwitch(Long dpid); // Toshi: unnecessary
public Iterable<Device> getDeviceByIp(InetAddress ipAddress);
public Device getDeviceByMac(MACAddress address);
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 52a6ab7..a3069c3 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/NetworkGraphDatastore.java
@@ -5,6 +5,7 @@
import net.onrc.onos.datastore.RCObject;
import net.onrc.onos.datastore.RCObject.WriteOp;
+import net.onrc.onos.datastore.topology.RCLink;
import net.onrc.onos.datastore.topology.RCSwitch;
import org.slf4j.Logger;
@@ -61,21 +62,17 @@
// groupOp.add(WriteOp.ForceCreate(rcPort));
// }
- boolean failed = RCObject.multiWrite( groupOp );
+ boolean failed = RCObject.multiWrite(groupOp);
- if ( failed ) {
+ if (failed) {
log.error("Adding Switch {} and its ports failed.", sw.getDpid());
- for ( WriteOp op : groupOp ) {
+ for (WriteOp op : groupOp) {
log.debug("Operation:{} for {} - Result:{}", op.getOp(), op.getObject(), op.getStatus() );
// If we changed the operation from ForceCreate to
// Conditional operation (Create/Update) then we should retry here.
}
}
- else {
- // Publish event to the in-memory cache
-// graph.addSwitch(sw);
- }
}
@@ -163,80 +160,81 @@
// }
}
- public void addLink(LinkEvent link) {
- log.debug("Adding link {}", link);
-// RCLink rcLink = new RCLink(link.getSourceSwitchDpid(), (long)link.getSourcePortNumber(),
-// link.getDestinationSwitchDpid(), (long)link.getDestinationPortNumber());
-//
-// RCPort rcSrcPort = new RCPort(link.getSourceSwitchDpid(), (long)link.getSourcePortNumber());
-// RCPort rcDstPort = new RCPort(link.getDestinationSwitchDpid(), (long)link.getDestinationPortNumber());
-//
-// for (int i = 0; i < NUM_RETRIES; i++) {
-// try {
-// rcSrcPort.read();
-// rcDstPort.read();
-// rcLink.create();
-// } catch (ObjectDoesntExistException e) {
-// // port doesn't exist
-// log.error("Add link failed {}", link, e);
-// return;
-// } catch (ObjectExistsException e) {
-// log.debug("Link already exists {}", link);
-// return;
-// }
-//
-// rcSrcPort.addLinkId(rcLink.getId());
-// rcDstPort.addLinkId(rcLink.getId());
-//
-// rcLink.setStatus(RCLink.STATUS.ACTIVE);
-//
-// try {
-// rcLink.update();
-// rcSrcPort.update();
-// rcDstPort.update();
-// break;
-// } catch (ObjectDoesntExistException | WrongVersionException e) {
-// log.debug(" ", e);
-// // retry
-// }
-// }
-//
-// // Publish event to in-memory cache
-// graph.putLink(link);
+ 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());
+
+ //RCPort rcSrcPort = new RCPort(link.getSrc().getDpid(), link.getSrc().getNumber());
+ //RCPort rcDstPort = new RCPort(link.getDst().getDpid(), link.getDst().getNumber());
+
+ for (int i = 0; i < NUM_RETRIES; i++) {
+ try {
+ //rcSrcPort.read();
+ //rcDstPort.read();
+ rcLink.create();
+ //} catch (ObjectDoesntExistException e) {
+ // port doesn't exist
+ //log.error("Add link failed {}", link, e);
+ //return;
+ } catch (ObjectExistsException e) {
+ log.debug("Link already exists {}", linkEvent);
+ return;
+ }
+
+ //rcSrcPort.addLinkId(rcLink.getId());
+ //rcDstPort.addLinkId(rcLink.getId());
+
+ rcLink.setStatus(RCLink.STATUS.ACTIVE);
+
+ try {
+ rcLink.update();
+ //rcSrcPort.update();
+ //rcDstPort.update();
+ break;
+ } catch (ObjectDoesntExistException | WrongVersionException e) {
+ log.debug(" ", e);
+ // retry
+ }
+ }
+
+ // Publish event to in-memory cache
+ graph.putLink(linkEvent);
}
- public void removeLink(LinkEvent link) {
- log.debug("Removing link {}", link);
-// RCLink rcLink = new RCLink(link.getSourceSwitchDpid(), (long)link.getSourcePortNumber(),
-// link.getDestinationSwitchDpid(), (long)link.getDestinationPortNumber());
-//
-// RCPort rcSrcPort = new RCPort(link.getSourceSwitchDpid(), (long)link.getSourcePortNumber());
-// RCPort rcDstPort = new RCPort(link.getDestinationSwitchDpid(), (long)link.getDestinationPortNumber());
-//
-// for (int i = 0; i < NUM_RETRIES; i++) {
-// try {
-// rcSrcPort.read();
-// rcDstPort.read();
-// rcLink.read();
-// } catch (ObjectDoesntExistException e) {
-// log.error("Remove link failed {}", link, e);
-// return;
-// }
-//
-// rcSrcPort.removeLinkId(rcLink.getId());
-// rcDstPort.removeLinkId(rcLink.getId());
-//
-// try {
-// rcSrcPort.update();
-// rcDstPort.update();
-// rcLink.delete();
-// } catch (ObjectDoesntExistException e) {
-// log.error("Remove link failed {}", link, e);
-// return;
-// } catch (WrongVersionException e) {
-// // retry
-// }
-// }
+ public void removeLink(LinkEvent linkEvent) {
+ log.debug("Removing link {}", linkEvent);
+ RCLink rcLink = new RCLink(linkEvent.getSrc().getDpid(), linkEvent.getSrc().getNumber(),
+ linkEvent.getDst().getDpid(), linkEvent.getDst().getNumber());
+
+ //RCPort rcSrcPort = new RCPort(link.getSourceSwitchDpid(), (long)link.getSourcePortNumber());
+ //RCPort rcDstPort = new RCPort(link.getDestinationSwitchDpid(), (long)link.getDestinationPortNumber());
+
+ for (int i = 0; i < NUM_RETRIES; i++) {
+ try {
+ //rcSrcPort.read();
+ //rcDstPort.read();
+ rcLink.read();
+ } catch (ObjectDoesntExistException e) {
+ log.error("Remove link failed {}", linkEvent, e);
+ return;
+ }
+
+ //rcSrcPort.removeLinkId(rcLink.getId());
+ //rcDstPort.removeLinkId(rcLink.getId());
+
+ try {
+ //rcSrcPort.update();
+ //rcDstPort.update();
+ rcLink.delete();
+ } catch (ObjectDoesntExistException e) {
+ log.error("Remove link failed {}", linkEvent, e);
+ return;
+ } catch (WrongVersionException e) {
+ // retry
+ }
+ }
}
public void updateDevice(DeviceEvent device) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java
index a8c824d..874bf37 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/SwitchImpl.java
@@ -1,10 +1,12 @@
package net.onrc.onos.ofcontroller.networkgraph;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -71,8 +73,17 @@
@Override
public Collection<Device> getDevices() {
- // TODO Auto-generated method stub
- return null;
+ // TODO Should switch also store a list of attached devices to avoid
+ // calculating this every time?
+ List<Device> devices = new ArrayList<Device>();
+
+ for (Port port : ports.values()) {
+ for (Device device : port.getDevices()) {
+ devices.add(device);
+ }
+ }
+
+ return devices;
}
public void addPort(Port port) {
diff --git a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/serializers/LinkSerializer.java b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/serializers/LinkSerializer.java
index 7708bf1..bb13c75 100644
--- a/src/main/java/net/onrc/onos/ofcontroller/networkgraph/serializers/LinkSerializer.java
+++ b/src/main/java/net/onrc/onos/ofcontroller/networkgraph/serializers/LinkSerializer.java
@@ -27,7 +27,7 @@
link.getSourcePort().getNumber());
jsonGenerator.writeStringField("dst-switch",
HexString.toHexString(link.getDestinationSwitch().getDpid()));
- jsonGenerator.writeNumberField("src-port",
+ jsonGenerator.writeNumberField("dst-port",
link.getDestinationPort().getNumber());
jsonGenerator.writeEndObject();
}