Datastore のバックアップが失敗すると以下のようなエラーが出る。
Transaction collision. Retrying... (/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/datastore.py:2688)
Contention on slice xxxxxxxxx execution. Will retry again. (/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/_internal/mapreduce/handlers.py:305)
Datastore のバックアップは MapReduce によって処理されるので、
普段見慣れない MapReduce のエラーが発生する。
ここで疑問に思ったのが、
Datastore のトランザクション競合エラーが発生していること。
トランザクション競合が原因で MapReduce が失敗した感じなのかな?
バックアップだと、Datastore を read することはあっても、
write することはないので、
トランザクション競合が発生するとは思わなかった。
このエラーが発生した時刻には、
複数のバッチ処理が同時に動作していたので、
バックアップする時間帯に同じ EntityGroup に対してアクセスがあると、
トランザクション競合によって、
失敗する可能性が高くなるのかもしれない。
とはいえ、
ログに Will retry again とあるように失敗しても再実行されるので、
最終的にバックアップが失敗する確率は低いと思う。