Single Graph handle across all controller
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index 0ab52e2..d62d65b 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -1,9 +1,7 @@
package net.floodlightcontroller.linkdiscovery.internal;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.List;
-import java.util.Set;
import net.floodlightcontroller.core.INetMapTopologyObjects.IPortObject;
import net.floodlightcontroller.core.INetMapTopologyObjects.ISwitchObject;
@@ -13,7 +11,6 @@
import net.floodlightcontroller.linkdiscovery.LinkInfo;
import net.floodlightcontroller.routing.Link;
import net.onrc.onos.util.GraphDBConnection;
-import net.onrc.onos.util.GraphDBConnection.GenerateEvent;
import net.onrc.onos.util.GraphDBConnection.Transaction;
import org.openflow.util.HexString;
@@ -21,20 +18,15 @@
import org.slf4j.LoggerFactory;
import com.thinkaurelius.titan.core.TitanException;
-import com.thinkaurelius.titan.core.TitanFactory;
-import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.blueprints.Direction;
-import com.tinkerpop.blueprints.TransactionalGraph.Conclusion;
-import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.Edge;
-import com.tinkerpop.blueprints.util.wrappers.event.EventGraph;
-import com.tinkerpop.blueprints.util.wrappers.event.EventTransactionalGraph;
+import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.gremlin.java.GremlinPipeline;
import com.tinkerpop.pipes.PipeFunction;
import com.tinkerpop.pipes.transform.PathPipe;
public class LinkStorageImpl implements ILinkStorage {
- public TitanGraph graph;
+
protected static Logger log = LoggerFactory.getLogger(LinkStorageImpl.class);
protected String conf;
@@ -63,18 +55,6 @@
break;
}
}
-
- private Vertex getPortVertex(String dpid, short port) {
- Vertex vsw, vport = null;
- if ((vsw = graph.getVertices("dpid", dpid).iterator().next()) != null) {
- GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
- pipe.start(vsw).out("on").has("number", port);
- if (pipe.hasNext()) {
- vport = pipe.next();
- }
- }
- return vport;
- }
public void addOrUpdateLink(Link lt, LinkInfo linkinfo, DM_OPERATION op) {
GraphDBConnection conn = GraphDBConnection.getInstance(this.conf);
@@ -96,9 +76,9 @@
if (vportSrc != null && vportDst != null) {
// check if the link exists
- List<IPortObject> currLinks = new ArrayList<IPortObject>();
- Iterable<IPortObject> currPorts = vportSrc.getLinkedPorts();
+ Iterable<IPortObject> currPorts = vportSrc.getLinkedPorts();
+ List<IPortObject> currLinks = new ArrayList<IPortObject>();
for (IPortObject V : currPorts) {
currLinks.add(V);
}
@@ -110,20 +90,21 @@
new Object[]{op, lt, vportSrc, vportDst});
}
} else {
- conn.getFramedGraph().addEdge(null, vportSrc.asVertex(), vportDst.asVertex(), "link");
+ vportSrc.setLinkPort(vportDst);
+
conn.endTx(Transaction.COMMIT);
log.debug("addOrUpdateLink(): link added {} {} src {} dst {}", new Object[]{op, lt, vportSrc, vportDst});
}
} else {
log.error("addOrUpdateLink(): failed invalid vertices {} {} src {} dst {}", new Object[]{op, lt, vportSrc, vportDst});
- conn.endTx(Transaction.ROLLBACK);
+ // conn.endTx(Transaction.ROLLBACK);
}
} catch (TitanException e) {
/*
* retry till we succeed?
*/
- log.error("addOrUpdateLink(): titan exception {} {} {}", new Object[]{op, lt, e.toString()});
e.printStackTrace();
+ log.error("addOrUpdateLink(): titan exception {} {} {}", new Object[]{op, lt, e.toString()});
}
}
@@ -155,7 +136,6 @@
port = lt.getDstPort();
vportDst = conn.utils().searchPort(conn, dpid, port);
// FIXME: This needs to remove all edges
- // FIXME: Events will only be generated on singleton graph object (GraphDBConnection)
if (vportSrc != null && vportDst != null) {
@@ -174,7 +154,7 @@
} else {
log.error("deleteLink(): failed invalid vertices {} src {} dst {}", new Object[]{lt, vportSrc, vportDst});
- conn.endTx(Transaction.ROLLBACK);
+// conn.endTx(Transaction.ROLLBACK);
}
} catch (TitanException e) {
@@ -189,13 +169,15 @@
// TODO: Fix me
@Override
public List<Link> getLinks(Long dpid, short port) {
- Vertex vportSrc, vportDst;
+ GraphDBConnection conn = GraphDBConnection.getInstance(this.conf);
+ IPortObject vportSrc, vportDst;
List<Link> links = null;
Link lt;
- vportSrc = getPortVertex(HexString.toHexString(dpid), port);
+ vportSrc = conn.utils().searchPort(conn, HexString.toHexString(dpid), port);
if (vportSrc != null) {
- for (Edge e : vportSrc.getEdges(Direction.OUT)) {
+
+ for (Edge e : vportSrc.asVertex().getEdges(Direction.OUT)) {
if (e.getLabel().equals("link")) {
break;
}
@@ -209,18 +191,7 @@
//TODO extract the DB location from properties
this.conf = conf;
- graph = TitanFactory.open(this.conf);
-
- // FIXME: These keys are not needed for Links but we better create it before using it as per titan
- Set<String> s = graph.getIndexedKeys(Vertex.class);
- if (!s.contains("dpid")) {
- graph.createKeyIndex("dpid", Vertex.class);
- graph.stopTransaction(Conclusion.SUCCESS);
- }
- if (!s.contains("type")) {
- graph.createKeyIndex("type", Vertex.class);
- graph.stopTransaction(Conclusion.SUCCESS);
- }
+
}
@Override
@@ -237,9 +208,9 @@
public List<Link> getActiveLinks() {
- ITopoSwitchService swService = new TopoSwitchServiceImpl();
+ GraphDBConnection conn = GraphDBConnection.getInstance(this.conf);
- Iterable<ISwitchObject> switches = swService.getActiveSwitches();
+ Iterable<ISwitchObject> switches = conn.utils().getActiveSwitches(conn);
List<Link> links = new ArrayList<Link>();
for (ISwitchObject sw : switches) {
@@ -292,7 +263,7 @@
@Override
public void close() {
// TODO Auto-generated method stub
- graph.shutdown();
+// graph.shutdown();
}