fix(workers): убрать max_retries, который ничего не делает (#2464) #2977
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2977
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2464-inert-retry-config"
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?
Что не работало
11 celery-тасок объявляли
max_retries=2, но ретраи не реализовывали — ниautoretry_forв декораторе, ни вызоваself.retry()в теле. Celery в таком виде параметр просто не применяет: при исключении таска падает с первой попытки. Читающий код видит «до 3 попыток», а их одна. Это тот же класс, чтоconcurrencyв Forgejo иON CONFLICTбез индекса: объявлено ≠ исполняется.Правка
Убран
max_retriesу:cbr_macro_sync,rosstat_macro_sync,developer_registry_refresh,location_refresh,mv_sales_tracker_refresh,refresh_analytics,refresh_layout_velocity,refresh_quarter_price_index,scrape_objective.sync_objective_group,supply_layers_refresh,scrape_kn.scrape_kn_region.Заодно убран
bind=Trueтам, гдеselfне использовался вовсе. Вscrape_kn_regionон оставлен —self.request.idпишется вkn_scrape_log; там инертен был толькоmax_retries.Не тронуты и не должны быть:
scrape_kn.resume_kn_runmax_retries=12+ настоящийself.retry()nspd_sync,scrape_cadastreautoretry_forв декоратореnspd_geo,objective_etl.import_anton_objectivemax_retries=0— честное «ретраев нет»Гейт вместо точечной правки
backend/tests/workers/test_2464_retry_config_is_real.pyразбирает AST всех модулейapp/workers/tasks/: если декоратор объявляет ненулевойmax_retries, требуется либоautoretry_forв декораторе, либоself.retry(в теле этой функции.max_retries=0освобождён — это осмысленное объявление, а не забытый параметр.Три таски из одиннадцати гейт нашёл сверх списка эпика (
refresh_layout_velocity,refresh_quarter_price_index,supply_layers_refresh) — это и есть довод в пользу гейта.Как проверено
max_retries=2вsupply_layers_refresh— красно, с указанием именно на эту таску.test_gate_sees_the_tasks_at_allтребует ≥20 найденных тасок — гейт не может «пройти», ничего не разобрав.test_gate_recognises_both_valid_forms— обе законные формы (autoretry_for и self.retry) признаются.pytest backend/tests/workers/— 229 passed.ruff check backend/app/workers/tasks/— чисто. Первый прогон поймалF821 selfвscrape_knи заставил вернуть тудаbind=True: мой ранний grep приписал всеself.в файле соседней таске, ruff показал, что это не так.Что это меняет на проде
Ничего в поведении: ретраев не было и не будет. Меняется только правдивость кода — параметр, обещавший то, чего нет, убран, и повторно появиться не сможет.
Часть эпика #2464.