Как убедиться, что транзакция была зафиксирована перед возвратом запроса API?
Я использую django с ATOMIC_REQUESTS=True
. Он работает нормально, но в некоторых случаях вызывает у меня проблемы.
Например, у меня есть поток:
- Call an API, create an object id DB and return it's id.
- Call another API, using id from the previous step, and create another object in DB.
Иногда шаг 2 проваливается, потому что транзакция из шага 1 еще не зафиксирована, и я получаю ошибку, что объект не существует.
Я не могу вручную вызвать transaction.commit()
перед оператором return Response()
, поскольку полагаюсь на ATOMIC_REQUESTS из ящика.
Я могу добавить try, except
к шагу 2, но код будет выглядеть некрасиво, потому что потребуется вызвать sleep() на пару секунд, а затем повторить попытку. Также мне нужно будет определить, сколько попыток должно быть, что может привести к длительному времени ответа или даже к ошибке таймаута
Также я могу отключить ATOMIC_REQUESTS и использовать атомарные транзакции вручную, но это не самое предпочтительное решение, поскольку мне придется делать много рефакторинга.
Кто-нибудь сталкивался с таким поведением?