From 6fe1567a7c11e27c92e591fd9d4d357f28c8813c Mon Sep 17 00:00:00 2001 From: jrusso1020 Date: Wed, 2 Jun 2021 10:04:51 -0400 Subject: [PATCH] Allow configurable number of taskworkers Right now we are limited to one taskworker in the scaffolder backend which means you can only scaffold one thing at a time. This is a poor user experience for larger organizations where multiple users maybe scaffolding at the same time. This adds an optional configuration option to increase the number of taskworkers via the router options if you like, but defaults to 1 if not set. Signed-off-by: jrusso1020 --- .changeset/seven-badgers-marry.md | 5 +++++ .github/styles/vocab.txt | 4 ++++ .../scaffolder-backend/src/service/router.ts | 19 ++++++++++++------- 3 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 .changeset/seven-badgers-marry.md diff --git a/.changeset/seven-badgers-marry.md b/.changeset/seven-badgers-marry.md new file mode 100644 index 0000000000..929ae99fac --- /dev/null +++ b/.changeset/seven-badgers-marry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +This adds a configuration option to the scaffolder plugin router, so we can allow for multiple taskworkers. Currently with only one taskworker you are limited to scaffolding one thing at a time. Set the `taskWorkers?: number` option in your scaffolder router to get more than 1 taskworker diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt index b8f028a2ae..2d24e8393b 100644 --- a/.github/styles/vocab.txt +++ b/.github/styles/vocab.txt @@ -241,6 +241,10 @@ supertype talkdesk Talkdesk tasklist +taskworker +Taskworker +taskworkers +Taskworkers techdocs Telenor templated diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index dc8e69eb46..70fa58b027 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -58,6 +58,7 @@ export interface RouterOptions { database: PluginDatabaseManager; catalogClient: CatalogApi; actions?: TemplateAction[]; + taskWorkers?: number; } function isAlpha1Template( @@ -91,6 +92,7 @@ export async function createRouter( database, catalogClient, actions, + taskWorkers, } = options; const logger = parentLogger.child({ plugin: 'scaffolder' }); @@ -103,11 +105,15 @@ export async function createRouter( ); const taskBroker = new StorageTaskBroker(databaseTaskStore, logger); const actionRegistry = new TemplateActionRegistry(); - const worker = new TaskWorker({ - logger, - taskBroker, - actionRegistry, - workingDirectory, + const workers = new Array(taskWorkers || 1); + workers.map(_ => { + const worker = new TaskWorker({ + logger, + taskBroker, + actionRegistry, + workingDirectory, + }); + return worker; }); const actionsToRegister = Array.isArray(actions) @@ -127,8 +133,7 @@ export async function createRouter( ]; actionsToRegister.forEach(action => actionRegistry.register(action)); - - worker.start(); + workers.forEach(worker => worker.start()); router .get(