1
失败 - “事务冲突” - 对实体的写操作是否会覆盖对另一个成功提交的事务上的相同实体所做的更改?交易后碰撞是否安全?
我知道gae中的交易操作在snapshot SERIALIZABLE isolation中,但不清楚write skew是否可能。
为了简单起见,做柜台的坏榜样:
def increment_counter(key, amount):
obj = db.get(key)
obj.counter += amount
obj.put()
如果在事务中运行,失败,因为碰撞和重新尝试,将它正确地更新?
重试意味着整个操作被重新尝试还是仅仅是提交,还是这意味着碰撞发生在实体组上,但这里所做的更改与实体组中的其他更改没有冲突 - 因为它们在哪里制造不同的实体。
PS。这可能是一个愚蠢的问题,但它让我误解了这些重试是如何应用的。
UPDATE
在Transactions文章是我错过了一个线索。
如果实体在交易期间更新,则交易将重试,直到没有中断完成所有步骤
这是否意味着,在事务上下文整个代码运行之后重新运行碰撞?