diff --git a/src/services/decorators/RetryDecorator.ts b/src/services/decorators/RetryDecorator.ts index 410f0d860a..d25fbbb648 100644 --- a/src/services/decorators/RetryDecorator.ts +++ b/src/services/decorators/RetryDecorator.ts @@ -77,10 +77,7 @@ export default class RetryDecorator implements IDecorator { } } - protected _waitAfterRequestFailure(statusCode: number, retryNumber: number, retryTimeout: number) { - console.error( - `Request failed with status code [${statusCode}], will retry [${retryNumber}] time in [${retryTimeout}] ms`, - ) + protected _waitAfterRequestFailure(_statusCode: number, retryNumber: number, retryTimeout: number) { return new Promise((resolve) => setTimeout(resolve, retryTimeout * retryNumber)) } } diff --git a/test/unit/retryDecorator.spec.ts b/test/unit/retryDecorator.spec.ts new file mode 100644 index 0000000000..9a42c8c1ea --- /dev/null +++ b/test/unit/retryDecorator.spec.ts @@ -0,0 +1,23 @@ +import RetryDecorator from '../../src/services/decorators/RetryDecorator' + +describe('RetryDecorator', () => { + it('retries transient failures without writing to the application error log', async () => { + const errorLogger = spyOn(console, 'error') + const retryDecorator = new RetryDecorator(2) + retryDecorator.retryTimeout.INTERNAL_SERVER_ERROR = 0 + let attempts = 0 + const request = async () => { + attempts += 1 + if (attempts === 1) { + throw Object.assign(new Error('temporary failure'), { code: 500 }) + } + return 'success' + } + + const result = await retryDecorator.decorate(request)() + + expect(result).toBe('success') + expect(attempts).toBe(2) + expect(errorLogger).not.toHaveBeenCalled() + }) +})