in hugegraph-test/src/main/java/org/apache/hugegraph/core/EdgeCoreTest.java [1203:1359]
public void testOverrideEdgeWithShardIndexAndTtl() {
graph().schema().indexLabel("readByPlaceAndDate").onE("read")
.by("place", "date").shard().ifNotExist().create();
Vertex baby = graph().addVertex(T.label, "person", "name", "Baby",
"age", 3, "city", "Beijing");
Vertex java1 = graph().addVertex(T.label, "book", "name", "Java1");
Vertex java2 = graph().addVertex(T.label, "book", "name", "Java2");
Vertex java3 = graph().addVertex(T.label, "book", "name", "Java3");
Vertex java4 = graph().addVertex(T.label, "book", "name", "Java4");
Vertex java5 = graph().addVertex(T.label, "book", "name", "Java5");
Vertex java6 = graph().addVertex(T.label, "book", "name", "Java6");
Edge edge1 = baby.addEdge("read", java1, "place", "library of school",
"date", "2019-12-23 12:00:00");
@SuppressWarnings("unused")
Edge edge2 = baby.addEdge("read", java2, "place", "library of school",
"date", "2019-12-23 13:00:00");
Edge edge3 = baby.addEdge("read", java3, "place", "library of school",
"date", "2019-12-23 14:00:00");
@SuppressWarnings("unused")
Edge edge4 = baby.addEdge("read", java4, "place", "library of school",
"date", "2019-12-23 15:00:00");
Edge edge5 = baby.addEdge("read", java5, "place", "library of school",
"date", "2019-12-23 16:00:00");
Edge edge6 = baby.addEdge("read", java6, "place", "home",
"date", "2019-12-23 14:00:00");
graph().tx().commit();
Iterator<Edge> edges = graph().traversal().E().has("place", "home");
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge6, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", "2019-12-23 14:00:00");
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge3, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gt("2019-12-23 15:00:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge5, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gte("2019-12-23 15:00:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(2, IteratorUtils.count(edges));
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lt("2019-12-23 13:00:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge1, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lte("2019-12-23 13:00:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(2, IteratorUtils.count(edges));
graph().tx().commit();
try {
Thread.sleep(3100L);
} catch (InterruptedException e) {
// Ignore
}
Edge edge7 = baby.addEdge("read", java1, "place", "library of school",
"date", "2019-12-23 12:01:00");
@SuppressWarnings("unused")
Edge edge8 = baby.addEdge("read", java2, "place", "library of school",
"date", "2019-12-23 13:01:00");
Edge edge9 = baby.addEdge("read", java3, "place", "library of school",
"date", "2019-12-23 14:01:00");
@SuppressWarnings("unused")
Edge edge10 = baby.addEdge("read", java4,
"place", "library of school",
"date", "2019-12-23 15:01:00");
Edge edge11 = baby.addEdge("read", java5,
"place", "library of school",
"date", "2019-12-23 16:01:00");
Edge edge12 = baby.addEdge("read", java6, "place", "library",
"date", "2019-12-23 14:01:00");
graph().tx().commit();
// Due to overridden edges are expired, query will lead to async delete
edges = graph().traversal().E().has("place", "home");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library");
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge12, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", "2019-12-23 14:00:00");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", "2019-12-23 14:01:00");
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge9, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gt("2019-12-23 15:01:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge11, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gte("2019-12-23 15:01:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(2, IteratorUtils.count(edges));
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lt("2019-12-23 13:01:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(edge7, edges.next());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lte("2019-12-23 13:01:00"));
Assert.assertTrue(edges.hasNext());
Assert.assertEquals(2, IteratorUtils.count(edges));
graph().tx().commit();
try {
Thread.sleep(3100L);
} catch (InterruptedException e) {
// Ignore
}
// All edges are expired after 6s
edges = graph().traversal().E().has("place", "home");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", "2019-12-23 14:00:00");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", "2019-12-23 14:01:00");
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gt("2019-12-23 15:00:00"));
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.gte("2019-12-23 15:00:00"));
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lt("2019-12-23 13:00:00"));
Assert.assertFalse(edges.hasNext());
edges = graph().traversal().E().has("place", "library of school")
.has("date", P.lte("2019-12-23 13:00:00"));
Assert.assertFalse(edges.hasNext());
}