diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts index fd9d8363eb5c20..35aa255341f978 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.test.ts @@ -2304,6 +2304,32 @@ describe('TaskManagerRunner', () => { expect(runner.isAdHocTaskAndOutOfAttempts).toEqual(true); }); + + it(`should return true if attempts = max attempts and in claiming status`, async () => { + const { runner } = await pendingStageSetup({ + instance: { + id: 'foo', + taskType: 'testbar', + attempts: 5, + status: TaskStatus.Claiming, + }, + }); + + expect(runner.isAdHocTaskAndOutOfAttempts).toEqual(true); + }); + + it(`should return false if attempts = max attempts and in running status`, async () => { + const { runner } = await pendingStageSetup({ + instance: { + id: 'foo', + taskType: 'testbar', + attempts: 5, + status: TaskStatus.Running, + }, + }); + + expect(runner.isAdHocTaskAndOutOfAttempts).toEqual(false); + }); }); describe('removeTask()', () => { diff --git a/x-pack/plugins/task_manager/server/task_running/task_runner.ts b/x-pack/plugins/task_manager/server/task_running/task_runner.ts index 002fcfec1a41ec..f125aee5952ce6 100644 --- a/x-pack/plugins/task_manager/server/task_running/task_runner.ts +++ b/x-pack/plugins/task_manager/server/task_running/task_runner.ts @@ -294,6 +294,10 @@ export class TaskManagerRunner implements TaskRunner { * running a task, the task should be deleted instead of ran. */ public get isAdHocTaskAndOutOfAttempts() { + if (this.instance.task.status === 'running') { + // This function gets called with tasks marked as running when using MGET, so attempts is already incremented + return !this.instance.task.schedule && this.instance.task.attempts > this.getMaxAttempts(); + } return !this.instance.task.schedule && this.instance.task.attempts >= this.getMaxAttempts(); }