This isn't quite right.  Tasks need to be idempotent because execution
is "at least once".  Transactions only need to be idempotent if you
write code that retries them when you shouldn't (ie, unknown errors).

Retrying transactions on ConcurrentModificationException (or any other
known rollback scenario) is appropriate.  Retrying other exceptions is
risky business.

Jeff

On Wed, Sep 21, 2011 at 3:08 PM, vlad <[email protected]> wrote:
> " that a transaction can complete successfully and the API still returns an
> error." - yes, it is a bitch. I suffered form this for a long time. Finally
> I understood that all  tasks  and especially transactional tasks MUST be
> completely idempotant. GAE docs do not stress that enough but that is
> mandatory. Otherwise you fall into a trap you just described.
> How to achieve idempontency is app specific. For example I use TaskId
> extensively  as a entity key to create/update. That way I am guaranteed that
> double execution will update the same entity.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/google-appengine/-/XjZZzB7n300J.
> 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.
>

-- 
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.

Reply via email to