fix(ops): перезапускать worker-indexer, когда менялись парсеры
Some checks failed
Deploy / deploy (push) Has been cancelled
Deploy / test (push) Has been cancelled

Парсеры не вшиты в образ, а смонтированы в worker-indexer, поэтому деплой
их не пересобирал — и не перезапускал контейнер, раз `services/` не менялся.
Но воркер держит модуль парсера в памяти с прошлого прогона: новый файл
лежит в контейнере, а работает старый код.

Поймано вживую на CORE: заливка после деплоя ушла ноль документов за 208
секунд, и только тело запросов в логах показало, что она всё ещё ходит по
старой схеме — с огромным OR-запросом, который на глубоком смещении трижды
упал по таймауту. Со стороны выглядело как «источник исчерпан», и сторож
чуть не выключил источник насовсем.

Теперь при изменениях в `scripts/parsers/` деплой перезапускает
worker-indexer — если образ и так не пересобирается на этом прогоне.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
jze9
2026-09-16 18:32:11 +05:00
parent 7adccd0362
commit 263a521d63

View File

@@ -43,6 +43,7 @@ fi
REBUILD="" REBUILD=""
FRONTEND_CHANGED=0 FRONTEND_CHANGED=0
PARSERS_CHANGED=0
if [ "$FULL" = 1 ]; then if [ "$FULL" = 1 ]; then
REBUILD="$ALL_BACKEND" REBUILD="$ALL_BACKEND"
FRONTEND_CHANGED=1 FRONTEND_CHANGED=1
@@ -51,6 +52,12 @@ else
echo "$CHANGED" | grep -qE "^services/$svc/" && REBUILD="$REBUILD $svc" echo "$CHANGED" | grep -qE "^services/$svc/" && REBUILD="$REBUILD $svc"
done done
echo "$CHANGED" | grep -qE '^services/frontend/' && FRONTEND_CHANGED=1 echo "$CHANGED" | grep -qE '^services/frontend/' && FRONTEND_CHANGED=1
# Парсеры не вшиты в образ, а смонтированы в worker-indexer (см. compose),
# поэтому пересобирать нечего. Но процесс воркера держит модуль парсера в
# памяти с прошлого прогона: без перезапуска правка молча не применяется —
# заливка продолжает ходить по старому коду, и это не видно ниоткуда, кроме
# тела запросов в логах. Ловилось на CORE 16.09.2026.
echo "$CHANGED" | grep -qE '^scripts/parsers/' && PARSERS_CHANGED=1
fi fi
REBUILD="$(echo "$REBUILD" | xargs || true)" REBUILD="$(echo "$REBUILD" | xargs || true)"
@@ -111,6 +118,13 @@ echo "==> [4/6] Применение секретов к неизменивши
# shellcheck disable=SC2086 # shellcheck disable=SC2086
$COMPOSE up -d $ALL_BACKEND $COMPOSE up -d $ALL_BACKEND
# Правка парсера доезжает монтированием, но модуль уже загружен в память
# воркера — перезапускаем, если образ и так не пересобирался выше.
if [ "$PARSERS_CHANGED" = 1 ] && ! echo " $REBUILD " | grep -q " worker-indexer "; then
echo "==> [4.5/6] Парсеры менялись — перезапуск worker-indexer"
$COMPOSE restart worker-indexer
fi
echo "==> [5/6] Миграции БД (с ретраем)" echo "==> [5/6] Миграции БД (с ретраем)"
for i in $(seq 1 10); do for i in $(seq 1 10); do
$COMPOSE exec -T api alembic upgrade head && break $COMPOSE exec -T api alembic upgrade head && break