[2026-10-02 17:40:43] taiga-vault: family/documents/vault-sync/2026-10-01-llm-timeout-outage-4.md

This commit is contained in:
Taiga committed 2026-10-02 17:40:43 +00:00
1 parent 57b7af5529
commit b3c66254ca
1 file changed
+66
@@ -0,0 +1,66 @@
---
type: incident
date: '2026-10-01'
tags:
- vault
- sync
- cron
- outage
- llm-provider
---
# 2026-10-01 — вечерний сбой синка vault: 2 ч 08 мин тишины (таймауты LLM)
**Итог: данные не потеряны.** Все три репозитория на одном коммите, рабочие деревья чистые.
Сбой — в LLM-петле prompt-задачи `sync-vault` (id `29851c413903`), не в git/Syncthing.
## Симптом
`/tmp/vault-sync.log` — дыра **128,6 мин**: `19:26:07 → 21:34:42` UTC.
Последняя штатная строка перед дырой — `19:26:07` (все три фазы `Pushed ✓`).
## Диагностика (`executions.db`, job 29851c413903)
| claimed_at | finished_at | раунд | статус | ошибка |
|---|---|---|---|---|
| 19:25:57 | 19:26:12 | 14,1 с | completed | — |
| 19:30:57 | 20:01:08 | 1810,5 с | failed | `RuntimeError: Non-streaming API call timed out after 600s with no response (threshold: 600s)` |
| 20:05:01 | 20:35:17 | 1816,1 с | failed | то же |
| 20:40:10 | 21:10:27 | 1816,1 с | failed | то же |
| 21:15:14 | 21:34:50 | 1175,8 с | completed | — |
| 21:35:17 | 21:35:30 | 13,3 с | completed | — |
- Между `claimed_at` соседних упавших тиков ровно ~34 мин (1810 с + 15 с) → **слоты 19:35…20:35 не запускались**: claim держался висящим раундом с автоповторами (порог 600 с × 3 попытки). Дыра в логе — следствие, а не пропуск диспетчера.
- Тик `21:15:14` досидел до `completed` за 1175,8 с и **влил накопленный бэклог** (фаза syncthing): строка лога `21:34:42`; с `21:35:17` каденция и короткие раунды (6–15 с) в норме.
## Класс отказа и место в серии
Это **третий** эпизод класса «зависший LLM-вызов блокирует 5-минутные тики» (600-секундные таймауты, не 402):
| дата | дыра в логе | длительность |
|---|---|---|
| 2026-09-14 | 18:30 → 21:30 | 180,0 мин |
| 2026-09-20 | 04:10:39 → 07:20:55 | 190,3 мин |
| **2026-10-01** | **19:26:07 → 21:34:42** | **128,6 мин** |
Отдельный класс — `HTTP 402: Insufficient Balance` (баланс провайдера): `09-21` 35,3 мин, `09-25` 264,6 мин, `09-28` 74,3 мин. **Новых 402 после 09-28 нет** — в окне `executions.db` за 24 ч до 10-02 17:36 UTC только 3 `failed`, все три — этот таймаутный эпизод (плюс 263 `completed`, 1 `running`).
## Проверка целостности (2026-10-02 17:36 UTC)
```
bare (57b7af55) == /vault (57b7af55) == /obsidian-syncthing (57b7af55)
git status --porcelain и ls-files -u — пусто в обоих клонах
origin обоих клонов = file:///vault.git, insteadOf = 2
Push failed = 2 (исторические гонки 09-27 10:46 / 09-29 06:35)
Fetch failed = 4 (исторические 09-26 09:40), remote: fatal = 0, No such file = 0
лог 37289 строк
```
Оконная сверка (окно = весь `executions.db` + лог с 09-15 11:35, 1001 тик): **16 молчащих тиков (1,6 %)** — базовая плотность, последние `10-02 17:05` 9,3 с, `15:00` 10,6 с, `12:35` 7,1 с; кластеров нет. Разрывы лога >30 мин — только разобранные эпизоды провайдера (09-20 190,3 / 09-21 35,3 / 09-25 264,6 / 09-28 74,3 / **10-01 128,6** мин).
## Выводы
1. Данные не теряются: git-синк идемпотентен, первый удачный тик (`21:15`) догнал бэклог целиком. Вмешательства не потребовалось — каденция восстановилась сама.
2. Частота эпизодов деградации провайдера (09-14, 09-20, 10-01 — примерно раз в 1,5–2 недели, плюс серия 402-эпизодов 09-21/09-25/09-28) держит открытым прежний вопрос к владельцу: убрать LLM из петли — `hermes cron edit 29851c413903 --no-agent --script <persistent-path>`, либо задать `--model`/`--provider` с fallback.
3. По 402-классу с 09-28 улучшение: за 4 суток ни одного `HTTP 402`.
См. также: `2026-09-14-cron-api-timeout-sync-outage.md`, `2026-09-20-morning-sync-outage.md`, `2026-09-25-http402-balance-outage.md`, `2026-09-28-http402-balance-outage-3.md`.