From ad62eee10c3bfbd2067672ea8da7bb99446797ae Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 22 Oct 2026 14:35:56 +0200 Subject: [PATCH] Record media index plan constraints and late completion race --- doc/tasks.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/tasks.md b/doc/tasks.md index 3be303d2..6049f883 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -39,6 +39,20 @@ register_async в этом случае вернёт result=NULL и освободит идентификаторы подготовленного результата. Обеспечить атомарность регистрации всех блоков с учётом внешней транзакции и описать гарантии .h. Лог /tmp/media-index-location-audit.log: second-block-failure commit=-1 rows_remaining=1. + Уточнение плана: гарантия относится к БД, не к уже выполненному копированию worker. + SAVEPOINT сохраняет внешнюю транзакцию при локальных ошибках; RAISE(ROLLBACK) уничтожает и транзакцию, и savepoint. + Повтор скачанного блока не должен затирать подписанную запись автора нулевой node_sign; + отличающиеся chat_id/location сейчас также молча игнорируются с возвратом 0 — конфликт надо диагностировать. + Дополнительные проверки: /tmp/media-index-plan-review.c, /tmp/media-index-plan-review.log. + +[ ] **Удаление канала: поздний completion повторно регистрирует медиа** — проверка плана 22.10.2026: + Стенд запускает register_async(copy=0), очищает media_files канала до обработки completion и затем обрабатывает uasync: + delete_channel=0, rows_before_completion=0, callback err=0, rows_after_completion=1. + mi_reg_done выполняет commit раньше on_media_registered, где проверяется наличие db_sync канала. + media_delivery_cancel_channel отменяет downloads/streams/relay, но не исходящие задачи регистрации. + Согласовать завершение подготовки с удалением канала до commit; учесть повторное создание того же channel_id + и отдельно определить судьбу файлов, которые worker успел опубликовать. Проверка только наличия канала недостаточна. + Реализация не менялась; стенд /tmp/media-index-plan-review.c, лог /tmp/media-index-plan-review.log. [ ] **media_index_delete_channel: возвращать реальные ошибки удаления** — воспроизведено 22.10.2026: После DROP TABLE media_files delete_channel возвращает 0 при SQLite-ошибке no such table.