2012-02-17 3 views
0

Я ищу, чтобы добавить некоторую защитную обработку исключений/повторить логику вокруг моего (Java) кода, который ставит задачи в App Engine. При просмотре документации для потенциальных исключений я вижу несколько кандидатов, которые могут иметь смысл поймать и обработать повторную попытку, но документация немного расплывчата, поэтому я подумал, что увижу, что другие считают целесообразным.Какие исключения очереди задач, поднятые из add(), имеют смысл повторить?

Вот те, что я смотрю на, и их описания из документации:

  • InternalFailureException - Внутренняя ошибка очереди задач.
  • TransientFailureException - Прерывистый сбой.
  • QueueFailureException - Неисправность очереди.
  • TransactionalTaskException - Ошибка операции очереди, вызванная исключением Datastore.

Единственный, для которого документы явно указывают на то, что повторная попытка может быть полезна, является TransientFailureException.

Кроме того, что касается TransactionalTaskException, это что-то, что возникло бы только при привлечении задачи во вмещающей транзакции хранилища данных, или это может возникнуть при установке отдельного задания?

ответ

0

Я получил некоторую обратную связь по этому вопросу в группе Google App Engine (см. this thread), поэтому я решил опубликовать резюме здесь, чтобы принести пользу другим.

Некоторые исследование GAE source показало, что:

  • внутренние ошибки коды TASK_ALREADY_EXISTS и TOMBSTONED_TASK оба отображаются в TaskAlreadyExistsException
  • TransactionalTaskException используется для всех ошибок хранилища данных, которые возникают.
  • QueueFailureException является всеохватывающим исключением для любых внутренних кодов ошибок, не имеющие явно отображенных типов исключений

Роберт Kluin также дал следующий совет (переложения здесь):

  • рассмотреть обработку TaskAlreadyExistsException. Повторение не имеет смысла, но в некоторых случаях вы можете проглотить эту ошибку, а в других - поднять ее.
  • рассмотреть вопрос о превышении срока подачи и таймаутах. В частности, он упомянул, что таймауты могут маскироваться как внутренние ошибки (InternalFailureException в Java).