Fix parallel readwrite #3345
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: tests | |
on: | |
push: | |
branches: | |
- 'main' | |
- '*.*.*' | |
- 'libcxx' | |
paths-ignore: | |
- 'docs/**' | |
- '*.md' | |
pull_request: | |
types: [ opened, synchronize, reopened, labeled ] | |
paths-ignore: | |
- 'docs/**' | |
- '*.md' | |
# https://docs.github.com/en/actions/using-jobs/using-concurrency | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
debug_tests: | |
name: debug_tests | |
# https://docs.github.com/en/actions/using-jobs/using-conditions-to-control-job-execution | |
# https://github.com/orgs/community/discussions/26261 | |
if: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci') }} | |
runs-on: [ "self-hosted", "debug" ] | |
steps: | |
# https://github.com/hmarr/debug-action | |
#- uses: hmarr/debug-action@v2 | |
- name: Show PR labels | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
echo "Workflow triggered by ${{ github.event_name }}" | |
if [[ ${{ github.event_name }} == 'pull_request' ]]; then | |
echo "PR labels: ${{ join(github.event.pull_request.labels.*.name, ', ') }}" | |
fi | |
- name: Ensure workspace ownership | |
if: ${{ !cancelled() && !failure() }} | |
run: echo "chown -R $USER $GITHUB_WORKSPACE" && sudo chown -R $USER $GITHUB_WORKSPACE | |
- name: Check out code | |
if: ${{ !cancelled() && !failure() }} | |
uses: actions/checkout@v3 | |
- name: Start builder container | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
TZ=$(readlink -f /etc/localtime | awk -F '/zoneinfo/' '{print $2}') | |
sudo docker rm -f infinity_build && sudo docker run -d --privileged --name infinity_build -e TZ=$TZ -v $PWD:/infinity -v /boot:/boot infiniflow/infinity_builder:ubuntu2310 | |
- name: Build debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "git config --global safe.directory \"*\" && cd /infinity && rm -fr cmake-build-debug && mkdir -p cmake-build-debug && cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_JOB_POOL_LINK:STRING=link_pool -DCMAKE_JOB_POOLS:STRING=link_pool=4 -S /infinity -B /infinity/cmake-build-debug && cmake --build /infinity/cmake-build-debug" | |
- name: Unit test debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "mkdir -p /var/infinity && cd /infinity/ && cmake-build-debug/src/test_main > unittest_debug.log 2>&1" | |
- name: Collect infinity unit test debug output | |
run: cat unittest_debug.log 2>/dev/null || true | |
- name: Install pysdk | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/python && python3 setup.py install" | |
- name: Start infinity pysdk & http_api debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
# Run a command in the background | |
sudo docker exec infinity_build bash -c "cd /infinity/ && rm -fr /var/infinity && cmake-build-debug/src/infinity > debug.log 2>&1" & | |
- name: pysdk test debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_pysdk_test.py" && sleep 1s | |
- name: parallel test debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_parallel_test.py" && sleep 1s | |
- name: http_api test debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_http_api.py" && sleep 1s | |
- name: Stop infinity pysdk & http_api debug | |
if: ${{ !cancelled() }} # always run this step even if previous steps failed | |
run: | | |
sudo bash ${GITHUB_WORKSPACE}/scripts/timeout_kill.sh $(pidof cmake-build-debug/src/infinity) 20 | |
if [ $? -ne 0 ]; then | |
echo "Failed to kill infinity debug version" | |
exit 1 | |
fi | |
- name: Start infinity sqllogictest debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
# Run a command in the background | |
sudo docker exec infinity_build bash -c "cd /infinity/ && rm -fr /var/infinity && cmake-build-debug/src/infinity > debug.log 2>&1" & | |
- name: sqllogictest debug version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/sqllogictest.py" | |
- name: Stop infinity sqllogictest debug | |
if: ${{ !cancelled() }} # always run this step even if previous steps failed | |
run: | | |
sudo bash ${GITHUB_WORKSPACE}/scripts/timeout_kill.sh $(pidof cmake-build-debug/src/infinity) 20 | |
if [ $? -ne 0 ]; then | |
echo "Failed to kill infinity debug version" | |
exit 1 | |
fi | |
- name: Collect infinity debug output | |
# GitHub Actions interprets output lines starting with "Error" as error messages, and it automatically sets the step status to failed when such lines are detected. | |
run: cat debug.log 2>/dev/null || true | |
release_tests: | |
name: release_tests and benchmark | |
# https://docs.github.com/en/actions/using-jobs/using-conditions-to-control-job-execution | |
# https://github.com/orgs/community/discussions/26261 | |
if: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci') }} | |
runs-on: [ "self-hosted", "benchmark" ] | |
steps: | |
# https://github.com/hmarr/debug-action | |
#- uses: hmarr/debug-action@v2 | |
- name: Show PR labels | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
echo "Workflow triggered by ${{ github.event_name }}" | |
if [[ ${{ github.event_name }} == 'pull_request' ]]; then | |
echo "PR labels: ${{ join(github.event.pull_request.labels.*.name, ', ') }}" | |
fi | |
- name: Ensure workspace ownership | |
if: ${{ !cancelled() && !failure() }} | |
run: echo "chown -R $USER $GITHUB_WORKSPACE" && sudo chown -R $USER $GITHUB_WORKSPACE | |
- name: Check out code | |
if: ${{ !cancelled() && !failure() }} | |
uses: actions/checkout@v3 | |
- name: Start builder container | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
TZ=$(readlink -f /etc/localtime | awk -F '/zoneinfo/' '{print $2}') | |
sudo docker rm -f infinity_build && sudo docker run -d --privileged --name infinity_build -e TZ=$TZ -v $PWD:/infinity -v /boot:/boot infiniflow/infinity_builder:ubuntu2310 | |
- name: Build release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "git config --global safe.directory \"*\" && cd /infinity && rm -fr cmake-build-release && mkdir -p cmake-build-release && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_JOB_POOL_LINK:STRING=link_pool -DCMAKE_JOB_POOLS:STRING=link_pool=4 -S /infinity -B /infinity/cmake-build-release && cmake --build /infinity/cmake-build-release" | |
- name: Unit test release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "mkdir -p /var/infinity && cd /infinity/ && cmake-build-release/src/test_main > unittest_release.log 2>&1" | |
- name: Collect infinity unit test release output | |
run: cat unittest_release.log 2>/dev/null || true | |
- name: Install pysdk | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/python && rm -fr dist/* && python setup.py sdist bdist_wheel && pip uninstall -y infinity-sdk && pip install dist/*.whl" | |
- name: Start infinity pysdk & http_api release version | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
# Run a command in the background | |
sudo docker exec infinity_build bash -c "cd /infinity/ && rm -fr /var/infinity && cmake-build-release/src/infinity > release.log 2>&1" & | |
- name: pysdk test release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_pysdk_test.py" && sleep 1s | |
- name: parallel test release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_parallel_test.py" && sleep 1s | |
- name: http_api test release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/run_http_api.py" && sleep 1s | |
- name: Stop infinity pysdk & http_api release | |
if: ${{ !cancelled() }} # always run this step even if previous steps failed | |
run: | | |
sudo bash ${GITHUB_WORKSPACE}/scripts/timeout_kill.sh $(pidof cmake-build-release/src/infinity) 20 | |
if [ $? -ne 0 ]; then | |
echo "Failed to kill infinity debug version" | |
exit 1 | |
fi | |
- name: Start infinity sqllogictest release version | |
if: ${{ !cancelled() && !failure() }} | |
run: | | |
sudo docker exec infinity_build bash -c "cd /infinity/ && rm -fr /var/infinity && cmake-build-release/src/infinity > release.log 2>&1" & | |
- name: sqllogictest release version | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo docker exec infinity_build bash -c "cd /infinity/ && python3 tools/sqllogictest.py" | |
- name: Stop infinity sqllogictest release | |
if: ${{ !cancelled() }} # always run this step even if previous steps failed | |
run: | | |
sudo bash ${GITHUB_WORKSPACE}/scripts/timeout_kill.sh $(pidof cmake-build-release/src/infinity) 20 | |
if [ $? -ne 0 ]; then | |
echo "Failed to kill infinity debug version" | |
exit 1 | |
fi | |
- name: Collect infinity release output | |
# GitHub Actions interprets output lines starting with "Error" as error messages, and it automatically sets the step status to failed when such lines are detected. | |
run: cat release.log 2>/dev/null || true | |
- name: Prepare sift dataset | |
if: ${{ !cancelled() && !failure() }} | |
run: sudo chmod +x ./tools/ci_tools/check_benchmark_result.py && sudo mkdir -p test/data/benchmark && sudo ln -s $HOME/benchmark/sift1M test/data/benchmark/sift_1m | |
- name: Generate config file | |
if: ${{ !cancelled() && !failure() }} | |
run: mkdir -p $PWD/db_tmp && cat conf/infinity_conf.toml | sed -e "s|/var/infinity|$PWD/db_tmp|g" > $PWD/db_tmp/infinity_conf.toml | |
- name: Import sift dataset | |
if: ${{ !cancelled() && !failure() }} | |
run: ./cmake-build-release/benchmark/local_infinity/knn_import_benchmark sift $PWD/test/data $PWD/db_tmp | |
- name: Benchmark sift search 1 thread repeat 50 times | |
if: ${{ !cancelled() && !failure() }} | |
run: truncate --size 0 $HOME/benchmark/benchmark_sift_1_thread_latest_output.log ; echo "1 50" | ./cmake-build-release/benchmark/local_infinity/knn_query_benchmark sift 200 $PWD/test/data $PWD/db_tmp | tee $HOME/benchmark/benchmark_sift_1_thread_latest_output.log ; cat $HOME/benchmark/benchmark_sift_1_thread_latest_output.log | ./tools/ci_tools/collect_benchmark_result.py $HOME/benchmark/benchmark_sift_1_thread.log ; ./tools/ci_tools/check_benchmark_result.py sift_1 $HOME/benchmark/benchmark_sift_1_thread.log | |
- name: Benchmark sift search 8 threads repeat 50 times | |
if: ${{ !cancelled() && !failure() }} | |
run: truncate --size 0 $HOME/benchmark/benchmark_sift_8_threads_latest_output.log ; echo "8 50" | ./cmake-build-release/benchmark/local_infinity/knn_query_benchmark sift 200 $PWD/test/data $PWD/db_tmp | tee $HOME/benchmark/benchmark_sift_8_threads_latest_output.log ; cat $HOME/benchmark/benchmark_sift_8_threads_latest_output.log | ./tools/ci_tools/collect_benchmark_result.py $HOME/benchmark/benchmark_sift_8_threads.log ; ./tools/ci_tools/check_benchmark_result.py sift_8 $HOME/benchmark/benchmark_sift_8_threads.log |