From ebe3c9f81ff8e944eb0e7c4fb34523ed96585005 Mon Sep 17 00:00:00 2001 From: Mike Cote Date: Thu, 24 Oct 2024 09:06:17 -0400 Subject: [PATCH 1/2] Initial commit --- .../server/polling/task_poller.test.ts | 31 +++++++++++++++++++ .../server/polling/task_poller.ts | 9 +++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/x-pack/plugins/task_manager/server/polling/task_poller.test.ts b/x-pack/plugins/task_manager/server/polling/task_poller.test.ts index e902b45d3ff04..d7f9a467a525d 100644 --- a/x-pack/plugins/task_manager/server/polling/task_poller.test.ts +++ b/x-pack/plugins/task_manager/server/polling/task_poller.test.ts @@ -266,6 +266,37 @@ describe('TaskPoller', () => { expect(handler.mock.calls[0][0].error.stack).toContain(workError.stack); }); + test('still logs errors when they are thrown as strings', async () => { + const pollInterval = 100; + + const handler = jest.fn(); + const workError = 'failed to work'; + const poller = createTaskPoller({ + initialPollInterval: pollInterval, + logger: loggingSystemMock.create().get(), + pollInterval$: of(pollInterval), + pollIntervalDelay$: of(0), + work: async (...args) => { + throw workError; + }, + getCapacity: () => 5, + }); + poller.events$.subscribe(handler); + poller.start(); + + clock.tick(pollInterval); + await new Promise((resolve) => setImmediate(resolve)); + + const expectedError = new PollingError( + 'Failed to poll for work: failed to work', + PollingErrorType.WorkError, + none + ); + expect(handler).toHaveBeenCalledWith(asErr(expectedError)); + expect(handler.mock.calls[0][0].error.type).toEqual(PollingErrorType.WorkError); + expect(handler.mock.calls[0][0].error.stack).toBeDefined(); + }); + test('continues polling after work fails', async () => { const pollInterval = 100; diff --git a/x-pack/plugins/task_manager/server/polling/task_poller.ts b/x-pack/plugins/task_manager/server/polling/task_poller.ts index d61f417d40805..fcc58dff34122 100644 --- a/x-pack/plugins/task_manager/server/polling/task_poller.ts +++ b/x-pack/plugins/task_manager/server/polling/task_poller.ts @@ -151,7 +151,14 @@ export enum PollingErrorType { } function asPollingError(err: Error, type: PollingErrorType, data: Option = none) { - return asErr(new PollingError(`Failed to poll for work: ${err.message}`, type, data, err)); + return asErr( + new PollingError( + `Failed to poll for work: ${err.message || err}`, + type, + data, + typeof err === 'string' ? new Error(err) : err + ) + ); } export class PollingError extends Error { From 44087899b71eae447b9afe8c6451afd0bbf6a1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20C=C3=B4t=C3=A9?= Date: Thu, 24 Oct 2024 09:25:12 -0400 Subject: [PATCH 2/2] Update x-pack/plugins/task_manager/server/polling/task_poller.ts Co-authored-by: Patrick Mueller --- x-pack/plugins/task_manager/server/polling/task_poller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugins/task_manager/server/polling/task_poller.ts b/x-pack/plugins/task_manager/server/polling/task_poller.ts index fcc58dff34122..cdf4a41b5587c 100644 --- a/x-pack/plugins/task_manager/server/polling/task_poller.ts +++ b/x-pack/plugins/task_manager/server/polling/task_poller.ts @@ -156,7 +156,7 @@ function asPollingError(err: Error, type: PollingErrorType, data: Option = `Failed to poll for work: ${err.message || err}`, type, data, - typeof err === 'string' ? new Error(err) : err + err instanceof Error ? err : new Error(`${err}`) ) ); }