[bug][queue] {search-queue} растёт вечно: продюсеры есть, процессора не существует — 1902 мёртвых джоба в Redis (первая находка метрик #355) #379
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Суть
Алерт
queue-growing(2026-07-05, первое реальное срабатывание метрик #355) указал на{search-queue}: wait=1902, active=0, failed=0 — и рост продолжается (вечером при приёмке было 1893). Проверка по Redis на island и по коду:PAGE_CREATED/UPDATED/DELETED/SOFT_DELETED/RESTOREDна каждое изменение любой страницы; space.listener.ts#L27 и workspace.listener.ts#L27 —SPACE_DELETED/WORKSPACE_DELETED.@Processor(history, notification, attachment, ai, email, general, file-task) —@Processor(QueueName.SEARCH_QUEUE)нет ни в одном файле и никогда не было (git log по всем веткам пуст).20240324T086800-pages-tsvector-trigger), attachments — своим путём;search.serviceпо комментариям не ищет, константSEARCH_INDEX_COMMENT*никто не использует.Это апстримный код Docmost, чей консьюмер, по-видимому, живёт в EE-редакции (внешние search-драйверы). В нашем форке — чистый мёртвый груз: запись в Redis на каждое изменение страницы, бесконечный рост
wait-листа, ложная «работа» для алертов.Помечено в отчёте приёмки как «search=1893, разгребается» — как выяснилось, не разгребается: разбирать некому, active=0 всегда. Алерт queue-growing сработал корректно (к вопросу о его «переоценке» из #362 — чувствительность не трогать, он только что окупился).
Решение
SEARCH_QUEUEи всеsearchQueue.add(...)из трёх листенеров (+ мёртвые константыSEARCH_INDEX_*, если не используются нигде больше). Если есть желание сохранить совместимость с апстримом для будущих мержей — обернуть в конфиг-флагSEARCH_QUEUE_ENABLED=falseпо умолчанию, но проще удалить: diff с апстримом в этих файлах и так уже есть.bullmq_queue_depth{queue="search"}после этого стабильно 0 (метрика-сервис инжектит очередь — metrics-bull.service.ts#L49; при полном удалении очереди из кода поправить и там, при флаге — оставить).Крайние случаи
PAGE_RESTORED/PAGE_SOFT_DELETEDсемантика: убедиться, что кроме search-очереди листенеры не делают на этих событиях ничего ещё (по коду — только enqueue; tsv-триггер отрабатывает на UPDATE строк сам).delлиста на 1902 элемента — мгновенный, блокировки не будет.Тесты / проверка
bullmq_queue_depth{queue="search"} == 0сутки подряд, алерт молчит; редактирование страниц не приводит к росту.Вне скоупа