Я реализовал многоэтапную загрузку S3 в Java, как высокого, так и низкого уровня, на основе примера кода из
http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?HLuploadFileJava.html и http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?llJavaUploadFile.html
Когда я загружал файлы размером менее 4 ГБ, загрузка происходила без проблем. Когда я загрузил файл размером 13 ГБ, код начал показывать исключение ввода-вывода, сломанные каналы. После нескольких попыток он все еще не удался.
Вот способ повторить сценарий. Возьми релиз 1.1.7.1,
- создать новую корзину в стандартном регионе США
- создать большой экземпляр EC2 в качестве клиента для загрузки файла
- создать файл размером 13 ГБ в экземпляре EC2.
- запустить образец кода на одной из страниц документации API S3 высокого или низкого уровня из экземпляра EC2
- проверить один из трех размеров: размер по умолчанию (5 МБ) или установить размер детали в 100 000 000 или 200 000 000 байт.
Пока что проблема проявляется последовательно. Я сделал tcpdump. Оказалось, что HTTP-сервер (сторона S3) продолжал сбрасывать поток TCP, что приводило к тому, что клиентская сторона генерировала исключение ввода-вывода - прерванный канал после того, как число загруженных байтов превысило 8 ГБ. Кто-нибудь сталкивался с подобным опытом при загрузке больших файлов в S3 с помощью многоэтапной загрузки?