Skip to content

Commit

Permalink
[GIE Compiler] Introduce LDBC CI Tests for Cypher Query (#2984)
Browse files Browse the repository at this point in the history
<!--
Thanks for your contribution! please review
https://github.com/alibaba/GraphScope/blob/main/CONTRIBUTING.md before
opening an issue.
-->

## What do these changes do?
as titled.

<!-- Please give a short brief about these changes. -->

## Related issue number

<!-- Are there any issues opened that will be resolved by merging this
change? -->

#2914

---------

Co-authored-by: Longbin Lai <longbin.lailb@alibaba-inc.com>
  • Loading branch information
shirly121 and longbinlai authored Jul 19, 2023
1 parent f61d0f1 commit c1df6f2
Show file tree
Hide file tree
Showing 16 changed files with 424 additions and 174 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/gaia.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ jobs:
run: |
cd ${GITHUB_WORKSPACE}
git clone -b master --single-branch --depth=1 https://github.com/7br/gstest.git /tmp/gstest
cd ${GITHUB_WORKSPACE}/interactive_engine/compiler && ./ir_exprimental_pattern_ci.sh
cd ${GITHUB_WORKSPACE}/interactive_engine/compiler && ./ir_exprimental_advanced_ci.sh
- name: Ir Integration Test on Csr Store
run: |
Expand Down
8 changes: 5 additions & 3 deletions interactive_engine/compiler/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ test:
# start rpc server
# make run
gremlin_test:
mvn test -Dtest=com.alibaba.graphscope.integration.standard.IrGremlinTest
mvn test -Dtest=com.alibaba.graphscope.gremlin.integration.standard.IrGremlinTest

run:
cd $(CUR_DIR) && $(java) \
Expand All @@ -65,11 +65,13 @@ physical_plan:
# start rpc server
# make run graph.schema:=../executor/ir/core/resource/ldbc_schema.json
ldbc_test:
mvn test -Dtest=com.alibaba.graphscope.integration.ldbc.IrLdbcTest
# todo: need to rewrite gremlin ldbc queries
# mvn test -Dtest=com.alibaba.graphscope.gremlin.integration.ldbc.IrLdbcTest
mvn test -Dtest=com.alibaba.graphscope.cypher.integration.ldbc.IrLdbcTest

# start rpc server
# make run graph.schema:=../executor/ir/core/resource/ldbc_schema.json
pattern_test:
mvn test -Dtest=com.alibaba.graphscope.integration.pattern.IrPatternTest
mvn test -Dtest=com.alibaba.graphscope.gremlin.integration.pattern.IrPatternTest

.PHONY: build run
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ base_dir=$(cd $(dirname $0); pwd)
ps -ef | grep "com.alibaba.graphscope.GraphServer" | awk '{print $2}' | xargs kill -9 || true
ps -ef | grep "start_rpc_server" | awk '{print $2}' | xargs kill -9
sleep 3
# start engine service and load ldbc graph
# start engine service and load ldbc graph with sf=0.1
cd ${base_dir}/../executor/ir/target/release &&
RUST_LOG=info DATA_PATH=/tmp/gstest/ldbc_graph_exp_bin PARTITION_ID=0 ./start_rpc_server --config ${base_dir}/../executor/ir/integrated/config/distributed/server_0 &
cd ${base_dir}/../executor/ir/target/release &&
Expand All @@ -13,8 +13,8 @@ sleep 10
# start compiler service
cd ${base_dir} && make run graph.schema:=../executor/ir/core/resource/ldbc_schema.json pegasus.hosts:=127.0.0.1:1234,127.0.0.1:1235 &
sleep 5
# run gremlin standard tests
cd ${base_dir} && make pattern_test
# run pattern tests and ldbc tests
cd ${base_dir} && make pattern_test && make ldbc_test
exit_code=$?
# clean service
ps -ef | grep "com.alibaba.graphscope.GraphServer" | awk '{print $2}' | xargs kill -9 || true
Expand Down
4 changes: 4 additions & 0 deletions interactive_engine/compiler/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,10 @@
<groupId>org.neo4j</groupId>
<artifactId>neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
</dependency>
<dependency>
<groupId>org.immutables</groupId>
<artifactId>value</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ private RelOptPlanner createRelOptPlanner(PlannerConfig plannerConfig) {
}
}

