From 7ddab188a0fdd7db1eec4cd01e3030962dcd3d48 Mon Sep 17 00:00:00 2001 From: Hao Luo Date: Thu, 10 Nov 2022 07:48:29 -0600 Subject: [PATCH] wait for pending to be available to claim task Signed-off-by: Hao Luo --- .../src/scaffolder/tasks/TaskWorker.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts index 9af818c421..e03cee846a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/TaskWorker.ts @@ -110,13 +110,26 @@ export class TaskWorker { start() { (async () => { for (;;) { - await this.taskQueue.onEmpty(); + await this.onReadyToClaimTask(); const task = await this.options.taskBroker.claim(); this.taskQueue.add(() => this.runOneTask(task)); } })(); } + onReadyToClaimTask(): Promise { + if (this.taskQueue.pending < this.options.concurrentTasksLimit) { + return Promise.resolve(); + } + return new Promise(resolve => { + // "next" event emits when a task completes + // https://github.com/sindresorhus/p-queue#next + this.taskQueue.on('next', () => { + resolve(); + }); + }); + } + async runOneTask(task: TaskContext) { try { if (task.spec.apiVersion !== 'scaffolder.backstage.io/v1beta3') {