127 lines
5.6 KiB
Markdown
127 lines
5.6 KiB
Markdown
# 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.
|