Merge pull request #28543 from overleaf/msm-disable-retries-s3

[object-persistor] fix disable retries on PutObjectCommand

GitOrigin-RevId: 7a812385e70781939f21325572c0eedb856e734f
This commit is contained in:
Miguel Serrano
2025-09-17 14:45:30 +02:00
committed by Copybot
parent 74746a096c
commit 176b1a562f
3 changed files with 27 additions and 3 deletions

View File

@@ -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) {

View File

@@ -108,5 +108,11 @@ module.exports = function () {
this.payload = payload
}
},
PutObjectCommand: class PutObjectCommand {
constructor(payload) {
this.name = 'PutObjectCommand'
this.payload = payload
}
},
}
}

View File

@@ -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,
})
})
})