From 6fe1567a7c11e27c92e591fd9d4d357f28c8813c Mon Sep 17 00:00:00 2001 From: jrusso1020 Date: Wed, 2 Jun 2021 10:04:51 -0400 Subject: [PATCH 1/3] 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( From ca5f4002788ef6303a921fee2b363ef967f911a8 Mon Sep 17 00:00:00 2001 From: jrusso1020 Date: Wed, 2 Jun 2021 10:42:35 -0400 Subject: [PATCH 2/3] address feedback Signed-off-by: jrusso1020 --- .changeset/seven-badgers-marry.md | 2 +- .github/styles/vocab.txt | 4 ---- plugins/scaffolder-backend/src/service/router.ts | 8 ++++---- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.changeset/seven-badgers-marry.md b/.changeset/seven-badgers-marry.md index 929ae99fac..7f36b03aa4 100644 --- a/.changeset/seven-badgers-marry.md +++ b/.changeset/seven-badgers-marry.md @@ -2,4 +2,4 @@ '@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 +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 2d24e8393b..b8f028a2ae 100644 --- a/.github/styles/vocab.txt +++ b/.github/styles/vocab.txt @@ -241,10 +241,6 @@ 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 70fa58b027..e032a17561 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -105,16 +105,16 @@ export async function createRouter( ); const taskBroker = new StorageTaskBroker(databaseTaskStore, logger); const actionRegistry = new TemplateActionRegistry(); - const workers = new Array(taskWorkers || 1); - workers.map(_ => { + const workers = []; + for (let i = 0; i < (taskWorkers || 1); i++) { const worker = new TaskWorker({ logger, taskBroker, actionRegistry, workingDirectory, }); - return worker; - }); + workers.push(worker); + } const actionsToRegister = Array.isArray(actions) ? actions From f3865fcaaec45050cbaeec89bd4b57dcebbb3d4d Mon Sep 17 00:00:00 2001 From: jrusso1020 Date: Wed, 2 Jun 2021 11:10:37 -0400 Subject: [PATCH 3/3] fix changeset Signed-off-by: jrusso1020 --- .changeset/seven-badgers-marry.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/seven-badgers-marry.md b/.changeset/seven-badgers-marry.md index 7f36b03aa4..de9431c41b 100644 --- a/.changeset/seven-badgers-marry.md +++ b/.changeset/seven-badgers-marry.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-backend': minor +'@backstage/plugin-scaffolder-backend': patch --- -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 +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`