diff --git a/libraries/object-persistor/src/S3Persistor.js b/libraries/object-persistor/src/S3Persistor.js index de88f497bb..ec26ce0823 100644 --- a/libraries/object-persistor/src/S3Persistor.js +++ b/libraries/object-persistor/src/S3Persistor.js @@ -631,10 +631,14 @@ class S3Persistor extends AbstractPersistor { // maxRetries has been moved to maxAttempts in aws-sdk v3, // we're keeping the existing setting for backwards compatibility - if (!noRetries && this.settings.maxRetries) { + if (this.settings.maxRetries) { options.maxAttempts = this.settings.maxRetries + 1 } + if (noRetries) { + options.maxAttempts = 1 + } + const requestHandlerParams = this.settings.httpOptions || {} if (sslEnabled && this.settings.ca) { diff --git a/libraries/object-persistor/test/unit/S3ClientMock.js b/libraries/object-persistor/test/unit/S3ClientMock.js index 25529da396..b7ed048622 100644 --- a/libraries/object-persistor/test/unit/S3ClientMock.js +++ b/libraries/object-persistor/test/unit/S3ClientMock.js @@ -108,5 +108,11 @@ module.exports = function () { this.payload = payload } }, + PutObjectCommand: class PutObjectCommand { + constructor(payload) { + this.name = 'PutObjectCommand' + this.payload = payload + } + }, } } diff --git a/libraries/object-persistor/test/unit/S3PersistorTests.js b/libraries/object-persistor/test/unit/S3PersistorTests.js index ed4d097e54..3255eb6435 100644 --- a/libraries/object-persistor/test/unit/S3PersistorTests.js +++ b/libraries/object-persistor/test/unit/S3PersistorTests.js @@ -594,10 +594,24 @@ describe('S3PersistorTests', function () { partSize: 100 * 1024 * 1024, }) }) + }) + + describe('when multipart upload is disabled', function () { + const contentType = 'text/csv' + const contentEncoding = 'gzip' + + beforeEach(async function () { + S3.mockSend(S3.PutObjectCommand, {}) + settings.disableMultiPartUpload = true + await S3Persistor.sendStream(bucket, key, ReadStream, { + contentType, + contentEncoding, + }) + }) it('configures the options to not to retry requests', function () { - expect(S3.S3Client).not.to.have.been.calledWithMatch({ - maxAttempts: sinon.match.number, + expect(S3.S3Client).to.have.been.calledWithMatch({ + maxAttempts: 1, }) }) })