Files

4.3 KiB

Состояния вложения и договор между producer/worker

Сообщение broker соответствует jobs.schema.json. Можно применять native headers брокера для trace context, но семантика carrier сохраняется; для проверки покажите отображение полей. job_id идентифицирует одну логическую работу и не меняется при redelivery; attempt начинается с 1 и отражает управляемую попытку обработки (broker redelivery сам по себе не создаёт новый job_id). Ключ эффекта — (attachment_id, pipeline_version, variant).

Переход Условие Что устойчиво сохранено
нет → queued Принимаем upload; только после durable handoff отвечаем 202 Полный проверенный оригинал в staging, метаданные, намерение обработки
queued → processing Worker захватил/арендовал работу Попытка, lease/deadline или эквивалентная защита
processing → queued Временная ошибка и остались попытки Причина без секретов, время следующей попытки
processing → ready Все обязательные объекты записаны и результат атомарно опубликован Оригинал, thumbnail (на 4 ещё crop/optimized), метаданные/checksums
processing → failed Ошибка постоянная или попытки исчерпаны error_code и запись, доступная оператору
processing → queued Истёк lease после смерти worker Восстановленная работа, без дублирования эффектов
failed → queued Явный операторский replay, доступен на 4 Audit, новая попытка, прежний логический эффект защищён от дубля

Повторная доставка уже ready-задачи — no-op с ack после проверки завершённого эффекта. Конкурентные попытки не перезаписывают более новый pipeline_version. Основной курс использует pipeline_version=1; версионирование нескольких pipeline — трек 5. Заявляйте готовность только когда все обещанные уровнем варианты доступны. Нельзя откатывать ready в processing из-за старого дубля.

Окна отказа для защиты: после staging до записи задания; после COMMIT до publish; после publish до confirm; после записи S3 до COMMIT результата; после COMMIT результата до ack. На 3 покажите сохранность успешно принятой работы и повторную доставку; на 4 автоматическое восстановление разрыва DB/broker (outbox/эквивалент) и зависшего processing.

Staging не удаляется до безопасной публикации результатов. Неуспешные/непривязанные исходники имеют документированный retention и cleanup; он не удаляет текущую работу. Broker принимает только ID/служебные данные, не произвольный URL для скачивания и не путь из клиентского filename. Worker берёт доверенные storage metadata из БД.

Ack подтверждает устойчивую обработку, publisher confirm — приём брокером; это разные границы. См. RabbitMQ reliability. At-least-once + идемпотентный эффект не означает exactly-once доставку.