[Tarantool-patches] [PATCH v1] ci: enhance jobs with jepsen tests
sergeyb at tarantool.org
sergeyb at tarantool.org
Mon Oct 26 12:00:07 MSK 2020
From: Sergey Bronnikov <sergeyb at tarantool.org>
To run Jepsen tests in different configurations we need to parametrize run
script by options, so lein options and number of nodes passed with environment
variables. By default script runs testing with Tarantool built from latest
commit.
Added these configurations:
- single instance
- single instance with enabled TXM
- cluster with enabled Raft
- cluster with enabled Raft and TXM
Closes #5437
---
Branch: https://github.com/tarantool/tarantool/tree/ligurio/gh-5437-enhance-jepsen-jobs
CI: https://gitlab.com/tarantool/tarantool/-/pipelines/206846941
Issue: https://github.com/tarantool/tarantool/issues/5437
.gitlab-ci.yml | 43 ++++++++++++++++++++++++++++-----------
.travis.mk | 2 +-
CMakeLists.txt | 18 ++++++----------
tools/run-jepsen-tests.sh | 12 ++++++-----
4 files changed, 45 insertions(+), 30 deletions(-)
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dc58888b6..dda51efbd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -169,6 +169,19 @@ before_script:
script:
- ${GITLAB_MAKE} perf_cleanup
+.jepsen_test_definition: &jepsen_test_definition
+ <<: *docker_test_definition
+ script:
+ - ${GITLAB_MAKE} test_jepsen
+ stage: long_tests
+ when: manual
+ tags:
+ - mcs_jepsen_docker
+ artifacts:
+ paths:
+ - jepsen-tests-prefix/src/jepsen-tests/store
+ expire_in: 6 month
+
# Static Analysis
luacheck:
@@ -264,18 +277,24 @@ freebsd_12_release:
- ${GITLAB_MAKE} vms_start
- ${GITLAB_MAKE} vms_test_freebsd
-jepsen:
- <<: *docker_test_definition
- script:
- - ${GITLAB_MAKE} test_jepsen
- stage: long_tests
- when: manual
- tags:
- - mcs_jepsen_docker
- artifacts:
- paths:
- - jepsen-tests-prefix/src/jepsen-tests/store
- expire_in: 6 month
+jepsen-single-instance:
+ <<: *jepsen_test_definition
+
+jepsen-single-instance-txm:
+ <<: *jepsen_test_definition
+ variables:
+ LEIN_OPT: '--mvcc'
+
+jepsen-cluster:
+ <<: *jepsen_test_definition
+ variables:
+ INSTANCE_COUNT: '5'
+
+jepsen-cluster-txm:
+ <<: *jepsen_test_definition
+ variables:
+ LEIN_OPT: '--mvcc'
+ INSTANCE_COUNT: '5'
# ####
# Perf
diff --git a/.travis.mk b/.travis.mk
index a44e1b0c5..238e31cda 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -326,4 +326,4 @@ test_freebsd: deps_freebsd test_freebsd_no_deps
test_jepsen: deps_debian_jepsen
cmake . -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_WERROR=ON -DWITH_JEPSEN=ON
- make jepsen-single
+ make run-jepsen
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 512f50e05..fa6818f8e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -175,21 +175,15 @@ if (WITH_JEPSEN)
)
#
- # Enable 'make jepsen-*' targets.
+ # Enable 'make run-jepsen' target.
#
- add_custom_target(jepsen-single DEPENDS jepsen-tests)
- add_custom_command(TARGET jepsen-single
+ add_custom_target(run-jepsen DEPENDS jepsen-tests)
+ add_custom_command(TARGET run-jepsen
COMMAND ${BASH} ${PROJECT_SOURCE_DIR}/tools/run-jepsen-tests.sh
- ${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}
- COMMENT "Running Jepsen tests on a single Tarantool instance"
- )
-
- add_custom_target(jepsen-cluster DEPENDS jepsen-tests)
- add_custom_command(TARGET jepsen-cluster
- COMMAND ${BASH} ${PROJECT_SOURCE_DIR}/tools/run-jepsen-tests.sh
- ${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR} 5
- COMMENT "Running Jepsen tests on a cluster with 5 Tarantool instances"
+ ${PROJECT_SOURCE_DIR}
+ ${PROJECT_BINARY_DIR}
+ COMMENT "Running Jepsen tests"
)
endif()
diff --git a/tools/run-jepsen-tests.sh b/tools/run-jepsen-tests.sh
index a313b2990..26931eaae 100755
--- a/tools/run-jepsen-tests.sh
+++ b/tools/run-jepsen-tests.sh
@@ -9,14 +9,14 @@
# TF_VAR_user_domain_id
# TF_VAR_keypair_name
# TF_VAR_ssh_key
-# and three arguments: path to a Tarantool project source directory, path to a
-# Tarantool project binary directory and number on instances (optional).
+# and two arguments: path to a Tarantool project source directory and path to a
+# Tarantool project binary directory. And optional use environment variables:
+# LEIN_OPT and INSTANCE_COUNT.
set -Eeo pipefail
PROJECT_SOURCE_DIR=$1
PROJECT_BINARY_DIR=$2
-INSTANCE_COUNT=$3
TESTS_DIR="$PROJECT_BINARY_DIR/jepsen-tests-prefix/src/jepsen-tests/"
TERRAFORM_CONFIG="$PROJECT_SOURCE_DIR/extra/tf"
@@ -24,7 +24,9 @@ TERRAFORM_STATE="$PROJECT_BINARY_DIR/terraform.tfstate"
SSH_KEY_FILENAME="$PROJECT_SOURCE_DIR/build/tf-cloud-init"
NODES_FILENAME="$PROJECT_SOURCE_DIR/build/nodes"
-LEIN_OPTIONS="--nodes-file $NODES_FILENAME --username ubuntu --workload register"
+CI_COMMIT_SHA=$(git rev-parse HEAD)
+
+LEIN_OPTIONS="test-all --nodes-file $NODES_FILENAME --username ubuntu $LEIN_OPT --version $CI_COMMIT_SHA"
[[ -z ${PROJECT_SOURCE_DIR} ]] && (echo "Please specify path to a project source directory"; exit 1)
[[ -z ${PROJECT_BINARY_DIR} ]] && (echo "Please specify path to a project binary directory"; exit 1)
@@ -72,6 +74,6 @@ terraform apply -state=$TERRAFORM_STATE -auto-approve $TERRAFORM_CONFIG
terraform providers $TERRAFORM_CONFIG
terraform output -state=$TERRAFORM_STATE instance_names
terraform output -state=$TERRAFORM_STATE -json instance_ips | jq --raw-output '.[]' > $NODES_FILENAME
-pushd $TESTS_DIR && lein run test $LEIN_OPTIONS
+pushd $TESTS_DIR && lein run $LEIN_OPTIONS
popd
cleanup
--
2.28.0
More information about the Tarantool-patches
mailing list