Когда я вызываю отложенную транзакционную задачу из транзакционной функции, f
, f
могут фиксировать, пока отложенная задача не выполняется.
ОДНАКО, если я вызываю f
через отложенный вызов, вызывающая функция завершается ошибкой.
Для воспроизведения я сделал следующее:
@ndb.transactional()
def f():
# modify datastore entity X
...
x.put()
class X(ndb.Model):
...
def _post_put_hook(self, future)
deferred.defer(y,
_transactional=ndb.in_transaction())
def y():
raise Exception()
Когда я вызываю f
, отложенная задача терпит неудачу, но x.put()
фиксируется.
ОДНАКО, если я вызову deferred.f, x.put()
завершится ошибкой.