fix(scraper-kit): чекпоинт avito_city_sweep доживает до финализатора — 0/67 прогонов писали done_buckets #3330
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3330
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3319-citysweep-checkpoint"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #3319. Аудит 01-02.09, линза kit-core.
П.1 (high) — чекпоинт не писался вообще
Прод-факт: 0 из 67 прогонов за 60 дней записали
done_buckets; done-ветка #1950 завершала прогон ДО единственной точки записи. Фикс: локальная_ckpt(**extra)(counters + done_buckets), через неё пропущены все 14 записей счётчиков функции — heartbeat'ы, обаmark_done(включая ранний выход #1950),mark_banned,mark_failed. Правилась не «та ветка из тикета», а точка, через которую ходят все выходы.П.2 (medium) — таймаут-якорь числился пройденным
except TimeoutErrorне сбрасывал_anchor_ok(generic except сбрасывал) → якорь-таймаут ложился вdone_bucketsи при резюме пропускался навсегда. Добавлен сброс — семантика выровнена.П.3 (low) — SIGTERM-drain неотличим от полного done
Статусную модель не трогали (~30 читателей
status='done'). Взята уже существующая в репо метка дрейнаcounters['interrupted']=1(как у rosreestr_dkp). Резюм подхватываетdoneТОЛЬКО с этой меткой ('done'в_RESUME_STATUSESне добавлен). Дрейн перед IMV-фазой помечен отдельноimv_phase_drained=1без резюма — якоря там уже пройдены, подхват собрал бы ноль и спалил цикл расписания.Тесты
Новый
test_3319_citysweep_checkpoint.py:5 passed. Соседи:383 passed, 1 skipped(sweep/scheduler/checkpoint/resume/parity). Фальсификация двойная:counters без чекпоинта — assert None == ['ekb-center', 'ekb-south'],resume_reason: 'status_done'вместо подхвата);_anchor_ok = False(в прогоне A п.2 краснел бы по чужой причине):якорь-таймаут попал в чекпоинт — assert 'ekb-center' not in [...], остальные 4 зелёные.Прод-приёмка после деплоя (сделаю отдельно)
SELECT counters ? 'done_buckets', counters->>'interrupted' FROM scrape_runs WHERE source LIKE 'avito_city_sweep%' ORDER BY id DESC LIMIT 5— до правки ключа не было ни в одном из 67 прогонов, первый новый прогон различает эры.Осталось за рамками (честно)