diff --git a/lerna.json b/lerna.json index 541ff34409..d762e6c26c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "$schema": "node_modules/lerna/schemas/lerna-schema.json", - "version": "2.29.10", + "version": "2.29.11", "npmClient": "yarn", "packages": [ "packages/*", diff --git a/packages/server/src/appMigrations/migrations.ts b/packages/server/src/appMigrations/migrations.ts index 14eb9d0923..7437753ada 100644 --- a/packages/server/src/appMigrations/migrations.ts +++ b/packages/server/src/appMigrations/migrations.ts @@ -10,6 +10,6 @@ export const MIGRATIONS: AppMigration[] = [ { id: "20240604153647_initial_sqs", func: m20240604153647_initial_sqs, - disabled: !env.SQS_SEARCH_ENABLE, + disabled: !(env.SQS_MIGRATION_ENABLE || env.SQS_SEARCH_ENABLE), }, ] diff --git a/packages/server/src/appMigrations/migrations/20240604153647_initial_sqs.ts b/packages/server/src/appMigrations/migrations/20240604153647_initial_sqs.ts index 800de1418a..da435705c1 100644 --- a/packages/server/src/appMigrations/migrations/20240604153647_initial_sqs.ts +++ b/packages/server/src/appMigrations/migrations/20240604153647_initial_sqs.ts @@ -40,7 +40,7 @@ const migration = async () => { // only do initial search if environment is using SQS already // initial search makes sure that all the indexes have been created // and are ready to use, avoiding any initial waits for large tables - if (env.SQS_SEARCH_ENABLE) { + if (env.SQS_MIGRATION_ENABLE || env.SQS_SEARCH_ENABLE) { const tables = await sdk.tables.getAllInternalTables() // do these one by one - running in parallel could cause problems for (let table of tables) { diff --git a/packages/server/src/appMigrations/migrations/tests/20240604153647_initial_sqs.spec.ts b/packages/server/src/appMigrations/migrations/tests/20240604153647_initial_sqs.spec.ts index 572e694855..0a34fb2bb4 100644 --- a/packages/server/src/appMigrations/migrations/tests/20240604153647_initial_sqs.spec.ts +++ b/packages/server/src/appMigrations/migrations/tests/20240604153647_initial_sqs.spec.ts @@ -66,64 +66,69 @@ function oldLinkDocument(): Omit { } } -async function sqsDisabled(cb: () => Promise) { - await config.withEnv({ SQS_SEARCH_ENABLE: "" }, cb) +type SQSEnvVar = "SQS_MIGRATION_ENABLE" | "SQS_SEARCH_ENABLE" + +async function sqsDisabled(envVar: SQSEnvVar, cb: () => Promise) { + await config.withEnv({ [envVar]: "" }, cb) } -async function sqsEnabled(cb: () => Promise) { - await config.withEnv({ SQS_SEARCH_ENABLE: "1" }, cb) +async function sqsEnabled(envVar: SQSEnvVar, cb: () => Promise) { + await config.withEnv({ [envVar]: "1" }, cb) } -beforeAll(async () => { - await sqsDisabled(async () => { - await config.init() - const table = await config.api.table.save(basicTable()) - tableId = table._id! - const db = dbCore.getDB(config.appId!) - // old link document - await db.put(oldLinkDocument()) - }) -}) - -describe("SQS migration", () => { - it("test migration runs as expected against an older DB", async () => { - const db = dbCore.getDB(config.appId!) - // confirm nothing exists initially - await sqsDisabled(async () => { - let error: any | undefined - try { - await db.get(SQLITE_DESIGN_DOC_ID) - } catch (err: any) { - error = err - } - expect(error).toBeDefined() - expect(error.status).toBe(404) - }) - await sqsEnabled(async () => { - await processMigrations(config.appId!, MIGRATIONS) - const designDoc = await db.get(SQLITE_DESIGN_DOC_ID) - expect(designDoc.sql.tables).toBeDefined() - const mainTableDef = designDoc.sql.tables[tableId] - expect(mainTableDef).toBeDefined() - expect(mainTableDef.fields[prefix("name")]).toEqual({ - field: "name", - type: SQLiteType.TEXT, +describe.each(["SQS_MIGRATION_ENABLE", "SQS_SEARCH_ENABLE"] as SQSEnvVar[])( + "SQS migration with (%s)", + envVar => { + beforeAll(async () => { + await sqsDisabled(envVar, async () => { + await config.init() + const table = await config.api.table.save(basicTable()) + tableId = table._id! + const db = dbCore.getDB(config.appId!) + // old link document + await db.put(oldLinkDocument()) }) - expect(mainTableDef.fields[prefix("description")]).toEqual({ - field: "description", - type: SQLiteType.TEXT, - }) - - const { tableId1, tableId2, rowId1, rowId2 } = oldLinkDocInfo() - const linkDoc = await db.get(oldLinkDocID()) - expect(linkDoc.tableId).toEqual( - generateJunctionTableID(tableId1, tableId2) - ) - // should have swapped the documents - expect(linkDoc.doc1.tableId).toEqual(tableId2) - expect(linkDoc.doc1.rowId).toEqual(rowId2) - expect(linkDoc.doc2.tableId).toEqual(tableId1) - expect(linkDoc.doc2.rowId).toEqual(rowId1) }) - }) -}) + + it("test migration runs as expected against an older DB", async () => { + const db = dbCore.getDB(config.appId!) + // confirm nothing exists initially + await sqsDisabled(envVar, async () => { + let error: any | undefined + try { + await db.get(SQLITE_DESIGN_DOC_ID) + } catch (err: any) { + error = err + } + expect(error).toBeDefined() + expect(error.status).toBe(404) + }) + await sqsEnabled(envVar, async () => { + await processMigrations(config.appId!, MIGRATIONS) + const designDoc = await db.get(SQLITE_DESIGN_DOC_ID) + expect(designDoc.sql.tables).toBeDefined() + const mainTableDef = designDoc.sql.tables[tableId] + expect(mainTableDef).toBeDefined() + expect(mainTableDef.fields[prefix("name")]).toEqual({ + field: "name", + type: SQLiteType.TEXT, + }) + expect(mainTableDef.fields[prefix("description")]).toEqual({ + field: "description", + type: SQLiteType.TEXT, + }) + + const { tableId1, tableId2, rowId1, rowId2 } = oldLinkDocInfo() + const linkDoc = await db.get(oldLinkDocID()) + expect(linkDoc.tableId).toEqual( + generateJunctionTableID(tableId1, tableId2) + ) + // should have swapped the documents + expect(linkDoc.doc1.tableId).toEqual(tableId2) + expect(linkDoc.doc1.rowId).toEqual(rowId2) + expect(linkDoc.doc2.tableId).toEqual(tableId1) + expect(linkDoc.doc2.rowId).toEqual(rowId1) + }) + }) + } +) diff --git a/packages/server/src/environment.ts b/packages/server/src/environment.ts index 91e99b8850..c8203392e6 100644 --- a/packages/server/src/environment.ts +++ b/packages/server/src/environment.ts @@ -89,6 +89,7 @@ const environment = { SQL_LOGGING_ENABLE: process.env.SQL_LOGGING_ENABLE, SQL_ALIASING_DISABLE: process.env.SQL_ALIASING_DISABLE, SQS_SEARCH_ENABLE: process.env.SQS_SEARCH_ENABLE, + SQS_MIGRATION_ENABLE: process.env.SQS_MIGRATION_ENABLE, // flags ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS, DISABLE_THREADING: process.env.DISABLE_THREADING,