Предположим, вы используете транзакцию для обработки платежа Stripe и обновления сущности пользователя:
@ndb.transactional
def process_payment(user_key, amount):
user = user_key.get()
user.stripe_payment(amount) # API call to Stripe
user.balance += amount
user.put()
Возможно, вызов API Stripe завершился успешно, но put
завершился неудачей из-за конфликта. После этого с пользователя будет снята оплата, но его учетная запись не будет отражать платеж.
Вы можете извлечь вызов Stripe API из транзакции и выполнить транзакцию впоследствии, но, похоже, у вас все еще остается та же проблема. Заряд успешно завершен, но транзакция не выполнена, а учетная запись пользователя не зачислена.
Это похоже на очень распространенный сценарий. Как правильно с этим справиться?