From 139a784ad4aa722bc23f757a716d614ccb4f1d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 20 May 2026 09:44:31 +0200 Subject: [PATCH] Skip transaction wrapping when locking is not used MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only wrap the SELECT+UPDATE in a transaction for MySQL/PostgreSQL where FOR UPDATE SKIP LOCKED is actually used. For sqlite3 the transaction adds unnecessary BEGIN/COMMIT overhead. Co-Authored-By: Claude Opus 4.6 (1M context) Signed-off-by: Fredrik Adelöw --- .../src/database/DefaultProcessingDatabase.ts | 7 ++++--- .../operations/stitcher/getDeferredStitchableEntities.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts index 1c793eb0fc..bd32582b12 100644 --- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts @@ -263,9 +263,10 @@ export class DefaultProcessingDatabase implements ProcessingDatabase { return items; }; - const items = knex.isTransaction - ? await run(knex) - : await knex.transaction(run); + const items = + knex.isTransaction || !useLocking + ? await run(knex) + : await knex.transaction(run); return { items: items.map( diff --git a/plugins/catalog-backend/src/database/operations/stitcher/getDeferredStitchableEntities.ts b/plugins/catalog-backend/src/database/operations/stitcher/getDeferredStitchableEntities.ts index 4ed41e9308..0b77167ca3 100644 --- a/plugins/catalog-backend/src/database/operations/stitcher/getDeferredStitchableEntities.ts +++ b/plugins/catalog-backend/src/database/operations/stitcher/getDeferredStitchableEntities.ts @@ -92,7 +92,7 @@ export async function getDeferredStitchableEntities(options: { })); }; - if (knex.isTransaction) { + if (knex.isTransaction || !useLocking) { return run(knex); } return knex.transaction(run);