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

127 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```csharp
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`:
```json
"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.