RONDB-774: Add HASH tests to CI #129
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Run Redis benchmark on Rondis | |
on: | |
pull_request: | |
# Launch on PRs *towards* these branches | |
branches: | |
- main | |
- master | |
types: [opened, synchronize, reopened] | |
jobs: | |
build-pink-macos: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: brew install protobuf | |
- name: Build | |
run: cd pink && make static_lib | |
build-and-run-redis-benchmark: | |
needs: [build-pink-macos] | |
runs-on: ubuntu-latest | |
env: | |
RONDB_VERSION: 24.10.0 | |
RONDB_TARBALL_URI: https://repo.hops.works/master/rondb-24.10.0-linux-glibc2.28-x86_64.tar.gz | |
RONDB_DOCKER_DIR: /tmp/rondb-docker | |
RONDB_TARBALL_FILE: rondb.tar.gz | |
RONDB_PATH: /tmp/rondb | |
IMAGE_NAME: rondis:latest | |
CONTAINER_NAME: rondis | |
RONDIS_PORT: 6379 | |
DOCKER_WORK_DIR: /usr/src/app | |
LOCAL_RONDIS_LOG: /tmp/rondis_server.log | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Clone rondb-docker | |
run: git clone -b release-0.7 https://github.com/logicalclocks/rondb-docker.git $RONDB_DOCKER_DIR | |
- name: Download RonDB | |
run: | | |
wget $RONDB_TARBALL_URI -O $RONDB_DOCKER_DIR/$RONDB_TARBALL_FILE | |
mkdir -p $RONDB_PATH | |
tar xfz $RONDB_DOCKER_DIR/$RONDB_TARBALL_FILE -C $RONDB_PATH --strip-components=1 | |
- name: Run rondb-docker | |
run: | | |
cd $RONDB_DOCKER_DIR | |
# The script expects a relative path to the tarball | |
./build_run_docker.sh -d \ | |
--rondb-tarball-path ./$RONDB_TARBALL_FILE \ | |
--rondb-version $RONDB_VERSION \ | |
--size small \ | |
--num-mgm-nodes 1 \ | |
--node-groups 1 \ | |
--replication-factor 1 \ | |
--num-mysql-nodes 1 \ | |
--num-rest-api-nodes 0 \ | |
--num-benchmarking-nodes 0 | |
- name: Build Rondis image | |
run: docker build -t $IMAGE_NAME . | |
- name: Create Rondis environment | |
run: | | |
docker run -d \ | |
--name=$CONTAINER_NAME \ | |
-v $RONDB_PATH:$RONDB_PATH \ | |
-v $(pwd):$DOCKER_WORK_DIR \ | |
-e RONDB_PATH=$RONDB_PATH \ | |
-w $DOCKER_WORK_DIR \ | |
-p $RONDIS_PORT:$RONDIS_PORT \ | |
$IMAGE_NAME \ | |
tail -f /dev/null | |
- name: Build Pink | |
run: docker exec -i $CONTAINER_NAME bash -c "cd pink && ./build.sh" | |
- name: Run SQL scripts | |
run: | | |
docker exec -i mysqld_1 bash -c "mysql -uroot -e 'CREATE DATABASE redis;'" | |
for sql_file in pink/rondis/sql/*.sql; do | |
cat "$sql_file" | docker exec -i mysqld_1 mysql -uroot --database=redis | |
done | |
- name: Connect Docker network | |
run: | | |
# Get network name that starts with "rondb" | |
COMPOSE_NETWORK=$(docker network list | grep rondb | awk '{print $2}') | |
docker network connect $COMPOSE_NETWORK $CONTAINER_NAME | |
- name: Run Rondis server | |
run: | | |
docker exec -w $DOCKER_WORK_DIR -e LD_LIBRARY_PATH=/tmp/rondb/lib \ | |
-t $CONTAINER_NAME pink/rondis/rondis 6379 mgmd_1:1186 2 > $LOCAL_RONDIS_LOG & | |
# Takes a few seconds before all connections are setup and started properly | |
- name: Wait for Rondis server to start properly | |
run: sleep 5 | |
# Running this multiple times to check for memory leaks and that overwrites/updates/deletes work | |
- name: Run tests multiple times | |
run: | | |
for i in {1..50}; do | |
docker exec -w $DOCKER_WORK_DIR -i $CONTAINER_NAME bash -c \ | |
"pink/rondis/tests/get_set.sh $((i % 3))" | |
docker exec -w $DOCKER_WORK_DIR -i $CONTAINER_NAME bash -c \ | |
"pink/rondis/tests/hget_hset.sh $((i % 5)) $((i % 3))" | |
echo "Success in run $i" | |
done | |
- name: Run Redis benchmark | |
run: docker exec -i $CONTAINER_NAME bash -c "redis-benchmark -t get,set,incr,hget,hset,hincr -r 100 -P 10 --threads 3" | |
- name: Show Rondis logs | |
if: always() | |
run: cat $LOCAL_RONDIS_LOG |