public void testOverrideEdgeWithShardIndexAndTtl()

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());
    }