Não é possível fazer upload de arquivos com mais de 8 GB para o Amazon S3 por upload de várias partes devido ao cano quebrado

2

Implementei o upload de várias partes do S3, tanto de nível alto como de baixo nível, com base no código de exemplo de link e link

Quando fiz o upload de arquivos com tamanho inferior a 4 GB, os processos de upload foram concluídos sem nenhum problema. Quando eu carreguei um arquivo de tamanho 13 GB, o código começou a mostrar exceção IO, canos quebrados. Depois de tentativas, ainda falhou.

Aqui está o caminho para repetir o cenário. Tome o lançamento 1.1.7.1,

  1. crie um novo intervalo na região padrão dos EUA
  2. crie uma instância grande do EC2 como o cliente para fazer upload do arquivo
  3. crie um arquivo de 13 GB de tamanho na instância do EC2.
  4. execute o código de amostra em uma das páginas de documentação da API S3 de alto nível ou baixo nível da instância do EC2
  5. teste um dos três tamanhos de peça: tamanho padrão da peça (5 MB) ou defina o tamanho da peça como 100.000.000 ou 200.000.000 bytes.

Até agora, o problema aparece de forma consistente. Anexei aqui um arquivo tcpdump para você comparar. Ali, o host no lado S3 continuava reiniciando o soquete.

    
por spencerho 11.03.2011 / 22:59

1 resposta

2

Embora este seja um código c #, ele mostra as configurações de tempo limite e de tamanho de letra que estou usando para copiar com êxito arquivos de até 15 GB. Talvez o AutoCloseStream precise ser definido como falso.

using (FileStream fileStream = File.OpenRead(file.FullName))
                    {

                        TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
                        {
                            AutoCloseStream = false,
                            Timeout = 1200000,
                            BucketName = Settings.Bucket,
                            Key = file.Name,
                            InputStream = fileStream,
                            PartSize = 6291456 // 6MB
                        };

                        Console.Write("{0}...", file.Name);
                        Begin();
                        tu.Upload(request);
                        End();
                        Console.WriteLine("Done. [{0}]", Duration());
                    }
    
por 15.03.2011 / 04:55