Why Google App Engine Tasks can spuriously be executed more than once?

会有一股神秘感。 提交于 2019-12-07 12:57:34

问题


Why Google App Engine Tasks can be executed more than once? According do Brett Slatkin talk from Google I/O 2009, it is possible for a task to spuriously run twice even without server failures!

This has something to do with spurious wakeup of threads?


回答1:


Brant Slatkin gave a similar talk at I/0 2010.

I don't know that he ever gave details of how or when this could happen. His point was that because of the way Task Queues work it is possible by design for tasks to be reenqueued. Because of this you need to write your tasks so that it does not cause problems if that happens.

For example, let's say you have a task that sends an email and then increments a counter in Datastore. If there was a bug in your code OR if Datastore was down, it is possible for the email to be sent successfully but for the write to Datastore to fail. If you didn't handle the failure from Datastore in your code by handling the exception the failure to write to Datastore would result in your task returning a HTTP status code of 500. Task Queue is designed to reenqueue the task if it returns a status code >299. This would result in your task being executed over and over until the write to datastore was successful. Which means that someone would get many duplicate emails.

I think the line about "Possible for a task to spuriously run twice.." was just a way to say App Engine isn't guaranteed to protect against this so you need to make sure you take care of it in your code.



来源:https://stackoverflow.com/questions/4151218/why-google-app-engine-tasks-can-spuriously-be-executed-more-than-once

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!