Сборщик: обрыв сети на машине не должен убивать многочасовой проход #3455

Merged
bot-backend merged 1 commit from fix/msk-collector-net-retry into main 2026-09-11 23:42:09 +00:00
Collaborator

Полный проход Яндекса по Москве умер 12.09 на восьмом часу: Page.goto: net::ERR_NETWORK_CHANGED.

Площадка была ни при чём. Сразу после падения и realty.yandex.ru, и git.gendsgn.ru отвечали 200, а в ту же минуту по DNS отвалился MCP-сервер ошибок — моргнула сеть на самой машине. Ретрай в _goto ловил только PlaywrightTimeoutError, поэтому обычная сетевая ошибка уходила наверх и роняла прогон целиком. Собранное не пропало (17 338 карточек уже лежали в проде, план коридоров сохранён, --resume подхватил), но восемь часов работы висели на волоске.

Что сделано

Сетевые отказы Chromium вынесены в _TRANSIENT_NET_ERRORS и считаются своим счётчиком: пять попыток с нарастающим ожиданием 15/30/45/60/120 с. Бюджет попыток по таймауту при этом не тратится — обрыв сети длится минуты, а таймаут навигации это совсем другой симптом с другим лечением. Исчерпали — стоп с причиной nav_network, прогон продолжается тем же batch-id с --resume.

Всё, что не в списке, по-прежнему поднимается. Это принципиально: тихий отказ площадки выглядит ровно так же, и молча проглоченный он превращается в пустой прогон, который читается как успешный.

Первые тесты у сборщика

Тестов у него не было вообще, при том что он уже дважды ронял многочасовой прогон на ошибке, которая отказом площадки не была. Файл подгружает скрипт по пути (нет на месте — skip, не красный) и караулит границу «наше или ихнее»: распознавание сетевых ошибок, переживание короткого обрыва, остановка при длинном с правильной причиной, проброс незнакомой ошибки, неизменность прежнего пути по таймауту.

Проверено

  • uv run python -m pytest (полный сьют бэкенда) — 5902 passed, 37 skipped
  • uv run ruff check . — All checks passed

🤖 Generated with Claude Code

https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh

Полный проход Яндекса по Москве умер 12.09 на восьмом часу: `Page.goto: net::ERR_NETWORK_CHANGED`. Площадка была ни при чём. Сразу после падения и `realty.yandex.ru`, и `git.gendsgn.ru` отвечали 200, а в ту же минуту по DNS отвалился MCP-сервер ошибок — моргнула сеть на самой машине. Ретрай в `_goto` ловил только `PlaywrightTimeoutError`, поэтому обычная сетевая ошибка уходила наверх и роняла прогон целиком. Собранное не пропало (17 338 карточек уже лежали в проде, план коридоров сохранён, `--resume` подхватил), но восемь часов работы висели на волоске. ## Что сделано Сетевые отказы Chromium вынесены в `_TRANSIENT_NET_ERRORS` и считаются **своим** счётчиком: пять попыток с нарастающим ожиданием 15/30/45/60/120 с. Бюджет попыток по таймауту при этом не тратится — обрыв сети длится минуты, а таймаут навигации это совсем другой симптом с другим лечением. Исчерпали — стоп с причиной `nav_network`, прогон продолжается тем же batch-id с `--resume`. Всё, что не в списке, по-прежнему поднимается. Это принципиально: тихий отказ площадки выглядит ровно так же, и молча проглоченный он превращается в пустой прогон, который читается как успешный. ## Первые тесты у сборщика Тестов у него не было вообще, при том что он уже дважды ронял многочасовой прогон на ошибке, которая отказом площадки не была. Файл подгружает скрипт по пути (нет на месте — skip, не красный) и караулит границу «наше или ихнее»: распознавание сетевых ошибок, переживание короткого обрыва, остановка при длинном с правильной причиной, проброс незнакомой ошибки, неизменность прежнего пути по таймауту. ## Проверено - `uv run python -m pytest` (полный сьют бэкенда) — 5902 passed, 37 skipped - `uv run ruff check .` — All checks passed 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
bot-backend added 1 commit 2026-09-11 23:36:11 +00:00
fix(msk-collector): сетевой обрыв на машине больше не убивает многочасовой проход
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m6s
1bcc922e80
Полный проход Яндекса по Москве умер 12.09 на восьмом часу:
`Page.goto: net::ERR_NETWORK_CHANGED`. Площадка была ни при чём — сразу после
и realty.yandex.ru, и git.gendsgn.ru отвечали 200, а в ту же минуту по DNS
отвалился и MCP-сервер ошибок. Моргнула сеть на самой машине. Ретрай в `_goto`
ловил только `PlaywrightTimeoutError`, поэтому обычная сетевая ошибка уходила
наверх и роняла прогон целиком.

Сетевые отказы Chromium вынесены в `_TRANSIENT_NET_ERRORS` и считаются СВОИМ
счётчиком: пять попыток с нарастающим ожиданием 15/30/45/60/120 с. Бюджет
попыток по таймауту при этом не тратится — обрыв сети длится минуты, а таймаут
навигации это совсем другой симптом. Исчерпали — стоп с причиной `nav_network`,
прогон продолжается тем же batch-id с --resume. Всё, что не в списке,
по-прежнему поднимается: тихий отказ площадки выглядит ровно так же, и молча
проглоченный он превращается в пустой прогон.

Тестов у сборщика не было вообще, при том что он уже дважды ронял многочасовой
прогон на ошибке, которая отказом площадки не была. Заведён первый файл: он
подгружает скрипт по пути (нет на месте — skip, не красный) и караулит границу
«наше или ихнее» — распознавание сетевых ошибок, переживание короткого обрыва,
остановка при длинном с правильной причиной, проброс незнакомой ошибки и
неизменность прежнего пути по таймауту.

Полный сьют бэкенда — 5902 passed, 37 skipped; ruff чист.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
bot-backend merged commit b14f21aa78 into main 2026-09-11 23:42:09 +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#3455
No description provided.