gendesign/_wt-cadval/data/sql/55_schema_scrape_resume.sql
bot-backend 542ff1c9ca docs(tradein/domclick): два комментария описывали пул, которого нет с миграции 253
Оба места утверждали, что у Домклика один выделенный резидентный прокси и
пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла
резервацию узла), но текст остался — и именно на него опирался тикет #3189,
поставленный под «калибровку» ограничения, которого не существует.
Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к
нему в PR #3222.

Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик
провалов lease, а break по первому DomClickBlockedError (#2854) — до
ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0.

Только комментарии, поведение не меняется. Миграция 175 уже применена, а
_schema_migrations трекает по имени файла без checksum — правка текста
её не перезапустит.
2026-08-29 18:57:25 +03:00

23 lines
1.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- Resume support for kn-API sweeps.
-- When a worker dies (redeploy/SIGKILL/OOM), the run row stays 'running'.
-- Worker startup hook finds rows with stale heartbeat (>5 min) and re-enqueues
-- a resume task that picks up from progress_obj_index using objects_snapshot.
-- Idempotent.
ALTER TABLE kn_scrape_runs
ADD COLUMN IF NOT EXISTS heartbeat_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS progress_obj_index INT,
ADD COLUMN IF NOT EXISTS total_obj_count INT,
ADD COLUMN IF NOT EXISTS objects_snapshot JSONB,
ADD COLUMN IF NOT EXISTS params JSONB,
ADD COLUMN IF NOT EXISTS resumed_from_run_id BIGINT REFERENCES kn_scrape_runs(run_id);
-- Reaper (admin_scrape.py) фильтрует по выражению COALESCE(heartbeat_at, started_at)
-- среди status='running'. B-tree по голому heartbeat_at не обслуживает range по
-- этому выражению → индекс был мёртв. Индексируем то же выражение и тот же
-- статус-предикат, что и в запросе. DROP IF EXISTS — определение индекса
-- меняется, а CREATE INDEX IF NOT EXISTS сверяет только имя (см. sql.md).
DROP INDEX IF EXISTS idx_kn_scrape_runs_running_heartbeat;
CREATE INDEX IF NOT EXISTS idx_kn_scrape_runs_running_heartbeat
ON kn_scrape_runs (COALESCE(heartbeat_at, started_at))
WHERE status = 'running';