diff --git a/keyserver/src/database/migration-config.js b/keyserver/src/database/migration-config.js --- a/keyserver/src/database/migration-config.js +++ b/keyserver/src/database/migration-config.js @@ -38,9 +38,13 @@ const botViewer = createScriptViewer(bots.commbot.userID); +export type MigrationType = + | 'wrap_in_transaction_and_block_requests' + | 'run_simultaneously_with_requests'; export type Migration = { +version: number, +migrationPromise: () => Promise, + +migrationType?: MigrationType, }; const migrations: $ReadOnlyArray = [ @@ -50,6 +54,7 @@ await makeSureBaseRoutePathExists('facts/commapp_url.json'); await makeSureBaseRoutePathExists('facts/squadcal_url.json'); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 1, @@ -58,6 +63,7 @@ await fs.promises.unlink('facts/url.json'); } catch {} }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 2, @@ -65,17 +71,20 @@ await fixBaseRoutePathForLocalhost('facts/commapp_url.json'); await fixBaseRoutePathForLocalhost('facts/squadcal_url.json'); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 3, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 4, migrationPromise: async () => { await dbQuery(SQL`ALTER TABLE uploads ADD INDEX container (container)`); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 5, @@ -87,6 +96,7 @@ ADD social_proof varchar(255) DEFAULT NULL; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 7, @@ -103,6 +113,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 8, @@ -114,6 +125,7 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 9, @@ -129,6 +141,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 10, @@ -143,6 +156,7 @@ ) ENGINE=InnoDB DEFAULT CHARSET=utf8; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 11, @@ -155,6 +169,7 @@ FROM users `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 12, @@ -167,6 +182,7 @@ ) ENGINE=InnoDB DEFAULT CHARSET=utf8; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 13, @@ -177,6 +193,7 @@ moveToNonApacheConfig('facts/landing_url.json', '/commlanding/'), ]); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 14, @@ -185,6 +202,7 @@ ALTER TABLE cookies MODIFY COLUMN social_proof mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 15, @@ -204,6 +222,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 16, @@ -222,6 +241,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 17, @@ -241,12 +261,18 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 18, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', + }, + { + version: 19, + migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, - { version: 19, migrationPromise: updateRolesAndPermissionsForAllThreads }, { version: 20, migrationPromise: async () => { @@ -257,6 +283,7 @@ DEFAULT NULL; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 21, @@ -268,6 +295,7 @@ (user, type, platform, creation_time); `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 22, @@ -316,14 +344,17 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 23, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 24, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 25, @@ -343,10 +374,12 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 26, migrationPromise: processMessagesInDBForSearch, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 27, @@ -358,6 +391,7 @@ ADD INDEX IF NOT EXISTS thread_pinned (thread, pinned); `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 28, @@ -367,16 +401,19 @@ ADD COLUMN IF NOT EXISTS pinned_count int UNSIGNED NOT NULL DEFAULT 0; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 29, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 30, migrationPromise: async () => { await dbQuery(SQL`DROP TABLE versions;`); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 31, @@ -401,6 +438,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 32, @@ -411,6 +449,7 @@ WHERE type = ${messageTypes.SIDEBAR_SOURCE}; `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 33, @@ -432,6 +471,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 34, @@ -455,16 +495,19 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 35, migrationPromise: async () => { await createOlmAccounts(); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 36, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 37, @@ -478,6 +521,7 @@ ); await createOlmAccounts(); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 38, @@ -513,10 +557,12 @@ ); } }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 39, migrationPromise: ensureUserCredentials, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 40, @@ -528,6 +574,7 @@ MODIFY COLUMN data VARCHAR(1023) `, ), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 41, @@ -539,6 +586,7 @@ ADD KEY user_role_thread (user, role, thread) `, ), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 42, @@ -548,6 +596,7 @@ ADD UNIQUE KEY thread_name (thread, name); `); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 43, @@ -563,6 +612,7 @@ ) `, ), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 44, @@ -587,6 +637,7 @@ ), ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 45, @@ -605,6 +656,7 @@ CHARSET latin1 COLLATE latin1_swedish_ci NOT NULL; `, ), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 46, @@ -622,11 +674,13 @@ } } }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 47, migrationPromise: () => dbQuery(SQL`ALTER TABLE cookies MODIFY COLUMN hash char(64) NOT NULL`), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 48, @@ -659,6 +713,7 @@ `; await dbQuery(query); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 49, @@ -671,6 +726,7 @@ }; await writeJSONToFile(defaultCorsConfig, 'facts/webapp_cors.json'); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 50, @@ -678,6 +734,7 @@ await moveToNonApacheConfig('facts/webapp_url.json', '/webapp/'); await moveToNonApacheConfig('facts/keyserver_url.json', '/keyserver/'); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 51, @@ -706,6 +763,7 @@ await dbQuery(updateQuery); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 52, @@ -720,6 +778,7 @@ await updateRolesAndPermissionsForAllThreads(); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 53, @@ -728,6 +787,7 @@ ALTER TABLE invite_links ADD COLUMN blob_holder char(36) CHARSET latin1 `), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 54, @@ -747,6 +807,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 55, @@ -758,6 +819,7 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 56, @@ -770,10 +832,12 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 57, migrationPromise: synchronizeInviteLinksWithBlobs, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 58, @@ -785,10 +849,12 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 59, migrationPromise: () => dbQuery(SQL`DROP TABLE one_time_keys`), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 60, @@ -802,6 +868,7 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 61, @@ -813,6 +880,7 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 62, @@ -824,6 +892,7 @@ `, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 63, @@ -844,6 +913,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 64, @@ -867,6 +937,7 @@ { multipleStatements: true }, ); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 65, @@ -877,18 +948,22 @@ ADD COLUMN IF NOT EXISTS thread_role bigint(20) DEFAULT NULL, ADD INDEX IF NOT EXISTS community_thread (community, thread); `), + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 66, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 67, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 68, migrationPromise: updateRolesAndPermissionsForAllThreads, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 69, @@ -944,6 +1019,7 @@ await updateRolesAndPermissionsForAllThreads(); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, { version: 70, @@ -974,6 +1050,7 @@ const relationshipRows = relationshipChangeset.getRows(); await updateChangedUndirectedRelationships(relationshipRows); }, + migrationType: 'wrap_in_transaction_and_block_requests', }, ]; const versions: $ReadOnlyArray = migrations.map(