Describe media preparation records and deferred channel cleanup

This commit is contained in:
evgeny committed 2026-10-22 15:15:52 +02:00
1 parent 34959a9657
commit 0835c3d3cc
2 files changed
+22 -2

No files matched your search

+21 -1
View File
@@ -113,7 +113,8 @@ KEEP_ALIVE полностью отменяет FIN_WAIT. Ожидание CLOSE
Worker резервирует completion до запуска и передаёт его через `uasync_post_reserved`;
периодического polling нет. Destroy выполняется вне callbacks uasync, после join
отменяет pending post и завершает done ровно один раз. Uasync живёт до конца этой очистки.
Результаты отменённых задач не записываются в БД. Это синхронное ожидание: длительное
Подготовленные блоки отменённых задач не регистрируются; учёт назначений подготовки
сохраняется для последующей очистки. Это синхронное ожидание: длительное
транскодирование или распознавание речи может задержать stop; принудительного
прерывания этих библиотек нет.
@@ -125,6 +126,25 @@ completion. Отказ запуска/неверные аргументы даю
закрытия temp; вызывающий отвечает за очистку своего результата при отмене.
Подробные файловые контракты, 64-битные размеры и ошибки RNG описаны в `media_async.h`.
Перед файловой подготовкой назначение записывается в `media_preparations`. Успешный
`media_index_commit()` регистрирует весь файл и снимает эту запись в одном savepoint;
после ошибки/отмены путь остаётся известен, даже если worker уже опубликовал копию.
Это гарантия записи БД; файловые изменения и внешний SQL COMMIT ей не охватываются.
При обычной ошибке откатывается только регистрация; SQLite может сама отменить всю
транзакцию при тяжёлой ошибке. Общая база берётся из `ui_state.media_base` и повторно
используется после stop/start. Загрузчик не меняет существующую базу.
Локальное удаление канала ждёт его исходящие video/register задачи. Последний
completion продолжает удаление; новые исходящие медиа канала в это время отклоняются,
подготовленные результаты ожидающих отправок не публикуются как новые сообщения.
После завершения задач отменяются загрузки/раздача и удаляются учтённые файлы, включая
назначения неуспешных подготовок. Общие файлы других каналов сохраняются. Очистка файлов
выполняется вне внешней транзакции: SQL-откат не восстанавливает удалённый файл.
При ошибке очистки записи оставшихся файлов сохраняются для повторного вызова;
удаление метаданных канала и неполная файловая очистка диагностируются отдельно.
Низкоуровневый `media_index_delete_channel()` сам workers не останавливает.
Точные ограничения путей и контракт повторной регистрации находятся в `media_index.h`.
Подготовка файлов в `src/video/video.h` выполняет remux подходящих H.264/AAC либо
перекодирование в MP4 H.264/YUV420P и AAC. Worker пишет уникальный соседний временный
файл, завершает декодеры/ресемплер/FIFO/кодеры, проверяет trailer, закрытие и метаданные.
+1 -1
View File
@@ -90,7 +90,7 @@ struct media_download {
/* Запустить непустой файл с корректной геометрией и массивами block_ids/block_sigs.
* dest_path <1024, media_base <512 байт (UTF-8); назначение принадлежит общей базе БД, смена базы отклоняется.
* Проверки идут до создания каталогов. 0 — принят: done_cb ровно один раз, в том числе синхронно при отсутствии держателей;
* Проверки идут до создания каталогов. 0 — принят: done_cb ровно один раз, в том числе синхронно при отсутствии суперузлов;
* -1 — отказ без done_cb, включая уже активный media_id. Аргументы callbacks заимствованы до done_cb.
* Успех включает атомарную регистрацию блоков собранного файла. Ошибка регистрации не удаляет собранный файл;
* путь остаётся в media_preparations для удаления канала. Остальные поля result копируются до возврата. */