[2026-09-20 09:01:02] taiga-vault: family/documents/vault-sync/2026-09-20-morning-sync-outage.md

This commit is contained in:
Taiga committed 2026-09-20 09:01:03 +00:00
1 parent 4101de5ebc
commit 9a29d0ae0c
1 file changed
+60
@@ -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 <path>`. Требует решения Алексея; ловушка — `--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`.