2011-08-19 2 views
5

Nous utilisons la méthode domain.select() fournie par boto pour interroger SimpleDB. Pour les requêtes plus petites (requêtes impliquant quelques heures de données), cette méthode fonctionne bien. Mais quand je commencer à utiliser plusieurs threads et des requêtes plus longues (24 heures de données), il commence à compter, donnant erreur suivant sur la sortie standard:Comment gérer l'erreur request timeout (408) dans boto?

------------------------- 
     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> 

Je veux mettre en place un mécanisme de nouvelle tentative (backoff exponentielle), lorsque cela erreur est rencontrée. Boto ne lance aucune exception pour cette erreur et l'imprime simplement. Pour implémenter un mécanisme de réessai, j'ai besoin d'une sorte de code d'erreur ou d'exception pour savoir que l'erreur s'est produite.

Avez-vous des idées sur la façon de réaliser cela dans boto?

Répondre

4

Boto une nouvelle tentative sur un 503, mais pas sur un 408.

Il y a plusieurs choses qui feront nouvelle tentative de Boto, y compris un 503 (service non disponible), et certains types d'erreurs HTTP lorsque vous essayez de vous connecter . Il utilisera une interruption exponentielle et tentera jusqu'à 5 fois par défaut. Vous pouvez modifier le nombre de tentatives en mettant num_retries dans le fichier de configuration .boto:

[Boto] 
num_retries = 3 

Je ne sais pas pourquoi il ne réessaie pas sur un 408. AWS docs que j'ai vu recommandé de le faire.

+0

merci pour votre réponse. Oui, ça recommence sur 503, mais il n'y a aucun moyen de le savoir, ce qu'il fait avec 408, il ne lance aucune exception aussi ... la documentation de boto suce l'homme. – Sujit

+0

Boto ne retentit pas sur une réponse 408 car il nous a été demandé, il y a plusieurs années, de ne pas le faire par AWS. Si la documentation AWS indique maintenant qu'elle doit être réessayée, alors boto doit être modifié pour réessayer. Je suggère de déposer un ticket sur github et je m'en occuperai personnellement. – garnaat

+1

BTW, Sujit, une chance que vous pourriez être plus précis sur les problèmes avec boto docs? Je suis toujours heureux d'obtenir des suggestions d'amélioration de la part de la communauté. Merci! – garnaat