2014-12-07 25 views
0

У меня возникло множество проблем с загрузкой файла с S3 после перехода с 12.04 на Ubuntu 14.04. Примерно в 1/20 случаев boto не загружает файл и stucks в течение 1-2 минут, прежде чем бросать исключение.Amazon S3 - ошибки загрузки с Boto

Не воспроизводится для очень маленьких файлов, только для средних и больших файлов.

Я написал простой скрипт, питон, чтобы проверить это:

import datetime 
from boto.s3.connection import S3Connection 

success = 0 
for i in xrange(1000000): 
    try: 
     start = datetime.datetime.now() 
     s3conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
     bucket = s3conn.get_bucket(bucket_name) 
     key = bucket.get_key(path) 
     content = key.get_contents_as_string() 
     delta = datetime.datetime.now() - start 
     print 'Downloading completed in', delta.total_seconds(), 's, file size is', len(content), 'bytes' 
     success += 1 
     print 'Downloaded', i + 1, 'files, success rate: ', float(success)/(i + 1) 
    except Exception as exc: 
     print 'Error occurred:', exc 

Вот некоторые выходы из этого сценария с моей Ubuntu 14.04 машины:

Downloading completed in 1.76665 s, file size is 996320 bytes 
Downloaded 1 files, success rate: 1.0 
Downloading completed in 7.709181 s, file size is 996320 bytes 
Downloaded 2 files, success rate: 1.0 
Downloading completed in 1.762192 s, file size is 996320 bytes 
Downloaded 3 files, success rate: 1.0 
Downloading completed in 7.670499 s, file size is 996320 bytes 
Downloaded 4 files, success rate: 1.0 
Downloading completed in 1.806259 s, file size is 996320 bytes 
Downloaded 5 files, success rate: 1.0 
Downloading completed in 1.992967 s, file size is 996320 bytes 
Downloaded 6 files, success rate: 1.0 
... 
... 
... 
Downloading completed in 6.496797 s, file size is 996320 bytes 
Downloaded 21 files, success rate: 1.0 
Error occurred: [Errno 104] Connection reset by peer 
Downloading completed in 2.31506 s, file size is 996320 bytes 
Downloaded 23 files, success rate: 0.95652173913 
Error occurred: The read operation timed out 
Error occurred: The read operation timed out 
Downloading completed in 1.963559 s, file size is 996320 bytes 
Downloaded 26 files, success rate: 0.884615384615 
Downloading completed in 1.395313 s, file size is 996320 bytes 
Downloaded 27 files, success rate: 0.888888888889 
Downloading completed in 1.416122 s, file size is 996320 bytes 
Downloaded 28 files, success rate: 0.892857142857 
Downloading completed in 1.168238 s, file size is 996320 bytes 
Downloaded 29 files, success rate: 0.896551724138 
Downloading completed in 1.30582 s, file size is 996320 bytes 
Downloaded 30 files, success rate: 0.9 

Я попробовал этот скрипт на Windows, и Mac сидят в той же локальной сети, и результат на 100% прекрасен! Кроме того, у меня не было никаких проблем на моем примере 12.04 Amazon EC2:

... 
Downloading completed in 2.015681 s, file size is 996320 bytes 
Downloaded 100 files, success rate: 1.0 

Неужели кто-нибудь сталкивался с подобными проблемами? Где я смотрю? Я попытался отладить библиотеку boto, но безуспешно. Важно то, что у меня нет проблем с загрузкой, когда я использую другие методы загрузки файлов на эту машину, только boto терпит неудачу. Пробужденные версии разных версий: 2.15.0 и 2.34.0

ответ

0

Оказывается, это не имеет ничего общего с boto, поскольку позже я смог воспроизвести его с помощью curl.

Исправлена ​​проблема для меня, перемещая данные из европейского региона S3 в регион «Стандарт США», но все же интересуется, как это может работать таким образом. Все файлы загружаются отлично на одном компьютере в локальной сети, а на другом компьютере в той же сети - 10-20% сбоев.

Будет адресовано это Amazon, если это беспокоит меня больше.

0

При создании соединения вы должны указать регион, иначе он может быть тайм-аутом, потому что он может попробовать другой регион.

conn = boto.s3.connect_to_region(aws_region, **creds) 

где aws_region - это строка, а creds - это словарь ваших учетных данных.

Смежные вопросы