Wenn ich eine verzögerte transaktionale Aufgabe von einer Transaktionsfunktion aufrufen, kann f
, f
festschreiben, während die verzögerte Aufgabe fehlschlägt.App-Engine Verkettung verzögerte transaktionale Aufgaben
Wenn ich jedoch f
über einen verzögerten Aufruf aufrufen, schlägt die aufrufende Funktion fehl.
Um repro, ich habe folgendes:
@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()
Als ich f
nennen, die verschobene Aufgabe fehlschlägt, aber x.put()
Commits.
ABER, wenn ich deferred.f aufrufen, schlägt x.put()
fehl.