Лучшая практика для предотвращения одновременного доступа к методу с теми же параметрами? - PullRequest
1 голос
/ 23 октября 2019

У меня есть конечная точка /cancel_reservation, которая принимает резервирование и требует аутентификации. Внутри этого метода бронирование отменяется и выдается возврат. Теперь, если один и тот же пользователь вызывает этот метод дважды одновременно, могут возникнуть условия гонки, и пользователю может быть возмещено дважды.

Пока я решил эту проблему, имея static Set, который содержит заблокированные идентификаторы резервирования, и метод сначала проверяет, не заблокирован ли идентификатор резервирования. Но я считаю, что есть более эффективные способы решения этой проблемы?

edit: Резервирования сохраняются на Couchbase, но я бы предпочел не использовать оптимистическую / пессимистичную блокировку db, чтобы стать независимой от db. Также я сомневаюсь, что оптимистическая блокировка когда-либо поможет в этом сценарии.

Кроме того, последовательность действий этого метода выглядит следующим образом:

Выборка резервирования ⮞ Регулярные проверки ⮞ Отмена резервирования сторонним сервисом ⮞ ВозвратПользователь ⮞ Обновление статуса бронирования + другие данные ⮞ Постоянное резервирование

...