From 263a521d6318a0801706fb11acd26c6742e486cf Mon Sep 17 00:00:00 2001 From: jze9 Date: Wed, 16 Sep 2026 18:32:11 +0500 Subject: [PATCH] =?UTF-8?q?fix(ops):=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D1=82=D1=8C=20worker-index?= =?UTF-8?q?er,=20=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=8C=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Парсеры не вшиты в образ, а смонтированы в worker-indexer, поэтому деплой их не пересобирал — и не перезапускал контейнер, раз `services/` не менялся. Но воркер держит модуль парсера в памяти с прошлого прогона: новый файл лежит в контейнере, а работает старый код. Поймано вживую на CORE: заливка после деплоя ушла ноль документов за 208 секунд, и только тело запросов в логах показало, что она всё ещё ходит по старой схеме — с огромным OR-запросом, который на глубоком смещении трижды упал по таймауту. Со стороны выглядело как «источник исчерпан», и сторож чуть не выключил источник насовсем. Теперь при изменениях в `scripts/parsers/` деплой перезапускает worker-indexer — если образ и так не пересобирается на этом прогоне. Co-Authored-By: Claude Opus 5 --- scripts/deploy.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 2a6b55b..7fbc1b5 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -43,6 +43,7 @@ fi REBUILD="" FRONTEND_CHANGED=0 +PARSERS_CHANGED=0 if [ "$FULL" = 1 ]; then REBUILD="$ALL_BACKEND" FRONTEND_CHANGED=1 @@ -51,6 +52,12 @@ else echo "$CHANGED" | grep -qE "^services/$svc/" && REBUILD="$REBUILD $svc" done 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 REBUILD="$(echo "$REBUILD" | xargs || true)" @@ -111,6 +118,13 @@ echo "==> [4/6] Применение секретов к неизменивши # shellcheck disable=SC2086 $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] Миграции БД (с ретраем)" for i in $(seq 1 10); do $COMPOSE exec -T api alembic upgrade head && break