Может ли сбойная - при "коллизии транзакций" - операция записи в объект перезаписать изменения, внесенные в тот же объект в другой успешно совершенной транзакции?
Я понимаю, что транзакционные операции в gae находятся в снимке SERIALIZABLE изоляция , но не ясно, возможна ли запись перекоса .
Для простоты ради плохого примера выполнения счетчиков:
def increment_counter(key, amount):
obj = db.get(key)
obj.counter += amount
obj.put()
Если запуск в транзакции потерпел неудачу из-за коллизии и был повторен, будет ли он обновляться правильно?
Означает ли повторная попытка повторную попытку всей операции или только фиксацию, или это означает, что коллизия была в группе сущностей, но внесенные здесь изменения не конфликтуют с другими изменениями в группе сущностей - потому что они где сделано для разных лиц.
PS. Это, возможно, глупый вопрос, но меня беспокоит, как именно эти повторы применяются.
UPDATE
В статье Транзакции есть подсказка, которую я пропустил.
Если сущность обновляется во время транзакции, то транзакция повторяется до тех пор, пока все шаги не будут выполнены без прерывания
Означает ли это, что весь код, выполняемый в контексте транзакции, перезапускается после коллизии?