From 1c95c3dc59218be1afbc1ddb91dfda3e1e8fbee5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Bari=C5=A1i=C4=87?= <48765171+MarkoBarisic@users.noreply.github.com> Date: Fri, 26 Jan 2024 11:50:03 +0100 Subject: [PATCH] Add step to refresh jepsen cluster before test (#1667) refresh jepsen during diff workflow --- .github/workflows/diff.yaml | 5 +++ tests/jepsen/run.sh | 62 +++++++++++++++++++++++++------------ 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/.github/workflows/diff.yaml b/.github/workflows/diff.yaml index 4d0d3d47a..f6c7c1bef 100644 --- a/.github/workflows/diff.yaml +++ b/.github/workflows/diff.yaml @@ -475,6 +475,11 @@ jobs: cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. make -j$THREADS memgraph + - name: Refresh Jepsen Cluster + run: | + cd tests/jepsen + ./run.sh cluster-refresh + - name: Run Jepsen tests run: | cd tests/jepsen diff --git a/tests/jepsen/run.sh b/tests/jepsen/run.sh index b366e7846..a1587c8a1 100755 --- a/tests/jepsen/run.sh +++ b/tests/jepsen/run.sh @@ -24,7 +24,7 @@ PRINT_CONTEXT() { HELP_EXIT() { echo "" - echo "HELP: $0 help|cluster-up|cluster-cleanup|cluster-dealloc|mgbuild|test|test-all-individually [args]" + echo "HELP: $0 help|cluster-up|cluster-refresh|cluster-cleanup|cluster-dealloc|mgbuild|test|test-all-individually [args]" echo "" echo " test args --binary MEMGRAPH_BINARY_PATH" echo " --ignore-run-stdout-logs Ignore lein run stdout logs." @@ -184,6 +184,37 @@ PROCESS_RESULTS() { INFO "Result processing (printing and packing) DONE." } +CLUSTER_UP() { + PRINT_CONTEXT + "$script_dir/jepsen/docker/bin/up" --daemon + sleep 10 + # Ensure all SSH connections between Jepsen containers work + for node in $(docker ps --filter name=jepsen* --filter status=running --format "{{.Names}}"); do + if [ "$node" == "jepsen-control" ]; then + continue + fi + node_hostname="${node##jepsen-}" + docker exec jepsen-control bash -c "ssh -oStrictHostKeyChecking=no -t $node_hostname exit" + done +} + +CLUSTER_DEALLOC() { + ps=$(docker ps --filter name=jepsen* --filter status=running -q) + if [[ ! -z ${ps} ]]; then + echo "Killing ${ps}" + docker rm -f ${ps} + imgs=$(docker images "jepsen*" -q) + if [[ ! -z ${imgs} ]]; then + echo "Removing ${imgs}" + docker images "jepsen*" -q | xargs docker image rmi -f + else + echo "No Jepsen images detected!" + fi + else + echo "No Jepsen containers detected!" + fi +} + # Initialize testing context by copying source/binary files. Inside CI, # Memgraph is tested on a single machine cluster based on Docker containers. # Once these tests will be part of the official Jepsen repo, the majority of @@ -196,8 +227,16 @@ case $1 in # the current cluster is broken because it relies on the folder. That can # happen easiliy because the jepsen folder is git ignored. cluster-up) - PRINT_CONTEXT - "$script_dir/jepsen/docker/bin/up" --daemon + CLUSTER_UP + ;; + + cluster-refresh) + CLUSTER_DEALLOC + CLUSTER_UP + ;; + + cluster-dealloc) + CLUSTER_DEALLOC ;; cluster-cleanup) @@ -212,23 +251,6 @@ case $1 in done ;; - cluster-dealloc) - ps=$(docker ps --filter name=jepsen* --filter status=running -q) - if [[ ! -z ${ps} ]]; then - echo "Killing ${ps}" - docker rm -f ${ps} - imgs=$(docker images "jepsen*" -q) - if [[ ! -z ${imgs} ]]; then - echo "Removing ${imgs}" - docker images "jepsen*" -q | xargs docker image rmi -f - else - echo "No Jepsen images detected!" - fi - else - echo "No Jepsen containers detected!" - fi - ;; - mgbuild) PRINT_CONTEXT echo ""