From 8d48c6043d2b1ed4a86a59692c7ad3bbf0849ed0 Mon Sep 17 00:00:00 2001 From: Joris Wouter Jonkers Date: Wed, 21 Oct 2026 13:00:08 +0200 Subject: [PATCH] test: the smoke test bounds its wait for Mongo and names why it failed Since 09:03 on 2026-10-21 every CI run, main's included, has hung in the unbounded wait for Mongo's replica set until the job's 30-minute timeout cancelled it. The wait now gives up after two minutes, says whether Mongo exited or never became a replica set, and prints its log. It matches the whole output line, so an error naming 127.0.0.1 no longer passes as ok. --- scripts/smoke-test.sh | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/smoke-test.sh b/scripts/smoke-test.sh index f3d2f9e..430af18 100755 --- a/scripts/smoke-test.sh +++ b/scripts/smoke-test.sh @@ -14,9 +14,19 @@ docker network create "$net" >/dev/null docker run -d --name smoke-mongo --network "$net" mongo:8.0 --replSet overleaf --bind_ip_all >/dev/null docker run -d --name smoke-redis --network "$net" --user 999:1000 --read-only --cap-drop ALL \ --tmpfs /data:uid=999,gid=1000 "$redis_image" >/dev/null -until docker exec smoke-mongo mongosh --quiet --eval \ - 'try { rs.status().ok } catch (e) { rs.initiate({_id: "overleaf", members: [{_id: 0, host: "smoke-mongo:27017"}]}).ok }' \ - 2>/dev/null | grep -q 1; do sleep 2; done +# Mongo as a one-member replica set, which Overleaf needs for transactions. The wait is bounded +# and names what went wrong, so a Mongo that never comes up fails the job instead of hanging it. +replica_set_ok() { + docker exec smoke-mongo mongosh --quiet --eval \ + 'try { rs.status().ok } catch (e) { rs.initiate({_id: "overleaf", members: [{_id: 0, host: "smoke-mongo:27017"}]}).ok }' \ + 2>/dev/null | grep -qx 1 +} +for _ in $(seq 1 60); do + replica_set_ok && break + [ "$(docker inspect -f '{{.State.Running}}' smoke-mongo)" = true ] || { docker logs smoke-mongo 2>&1 | tail -30; echo "smoke-mongo exited" >&2; exit 1; } + sleep 2 +done +replica_set_ok || { docker logs smoke-mongo 2>&1 | tail -30; echo "smoke-mongo never became a replica set" >&2; exit 1; } docker run -d --name smoke-overleaf --network "$net" --user 33:33 --read-only --cap-drop ALL \ --security-opt no-new-privileges \