From 8a4536aa374b58ed2559682decfad6d032c1c33f Mon Sep 17 00:00:00 2001 From: Norbert Biczo Date: Thu, 28 Apr 2022 15:48:16 +0200 Subject: [PATCH 1/3] fix: do not retry on 501 The other SDK cores skip retry for 501, so the Node core should behave the same way. --- lib/request-wrapper.ts | 1 + test/unit/retry.test.js | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/lib/request-wrapper.ts b/lib/request-wrapper.ts index 7bf80e94f..4b9fb56eb 100644 --- a/lib/request-wrapper.ts +++ b/lib/request-wrapper.ts @@ -365,6 +365,7 @@ export class RequestWrapper { retry: 4, // 4 retries by default retryDelay: 1000, // 1000 ms (1 sec) initial delay httpMethodsToRetry: ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT', 'POST'], + statusCodesToRetry: [[429], [500], [502, 599]], // do not retry on 501 instance: axiosInstance, backoffType: 'exponential', checkRetryAfter: true, // use Retry-After header first diff --git a/test/unit/retry.test.js b/test/unit/retry.test.js index bf5dd08ef..d17c4d9e7 100644 --- a/test/unit/retry.test.js +++ b/test/unit/retry.test.js @@ -90,6 +90,15 @@ describe('Node Core retries', () => { await service.createRequest(parameters).catch((err) => expect(err).toBeDefined()); }); + it('should not retry on 501`', async () => { + const scopes = [ + nock(url).get('/').reply(501, undefined), + nock(url).get('/').reply(200, 'retry success!'), + ]; + + await service.createRequest(parameters).catch((err) => expect(err).toBeDefined()); + }); + it('should not retry after we call disableRetries', async () => { const scopes = [ nock(url).get('/').reply(500, undefined), From abad0017926b34f45a4bbdb6d4e59d97b90758d6 Mon Sep 17 00:00:00 2001 From: Phil Adams Date: Fri, 29 Apr 2022 11:12:16 -0500 Subject: [PATCH 2/3] test: fix lint error in test --- test/unit/retry.test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/unit/retry.test.js b/test/unit/retry.test.js index d17c4d9e7..2ec51f964 100644 --- a/test/unit/retry.test.js +++ b/test/unit/retry.test.js @@ -96,7 +96,11 @@ describe('Node Core retries', () => { nock(url).get('/').reply(200, 'retry success!'), ]; - await service.createRequest(parameters).catch((err) => expect(err).toBeDefined()); + let err; + await service.createRequest(parameters).catch((error) => { + err = error; + }); + expect(err).toBeDefined(); }); it('should not retry after we call disableRetries', async () => { From 903e64922145a688c0fa475076e67cb40d641cda Mon Sep 17 00:00:00 2001 From: Norbert Biczo Date: Mon, 2 May 2022 12:40:00 +0200 Subject: [PATCH 3/3] chore: fix status codes config for retry --- lib/request-wrapper.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/request-wrapper.ts b/lib/request-wrapper.ts index 4b9fb56eb..3351cf2be 100644 --- a/lib/request-wrapper.ts +++ b/lib/request-wrapper.ts @@ -365,7 +365,12 @@ export class RequestWrapper { retry: 4, // 4 retries by default retryDelay: 1000, // 1000 ms (1 sec) initial delay httpMethodsToRetry: ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT', 'POST'], - statusCodesToRetry: [[429], [500], [502, 599]], // do not retry on 501 + // do not retry on 501 + statusCodesToRetry: [ + [429, 429], + [500, 500], + [502, 599], + ], instance: axiosInstance, backoffType: 'exponential', checkRetryAfter: true, // use Retry-After header first