У меня есть конечная точка /cancel_reservation
, которая принимает резервирование и требует аутентификации. Внутри этого метода бронирование отменяется и выдается возврат. Теперь, если один и тот же пользователь вызывает этот метод дважды одновременно, могут возникнуть условия гонки, и пользователю может быть возмещено дважды.
Пока я решил эту проблему, имея static Set
, который содержит заблокированные идентификаторы резервирования, и метод сначала проверяет, не заблокирован ли идентификатор резервирования. Но я считаю, что есть более эффективные способы решения этой проблемы?
edit: Резервирования сохраняются на Couchbase, но я бы предпочел не использовать оптимистическую / пессимистичную блокировку db, чтобы стать независимой от db. Также я сомневаюсь, что оптимистическая блокировка когда-либо поможет в этом сценарии.
Кроме того, последовательность действий этого метода выглядит следующим образом:
Выборка резервирования ⮞ Регулярные проверки ⮞ Отмена резервирования сторонним сервисом ⮞ ВозвратПользователь ⮞ Обновление статуса бронирования + другие данные ⮞ Постоянное резервирование