@Override protected Iterator<E> flatMap(final Traverser.Admin<Vertex> traverser) { if (useMultiQuery) { assert multiQueryResults != null; return (Iterator<E>) multiQueryResults.get(traverser.get()).iterator(); } else { TitanVertexQuery query = makeQuery((TitanTraversalUtil.getTitanVertex(traverser)).query()); return (Vertex.class.isAssignableFrom(getReturnClass())) ? query.vertices().iterator() : query.edges().iterator(); } }
private double testAllVertices(long vid, int numV) { long start = System.nanoTime(); TitanVertex v = getV(graph,vid); for (int i=1; i<numV; i++) { v = getOnlyElement(v.query().direction(Direction.OUT).labels("knows").vertices()); } return ((System.nanoTime()-start)/1000000.0); }
@Test public void testEdgeTTLWithTransactions() throws Exception { if (!features.hasCellTTL()) { return; } EdgeLabel label1 = mgmt.makeEdgeLabel("likes").make(); mgmt.setTTL(label1, Duration.ofSeconds(1)); assertEquals(Duration.ofSeconds(1), mgmt.getTTL(label1)); mgmt.commit(); TitanVertex v1 = graph.addVertex(), v2 = graph.addVertex(); v1.addEdge("likes", v2); // pre-commit state of the edge. It is not yet subject to TTL assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); Thread.sleep(1001); // the edge should have expired by now, but only if it had been committed assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); graph.tx().commit(); // still here, because we have just committed the edge. Its countdown starts at the commit assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); Thread.sleep(1001); // the edge has expired in Cassandra, but still appears alive in this transaction assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); // syncing with the data store, we see that the edge has expired graph.tx().rollback(); assertEmpty(v1.query().direction(Direction.OUT).vertices()); }
assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); assertNotEmpty(v2.query().direction(Direction.OUT).vertices()); assertNotEmpty(v3.query().direction(Direction.OUT).vertices()); assertNotEmpty(v1.query().direction(Direction.OUT).vertices()); assertNotEmpty(v2.query().direction(Direction.OUT).vertices()); assertNotEmpty(v3.query().direction(Direction.OUT).vertices()); assertEmpty(v1.query().direction(Direction.OUT).vertices()); assertNotEmpty(v2.query().direction(Direction.OUT).vertices()); assertNotEmpty(v3.query().direction(Direction.OUT).vertices()); assertEmpty(v1.query().direction(Direction.OUT).vertices()); assertEmpty(v2.query().direction(Direction.OUT).vertices()); assertNotEmpty(v3.query().direction(Direction.OUT).vertices());
@Test public void testKeybasedGraphPartitioning() { Object[] options = {option(GraphDatabaseConfiguration.IDS_FLUSH), false, option(VertexIDAssigner.PLACEMENT_STRATEGY), PropertyPlacementStrategy.class.getName(), option(PropertyPlacementStrategy.PARTITION_KEY), "clusterId"}; clopen(options); int[] groupDegrees = {5,5,5,5,5,5,5,5}; int numVertices = setupGroupClusters(groupDegrees,CommitMode.PER_VERTEX); IntSet partitionIds = new IntHashSet(numVertices); //to track the "spread" of partition ids for (int i=0;i<groupDegrees.length;i++) { TitanVertex g = getOnlyVertex(tx.query().has("groupid","group"+i)); int partitionId = -1; for (TitanVertex v : g.query().direction(Direction.IN).labels("member").vertices()) { if (partitionId<0) partitionId = getPartitionID(v); assertEquals(partitionId,getPartitionID(v)); partitionIds.add(partitionId); } } assertTrue(partitionIds.size()>numPartitions/2); //This is a probabilistic test that might fail }
newTx(); v21 = getV(tx, v21); v3 = getOnlyElement(v21.query().direction(Direction.OUT).labels("link").vertices()); assertFalse(v3.isRemoved()); v3.remove(); newTx(); v21 = getV(tx, v21); v3 = getOnlyElement(v21.query().direction(Direction.OUT).labels("link").vertices()); assertFalse(v3.isRemoved()); newTx(); v3 = getOnlyElement(v21.query().direction(Direction.OUT).labels("link").vertices()); assertTrue(v3.isRemoved()); tx3.commit();
private void testPartitionSpread(boolean flush, boolean batchCommit) { Object[] options = {option(GraphDatabaseConfiguration.IDS_FLUSH), flush}; clopen(options); int[] groupDegrees = {10,15,10,17,10,4,7,20,11}; int numVertices = setupGroupClusters(groupDegrees,batchCommit?CommitMode.BATCH:CommitMode.PER_VERTEX); IntSet partitionIds = new IntHashSet(numVertices); //to track the "spread" of partition ids for (int i=0;i<groupDegrees.length;i++) { TitanVertex g = getOnlyVertex(tx.query().has("groupid","group"+i)); assertCount(groupDegrees[i],g.edges(Direction.OUT,"contain")); assertCount(groupDegrees[i],g.edges(Direction.IN,"member")); assertCount(groupDegrees[i],g.query().direction(Direction.OUT).edges()); assertCount(groupDegrees[i],g.query().direction(Direction.IN).edges()); assertCount(groupDegrees[i]*2,g.query().edges()); for (TitanVertex v : g.query().direction(Direction.IN).labels("member").vertices()) { int pid = getPartitionID(v); partitionIds.add(pid); assertEquals(g, getOnlyElement(v.query().direction(Direction.OUT).labels("member").vertices())); VertexList vlist = v.query().direction(Direction.IN).labels("contain").vertexIds(); assertEquals(1,vlist.size()); assertEquals(pid,idManager.getPartitionId(vlist.getID(0))); assertEquals(g,vlist.get(0)); } } if (flush || !batchCommit) { //In these cases we would expect significant spread across partitions assertTrue(partitionIds.size()>numPartitions/2); //This is a probabilistic test that might fail } else { assertEquals(1,partitionIds.size()); //No spread in this case } }
v = getOnlyElement(tx.query().has("uid",1).vertices()); assertEquals(1,v.<Integer>value("uid").intValue()); u = getOnlyElement(v.query().direction(Direction.BOTH).labels("knows").vertices()); e = getOnlyElement(u.query().direction(Direction.IN).labels("knows").edges()); assertEquals("juju",u.value("name"));
v1 = getV(tx, v1id); assertNotNull(v1); assertEquals(v3id,v1.query().direction(Direction.IN).labels("knows").vertices().iterator().next().longId()); tx.commit(); mgmt.commit();
assertEquals(10, size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, size(u.query().labels("connectDesc").limit(10).vertices())); assertEquals(10, size(v.query().labels("connect").has("time", Cmp.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, size(u.query().labels("connectDesc").has("time", Cmp.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, size(v.query().labels("connect").direction(OUT).has("time", Cmp.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, size(u.query().labels("connectDesc").direction(OUT).has("time", Cmp.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel - 10, v.query().labels("connect").direction(OUT).has("time", Cmp.GREATER_THAN, 31).count()); assertEquals(10, size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals(3, v.query().labels("friend").direction(OUT).limit(3).count()); evaluateQuery(v.query().labels("friend").direction(OUT).has("weight", 0.5).limit(3), EDGE, 3, 1, new boolean[]{true, true}); assertEquals((int) Math.ceil(edgesPerLabel / (5.0 * 2)), v.query().labels("knows").direction(OUT).has("number", 0).interval("weight", 0.0, 2.0).edgeCount()); assertEquals((int) Math.floor(edgesPerLabel / (5.0 * 2)), v.query().labels("knows").direction(OUT).has("number", 0).interval("weight", 2.1, 4.0).edgeCount()); assertEquals(20, size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).edgeCount()); assertEquals(9, v.query().direction(IN).interval("time", 4, 14).has("time", Cmp.NOT_EQUAL, 10).edgeCount()); assertEquals(9, v.query().direction(OUT).interval("time", 4, 14).has("time", Cmp.NOT_EQUAL, 10).edgeCount()); assertEquals(noVertices - 1, size(v.query().direction(OUT).vertices())); assertEquals(noVertices - 1, size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN, OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); assertEquals(10, size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, size(u.query().labels("connectDesc").limit(10).vertices()));
assertCount(1, v12.query().direction(Direction.OUT).labels("parent").has("weight").edges()); assertCount(1, v13.query().direction(Direction.OUT).labels("parent").has("weight").edges()); assertEquals(v12, getOnlyElement(v.query().direction(Direction.OUT).labels("spouse").vertices())); edge = getOnlyElement(v.query().direction(Direction.BOTH).labels("connect").edges()); assertEquals(1, edge.keys().size()); v2 = getOnlyElement(v12.query().direction(Direction.OUT).labels("connect").vertices()); assertEquals(v13, getOnlyElement(v2.query().direction(Direction.OUT).labels("link").vertices())); assertCount(1, v12.query().direction(Direction.OUT).labels("parent").has("weight").edges()); assertCount(1, v13.query().direction(Direction.OUT).labels("parent").has("weight").edges()); assertEquals(v12, getOnlyElement(v.query().direction(Direction.OUT).labels("spouse").vertices())); edge = getOnlyElement(v.query().direction(Direction.BOTH).labels("connect").edges()); assertEquals(1, edge.keys().size()); v2 = getOnlyElement(v12.query().direction(Direction.OUT).labels("connect").vertices()); assertEquals(v13, getOnlyElement(v2.query().direction(Direction.OUT).labels("link").vertices()));
@Override public Iterable<AtlasVertex<Titan1Vertex, Titan1Edge>> vertices() { Iterable vertices = query.vertices(); return graph.wrapVertices(vertices); }
@Override public Iterable<AtlasVertex<Titan1Vertex, Titan1Edge>> vertices(int limit) { Preconditions.checkArgument(limit >=0, "Limit should be greater than or equals to 0"); Iterable vertices = query.limit(limit).vertices(); return graph.wrapVertices(vertices); }
@Override protected Iterator<E> flatMap(final Traverser.Admin<Vertex> traverser) { if (useMultiQuery) { assert multiQueryResults != null; return (Iterator<E>) multiQueryResults.get(traverser.get()).iterator(); } else { TitanVertexQuery query = makeQuery((TitanTraversalUtil.getTitanVertex(traverser)).query()); return (Vertex.class.isAssignableFrom(getReturnClass())) ? query.vertices().iterator() : query.edges().iterator(); } }
public void retrieveNgh(boolean inMemory) { long time = time(); Vertex vertices[] = new TitanVertex[numVertices]; for (int i = 0; i < numVertices; i++) vertices[i] = graph.getVertices("uid", i).iterator().next(); time = time() - time; //System.out.println("Vertex retrieval: " + time); for (int t = 0; t < 4; t++) { time = time(); for (int i = 0; i < numVertices; i++) { TitanVertexQuery q = ((TitanVertexQuery) vertices[i].query()).direction(Direction.OUT).labels("connect"); if (inMemory) { //TODO: this has been disabled for (Vertex v : q.vertices()) { v.getId(); } } else { VertexList vl = q.vertexIds(); for (int j = 0; j < vl.size(); j++) { vl.get(j); } } } time = time() - time; System.out.println("Ngh retrieval: " + time); } graph.commit(); }
assertEquals(10, Iterables.size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").limit(10).vertices())); assertEquals(10, Iterables.size(v.query().labels("connect").has("time", Compare.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").has("time", Compare.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").direction(OUT).has("time", Compare.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals(3, v.query().labels("friend").direction(OUT).interval("time", 3, 33).has("weight", 0.5).count()); assertEquals(3, u.query().labels("friendDesc").direction(OUT).interval("time", 3, 33).has("weight", 0.5).count()); assertEquals((int)Math.ceil(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 0.0, 2.0).count()); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count()); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).count()); assertEquals(9, v.query().direction(IN).interval("time", 4, 14).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(9, v.query().direction(OUT).interval("time", 4, 14).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(noVertices-1, Iterables.size(v.query().direction(OUT).vertices())); assertEquals(noVertices-1, Iterables.size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN,OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); assertEquals(10, Iterables.size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").limit(10).vertices()));
assertEquals(10, Iterables.size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").limit(10).vertices())); assertEquals(10, Iterables.size(v.query().labels("connect").has("time", Compare.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").has("time", Compare.GREATER_THAN, 30).limit(10).vertices())); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").direction(OUT).has("time", Compare.GREATER_THAN, 60).limit(10).vertices())); assertEquals(10, v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertexIds().size()); assertEquals(edgesPerLabel-10, v.query().labels("connect").direction(OUT).has("time", Compare.GREATER_THAN, 31).count()); assertEquals(10, Iterables.size(v.query().labels("connect").direction(OUT).interval("time", 3, 31).vertices())); assertEquals(3, v.query().labels("friend").direction(OUT).limit(3).count()); evaluateQuery(v.query().labels("friend").direction(OUT).has("weight", 0.5).limit(3), EDGE, 3, 1, new boolean[]{true, true}); assertEquals((int)Math.ceil(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 0.0, 2.0).count()); assertEquals((int)Math.floor(edgesPerLabel/(5.0*2)), v.query().labels("knows").direction(OUT).has("author", v).interval("weight", 2.1, 4.0).count()); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertices())); assertEquals(20, Iterables.size(v.query().labels("connect", "friend").direction(OUT).interval("time", 3, 33).vertexIds())); assertEquals(30, v.query().labels("friend", "connect", "knows").direction(OUT).interval("time", 3, 33).count()); assertEquals(9, v.query().direction(IN).interval("time", 4, 14).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(9, v.query().direction(OUT).interval("time", 4, 14).has("time", Compare.NOT_EQUAL, 10).count()); assertEquals(noVertices-1, Iterables.size(v.query().direction(OUT).vertices())); assertEquals(noVertices-1, Iterables.size(v.query().direction(IN).vertices())); for (Direction dir : new Direction[]{IN,OUT}) { vl = v.query().labels().direction(dir).interval("time", 3, 31).vertexIds(); assertEquals(10, Iterables.size(v.query().labels("connect").limit(10).vertices())); assertEquals(10, Iterables.size(u.query().labels("connectDesc").limit(10).vertices()));