Fix flaky shard snapshot API CI readiness race (#10383)

* Fix flaky shard snapshot API CI readiness race

Run the prebuilt binary and poll /readyz instead of cargo run + fixed sleep, which can miss startup when cargo recompiles.

* Move shard snapshot API CI runner into a dedicated script

Keep workflow YAML thin by starting Qdrant, waiting for /readyz, and invoking shard-snapshot-api.sh from tests/shard-snapshot-api-tests.sh.
This commit is contained in:
qdrant-cloud-bot
2026-09-03 12:45:52 +02:00
committed by timvisee
parent ce62c3d4a8
commit 081ada945f
2 changed files with 45 additions and 21 deletions
+9 -21
View File
@@ -176,30 +176,18 @@ jobs:
- name: Build
run: cargo build --bin qdrant --features "staging" --locked
- name: Run Shard Snapshot API Tests (local)
shell: bash
timeout-minutes: 15
run: |
cargo run --features "staging" &
trap 'kill $(jobs -p) &>/dev/null || :' EXIT
sleep 10
./tests/shard-snapshot-api.sh test-all
run: ./tests/shard-snapshot-api-tests.sh
- name: Run Shard Snapshot API Tests (s3)
shell: bash
timeout-minutes: 15
run: |
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__SNAPSHOTS_STORAGE=s3
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__BUCKET=test-bucket
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__REGION=us-east-1
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ACCESS_KEY=minioadmin
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__SECRET_KEY=minioadmin
export QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ENDPOINT_URL=http://127.0.0.1:9000
cargo run --features "staging" &
trap 'kill $(jobs -p) &>/dev/null || :' EXIT
sleep 10
./tests/shard-snapshot-api.sh test-all
env:
QDRANT__STORAGE__SNAPSHOTS_CONFIG__SNAPSHOTS_STORAGE: s3
QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__BUCKET: test-bucket
QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__REGION: us-east-1
QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ACCESS_KEY: minioadmin
QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__SECRET_KEY: minioadmin
QDRANT__STORAGE__SNAPSHOTS_CONFIG__S3_CONFIG__ENDPOINT_URL: http://127.0.0.1:9000
run: ./tests/shard-snapshot-api-tests.sh
e2e-tests:
runs-on: ubuntu-latest
+36
View File
@@ -0,0 +1,36 @@
#!/usr/bin/env bash
# Start a prebuilt Qdrant binary, wait until it is ready, then run shard snapshot API tests.
# Snapshot storage (local vs s3) is controlled via QDRANT__STORAGE__SNAPSHOTS_CONFIG__* env vars.
set -euo pipefail
cd "$(dirname "$0")/../"
QDRANT_EXECUTABLE="${QDRANT_EXECUTABLE:-./target/debug/qdrant}"
QDRANT_HOST="${QDRANT_HOST:-localhost:6333}"
READY_TIMEOUT_SEC="${READY_TIMEOUT_SEC:-60}"
"$QDRANT_EXECUTABLE" &
PID=$!
clear_after_tests() {
echo "server is going down"
kill "$PID" &>/dev/null || :
wait "$PID" &>/dev/null || :
echo "END"
}
trap clear_after_tests EXIT
for _ in $(seq 1 "$READY_TIMEOUT_SEC"); do
if curl --output /dev/null --silent --get --fail "http://$QDRANT_HOST/readyz"; then
echo "server ready to serve traffic"
./tests/shard-snapshot-api.sh test-all
exit 0
fi
printf 'waiting for server to start...\n'
sleep 1
done
echo "server did not become ready within ${READY_TIMEOUT_SEC}s" >&2
exit 1