From 85ab9ed2ed356694817ad7f0bd3ba1266f9d6ae4 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Fri, 7 Jun 2024 18:09:48 +0100 Subject: [PATCH] Adding a try catch to log if something in the app migration queue fails to process. --- .../src/appMigrations/migrationsProcessor.ts | 59 ++++++++++--------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/packages/server/src/appMigrations/migrationsProcessor.ts b/packages/server/src/appMigrations/migrationsProcessor.ts index 8d119f3864..9945ce4f66 100644 --- a/packages/server/src/appMigrations/migrationsProcessor.ts +++ b/packages/server/src/appMigrations/migrationsProcessor.ts @@ -1,4 +1,4 @@ -import { context, locks } from "@budibase/backend-core" +import { context, locks, logging } from "@budibase/backend-core" import { LockName, LockType } from "@budibase/types" import { @@ -20,37 +20,42 @@ export async function processMigrations( resource: appId, }, async () => { - await context.doInAppMigrationContext(appId, async () => { - let currentVersion = await getAppMigrationVersion(appId) + try { + await context.doInAppMigrationContext(appId, async () => { + let currentVersion = await getAppMigrationVersion(appId) - const pendingMigrations = migrations - .filter(m => m.id > currentVersion) - .sort((a, b) => a.id.localeCompare(b.id)) + const pendingMigrations = migrations + .filter(m => m.id > currentVersion) + .sort((a, b) => a.id.localeCompare(b.id)) - const migrationIds = migrations.map(m => m.id).sort() + const migrationIds = migrations.map(m => m.id).sort() - let index = 0 - for (const { id, func } of pendingMigrations) { - const expectedMigration = - migrationIds[migrationIds.indexOf(currentVersion) + 1] + let index = 0 + for (const { id, func } of pendingMigrations) { + const expectedMigration = + migrationIds[migrationIds.indexOf(currentVersion) + 1] - if (expectedMigration !== id) { - throw `Migration ${id} could not run, update for "${id}" is running but ${expectedMigration} is expected` + if (expectedMigration !== id) { + throw `Migration ${id} could not run, update for "${id}" is running but ${expectedMigration} is expected` + } + + const counter = `(${++index}/${pendingMigrations.length})` + console.info(`Running migration ${id}... ${counter}`, { + migrationId: id, + appId, + }) + await func() + await updateAppMigrationMetadata({ + appId, + version: id, + }) + currentVersion = id } - - const counter = `(${++index}/${pendingMigrations.length})` - console.info(`Running migration ${id}... ${counter}`, { - migrationId: id, - appId, - }) - await func() - await updateAppMigrationMetadata({ - appId, - version: id, - }) - currentVersion = id - } - }) + }) + } catch (err) { + logging.logAlert("Failed to run app migration", err) + throw err + } } )