Google App Engine: task_retry_limit не работает? - PullRequest
10 голосов
/ 31 марта 2011

У меня есть приложение Python GAE.

Я хочу, чтобы мои задачи прекратились или просто повторите попытку в случае сбоя. Прямо сейчас они работают вечно, несмотря на то, что им говорит мой файл yaml!

Вот запись queue.yaml:

 - name: globalPurchase
   rate: 10/s
   bucket_size: 100
   retry_parameters:
     task_retry_limit: 1

Если задача globalPurchase завершается неудачно с кодом ошибки 500, она повторяется до тех пор, пока не преуспеет с этим сообщением в журналах:

«Задача с именем« task14 »в очереди« globalPurchase »завершилась неудачно с кодом 500; повторная попытка через 30 секунд»

Почему task_retry_limit на самом деле не используется?

Ответы [ 3 ]

7 голосов
/ 19 июня 2011

У меня была такая же проблема.Документация и инструменты в этой области отсутствуют, но вот что я нашел:

  • Параметры повтора не влияют на сервер разработки.Я пробовал много разных комбинаций, но это были просто неопределенные попытки с интервалом 30 с.Параметры вступили в силу при развертывании на рабочем сервере.
  • Я не нашел способа отключить все повторные попытки (кроме того, что мой обработчик не генерирует исключения).
    • Если task_retry_limit=0, то он все еще повторяется.
    • Если установлены task_retry_limit=0 и task_age_limit, то queue.yaml отклоняется с сообщением, что task_retry_limit должно быть положительным.
    • Аналогичным образом, он жалуется, если task_age_limit=0.
    • Если вы установите task_retry_limit=1 и task_age_limit=1s (очевидно, минимальные значения), вы все равно получите одну повторную попытку.
  • Минимальное время повтора составляет 20 секунд.Если задержка, указанная в вашей конфигурации, меньше 20, то она просто будет ждать 20 секунд.
  • Время до первого повтора непредсказуемо;кажется, что он случайно задерживается на одну минуту.После этого попытки повторяются в соответствии с настроенным расписанием.
4 голосов
/ 21 июля 2011

У меня была такая же проблема, как ни странно, она начинает нормально работать после того, как я оставил ее на несколько часов ... Возможно, для обновления GAE требуется некоторое время ??

В любом случае, настройкиу меня работают:

# configure the default queue
- name: default
  rate: 1/s
  retry_parameters:
    # task will stop retrying ONLY when BOTH LIMITS ARE REACHED
    task_retry_limit: 1
    task_age_limit: 1s
2 голосов
/ 07 апреля 2011

Вам следует установить task_retry_limit равным нулю, если вы вообще не хотите повторять попытку, и вам нужно использовать это в сочетании с task_age_limit.Логика повторения очереди задач appengine использует комбинацию task_try_limit и task_age_limit, чтобы определить, когда прекратить повторную попытку.

...