2011-08-19 9 views
5

Utilizziamo il metodo domain.select(), fornito da boto, per interrogare SimpleDB. Per le query più piccole (query che richiedono un paio d'ore di dati), questo metodo funziona correttamente. Ma quando ho iniziare a utilizzare più thread e le query più lunghe (24 ore di dati), inizia timeout, dando seguente errore su stdout:Come gestire l'errore di timeout della richiesta (408) in 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> 

Voglio realizzare un meccanismo di tentativo (backoff esponenziale), quando questo si è verificato un errore Boto non lancia alcuna eccezione per questo errore e lo stampa semplicemente. Per implementare un meccanismo di tentativi, ho bisogno di un qualche tipo di codice di errore o eccezione per sapere che l'errore si è verificato.

Qualche idea su come ottenere questo in boto?

risposta

4

Boto riproverà su una 503, ma non su un 408.

Ci sono diverse cose che renderanno boto tentativi, tra cui un 503 (servizio non disponibile), e alcuni tipi di errori HTTP quando tenta di connettersi . Utilizzerà il backoff esponenziale e tenterà fino a 5 volte di default. È possibile modificare il numero di tentativi impostando num_retries nel file di configurazione .boto:

[Boto] 
num_retries = 3 

Non so il motivo per cui non si riconnette su un 408. La documentazione AWS che ho visto consiglio di fare così.

+0

grazie per la vostra risposta. Sì, riprova su 503, ma non c'è modo di scoprirlo, cosa fa con 408, non lancia alcuna eccezione ... la documentazione di boto fa schifo all'uomo. – Sujit

+0

Boto non riprova in risposta 408 perché ci è stato richiesto, diversi anni fa, di non farlo da AWS. Se la documentazione di AWS ora afferma che dovrebbe essere ritentata, allora boto dovrebbe essere cambiato per riprovare. Suggerirei di presentare un ticket su GitHub e me ne occuperò personalmente. – garnaat

+1

BTW, Sujit, hai qualche possibilità di essere più specifico sui problemi con i documenti boto? Sono sempre felice di ricevere suggerimenti per migliorare la community. Grazie! – garnaat