ingest: закрыты мелочи приёма — вырожденное имя, контракт Result, корреляция add
- имя раздачи нормализуется на границе разбора: вырожденное `-` (metainfo.NoName) даёт пустое имя, пробельное схлопывается — сентинел больше не доходит ни до контекста распознавания, ни до source_ref, ни до подсказки вывода имени - контракт «на любом пути ошибки приёма результат нулевой» объявлен в ingest и удерживается структурно; три транспорта перестали обещать идентификатор, которого нет, и коррелируют отказ по request_id - scoped-логгер загрузки ставится до вызова внешнего сервиса в семи командах воркера — записи об отказе qBittorrent и метабаз получили download_id и infohash; граница разбора bencode записана в docs/research
This commit is contained in:
@@ -262,10 +262,12 @@ func (b *Bot) downloadFile(ctx context.Context, fileID string) ([]byte, error) {
|
||||
func (b *Bot) ingestAndReply(ctx context.Context, chatID int64, req ingest.Request) {
|
||||
res, err := b.ingestor.Ingest(ctx, req)
|
||||
if err != nil {
|
||||
// res.DownloadID непуст, если сбой после создания задачи (напр. qbit);
|
||||
// при раннем разборе источника id ещё нет — даём дружелюбный текст без
|
||||
// него (детали всё равно в логах на доменной границе).
|
||||
b.send(chatID, opErr("Не удалось принять загрузку", res.DownloadID), nil)
|
||||
// Приём на любом пути ошибки возвращает нулевой Result (контракт
|
||||
// ingest.Ingest) — идентификатора загрузки нет. Корреляционного ключа
|
||||
// у отказа приёма в Telegram нет вовсе (request_id — понятие
|
||||
// HTTP-границы): текст остаётся дружелюбным без ключа, детали — в
|
||||
// записи приёма на доменной границе (capability=ingest, infohash).
|
||||
b.send(chatID, opErr("Не удалось принять загрузку", ""), nil)
|
||||
return
|
||||
}
|
||||
if res.Deduplicated {
|
||||
|
||||
Reference in New Issue
Block a user