Как обработать ошибку тайм-аута запроса (408) в boto? - PullRequest
5 голосов
/ 19 августа 2011

Мы используем метод domain.select (), предоставляемый boto, для запроса SimpleDB. Для небольших запросов (запросов, включающих пару часов данных) этот метод работает нормально. Но когда я начинаю использовать несколько потоков и более длинные запросы (данные за 24 часа), он начинает время ожидания, выдавая следующую ошибку на стандартный вывод:

-------------------------
         4 0 8
...
<?xml version="1.0"?>
<Response><Errors><Error><Code>QueryTimeout</Code><Message>A timeout occurred when attempting to query domain 'd110824' with query expression 'select * from `d110824` where `timestamp` &gt;= '2011-08-24T10:45:56' and `timestamp` &lt; '2011-08-25T10:45:56' and `identifier` = '00063F052C49' order by `timestamp` asc </Message><BoxUsage>0.0055590278</BoxUsage></Error></Errors><RequestID>....</RequestID></Response>

Я хочу реализовать механизм повторных попыток (экспоненциальный откат), когда возникает эта ошибка. Boto не выдает никаких исключений для этой ошибки и просто печатает ее. Чтобы реализовать механизм повторных попыток, мне нужен какой-нибудь код ошибки или исключение, чтобы знать, что произошла ошибка.

Есть мысли о том, как этого добиться в бото?

Ответы [ 2 ]

4 голосов
/ 30 августа 2012

У меня была та же проблема с boto, и я в итоге разложил ее и добавил экспоненциальный откат напрямую. Смотри https://github.com/datacratic/boto/blob/develop/boto/sdb/queryresultset.py#L83.

4 голосов
/ 22 августа 2011

Бото попытается на 503, но не на 408.

Есть несколько вещей, которые сделают попытку повтора, включая 503 (служба недоступна) и некоторые типы ошибок HTTP при попытке подключения. Он будет использовать экспоненциальный откат и попытаться до 5 раз по умолчанию. Вы можете изменить количество повторов, установив num_retries в файле конфигурации .boto:

[Boto]
num_retries = 3

Я не знаю, почему он не повторяет на 408. Документы AWS, которые я видел, рекомендуют делать это.

...