fix(tradein/proxy): узел, зарезервированный за Домкликом, до Домклика не доходит (#2800 A) #2802

Merged
bot-backend merged 1 commit from fix/2800a-proxy1-affinity into main 2026-08-09 18:15:56 +00:00

1 commit

Author SHA1 Message Date
ce5df52259 fix(tradein/proxy): узел, зарезервированный за Домкликом, до Домклика не доходит (#2800 A)
All checks were successful
CI / changes (pull_request) Successful in 9s
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 3m54s
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
Живая проба 09.08.2026 тем же трактом, что и работа (сайдкар tradein-browser →
camoufox с этим прокси → навигация на robots.txt рабочего хоста площадки):

  узел | affinity | avito | ekb.cian.ru         | realty.yandex.ru | bff-search-web.domclick.ru
  -----+----------+-------+---------------------+------------------+---------------------------
    1  | domclick | 200   | 200 «Ошибка — Циан» | 200              | 500 NS_ERROR_PROXY_BAD_GATEWAY
    9  | any      | 200   | 200                 | 200              | 200
   10  | any      | 200   | 200                 | 200              | 200
   11  | any      | 200   | 200                 | 200              | 200

Узел 1 закреплён за Домкликом миграцией 173, но до рабочего хоста Домклика
(bff-search-web.domclick.ru — туда ходит providers/domclick/serp.py) не доходит
вообще, а Авито и Яндекс через него отвечают штатно. Резервация работала ровно
наоборот задуманному: держала узел за единственным источником, которому он НЕ
годен, и прятала от двух, которым годен (acquire отбирает по provider_affinity
IN (source,'any'), а fallback этот узел не берёт — защита последнего узла
выделенной affinity).

Миграция 253: provider_affinity 'domclick' → 'any'. Не enabled=false — узел жив
для двух площадок из четырёх, выключать его целиком значит терять четверть и без
того дефицитного пула (#2638). CHECK-констрейнт не трогаем: значение остаётся
допустимым для узла, который до Домклика реально дойдёт.

Границы: это НЕ починка Домклика. acquire('domclick') и раньше видел все четыре
узла, шанс вытянуть узел 1 и потратить первый бакет впустую был и остаётся 1/4 —
закрывает это проба по паре «узел × источник» (часть B того же issue). Здесь
снимается только резервация. Побочно: до части B Циан получает 1 шанс из 4
вытянуть узел, для Циана мёртвый; ближайший прогон Циана — 10.08 11:24Z, часть B
идёт сегодня же.

Refs #2800
2026-08-09 22:56:32 +05:00