Commit graph

2 commits

Author SHA1 Message Date
9f950a5f17 fix(scheduler): atomic _claim_run via advisory xact lock (Refs #750)
Конкурентные scheduler-тики одного source (redeploy-overlap старого+нового
контейнера / 2 реплики) оба проходили has_running_run pre-check и запускали
ДВОЙНОЙ city-sweep → 2x rate к Avito/Cian → бан скрапера.

Path A: transaction-scoped pg_try_advisory_xact_lock(hashtext(source)) после
pre-check сериализует claim; non-blocking (lock занят → return None). Под локом
double-checked has_running_run (running мог появиться в окне pre-check→lock).
Лок авто-снимается на commit/rollback.

Path B (partial unique index WHERE status='running') отклонён: миграция могла
упасть на deploy если dirty-данные уже содержат >=2 running-строк на source
(ровно то, что баг и создаёт) — рискованно перед demo.

Tests: double-call→один run; lock unavailable→skip; running-under-lock→rollback+skip.
2026-05-30 19:01:37 +03:00
0202720096 feat(tradein): in-app scheduler — UI-managed schedule (replaces SSH crontab) (#482)
Some checks failed
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 36s
Deploy Trade-In / deploy (push) Has been cancelled
2026-05-23 14:54:25 +00:00