fix(ci): ожидание докер-лока оставляет след в логе (#2950) (#2958)
Some checks are pending
Deploy / changes (push) Waiting to run
Deploy / build-backend (push) Blocked by required conditions
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
Deploy / deploy-caddy (push) Blocked by required conditions
Deploy / perimeter-smoke (push) Blocked by required conditions
Deploy / deploy-status (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-browser (push) Successful in 50s
Deploy Trade-In / build-frontend (push) Successful in 2m58s
Deploy Trade-In / test (push) Successful in 3m53s
Deploy Trade-In / build-backend (push) Successful in 32s
Deploy Trade-In / deploy (push) Successful in 1m53s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 8s
Some checks are pending
Deploy / changes (push) Waiting to run
Deploy / build-backend (push) Blocked by required conditions
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
Deploy / deploy-caddy (push) Blocked by required conditions
Deploy / perimeter-smoke (push) Blocked by required conditions
Deploy / deploy-status (push) Blocked by required conditions
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-browser (push) Successful in 50s
Deploy Trade-In / build-frontend (push) Successful in 2m58s
Deploy Trade-In / test (push) Successful in 3m53s
Deploy Trade-In / build-backend (push) Successful in 32s
Deploy Trade-In / deploy (push) Successful in 1m53s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 8s
This commit is contained in:
parent
f7e8228550
commit
68d041022d
3 changed files with 51 additions and 8 deletions
|
|
@ -655,10 +655,21 @@ jobs:
|
|||
# прикрывать, что и требуется. Ожидание ограничено: не дождались за
|
||||
# 900с — падаем с внятным сообщением, а не молча ждём вечно.
|
||||
exec 9>/var/lock/gendesign-docker-deploy.lock
|
||||
if ! flock -w 900 9; then
|
||||
echo "ERROR: не дождался лока докер-деплоя за 900с."
|
||||
echo " Кто держит: ssh на хост, затем fuser -v /var/lock/gendesign-docker-deploy.lock"
|
||||
exit 1
|
||||
# Сначала неблокирующая попытка — чтобы ОЖИДАНИЕ оставляло след в логе.
|
||||
# Без этого работающий лок ненаблюдаем: flock при успехе молчит, и отличить
|
||||
# «второй деплой дождался первого» от «они просто разошлись по времени»
|
||||
# нельзя — а именно это и есть критерий приёмки #2950.
|
||||
if flock -n 9; then
|
||||
echo "→ докер-лок свободен, взят сразу"
|
||||
else
|
||||
echo "→ докер-лок занят соседним деплоем, жду (до 900с)…"
|
||||
lock_wait_started=$(date +%s)
|
||||
if ! flock -w 900 9; then
|
||||
echo "ERROR: не дождался лока докер-деплоя за 900с."
|
||||
echo " Кто держит: ssh на хост, затем fuser -v /var/lock/gendesign-docker-deploy.lock"
|
||||
exit 1
|
||||
fi
|
||||
echo "→ докер-лок получен через $(( $(date +%s) - lock_wait_started ))с ожидания"
|
||||
fi
|
||||
cd /opt/gendesign
|
||||
|
||||
|
|
|
|||
|
|
@ -501,10 +501,21 @@ jobs:
|
|||
# прикрывать, что и требуется. Ожидание ограничено: не дождались за
|
||||
# 900с — падаем с внятным сообщением, а не молча ждём вечно.
|
||||
exec 9>/var/lock/gendesign-docker-deploy.lock
|
||||
if ! flock -w 900 9; then
|
||||
echo "ERROR: не дождался лока докер-деплоя за 900с."
|
||||
echo " Кто держит: ssh на хост, затем fuser -v /var/lock/gendesign-docker-deploy.lock"
|
||||
exit 1
|
||||
# Сначала неблокирующая попытка — чтобы ОЖИДАНИЕ оставляло след в логе.
|
||||
# Без этого работающий лок ненаблюдаем: flock при успехе молчит, и отличить
|
||||
# «второй деплой дождался первого» от «они просто разошлись по времени»
|
||||
# нельзя — а именно это и есть критерий приёмки #2950.
|
||||
if flock -n 9; then
|
||||
echo "→ докер-лок свободен, взят сразу"
|
||||
else
|
||||
echo "→ докер-лок занят соседним деплоем, жду (до 900с)…"
|
||||
lock_wait_started=$(date +%s)
|
||||
if ! flock -w 900 9; then
|
||||
echo "ERROR: не дождался лока докер-деплоя за 900с."
|
||||
echo " Кто держит: ssh на хост, затем fuser -v /var/lock/gendesign-docker-deploy.lock"
|
||||
exit 1
|
||||
fi
|
||||
echo "→ докер-лок получен через $(( $(date +%s) - lock_wait_started ))с ожидания"
|
||||
fi
|
||||
cd /opt/gendesign
|
||||
|
||||
|
|
|
|||
|
|
@ -69,6 +69,27 @@ def test_prod_deploy_takes_the_host_lock(name: str) -> None:
|
|||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("name", PROD_DEPLOYS)
|
||||
def test_lock_wait_leaves_a_trace(name: str) -> None:
|
||||
"""Ожидание лока видно в логе — иначе работающий лок ненаблюдаем.
|
||||
|
||||
`flock` при успехе молчит. Если брать лок сразу блокирующим вызовом, отличить
|
||||
«второй деплой дождался первого» от «они просто разошлись по времени» нельзя —
|
||||
а это и есть критерий приёмки #2950. Поэтому сначала неблокирующая попытка, и
|
||||
при занятом локе в лог уходит и факт ожидания, и его длительность.
|
||||
"""
|
||||
script = _deploy_script(name)
|
||||
assert "flock -n" in script, (
|
||||
f"{name}: лок берётся сразу блокирующим вызовом — ожидание не попадёт в лог, "
|
||||
"и проверить, что взаимное исключение сработало, будет нечем"
|
||||
)
|
||||
assert "жду" in script, f"{name}: нет строки об ожидании лока"
|
||||
assert "с ожидания" in script, (
|
||||
f"{name}: не печатается длительность ожидания — без неё непонятно, "
|
||||
"ждал деплой две секунды или четверть часа"
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("name", PROD_DEPLOYS)
|
||||
def test_lock_wait_is_bounded_and_loud(name: str) -> None:
|
||||
"""Ожидание ограничено и провал слышен: молча ждать вечно — не вариант."""
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue