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

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

1 commit

Author SHA1 Message Date
bot-backend
1bcc922e80 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
Полный проход Яндекса по Москве умер 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
2026-09-12 02:35:42 +03:00