Сохраните expires_at брони и проверяйте его при любой попытке подтверждения. Фоновая задача освобождает просроченные записи, но не является единственным источником истины.
Как снимать бронь по истечении таймаута (5 минут)?
Сохраните expires_at брони и проверяйте его при любой попытке подтверждения. Фоновая задача освобождает просроченные записи, но не является единственным источником истины.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Сохраните expires_at брони и проверяйте его при любой попытке подтверждения. Фоновая задача освобождает просроченные записи, но не является единственным источником истины.
Оплата и истечение должны конкурировать через атомарный условный переход состояния, чтобы место не освободилось после подтверждения. Повторная задача безопасна и ничего не делает с terminal state. Индекс по статусу и expires_at позволяет выбирать просроченные брони порциями.