diff --git a/family/documents/vault-sync/2026-09-20-morning-sync-outage.md b/family/documents/vault-sync/2026-09-20-morning-sync-outage.md new file mode 100644 index 00000000..2ca4aec3 --- /dev/null +++ b/family/documents/vault-sync/2026-09-20-morning-sync-outage.md @@ -0,0 +1,60 @@ +--- +type: incident +date: 2026-09-20 +tags: [vault, sync, cron, outage, llm-provider] +--- + +# 2026-09-20 — утренний сбой синка vault: 3 ч 10 мин тишины + +**Итог: данные не потеряны.** Все три репозитория на одном коммите, рабочие деревья чистые. +Сбой — в LLM-петле cron-задачи `sync-vault` (id `29851c413903`), а не в git/Syncthing. + +## Симптом + +`/tmp/vault-sync.log` — дыра **190,3 мин**: `04:10:39 → 07:20:55` UTC. +Это самый длинный разрыв с момента начала наблюдений (09-14: 180 мин; 09-18 вечер: серия 7–19 мин). + +Вторая, короткая дыра: `08:40:07 → 09:00:12` (20,1 мин). + +## Диагностика (`executions.db`, job 29851c413903) + +12 подряд идущих тиков провалились с одной ошибкой: + +| claimed_at | finished_at | статус | ошибка | +|---|---|---|---| +| 04:15:37 | 04:29:27 | failed | `RuntimeError: Request timed out.` | +| 04:30:39 | 04:44:28 | failed | `RuntimeError: Request timed out.` | +| … (то же, каждый ~15 мин) | | | | +| 07:00:52 | 07:14:41 | failed | `RuntimeError: Request timed out.` | +| 08:45:04 | 08:55:16 | failed | `RuntimeError: HTTP 503: Service is too busy. We advise users to temporarily switch to alternative LLM API service providers.` | + +- Раунд каждого тика ≈ 834 с (~13 мин 54 с) при пороге 600 с + автоповторы. +- Между `claimed_at` соседних тиков ровно 15 мин → **слоты 04:20/04:25/…/07:10 и 08:50/08:55 не запускались**: claim держался предыдущим висящим раундом. Дыра в логе — следствие, а не пропуск диспетчера. +- `sync-vault` — prompt-задача: каждый тик требует LLM-раунда. Деградация провайдера блокирует каденцию целиком. + +## Восстановление (само, без вмешательства) + +- Тик `07:15:53` завершился `completed` (311 с) → строка лога `07:20:55`, фаза syncthing сделала `Fast-forward 1531aa9..4101de5`, влит накопленный бэклог Eagle: **5 файлов, +575/−11** (`family/how-to/kraken-access.md`, `family/how-to/truenas-rclone-backup.md`, `family/plans/kraken-backup-to-truenas.md`, `personal/tech/docker-data-root-mount-race.md`, `personal/tech/xray-reverse-tunnel-kraken-truenas.md`). Ничего не потеряно — git идемпотентен, первый удачный тик догоняет всё. +- Слот `07:20` не запускался (claim), далее каденция выровнялась: `07:25:58`, `07:33:16`, `07:40:56`, … +- После 503-тика каденция вернулась сама: `09:00:12` — все три фазы `Pushed ✓`. + +## Проверка целостности (09:00:20 UTC) + +``` +bare (4101de5e) == /vault (4101de5e) == /obsidian-syncthing (4101de5e) +git status --porcelain в обоих клонах — пусто +[2026-09-20 09:00:12] [syncthing] / [taiga-vault] / [syncthing-out] Pushed ✓ +``` + +## Метрики за 24 ч (09-19 09:00 → 09-20 09:00 UTC) + +- Тиков в БД: **249** (норма ~288), из них **13 провалов** (12 × timeout + 1 × HTTP 503) = 5,2 % — заметно выше базовой плотности молчащих тиков ~1–2 %. +- Разрывов `claimed_at > 6 мин`: 25 (из них 13 приходится на утренний блок 04:15–07:15). + +## Выводы + +1. Единичный (пусть и трёхчасовой) эпизод деградации провайдера — **не повод править конфиг**; каденция восстанавливается сама, данные не теряются (тот же вывод, что 09-14). +2. Повторяющиеся эпизоды (сегодняшний на фоне 09-18 и 09-19) — уже аргумент к устранению LLM из петли: `hermes cron edit 29851c413903 --no-agent --script `. Требует решения Алексея; ловушка — `--script` ждёт файл под `~/.hermes/scripts/`, а `/root` в контейнере не переживает рекреацию, нужен персистентный путь/симлинк на `/opt/data/`. +3. Альтернатива помягче — пин модели/провайдера (`--model` / `--provider`) или fallback на второго провайдера, чтобы таймаут одного не съедал слоты. + +См. также: `2026-09-14-cron-api-timeout-sync-outage.md`, `2026-09-18-evening-cadence-degradation.md`.