fix(ci): ожидание докер-лока оставляет след в логе (#2950) #2958

Merged
bot-backend merged 1 commit from fix/2950-lock-wait-observable into main 2026-08-20 08:44:11 +00:00
Collaborator

Мелкая, но нужная поправка к #2955 по тому же issue.

Мой критерий приёмки был неизмеримым

В #2955 я записал: «в логе второго деплоя видна строка ожидания лока — то есть он реально ждал первого». Строки такой не бывает: flock при успешном захвате молчит, а печать стояла только на исчерпании таймаута.

Значит отличить «второй дождался первого» от «они просто разошлись по времени» было нечем — ровно та ошибка, от которой я предостерегал в самом issue.

Правка

Сначала неблокирующая попытка:

флаг свободен  → «докер-лок свободен, взят сразу»
флаг занят     → «докер-лок занят соседним деплоем, жду (до 900с)…»
                 затем «докер-лок получен через Nс ожидания»
не дождались   → прежнее сообщение с подсказкой про fuser, выход 1

Длительность печатается не для красоты: ждал деплой две секунды или четверть часа — разные диагнозы. Первое означает, что цепочки почти разминулись сами; второе — что взаимное исключение несёт реальную нагрузку и стоит подумать про host-lock только вокруг докер-секции, а не вокруг всего шага.

Гейт

Три новые проверки: flock -n присутствует, факт ожидания печатается, длительность печатается.

мутация результат
вернуть слепой блокирующий вызов 1 failed
контроль 9 passed, rc=0
Мелкая, но нужная поправка к #2955 по тому же issue. ## Мой критерий приёмки был неизмеримым В #2955 я записал: «в логе второго деплоя видна строка ожидания лока — то есть он реально ждал первого». Строки такой не бывает: `flock` при успешном захвате молчит, а печать стояла только на исчерпании таймаута. Значит отличить «второй дождался первого» от «они просто разошлись по времени» было нечем — ровно та ошибка, от которой я предостерегал в самом issue. ## Правка Сначала неблокирующая попытка: ``` флаг свободен → «докер-лок свободен, взят сразу» флаг занят → «докер-лок занят соседним деплоем, жду (до 900с)…» затем «докер-лок получен через Nс ожидания» не дождались → прежнее сообщение с подсказкой про fuser, выход 1 ``` Длительность печатается не для красоты: ждал деплой две секунды или четверть часа — разные диагнозы. Первое означает, что цепочки почти разминулись сами; второе — что взаимное исключение несёт реальную нагрузку и стоит подумать про host-lock только вокруг докер-секции, а не вокруг всего шага. ## Гейт Три новые проверки: `flock -n` присутствует, факт ожидания печатается, длительность печатается. | мутация | результат | |---|---| | вернуть слепой блокирующий вызов | 1 failed | | контроль | 9 passed, rc=0 |
bot-backend added 1 commit 2026-08-20 08:18:13 +00:00
fix(ci): ожидание докер-лока оставляет след в логе (#2950)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 19s
CI / changes (pull_request) Successful in 21s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m11s
CI / backend-tests (pull_request) Successful in 17m17s
6caaa2bf88
Изъян в собственном критерии приёмки #2950. Я записал: «в логе второго деплоя
видна строка ожидания лока — то есть он реально ждал первого». Но flock при
успешном захвате молчит, и такой строки не бывает. Критерий был неизмеримым:
отличить «второй дождался первого» от «они просто разошлись по времени» нечем.

Теперь сначала неблокирующая попытка:

  флаг свободен  → «докер-лок свободен, взят сразу»
  флаг занят     → «докер-лок занят соседним деплоем, жду (до 900с)…»
                   потом «докер-лок получен через Nс ожидания»
  не дождались   → прежнее сообщение с подсказкой про fuser, выход 1

Длительность печатается не для красоты: без неё непонятно, ждал деплой две
секунды или четверть часа, а это разные диагнозы — разминулись случайно или
взаимное исключение несёт реальную нагрузку.

Гейт дополнен тремя проверками (flock -n, факт ожидания, длительность).
Мутация «вернуть слепой блокирующий вызов» краснит его: 1 failed, контроль
9 passed rc=0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
bot-backend merged commit 68d041022d into main 2026-08-20 08:44:11 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2958
No description provided.