private void setStatusEdges(TitanSchemaVertex vertex, SchemaStatus status, Set<PropertyKeyVertex> keys) { Preconditions.checkArgument(vertex.asIndexType().isMixedIndex()); for (TitanEdge edge : vertex.getEdges(TypeDefinitionCategory.INDEX_FIELD, Direction.OUT)) { if (!keys.contains(edge.vertex(Direction.IN))) continue; //Only address edges with matching keys TypeDefinitionDescription desc = edge.valueOrNull(BaseKey.SchemaDefinitionDesc); assert desc.getCategory() == TypeDefinitionCategory.INDEX_FIELD; Parameter[] parameters = (Parameter[]) desc.getModifier(); assert parameters[parameters.length - 1].key().equals(ParameterType.STATUS.getName()); if (parameters[parameters.length - 1].value().equals(status)) continue; Parameter[] paraCopy = Arrays.copyOf(parameters, parameters.length); paraCopy[parameters.length - 1] = ParameterType.STATUS.getParameter(status); edge.remove(); addSchemaEdge(vertex, edge.vertex(Direction.IN), TypeDefinitionCategory.INDEX_FIELD, paraCopy); } for (PropertyKeyVertex prop : keys) prop.resetCache(); }
public static RelationIdentifier getEdgeId(Object id) { if (null == id) return null; try { if (id instanceof TitanEdge) return (RelationIdentifier) ((TitanEdge) id).id(); else if (id instanceof RelationIdentifier) return (RelationIdentifier) id; else if (id instanceof String) return RelationIdentifier.parse((String) id); else if (id instanceof long[]) return RelationIdentifier.get((long[]) id); else if (id instanceof int[]) return RelationIdentifier.get((int[]) id); } catch (IllegalArgumentException e) { //swallow since null will be returned below } return null; }
@Nullable @Override public TitanVertex apply(@Nullable TitanEdge titanEdge) { return titanEdge.otherVertex(other); } });
assertEquals(v1id, getId(v)); TitanEdge e = Iterables.getOnlyElement(changes.getEdges(v, Change.REMOVED, Direction.OUT, "knows")); assertFalse(e.property("weight").isPresent()); assertEquals(v, e.vertex(Direction.IN)); e = Iterables.getOnlyElement(changes.getEdges(v, Change.ADDED, Direction.OUT, "knows")); assertEquals(44.4, e.<Float>value("weight").doubleValue(), 0.01); assertEquals(v, e.vertex(Direction.IN));
TitanEdge e = n1.addEdge(connect, n2); assertNotNull(e.toString()); assertEquals(n1, e.getVertex(OUT)); assertEquals(n2, e.getVertex(IN)); e = n2.addEdge(knows, n3); e.setProperty("weight", 3.0); e.setProperty(name, "HasProperties TitanRelation"); e = n3.addEdge(knows, n1); n3.addEdge(connect, n3); e.setProperty("uid", 111); assertEquals(4, Iterables.size(n3.getEdges())); assertEquals(2, Iterables.size(n3.getEdges(Direction.OUT))); e = Iterables.getOnlyElement(n2.getTitanEdges(BOTH, connect)); assertNotNull(e.toString()); n1 = e.getVertex(OUT); log.debug("Retrieved node!"); assertEquals(n1, e.getVertex(OUT)); assertEquals(n2, e.getVertex(IN)); assertTrue(e.getProperty(weight).equals(3.0)); assertEquals("HasProperties TitanRelation", e.getProperty(name)); n3 = e.getVertex(IN); assertEquals(111, e.getProperty(id)); e.remove(); assertEquals(0, Iterables.size(n2.getTitanEdges(BOTH, tx.getEdgeLabel("knows")))); assertEquals(1, Iterables.size(n3.getTitanEdges(BOTH, tx.getEdgeLabel("knows"))));
@Override public void run() { while (true) { // Make or break relType between two (possibly same) random nodes // TitanVertex source = tx.getVertex(idProp, RandomGenerator.randomInt(0, nodeCount)); // TitanVertex sink = tx.getVertex(idProp, RandomGenerator.randomInt(0, nodeCount)); TitanVertex source = Iterables.getOnlyElement(tx.getVertices(idProp, 0)); TitanVertex sink = Iterables.getOnlyElement(tx.getVertices(idProp, 1)); for (TitanEdge r : source.getTitanEdges(Direction.OUT, relType)) { if (r.getVertex(Direction.IN).getID() == sink.getID()) { r.remove(); continue; } } source.addEdge(relType, sink); if (Thread.interrupted()) break; } }
private int growVertex(TitanVertex vertex, int depth, int maxDepth, int maxBranch) { vertex.setProperty("distance",depth); int total=1; if (depth>=maxDepth) return total; for (int i=0;i<random.nextInt(maxBranch)+1;i++) { int dist = random.nextInt(3)+1; TitanVertex n = tx.addVertex(); n.addEdge("connect",vertex).setProperty("distance",dist); total+=growVertex(n,depth+dist,maxDepth,maxBranch); } return total; }
TitanEdge e = n3.addEdge("knows", n1); Edge e2 = n1.addEdge("friend",n3); e.setProperty(id, 111); n3.addProperty(id, 445); assertEquals(111, e.getProperty(id)); graph.commit(); assertEquals(445, n3.getProperty("uid")); e = (TitanEdge) Iterables.getOnlyElement(n3.getEdges(OUT, "knows")); assertEquals(111, e.getProperty("uid")); assertEquals(e, graph.getEdge(e.getId())); assertEquals(e, graph.getEdge(e.getId().toString())); TitanProperty p = Iterables.getOnlyElement(n3.getProperties("uid")); p.remove(); e.setProperty(id,222); assertEquals(222,e.getProperty(id));
private void setStatusEdges(TitanSchemaVertex vertex, SchemaStatus status, Set<PropertyKeyVertex> keys) { Preconditions.checkArgument(vertex.asIndexType().isMixedIndex()); for (TitanEdge edge : vertex.getEdges(TypeDefinitionCategory.INDEX_FIELD,Direction.OUT)) { if (!keys.contains(edge.getVertex(Direction.IN))) continue; //Only address edges with matching keys TypeDefinitionDescription desc = edge.getProperty(BaseKey.SchemaDefinitionDesc); assert desc.getCategory()==TypeDefinitionCategory.INDEX_FIELD; Parameter[] parameters = (Parameter[])desc.getModifier(); assert parameters[parameters.length-1].getKey().equals(ParameterType.STATUS.getName()); if (parameters[parameters.length-1].getValue().equals(status)) continue; Parameter[] paraCopy = Arrays.copyOf(parameters,parameters.length); paraCopy[parameters.length-1]=ParameterType.STATUS.getParameter(status); edge.remove(); addSchemaEdge(vertex,edge.getVertex(Direction.IN),TypeDefinitionCategory.INDEX_FIELD,paraCopy); } for (PropertyKeyVertex prop : keys) prop.resetCache(); }
for (EdgeLabel label : new EdgeLabel[]{connect,child,link}) { TitanEdge e = v.addEdge(label,ns[i]); e.setProperty(weight,w); e.setProperty(time,t); if (e.<Long>getProperty(time)<(numV/2)) e.remove(); for (EdgeLabel label : new EdgeLabel[]{connect,child,link}) { TitanEdge e = v.addEdge(label,ns[i]); e.setProperty(weight,w); e.setProperty(time,t);
TitanVertex n2 = nodes[wrapAround(i + k, noNodes)]; TitanEdge r = n.addEdge(knows, n2); r.setProperty(id, ((Number) n.getProperty(id)).intValue() + ((Number) n2.getProperty(id)).intValue()); r.setProperty(weight, k * 1.5); r.setProperty(name, i + "-" + k); nodeEdges[i].add(r); nodeEdgeIds[i] = new HashSet(10); for (Object r : nodeEdges[i]) { nodeEdgeIds[i].add(((TitanEdge) r).getID()); TitanVertex n2 = r.getOtherVertex(n); int idsum = ((Number) n.getProperty(id)).intValue() + ((Number) n2.getProperty(id)).intValue(); assertEquals(idsum, r.getProperty(id)); double k = ((Number) r.getProperty(weight)).doubleValue() / 1.5; int ki = (int) k; assertEquals(i + "-" + ki, r.getProperty(name)); edgeIds.add(r.getID());
TitanVertex n2 = nodes[wrapAround(i + k, noNodes)]; TitanEdge r = n.addEdge("knows", n2); r.setProperty(id, ((Number) n.getProperty(id)).intValue() + ((Number) n2.getProperty(id)).intValue()); r.setProperty("weight", k * 1.5); r.setProperty("name", i + "-" + k); nodeEdges[i].add(r); nodeEdgeIds[i] = new HashSet(10); for (Object r : nodeEdges[i]) { nodeEdgeIds[i].add(((TitanEdge) r).getLongId()); TitanVertex n2 = r.getOtherVertex(n); int idsum = ((Number) n.getProperty(id)).intValue() + ((Number) n2.getProperty(id)).intValue(); assertEquals(idsum, r.getProperty(id)); double k = ((Number) r.getProperty(weight)).doubleValue() / 1.5; int ki = (int) k; assertEquals(i + "-" + ki, r.getProperty(name)); edgeIds.add(r.getLongId());
e.setProperty("time", 5); e = v1.addEdge(connect, v2); e.setProperty("time", 10); e.setProperty("link", v3); e = v2.addEdge(connect, v3); e.setProperty("time", 15); e.setProperty("link", v1); assertEquals(10, e.getProperty("time")); assertEquals(v3, e.getProperty("link")); assertEquals(10, e.getProperty("time")); assertEquals(v3, e.getProperty("link"));
TitanVertex oth = edge.getVertex(dir.opposite()); assert oth instanceof TitanSchemaVertex; TypeDefinitionDescription desc = edge.getProperty(BaseKey.SchemaDefinitionDesc); Object modifier = null; if (desc.getCategory().hasDataType()) {
assertEquals(1,e.getProperty("sig")); e.remove(); sign(v.addEdge("es",u),txid); e = (TitanEdge)Iterables.getOnlyElement(v.getEdges(Direction.OUT,"o2o")); assertEquals(1,e.getProperty("sig")); sign(e,txid); e = (TitanEdge)Iterables.getOnlyElement(v.getEdges(Direction.OUT,"o2m")); assertEquals(1,e.getProperty("sig")); e.remove(); sign(v.addEdge("o2m",u),txid); for (String label : new String[]{"em","emf"}) { e = (TitanEdge)Iterables.getOnlyElement(v.getEdges(Direction.OUT,label)); assertEquals(1,e.getProperty("sig")); sign(e,txid);
@Override public default TitanVertex outVertex() { return vertex(Direction.OUT); }
@Override public boolean evaluate(E element) { if (direction==Direction.BOTH) return true; if (element instanceof CacheEdge) { return direction==((CacheEdge)element).getVertexCentricDirection(); } else if (element instanceof TitanEdge) { return ((TitanEdge)element).getVertex(direction).equals(baseVertex); } else if (element instanceof TitanProperty) { return direction==Direction.OUT; } return false; }
@Test public void testEdgesExceedCacheSize() { // Add a vertex with as many edges as the tx-cache-size. (20000 by default) int numEdges = graph.getConfiguration().getTxVertexCacheSize(); TitanVertex parentVertex = graph.addVertex(); for (int i = 0; i < numEdges; i++) { TitanVertex childVertex = graph.addVertex(); parentVertex.addEdge("friend", childVertex); } graph.tx().commit(); assertCount(numEdges, parentVertex.query().direction(Direction.OUT).edges()); // Remove an edge. parentVertex.query().direction(OUT).edges().iterator().next().remove(); // Check that getEdges returns one fewer. assertCount(numEdges - 1, parentVertex.query().direction(Direction.OUT).edges()); // Run the same check one more time. // This fails! (Expected: 19999. Actual: 20000.) assertCount(numEdges - 1, parentVertex.query().direction(Direction.OUT).edges()); }
e1.setProperty(name.getName(),"e1"); TitanEdge e2 = v1.addEdge(related.getName(),v2); e2.setProperty(name.getName(),"e2"); long e1id = e1.getLongId(); long e2id = e2.getLongId(); e1 = (TitanEdge)Iterables.getOnlyElement(v1.getEdges(OUT,connect.getName())); assertEquals("e1",e1.getProperty(name.getName())); assertEquals(e1id,e1.getLongId()); e2 = (TitanEdge)Iterables.getOnlyElement(v1.getEdges(OUT,related.getName())); assertEquals("e2",e2.getProperty(name.getName())); assertEquals(e2id,e2.getLongId()); e1.setProperty(name.getName(),"e1.2"); e2.setProperty(name.getName(),"e2.2"); assertEquals("e1.2",e1.getProperty(name.getName())); assertEquals(e1id,e1.getLongId()); //should have same id e2 = (TitanEdge)Iterables.getOnlyElement(v1.getEdges(OUT,related.getName())); assertEquals("e2.2",e2.getProperty(name.getName())); assertNotEquals(e2id,e2.getLongId()); //should have different id since forked