hi david! you're in roughly the same neighborhood, but there are a number of key differences between what you've outline and what the datastore actually does. here are a few:
- each entry in an entity group's tx log has a single timestamp. there aren't separate separate read and last committed timestamps. - we only fail at commit time, not earlier. specifically, we never consider a read "invalid" just because a write has happened since the tx started. we just read the data as of when the tx started, ie before the new write. if a write occurs within the tx, we'll fail on commit. if the tx is read-only, then there's no need to fail. - when starting a tx, its timestamp is always generated based on the last committed timestamp of the entity group. we can't just use the time on the local server, since clocks aren't perfectly synchronized across servers. - note that txes may not be retried purely within the datastore, since writes may depend on the values of earlier reads. if the entities that were read have changed, we must re-run your application logic to recalculate the derived writes. that's why run_in_transaction() takes a lambda, so that we can re-run it if necessary. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---
