как отключить соединение для aws sdk s3 по истечении заданного времени?

#node.js #amazon-s3 #ceph

#node.js #amazon-s3 #ceph

Вопрос:

Я использую aws-sdk модуль в моем node приложении,
в частности S3 библиотеку, для записи в ceph кластер.

Приложение периодически загружает файлы фиксированного размера.
Ceph иногда выполняет сегментирование, что приводит к зависанию http-запроса на загрузку на 500 секунд.
Как я могу отменить эти запросы для сегментов, выполняющих сегментирование?
Как я могу установить тайм-аут, скажем, на 2 секунды, для всех загрузок?

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

1. вы хотите установить его в своем кластере ceph или в вашем клиенте aws sdk?

2. Я предпочитаю aws sdk client, поскольку у меня нет полного контроля над кластером

3. @natdev можете ли вы поделиться тем, как вы подключаетесь к Ceph с помощью AWS S3?

Ответ №1:

После долгих поисков в Интернете я нашел эту функцию прерывания.

Итак, если это кому-нибудь поможет, вот как я это реализовал:

 const upload = (bucket, key, body, timeout = 2000) => {
  const request = this.s3.upload({Bucket: bucket, Key: key, Body: body})
  setTimeout(request.abort.bind(request), timeout)
  return request.promise()
}
  

Если timeout передано, то Error выдается RequestAbortedError код.

Ответ №2:

Вы можете использовать timeout в httpOptions . example:

 var s3 = new AWS.S3({apiVersion: '2006-03-01', httpOptions: {timeout: 2000}});
  

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

1. Я сделал это, это не сработало … как задокументировано, в нем указано, что оно закрывает idle соединение при отсутствии трафика, но, как выясняется, клиент не закрывает соединение после ожидания ответа

2. @natdev Возможно, происходит передача фрагмента. Если вы хотите установить тайм-аут для всего запроса, я думаю, вам следует реализовать это с помощью node js, а в aws sdk такой опции нет.

3. Я нашел способ сделать это, проверьте мой ответ