public void testOverrideEdgeWithRangeIndexAndTtl()

in hugegraph-test/src/main/java/org/apache/hugegraph/core/EdgeCoreTest.java [1071:1200]


    public void testOverrideEdgeWithRangeIndexAndTtl() {
        graph().schema().indexLabel("readByDate").onE("read").by("date")
               .range().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");
        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");
        graph().tx().commit();

        Iterator<Edge> edges = graph().traversal().E()
                                      .has("date", "2019-12-23 14:00:00");
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge3, edges.next());

        edges = graph().traversal().E()
                       .has("date", P.gt("2019-12-23 15:00:00"));
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge5, edges.next());

        edges = graph().traversal().E()
                       .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("date", P.lt("2019-12-23 13:00:00"));
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge1, edges.next());

        edges = graph().traversal().E()
                       .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
        }

        // Override
        Edge edge6 = baby.addEdge("read", java1, "place", "library of school",
                                  "date", "2019-12-23 12:01:00");
        @SuppressWarnings("unused")
        Edge edge7 = baby.addEdge("read", java2, "place", "library of school",
                                  "date", "2019-12-23 13:01:00");
        Edge edge8 = baby.addEdge("read", java3, "place", "library of school",
                                  "date", "2019-12-23 14:01:00");
        @SuppressWarnings("unused")
        Edge edge9 = baby.addEdge("read", java4, "place", "library of school",
                                  "date", "2019-12-23 15:01:00");
        Edge edge10 = baby.addEdge("read", java5,
                                   "place", "library of school",
                                  "date", "2019-12-23 16:01:00");
        graph().tx().commit();
        // Due to overridden edges are expired, query will lead to async delete
        edges = graph().traversal().E().has("date", "2019-12-23 14:00:00");
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E().has("date", "2019-12-23 14:01:00");
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge8, edges.next());

        edges = graph().traversal().E()
                       .has("date", P.gt("2019-12-23 15:01:00"));
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge10, edges.next());

        edges = graph().traversal().E()
                       .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("date", P.lt("2019-12-23 13:01:00"));
        Assert.assertTrue(edges.hasNext());
        Assert.assertEquals(edge6, edges.next());

        edges = graph().traversal().E()
                       .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("date", "2019-12-23 14:00:00");
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E().has("date", "2019-12-23 14:01:00");
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E()
                       .has("date", P.gt("2019-12-23 15:01:00"));
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E()
                       .has("date", P.gte("2019-12-23 15:01:00"));
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E()
                       .has("date", P.lt("2019-12-23 13:01:00"));
        Assert.assertFalse(edges.hasNext());

        edges = graph().traversal().E()
                       .has("date", P.lte("2019-12-23 13:01:00"));
        Assert.assertFalse(edges.hasNext());
    }