public void testOverrideVertexWithShardIndexAndTtl()

in hugegraph-server/hugegraph-test/src/main/java/org/apache/hugegraph/core/VertexCoreTest.java [1639:1789]


    public void testOverrideVertexWithShardIndexAndTtl() {
        graph().schema().indexLabel("fanByCityAndAge").onV("fan")
               .by("city", "age").shard().ifNotExist().create();

        Vertex vertex1 = graph().addVertex(T.label, "fan", "name", "Baby1",
                                           "age", 1, "city", "Beijing");
        @SuppressWarnings("unused")
        Vertex vertex2 = graph().addVertex(T.label, "fan", "name", "Baby2",
                                           "age", 3, "city", "Beijing");
        Vertex vertex3 = graph().addVertex(T.label, "fan", "name", "Baby3",
                                           "age", 5, "city", "Beijing");
        @SuppressWarnings("unused")
        Vertex vertex4 = graph().addVertex(T.label, "fan", "name", "Baby4",
                                           "age", 7, "city", "Beijing");
        Vertex vertex5 = graph().addVertex(T.label, "fan", "name", "Baby5",
                                           "age", 9, "city", "Beijing");
        Vertex vertex6 = graph().addVertex(T.label, "fan", "name", "Baby6",
                                           "age", 5, "city", "Shanghai");
        this.commitTx();

        Iterator<Vertex> vertices = graph().traversal().V().has("city",
                                                                "Shanghai");
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex6, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", 5);
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex3, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gt(7));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex5, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gte(7));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(2, IteratorUtils.count(vertices));

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lt(3));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex1, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lte(3));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(2, IteratorUtils.count(vertices));
        this.commitTx();

        try {
            Thread.sleep(3100L);
        } catch (InterruptedException e) {
            // Ignore
        }

        Vertex vertex7 = graph().addVertex(T.label, "fan", "name", "Baby7",
                                           "age", 2, "city", "Beijing");
        @SuppressWarnings("unused")
        Vertex vertex8 = graph().addVertex(T.label, "fan", "name", "Baby8",
                                           "age", 4, "city", "Beijing");
        Vertex vertex9 = graph().addVertex(T.label, "fan", "name", "Baby9",
                                           "age", 6, "city", "Beijing");
        @SuppressWarnings("unused")
        Vertex vertex10 = graph().addVertex(T.label, "fan",
                                            "name", "Baby10", "age", 8,
                                            "city", "Beijing");
        Vertex vertex11 = graph().addVertex(T.label, "fan",
                                            "name", "Baby101", "age", 10,
                                            "city", "Beijing");
        Vertex vertex12 = graph().addVertex(T.label, "fan",
                                            "name", "Baby12", "age", 6,
                                            "city", "Shenzhen");
        this.commitTx();

        // Due to overridden vertices are expired, query will lead to async delete
        vertices = graph().traversal().V().has("city", "Shanghai");
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Shenzhen");
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex12, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", 5);
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", 6);
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex9, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gt(8));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex11, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gte(8));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(2, IteratorUtils.count(vertices));

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lt(4));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(vertex7, vertices.next());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lte(4));
        Assert.assertTrue(vertices.hasNext());
        Assert.assertEquals(2, IteratorUtils.count(vertices));
        this.commitTx();

        try {
            Thread.sleep(3100L);
        } catch (InterruptedException e) {
            // Ignore
        }

        // All vertices are expired after 6s
        vertices = graph().traversal().V().has("city", "Shanghai");
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Shenzhen");
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", 5);
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", 6);
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gt(8));
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.gte(8));
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lt(4));
        Assert.assertFalse(vertices.hasNext());

        vertices = graph().traversal().V().has("city", "Beijing")
                          .has("age", P.lte(4));
        Assert.assertFalse(vertices.hasNext());
    }