2011-08-19 23 views
5

Chúng tôi đang sử dụng phương thức domain.select(), mà boto cung cấp, để truy vấn SimpleDB. Đối với các truy vấn nhỏ hơn (các truy vấn liên quan đến vài giờ dữ liệu), phương thức này hoạt động tốt. Nhưng khi tôi bắt đầu sử dụng nhiều chủ đề và các truy vấn dài hơn (24 giờ kể từ dữ liệu), nó bắt đầu thời gian ra ngoài, đưa ra lỗi sau trên stdout:Làm thế nào để xử lý lỗi yêu cầu thời gian chờ (408) trong 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> 

Tôi muốn thực hiện một cơ chế retry (mũ backoff), khi điều này gặp phải lỗi. Boto không ném bất kỳ ngoại lệ nào cho lỗi này và chỉ cần in nó. Để thực hiện một cơ chế thử lại, tôi cần một số loại mã lỗi hoặc ngoại lệ để biết rằng lỗi đã xảy ra.

Bất kỳ suy nghĩ nào về cách đạt được điều này trong boto?

Trả lời

4

Boto sẽ thử lại trên 503, nhưng không phải trên một 408.

Có một vài điều mà sẽ làm cho boto retry, bao gồm một 503 (dịch vụ không có sẵn), và một số loại lỗi HTTP khi cố gắng kết nối . Nó sẽ sử dụng backoff theo hàm mũ và cố gắng tối đa 5 lần theo mặc định. Bạn có thể thay đổi số lượng lần thử lại bằng cách thiết lập num_retries trong file .boto config:

[Boto] 
num_retries = 3 

Tôi không biết lý do tại sao nó không thử lại trên 408. Các tài liệu AWS Tôi đã nhìn thấy khuyên bạn nên làm như vậy.

+0

cảm ơn câu trả lời của bạn. Vâng, nó thử lại trên 503, nhưng không có cách nào để tìm ra, nó làm gì với 408, nó cũng không ném bất kỳ ngoại lệ nào ... boto tài liệu hút người đàn ông. – Sujit

+0

Boto không thử lại trên một phản ứng 408 bởi vì chúng tôi đã được yêu cầu, vài năm trước, không phải bởi AWS. Nếu tài liệu AWS bây giờ nói rằng nó nên được thử lại, sau đó boto nên được thay đổi để thử lại nó. Tôi sẽ đề nghị nộp một vé trên github và tôi sẽ tự chăm sóc nó. – garnaat

+1

BTW, Sujit, bất kỳ cơ hội nào bạn có thể cụ thể hơn về các vấn đề với tài liệu boto? Tôi luôn sẵn lòng nhận đề xuất cải tiến từ cộng đồng. Cảm ơn! – garnaat