Boto S3 löst gelegentlich httplib.IncompleteRead aus

8

Ich habe mehrere Daemons, die viele Dateien von Amazon S3 mit Boto lesen. Alle paar Tage stoße ich auf eine Situation, in der ein httplib.IncompleteRead aus dem Inneren von Boto geworfen wird. Wenn ich die Anfrage versuche und erneut versuche, schlägt sie sofort mit einem anderen IncompleteRead fehl. Selbst wenn ich bucket.connection.close() anrufe, werden alle weiteren Anfragen immer noch fehlschlagen.

Ich fühle mich, als wäre ich hier über einen Bug in Boto gestolpert, aber niemand sonst scheint es getroffen zu haben. Mache ich etwas falsch? Alle Daemons sind single-threaded, und ich habe versucht, is_secure in beide Richtungen zu setzen.

%Vor%

Umgebung:

  • Amazon EC2
  • Ubuntu 11.10
  • Python 2.6.7
  • Boto 2.12.0
wolak 15.10.2013, 04:35
quelle

3 Antworten

2

Es kann durchaus ein Bug in Boto sein, aber die Symptome, die Sie beschreiben, sind nicht einzigartig. Siehe

UnvollständigLesen Sie mit httplib

Ссылка

Da httplib in Ihrem Traceback erscheint, wird hier eine Lösung vorgeschlagen:

Ссылка

Haftungsausschluss: Ich habe keine Erfahrung mit Boto. Dies basiert auf Forschung und veröffentlicht, da es keine anderen Antworten gab.

    
Glenn 21.11.2013 14:38
quelle
2

Ich habe eine Weile mit diesem Problem gekämpft und lange laufende Prozesse ausgeführt, die große Datenmengen von S3 lesen. Ich habe beschlossen, hier meine Lösung für die Nachwelt zu veröffentlichen.

Erstens bin ich mir sicher, dass der von @Glenn angesprochene Hack funktioniert, aber ich entschied mich dafür, ihn nicht zu verwenden, weil ich ihn als aufdringlich empfinde (httckib hacken) und unsicher (er gibt blind zurück, was er hat, zB return e.partial , obwohl es sich um einen echten Fehlerfall handeln kann.

Hier ist die Lösung, die ich schließlich gefunden habe, die zu funktionieren scheint.

Ich verwende diese universelle Wiederholungsfunktion:

%Vor%

Wenn ich jetzt eine Datei von S3 lese, benutze ich diese Funktion, die intern Wiederholungen im Falle von IncompleteRead -Fehlern durchführt. Bei einem Fehler rufe ich vor dem erneuten Versuch key.close(fast = True) .

auf %Vor%     
shx2 21.12.2013 20:32
quelle
0

Wenn Sie eine große Menge an Daten von S3 lesen, müssen Sie möglicherweise Ihr Lese- / Schreibzugriffsmodul mehrfach teilen / teilen.

Es gibt ein gutes Beispiel hier, um die mehrteiligen ( Ссылка )

zu machen     
cgseller 31.03.2015 13:15
quelle

Tags und Links