Оба места утверждали, что у Домклика один выделенный резидентный прокси и пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла резервацию узла), но текст остался — и именно на него опирался тикет #3189, поставленный под «калибровку» ограничения, которого не существует. Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к нему в PR #3222. Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик провалов lease, а break по первому DomClickBlockedError (#2854) — до ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0. Только комментарии, поведение не меняется. Миграция 175 уже применена, а _schema_migrations трекает по имени файла без checksum — правка текста её не перезапустит.
23 lines
1.4 KiB
SQL
23 lines
1.4 KiB
SQL
-- 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';
|