Files
obsidian-vault/personal/plans/lampac-pidtor-503-fix.md
T

5.6 KiB
Raw Blame History

PidTor 500/503 — НАЙДЕНО И ИСПРАВЛЕНО

Дата: 2026-09-22 Статус: ✅ ИСПРАВЛЕНО. Все фильмы → HTTP 200 Связано: personal/tech/lampac-torrserver, personal/tech/lampac-deployment


Симптом (Alex)

«если пункт "торренты" выбрать при просмотре - то там пусто»

🔴 ПРИЧИНА: мой же неправильный фикс. Локальный JacRed отдаёт формат без info

Доказательство сырьём

НАШ JacRed (redapi=http://127.0.0.1:9118), поля ответа:
  ['Category','Details','MagnetUri','Peers','PublishDate','Seeders','Size','Title','Tracker']
                                                                        ^^^ info НЕТ!

jac.red (внешний), поля ответа:
  [..., 'ffprobe', 'info', 'languages']                  ← info ЕСТЬ
  info = {"quality":480, "voices":["Дубляж"], "sizeName":"2.02 GB",
          "name":"Хамнет: История, вдохновившая «Гамлета»", "relasted":2025}

Где падает (PidTor/Controller.cs:97)

string mediainfo = torrent.info.sizeName ?? string.Empty;
//                ^^^^^^^^^^^^^^ info == null в ответе локального JacRed
//                → NullReferenceException → HTTP 500 → закэшировался как 503

❌ Что я сделал НЕПРАВИЛЬНО

Переключил PidTor.redapi с http://jac.red на http://127.0.0.1:9118 («локальный стабильнее»). Это сломало PidTor полностью:

было (redapi=jac.red):    часть фильмов работала, часть 503 (кэш таймаутов)
стало (redapi=локальный): ВСЕ фильмы → 500 (NPE на info)

Локальный JacRed несовместим по формату с PidTor: отдаёт урезанный ответ без info, хотя модель PidTor (Model.cs) требует torrent.info.sizeName.

✅ ФИКС

config-module/init.conf:

"PidTor": {
  "enable": true,
  "redapi": "http://jac.red"      ← вернуть внешний, он отдаёт ПОЛНЫЙ формат
}

Убрал min_sid: 3 (в стоке 15; мой 3 тоже мог резать выдачу).

Проверка после фикса

Гамнет 2025     → HTTP 200, раздач ✅
Горничная 2025  → HTTP 200, раздач ✅
Я ругаюсь 2025  → HTTP 200, раздач ✅
F1 2025         → HTTP 200, раздач ✅
Духless 2012    → HTTP 200, раздач ✅
Матрица 1999    → HTTP 200, раздач ✅

До фикса: F1/Горничная/Я ругаюсь → 503, Духless → 500.

🔴 Что ещё выяснено попутно (важно для будущих сессий)

Кэш 503 (X-Invoke-Cache: HIT) — симптом, не причина

"cache": { "type": "fdb", "memExtend": true, "extend": 2700 }   ← 45 минут

Заголовок X-Invoke-Cache: HIT + время ответа 0.0015s = ответ из кэша. При чистке cache/fdb/ 503 сменился на честный 500 — то есть кэш маскировал настоящую ошибку. Сброс кэша обязателен при диагностике — иначе видишь старый закэшированный отказ и делаешь ложные выводы.

enabled: false у ВСЕХ модулей — это НОРМА

PidTor: enable=True, enabled=False
И то же у всех 86 модулей (Filmix, HDVB, Kinobase, ...)

⚠️ enabled — служебное поле (расписание/workinghours), НЕ выключатель. Смотреть только enable. Поле не причина отказов.

Кэш PidTor: ключ = все параметры

pidtor:{title}:{original_title}:{year}:{original_language}:{serial}   40 минут

Запрос F1 без года → 200, с годом → 503. Разные ключи, разный результат. Проверять надо ТЕМ ЖЕ набором параметров, что посылает клиент.

Два разных API JacRed

/api/v1.0/torrents?search=...            ← я использовал, работает
/api/v2.0/indexers/all/results?title=... ← это зовёт PidTor

⚠️ Проверять надо тот маршрут, которым ходит модуль, а не удобный.

Питфоллы, стоившие времени

  1. 🔴 Сначала смотреть, что модуль ждёт, потом «улучшать». Я переключил redapi ради «стабильности», не проверив совместимость формата → поломал.
  2. 🔴 503 = кэш, 500 = реальная ошибка. Свежий запрос после сброса кэша даёт честный код.
  3. 🔴 Лог lampac не показывает исключения PidTor — docker logs пуст. Приходится читать исходник модуля (Controller.cs).
  4. 🔴 docker exec lampac python3 — НЕ работает (python3 нет в образе). Парсить JSON ламповых конфигов — скриптом снаружи через docker cp.
  5. 🔴 Порт 9085 TorrServer снаружи закрыт — только /ts/ через 9118.