Started unit testing for link storage API and modified the Titan queries used by the link storage API
diff --git a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
index c17c710..ea6b228 100644
--- a/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
+++ b/src/main/java/net/floodlightcontroller/linkdiscovery/internal/LinkStorageImpl.java
@@ -1,23 +1,26 @@
package net.floodlightcontroller.linkdiscovery.internal;
-import java.util.*;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import net.floodlightcontroller.linkdiscovery.ILinkStorage;
+import net.floodlightcontroller.linkdiscovery.LinkInfo;
+import net.floodlightcontroller.routing.Link;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
import org.openflow.util.HexString;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import net.floodlightcontroller.linkdiscovery.LinkInfo;
-import net.floodlightcontroller.routing.Link;
-import net.floodlightcontroller.linkdiscovery.ILinkStorage;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
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.gremlin.java.GremlinPipeline;
public class LinkStorageImpl implements ILinkStorage {
public TitanGraph graph;
@@ -63,9 +66,16 @@
String dpid = HexString.toHexString(lt.getSrc());
short port = lt.getSrcPort();
if ((vswSrc = graph.getVertices("dpid", dpid).iterator().next()) != null) {
- log.debug("addLink(): sw exits {} {}", dpid, vswSrc);
- if (vswSrc.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().hasNext()) {
- vportSrc = vswSrc.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().next();
+ log.debug("addLink(): sw exists {} {}", dpid, vswSrc);
+ GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
+
+ //if (vswSrc.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().hasNext()) {
+ pipe.start(vswSrc).out("on").has("number", (int)port);
+ //pipe.start(vswSrc).out("on");
+ //log.debug("pipe count {}", pipe.count());
+ if (pipe.hasNext()) {
+ //vportSrc = vswSrc.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().next();
+ vportSrc = pipe.next();
log.debug("addLink(): port found {} {}", port, vportSrc);
} else {
log.error("addLink(): sw {} port {} not found", dpid, port);
@@ -76,9 +86,13 @@
dpid = HexString.toHexString(lt.getDst());
port = lt.getDstPort();
if ((vswDst = graph.getVertices("dpid",dpid).iterator().next()) != null) {
- log.debug("addLink(): sw exits {} {}", dpid, vswDst);
- if (vswDst.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().hasNext()) {
- vportDst = vswDst.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().next();
+ log.debug("addLink(): sw exists {} {}", dpid, vswDst);
+ GremlinPipeline<Vertex, Vertex> pipe = new GremlinPipeline<Vertex, Vertex>();
+ pipe.start(vswDst).out("on").has("number", (int)port);
+ //if (vswDst.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().hasNext()) {
+ if (pipe.hasNext()){
+ //vportDst = vswDst.query().direction(Direction.OUT).labels("on").has("number",port).vertices().iterator().next();
+ vportDst = pipe.next();
log.debug("addLink(): port found {} {}", port, vportDst);
} else {
log.error ("addLink(): sw {} port {} not found", dpid, port);