Замер 17.09 одиночным прогоном, без соседей по сайдкару и пулу. run 7344
(Москва, прокси 13, старт 06:12:48) за два часа прошёл 2 бакета из 6: 'st' —
34.2 мин, '1' — 86+ мин и не закончился. Watchdog прогона 11100 с.
Это не одновременность и не блок площадки: прогон был единственным, узел не
банился, QRATOR-блока в логе нет. Причина структурная. ДомКлик режет offset на
2000, поэтому на больших выдачах скрейпер делит диапазон по цене бисекцией, и
каждый лист пагинируется отдельно. У Москвы около 23 690 лотов вторички против
6 300 у ЕКБ — листьев кратно больше. Формула watchdog'а считает число фетчей как
6 * pages и объём выдачи не учитывает: 11100 = 600 * (6 + 12) + 300. Она линейна
по pages, так что уменьшение pages_per_anchor урезает и сам watchdog.
Хуже, чем «не успевает». _domclick_phase — единственная фаза fetch_city + save:
лоты копятся в памяти и сохраняются одним save_listings после всех шести
бакетов, снятие по watchdog теряет всё собранное. А чекпоинт #3118 пишется ПОСЛЕ
этого, из живой ссылки на скрейпер — бакеты помечаются пройденными, хотя ни одна
их строка не сохранена, и следующий прогон пропускает их через skip_buckets. Два-
три прогона закрывают чекпоинт целиком: итоговый сбор по 77/50 равен нулю
навсегда.
Пока строки включены, вред не нулевой: каждые трое суток каждая забирает один из
двух узлов affinity='any' на три часа впустую. 17.09 из-за этого ЕКБ-свип run
7339 отбился 'banned' за 0 секунд, пока оба узла держали московские прогоны.
Условия возврата перечислены в шапке миграции: инкрементальное сохранение по
бакетам, watchdog от объёма выдачи, кооперативная отмена по бакетам и сброс
унаследованного чекпоинта прогонов 7333/7344.
ЕКБ-строка не трогается — её выдача помещается в watchdog (run 7219: 70 минут,
6372 seen / 237 new).
Claude-Session: https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs