Невозможно передать большое количество файлов из s3 с помощью Nodejs

#node.js #amazon-s3 #zlib

#node.js #amazon-s3 #zlib

Вопрос:

Я пытаюсь параллельно прочитать несколько сжатых файлов из s3, выполнить операцию преобразования и загрузить их обратно в s3. Сбой со следующей ошибкой.

 {
    "errorType": "Error",
    "errorMessage": "unexpected end of file",
    "code": "Z_BUF_ERROR",
    "errno": -5,
    "stack": [
        "Error: unexpected end of file",
        "    at Zlib.zlibOnError [as onerror] (zlib.js:180:17)"
    ]
}
  

Вот фрагмент кода для вышеупомянутой проблемы. Пожалуйста, помогите мне решить эту проблему.

 for (let inputKey of inputKeys) {
  let s3params = {
    Bucket: bucket,
    Key: inputKey
  };
  let s3stream;
  if (metadata.compression === 'GZIP') {
    let unzip = zlib.createGunzip();
    s3stream = s3.getObject(s3params).createReadStream().pipe(unzip).pipe(ndjson.parse());
  } else {
    s3stream = s3.getObject(s3params).createReadStream().pipe(ndjson.parse());
  }
  // not sending the end event for each of the streams.
  s3stream.pipe(inputStream, {end: false});
  // after all the files are read, send the end event.
  s3stream.once('end', () => {
    --remainingFiles === 0 amp;amp; inputStream.emit('end');
});
  

Комментарии:

1. Сколько вы пытаетесь сделать за раз? Если ваш сервер не справляется и размер окна TCP слишком долго остается равным нулю, серверы S3 удалят вас.

2. Спасибо за быстрый ответ @brad. Я пытаюсь прочитать 150 файлов, каждый из которых размером около 1 МБ. Процесс просто завершается с ошибкой после запуска в течение 5 минут.

3. Определенно похоже, что это занимает слишком много времени. Попробуйте не загружать так много одновременно.