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') {