Search
Write a publication
Pull to refresh
17
0
Андрей Гайдамака @Dross0

Java программист

Send message

Спасибо за отличные вопросы.

Перед началом исполнения запроса нам нужно сохранить информацию о самом запросе и ключе. Если говорить о способе установки блокировки, то мы изначально создаем запись с блокировкой (она "логическая" и контролируется самим блоком), заполнив поле locked_at. Тут важно еще учесть, что на ключ в бд нужно повесить ограничение уникальности, чтобы вопрос о создании одинаковых ключей в один момент времени решала бд. Один из запросов успешно добавиться и продолжит обработку, а другой уже будет в ситуации, когда ключ с блокировкой уже есть и дальше логика как с блокировками.

Чтобы исключить ситуации когда блокировка снята, а результат не сохранен, стоит снимать блокировку только после успешного сохранения результата.

Если мы упадем до или во время сохранения результата, то блокировка на ключе останется до истечения заданного времени блокировки, так как ее никто уже никто не снимет. И дальше логика такая же как описана в разделе Управление блокировками.

Ситуация когда мы успешно сохранили результат, но упали до снятия блокировки интересна и тут можно действовать по разному. Тут нужно учитывать, что блокировка чисто логическая и сам блок решает как работать с заблокированными ключами. Когда мы у себя это реализовывали, то приняли решение, что получая запрос с заблокированным ключом по которому сохранен ответ пишем в лог о том что произошла такая ситуация и возвращаем этот сохраненный ответ.

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer
Java
Spring Boot
Java Spring Framework
PostgreSQL
English
Docker
OOP
SQL
Git
Hibernate