From b04033d15a321922f2af63b4ae2533f6b008ff50 Mon Sep 17 00:00:00 2001 From: vitya Date: Thu, 4 Jun 2026 12:29:19 +0300 Subject: [PATCH] =?UTF-8?q?tasks(NEXT=5FSESSION):=20handoff=20=E2=80=94=20?= =?UTF-8?q?books-vds=20disk-full=20closed,=20Bookva->slovo=20scoping,=20ke?= =?UTF-8?q?y-revocation=20guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- .tasks/NEXT_SESSION.md | 66 +++++++++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/.tasks/NEXT_SESSION.md b/.tasks/NEXT_SESSION.md index 267fa0c..01fcb88 100644 --- a/.tasks/NEXT_SESSION.md +++ b/.tasks/NEXT_SESSION.md @@ -1,37 +1,55 @@ --- -_last_updated_: 2026-05-31T12:00:00+03:00 -session_id: 2026-05-31-vehicles-loader-verify-email-fix +_last_updated_: 2026-06-04T12:00:00+03:00 +session_id: 2026-06-04-books-vds-disk-full-remediation --- # Next session handoff -_Сессия: live-verify прогона `vehicles-loader 0.4.0` на проде СТО Стайер + находка/фикс email-бага. -Таска `vehicles-loader-progress-deploy` закрыта 🟢. Прод стабилен, ничего не висит._ +_Сессия: разбор disk-full алерта Rusonyx на books VDS (89.253.255.133). Причина найдена, +диск 96%→44%, спам-петля заглушена, guard поставлен. Ничего не висит. Вики обновлён + закоммичен (`b0559fdb`)._ ## Recent commits -- `c588326c` tasks(vehicles-loader-progress-deploy): close 🟢 — verify ok + email-recipient fix +- `b0559fdb` wiki(books-vds): disk-full incident 2026-06-04 + Bookva->slovo job scoping -## Что сделано (verify прогона Sun 31.05 06:21→07:53 MSK) +## Что сделано (books VDS, 04.06) -- ✅ Progress-logging 0.4.0 работает: журнал показал движение по всем фазам (▶/батчи/✓/delete-sweep), - НЕ тишина. `Finished … Deactivated successfully` (exit 0). `importRun id=4 ok`, `reportJson errors:[]`. -- ✅ **Email-баг починен:** `STOSTAYER_MAIL_TO=site@stostayer.ru` (отчёт слался сам себе) → - `vitya.kuznetsov@gmail.com` в `/etc/stostayer/vehicles-loader.env` на хосте (бэкап - `vehicles-loader.env.bak.20260531`). `FROM=site@stostayer.ru` без изменений (SMTP-аккаунт релея). - Доставка на gmail подтверждена тест-письмом (`ACCEPTED=[gmail]`, `250 queued as 8732C122F18`). - **Подхватится автоматом на след. прогоне 06:21 — отдельно проверять не нужно** (но если хочешь - 100% — глянь, что боевой отчёт за 01.06 реально упал в gmail). +- ✅ **Диск 96%→44%** (53/122 ГБ). Освобождено ~64 ГБ: обрезаны runaway json-логи + `books-task-runner` (32.8 ГБ) + `bookva-task-runner` (5.6 ГБ); снесены 11 orphan + BuildKit-билдеров + 9 `*_state` volumes (~26 ГБ). +- ✅ **Durable guard:** `/etc/logrotate.d/docker-containers` (copytruncate 200M, rotate 3) + + hourly `/etc/cron.d/docker-logrotate`. Без рестарта докера. crond active, тест-ран чистый. +- ✅ **Root cause:** `books-task-runner` (тенант slovo) error-loop'ил в Ozon по продавцу + **Bookva (client_id 50542)**, чей `api_key` в `books-db.sellers` **намеренно подменён на + слововский** (`9683…`) как ревокация доступа books→Bookva-Ozon. Спам шёл из legacy + seller-перебирающих agenda-джоб без скоупа. +- ✅ **Фикс:** проставлен `data.idSeller=2` (slovo) пяти legacy-джобам в `books-job-scheduler-mongo` + (`ozon fbs postings syncronization`, `generate old prices`, `ozon fbs products syncronization`, + `create ozon products in incorrect state report`, `put on sale products`). Залипшие overdue-прогоны + оборваны (unlock `lockedAt:null` + `docker restart books-task-runner`). + **Invalid-Api-Key 6448/мин → 0**, джобы отработали по slovo и перепланировались. +- ✅ **Deploy-durable** (user спрашивал): эти джобы legacy (без `data._fromConfig`), reconciler + (`RECONCILER_ENABLED=true`) трогает только `_fromConfig`-джобы; в `tasks.json` (в образе) у них + `schedule:null` → пропускает. Эмпирика: `stocks-sync idSeller:2` пережил деплой 31.05. +- ✅ Сверка полноты: 7 seller-перебирающих тасок — все заскоуплены; reconciler-gen джобы уже на + `salesChannels:[2]`. Группа В снята: Bookva-канал = `type=ym` (Яндекс), Ozon-канала Bookva нет. -## Follow-up'ы по vehicles-loader (НЕ блокеры, живут в `stostayer.new`, не в .admin) +## ⚠️ НЕ ДЕЛАТЬ (специфично для этого инцидента) + +- **НЕ «чинить» ключ Bookva (50542) в `books-db.sellers`** — он сломан НАМЕРЕННО (подменён на + слововский) как ревокация. Живой ключ Bookva — в `bookva-db`/конфиге, для тенанта bookva. + Если снова увидишь `Invalid Api-Key` по 50542 в books-стеке — это не баг ключа, а недо-скоупленная + джоба. Полный разбор: `.wiki/entities/books-vds.md` § Disk-full incident. + +## Follow-up'ы (НЕ блокеры) | Что | Деталь | |---|---| -| units-фаза медленная | 1h 31m на 100529 rows (vehicles 3884 за 3с для сравнения). Кандидат — батч-инсёрт / индексы. Весь прогон = практически только units. | -| generation `unmatched:51` | 51 поколение не сматчилось при импорте. Не ошибка, но проверить — не теряем ли данные. | -| `config/default.json` дефолт `to` | всё ещё `site@stostayer.ru` (прод перекрыт env, но дефолт вводит в заблуждение). Выровнять в репо `stostayer.new`. | +| Каноничный фикс скоупа | legacy seller-джобы стоит перенести в `tasks.json` со скоупом ИЛИ вывести из эксплуатации (возможно, дублируют reconciler-gen). Mongo-правка надёжна, но если релиз даст им `schedule` в tasks.json без скоупа — Bookva-доступ вернётся. → сказать разработчикам books. | +| wiki-drift | `bookva-*` stack + books-task-runner/scheduler не в stack-inventory `books-vds.md`; нужен re-inventory. | +| Native log rotation | daemon.json `max-size`/`max-file` + docker restart — не делал (нужен maintenance window); logrotate-guard покрывает. | -## Открытые треки (.admin, перенос — ещё живые) +## Открытые треки (.admin — ещё живые) | Трек | Готовность | Entry-point | |---|---|---| @@ -39,19 +57,13 @@ _Сессия: live-verify прогона `vehicles-loader 0.4.0` на прод | `books-bookva-user-whitelist-gathering` | ⚪ ready — gathering от учредителя | `.tasks/STATUS.md` | | `stateful-split-volume-copy` / `infra-inventory` | ⚪ ready | `.tasks/STATUS.md` | -## Спроси user'а - -- (vehicles-loader) Делать ли follow-up'ы (units-perf / generation-unmatched / default.json)? Все три — - в репо `stostayer.new`, не в .admin. Не срочные. - ## Не делать (preemptive guards) -- **Не форсить baseline-reset** vehicles-loader без явного запроса — шлёт клиенту внеплановое email. - **Не возвращать `:9200` / stateful-порты на `0.0.0.0`** без IP-allowlist (books VDS, ransom-бот). - **Не `ssh + docker compose up -d`** на VDS Portainer-stacks — только Portainer API (искл. traefik/portainer). - **branch ahead от origin** — push без явного grant'а (Rule 4). Этой сессии grant НЕ давали. ## Memory updates за сессию -- (нет нового на этом раунде) — email-фикс зафиксирован в task-файле + STATUS.md, схема деплоя и - инфра-гочи уже в `stostayer.new/.wiki/concepts/client-infra-access.md`. +- (нет нового файла) — инцидент + корректный root-cause + «не чинить ключ Bookva» зафиксированы + в `.wiki/entities/books-vds.md` (закоммичено `b0559fdb`).