public AtomicLong getIdGenerator() {
return idGenerator;
}

public static void main(String[] args) throws Exception {
if (args.length < 3 || args[0].isEmpty() || args[1].isEmpty() || args[2].isEmpty()) {
throw new IllegalArgumentException(
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2020 Alibaba Group Holding Limited.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.alibaba.graphscope.cypher.integration.suite.ldbc;

import java.util.Collections;
import java.util.List;

public class QueryContext {
private final String query;
private final List<String> expectedResult;

public QueryContext(String query, List<String> expectedResult) {
this.query = query;
this.expectedResult = expectedResult;
}

public String getQuery() {
return query;
}

public List<String> getExpectedResult() {
return Collections.unmodifiableList(expectedResult);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ public ThrowingConsumer<Context> select(Context ctx) {
Traversal traversal =
(Traversal) scriptEngine.eval(script, this.context);
applyStrategies(traversal);
long jobId = JOB_ID_COUNTER.incrementAndGet();

long jobId = graphPlanner.getIdGenerator().getAndIncrement();
IrMeta irMeta = metaQueryCallback.beforeExec();
QueryStatusCallback statusCallback =
createQueryStatusCallback(script, jobId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,256 +63,112 @@ public abstract class PatternQueryTest extends AbstractGremlinProcessTest {
public void run_pattern_1_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_1_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "343476";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(155633L, traversal.next().longValue());
}

@Test
public void run_pattern_2_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_2_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "87328";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(55488L, traversal.next().longValue());
}

@Test
public void run_pattern_3_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_3_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "1547850";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(568408L, traversal.next().longValue());
}

@Test
public void run_pattern_4_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_4_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "33380";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(23286L, traversal.next().longValue());
}

@Test
public void run_pattern_5_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_5_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "31580";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(16291L, traversal.next().longValue());
}

@Test
public void run_pattern_6_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_6_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "71733";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(43169L, traversal.next().longValue());
}

@Test
public void run_pattern_7_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_7_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "6568";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(2944L, traversal.next().longValue());
}

@Test
public void run_pattern_8_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_8_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "1594426";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(782347L, traversal.next().longValue());
}

@Test
public void run_pattern_9_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_9_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "33380";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(23286L, traversal.next().longValue());
}

@Test
public void run_pattern_10_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_10_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "7327";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(3019L, traversal.next().longValue());
}

@Test
public void run_pattern_11_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_11_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "908981";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(506513L, traversal.next().longValue());
}

@Test
public void run_pattern_12_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_12_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "89621";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(232854L, traversal.next().longValue());
}

@Test
public void run_pattern_13_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_13_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "2430116";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(1602774L, traversal.next().longValue());
}

@Test
public void run_pattern_14_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_14_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "87328";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(55488L, traversal.next().longValue());
}

@Test
public void run_pattern_15_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_15_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "33380";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(23286L, traversal.next().longValue());
}

@Test
public void run_pattern_16_test() {
Traversal<Vertex, Long> traversal = this.get_pattern_16_test();
this.printTraversalForm(traversal);
int counter = 0;

String expected = "33380";
while (traversal.hasNext()) {
Long bindings = traversal.next();
Assert.assertTrue(bindings.toString().equals(expected));
++counter;
}

Assert.assertEquals(1, counter);
Assert.assertEquals(23286L, traversal.next().longValue());
}

public static class Traversals extends PatternQueryTest {
Expand Down
Loading

0 comments on commit c1df6f2

Please sign in to comment.