Describe media preparation records and deferred channel cleanup
This commit is contained in:
1 parent
34959a9657
commit
0835c3d3cc
2 files changed
+22
-2
No files matched your search
@@ -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, закрытие и метаданные.
|
||||
|
||||
@@ -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 копируются до возврата. */
|
||||
|
||||
Reference in new issue
Block a user