@prairielearn/migrations 2.0.13 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/batched-migrations/batched-migration-job.js +1 -1
- package/dist/batched-migrations/batched-migration-job.js.map +1 -1
- package/dist/batched-migrations/batched-migration-runner.js +10 -6
- package/dist/batched-migrations/batched-migration-runner.js.map +1 -1
- package/dist/batched-migrations/batched-migration-runner.test.js +2 -2
- package/dist/batched-migrations/batched-migration-runner.test.js.map +1 -1
- package/dist/batched-migrations/batched-migration.js +5 -5
- package/dist/batched-migrations/batched-migration.js.map +1 -1
- package/dist/batched-migrations/batched-migrations-runner.js +22 -13
- package/dist/batched-migrations/batched-migrations-runner.js.map +1 -1
- package/package.json +9 -9
- package/src/batched-migrations/batched-migration-job.ts +2 -2
- package/src/batched-migrations/batched-migration-runner.test.ts +3 -8
- package/src/batched-migrations/batched-migration-runner.ts +7 -13
- package/src/batched-migrations/batched-migration.ts +8 -20
- package/src/batched-migrations/batched-migrations-runner.ts +28 -17
- package/tsconfig.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @prairielearn/migrations
|
|
2
2
|
|
|
3
|
+
## 2.0.15
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [79c74ca]
|
|
8
|
+
- @prairielearn/named-locks@2.0.0
|
|
9
|
+
|
|
10
|
+
## 2.0.14
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- dce0fa3: Upgrade all JavaScript dependencies
|
|
15
|
+
- Updated dependencies [dce0fa3]
|
|
16
|
+
- @prairielearn/named-locks@1.5.11
|
|
17
|
+
- @prairielearn/postgres@1.9.1
|
|
18
|
+
- @prairielearn/logger@1.0.12
|
|
19
|
+
- @prairielearn/error@1.0.13
|
|
20
|
+
|
|
3
21
|
## 2.0.13
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -19,7 +19,7 @@ exports.BatchedMigrationJobRowSchema = zod_1.z.object({
|
|
|
19
19
|
data: zod_1.z.unknown(),
|
|
20
20
|
});
|
|
21
21
|
async function selectRecentJobsWithStatus(batchedMigrationId, status, limit) {
|
|
22
|
-
return (0, postgres_1.
|
|
22
|
+
return await (0, postgres_1.queryRows)(sql.select_recent_jobs_with_status, { batched_migration_id: batchedMigrationId, status, limit }, exports.BatchedMigrationJobRowSchema);
|
|
23
23
|
}
|
|
24
24
|
exports.selectRecentJobsWithStatus = selectRecentJobsWithStatus;
|
|
25
25
|
//# sourceMappingURL=batched-migration-job.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batched-migration-job.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-job.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"batched-migration-job.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-job.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,qDAAiE;AAEjE,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;AAExB,QAAA,+BAA+B,GAAG,OAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAG7E,QAAA,4BAA4B,GAAG,OAAC,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;IACd,oBAAoB,EAAE,OAAC,CAAC,MAAM,EAAE;IAChC,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,EAAE,uCAA+B;IACvC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,OAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IAChC,IAAI,EAAE,OAAC,CAAC,OAAO,EAAE;CAClB,CAAC,CAAC;AAGI,KAAK,UAAU,0BAA0B,CAC9C,kBAA0B,EAC1B,MAAiC,EACjC,KAAa;IAEb,OAAO,MAAM,IAAA,oBAAS,EACpB,GAAG,CAAC,8BAA8B,EAClC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,EAC3D,oCAA4B,CAC7B,CAAC;AACJ,CAAC;AAVD,gEAUC"}
|
|
@@ -9,6 +9,10 @@ const batched_migration_1 = require("./batched-migration");
|
|
|
9
9
|
const batched_migration_job_1 = require("./batched-migration-job");
|
|
10
10
|
const sql = (0, postgres_1.loadSqlEquiv)(__filename);
|
|
11
11
|
class BatchedMigrationRunner {
|
|
12
|
+
options;
|
|
13
|
+
migration;
|
|
14
|
+
migrationImplementation;
|
|
15
|
+
migrationStatus;
|
|
12
16
|
constructor(migration, migrationImplementation, options = {}) {
|
|
13
17
|
this.options = options;
|
|
14
18
|
this.migration = migration;
|
|
@@ -21,13 +25,13 @@ class BatchedMigrationRunner {
|
|
|
21
25
|
}
|
|
22
26
|
}
|
|
23
27
|
async hasIncompleteJobs(migration) {
|
|
24
|
-
return (0, postgres_1.
|
|
28
|
+
return await (0, postgres_1.queryRow)(sql.batched_migration_has_incomplete_jobs, { batched_migration_id: migration.id }, zod_1.z.boolean());
|
|
25
29
|
}
|
|
26
30
|
async hasFailedJobs(migration) {
|
|
27
|
-
return (0, postgres_1.
|
|
31
|
+
return await (0, postgres_1.queryRow)(sql.batched_migration_has_failed_jobs, { batched_migration_id: migration.id }, zod_1.z.boolean());
|
|
28
32
|
}
|
|
29
33
|
async refreshMigrationStatus(migration) {
|
|
30
|
-
this.migrationStatus = await (0, postgres_1.
|
|
34
|
+
this.migrationStatus = await (0, postgres_1.queryRow)(sql.get_migration_status, {
|
|
31
35
|
id: migration.id,
|
|
32
36
|
}, batched_migration_1.BatchedMigrationStatusSchema);
|
|
33
37
|
}
|
|
@@ -44,7 +48,7 @@ class BatchedMigrationRunner {
|
|
|
44
48
|
this.log(`Finished with status '${finalStatus}'`);
|
|
45
49
|
}
|
|
46
50
|
async getNextBatchBounds(migration) {
|
|
47
|
-
const lastJob = await (0, postgres_1.
|
|
51
|
+
const lastJob = await (0, postgres_1.queryOptionalRow)(sql.select_last_batched_migration_job, { batched_migration_id: migration.id }, batched_migration_job_1.BatchedMigrationJobRowSchema);
|
|
48
52
|
const nextMin = lastJob ? lastJob.max_value + 1n : migration.min_value;
|
|
49
53
|
if (nextMin > migration.max_value)
|
|
50
54
|
return null;
|
|
@@ -80,7 +84,7 @@ class BatchedMigrationRunner {
|
|
|
80
84
|
async getOrCreateNextMigrationJob(migration) {
|
|
81
85
|
const nextBatchBounds = await this.getNextBatchBounds(migration);
|
|
82
86
|
if (nextBatchBounds) {
|
|
83
|
-
return (0, postgres_1.
|
|
87
|
+
return await (0, postgres_1.queryRow)(sql.insert_batched_migration_job, {
|
|
84
88
|
batched_migration_id: migration.id,
|
|
85
89
|
min_value: nextBatchBounds[0],
|
|
86
90
|
max_value: nextBatchBounds[1],
|
|
@@ -90,7 +94,7 @@ class BatchedMigrationRunner {
|
|
|
90
94
|
// Pick up any old pending jobs from this migration. These will only exist if
|
|
91
95
|
// an admin manually elected to retry all failed jobs; we'll never automatically
|
|
92
96
|
// transition failed jobs back to pending.
|
|
93
|
-
return (0, postgres_1.
|
|
97
|
+
return await (0, postgres_1.queryOptionalRow)(sql.select_first_pending_batched_migration_job, { batched_migration_id: migration.id }, batched_migration_job_1.BatchedMigrationJobRowSchema);
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
async runMigrationJob(migration, migrationImplementation) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batched-migration-runner.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-runner.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"batched-migration-runner.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,10 +64,10 @@ function makeTestBatchMigration() {
|
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
async function getBatchedMigration(migrationId) {
|
|
67
|
-
return (0, postgres_1.
|
|
67
|
+
return await (0, postgres_1.queryRow)('SELECT * FROM batched_migrations WHERE id = $id;', { id: migrationId }, batched_migration_1.BatchedMigrationRowSchema);
|
|
68
68
|
}
|
|
69
69
|
async function getBatchedMigrationJobs(migrationId) {
|
|
70
|
-
return (0, postgres_1.
|
|
70
|
+
return await (0, postgres_1.queryRows)('SELECT * FROM batched_migration_jobs WHERE batched_migration_id = $batched_migration_id ORDER BY id ASC;', { batched_migration_id: migrationId }, batched_migration_job_1.BatchedMigrationJobRowSchema);
|
|
71
71
|
}
|
|
72
72
|
async function resetFailedBatchedMigrationJobs(migrationId) {
|
|
73
73
|
await (0, postgres_1.queryAsync)("UPDATE batched_migration_jobs SET status = 'pending', updated_at = CURRENT_TIMESTAMP WHERE batched_migration_id = $batched_migration_id AND status = 'failed'", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batched-migration-runner.test.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-runner.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA8B;AAC9B,
|
|
1
|
+
{"version":3,"file":"batched-migration-runner.test.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration-runner.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,23 +47,23 @@ exports.validateBatchedMigrationImplementation = validateBatchedMigrationImpleme
|
|
|
47
47
|
* project/timestamp pair, returns null, otherwise returns the inserted row.
|
|
48
48
|
*/
|
|
49
49
|
async function insertBatchedMigration(migration) {
|
|
50
|
-
return (0, postgres_1.
|
|
50
|
+
return await (0, postgres_1.queryOptionalRow)(sql.insert_batched_migration, migration, exports.BatchedMigrationRowSchema);
|
|
51
51
|
}
|
|
52
52
|
exports.insertBatchedMigration = insertBatchedMigration;
|
|
53
53
|
async function selectAllBatchedMigrations(project) {
|
|
54
|
-
return (0, postgres_1.
|
|
54
|
+
return await (0, postgres_1.queryRows)(sql.select_all_batched_migrations, { project }, exports.BatchedMigrationRowSchema);
|
|
55
55
|
}
|
|
56
56
|
exports.selectAllBatchedMigrations = selectAllBatchedMigrations;
|
|
57
57
|
async function selectBatchedMigration(project, id) {
|
|
58
|
-
return (0, postgres_1.
|
|
58
|
+
return await (0, postgres_1.queryRow)(sql.select_batched_migration, { project, id }, exports.BatchedMigrationRowSchema);
|
|
59
59
|
}
|
|
60
60
|
exports.selectBatchedMigration = selectBatchedMigration;
|
|
61
61
|
async function selectBatchedMigrationForTimestamp(project, timestamp) {
|
|
62
|
-
return (0, postgres_1.
|
|
62
|
+
return await (0, postgres_1.queryRow)(sql.select_batched_migration_for_timestamp, { project, timestamp }, exports.BatchedMigrationRowSchema);
|
|
63
63
|
}
|
|
64
64
|
exports.selectBatchedMigrationForTimestamp = selectBatchedMigrationForTimestamp;
|
|
65
65
|
async function updateBatchedMigrationStatus(id, status) {
|
|
66
|
-
return (0, postgres_1.
|
|
66
|
+
return await (0, postgres_1.queryRow)(sql.update_batched_migration_status, { id, status }, exports.BatchedMigrationRowSchema);
|
|
67
67
|
}
|
|
68
68
|
exports.updateBatchedMigrationStatus = updateBatchedMigrationStatus;
|
|
69
69
|
async function retryFailedBatchedMigrationJobs(project, id) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batched-migration.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration.ts"],"names":[],"mappings":";;;AAAA,qDAMgC;AAChC,6BAAwB;AAExB,MAAM,GAAG,GAAG,IAAA,uBAAY,EAAC,UAAU,CAAC,CAAC;AAExB,QAAA,4BAA4B,GAAG,OAAC,CAAC,IAAI,CAAC;IACjD,SAAS;IACT,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAGU,QAAA,yBAAyB,GAAG,OAAC,CAAC,MAAM,CAAC;IAChD,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;IACrB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,MAAM,EAAE,oCAA4B;IACpC,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CAChC,CAAC,CAAC;AAcH;;GAEG;AACH,SAAgB,oBAAoB,CAA2C,GAAM;IACnF,sCAAsC,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAHD,oDAGC;AAED,SAAgB,sCAAsC,CACpD,GAAmC;IAEnC,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AATD,wFASC;AAOD;;;GAGG;AACI,KAAK,UAAU,sBAAsB,CAC1C,SAA8B;IAE9B,OAAO,IAAA,
|
|
1
|
+
{"version":3,"file":"batched-migration.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,23 +42,25 @@ const DEFAULT_WORK_DURATION_MS = 60000;
|
|
|
42
42
|
const DEFAULT_SLEEP_DURATION_MS = 30000;
|
|
43
43
|
const EXTENSIONS = ['.js', '.ts', '.mjs', '.mts'];
|
|
44
44
|
class BatchedMigrationsRunner extends node_events_1.default {
|
|
45
|
+
options;
|
|
46
|
+
lockName;
|
|
47
|
+
running = false;
|
|
48
|
+
migrationFiles = null;
|
|
49
|
+
abortController = new AbortController();
|
|
45
50
|
constructor(options) {
|
|
46
51
|
super();
|
|
47
|
-
this.running = false;
|
|
48
|
-
this.migrationFiles = null;
|
|
49
|
-
this.abortController = new AbortController();
|
|
50
|
-
this.getMigrationFiles = async () => {
|
|
51
|
-
if (!this.migrationFiles) {
|
|
52
|
-
this.migrationFiles = await (0, load_migrations_1.readAndValidateMigrationsFromDirectories)(this.options.directories, EXTENSIONS);
|
|
53
|
-
}
|
|
54
|
-
return this.migrationFiles;
|
|
55
|
-
};
|
|
56
52
|
this.options = options;
|
|
57
53
|
this.lockName = `batched-migrations:${this.options.project}`;
|
|
58
54
|
}
|
|
59
55
|
lockNameForTimestamp(timestamp) {
|
|
60
56
|
return `${this.lockName}:${timestamp}`;
|
|
61
57
|
}
|
|
58
|
+
getMigrationFiles = async () => {
|
|
59
|
+
if (!this.migrationFiles) {
|
|
60
|
+
this.migrationFiles = await (0, load_migrations_1.readAndValidateMigrationsFromDirectories)(this.options.directories, EXTENSIONS);
|
|
61
|
+
}
|
|
62
|
+
return this.migrationFiles;
|
|
63
|
+
};
|
|
62
64
|
async getMigrationForIdentifier(identifier) {
|
|
63
65
|
const timestamp = identifier.split('_')[0];
|
|
64
66
|
const migrationFiles = await this.getMigrationFiles();
|
|
@@ -173,10 +175,13 @@ class BatchedMigrationsRunner extends node_events_1.default {
|
|
|
173
175
|
}
|
|
174
176
|
}
|
|
175
177
|
async getOrStartMigration() {
|
|
176
|
-
return (0, named_locks_1.
|
|
177
|
-
|
|
178
|
+
return (0, named_locks_1.doWithLock)(this.lockName, {
|
|
179
|
+
// Don't fail if the lock couldn't be acquired immediately.
|
|
180
|
+
onNotAcquired: () => null,
|
|
181
|
+
}, async () => {
|
|
182
|
+
let migration = await (0, postgres_1.queryOptionalRow)(sql.select_running_migration, { project: this.options.project }, batched_migration_1.BatchedMigrationRowSchema);
|
|
178
183
|
if (!migration) {
|
|
179
|
-
migration = await (0, postgres_1.
|
|
184
|
+
migration = await (0, postgres_1.queryOptionalRow)(sql.start_next_pending_migration, { project: this.options.project }, batched_migration_1.BatchedMigrationRowSchema);
|
|
180
185
|
}
|
|
181
186
|
return migration;
|
|
182
187
|
});
|
|
@@ -194,7 +199,11 @@ class BatchedMigrationsRunner extends node_events_1.default {
|
|
|
194
199
|
return false;
|
|
195
200
|
}
|
|
196
201
|
let didWork = false;
|
|
197
|
-
await (0, named_locks_1.
|
|
202
|
+
await (0, named_locks_1.doWithLock)(this.lockNameForTimestamp(migrationFile.timestamp), {
|
|
203
|
+
autoRenew: true,
|
|
204
|
+
// Do nothing if the lock could not immediately be acquired.
|
|
205
|
+
onNotAcquired: () => null,
|
|
206
|
+
}, async () => {
|
|
198
207
|
didWork = true;
|
|
199
208
|
const migrationImplementation = await this.loadMigrationImplementation(migrationFile);
|
|
200
209
|
const runner = new batched_migration_runner_1.BatchedMigrationRunner(migration, migrationImplementation);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batched-migrations-runner.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migrations-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAuC;AACvC,0DAA6B;AAC7B,mDAA2D;AAC3D,
|
|
1
|
+
{"version":3,"file":"batched-migrations-runner.js","sourceRoot":"","sources":["../../src/batched-migrations/batched-migrations-runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/migrations",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,26 +10,26 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc && tscp",
|
|
12
12
|
"dev": "tsc --watch --preserveWatchOutput & tscp --watch",
|
|
13
|
-
"test": "mocha --no-config --require
|
|
13
|
+
"test": "mocha --no-config --require tsx src/**/*.test.ts"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@prairielearn/tsconfig": "^0.0.0",
|
|
17
17
|
"@types/fs-extra": "^11.0.4",
|
|
18
18
|
"@types/mocha": "^10.0.6",
|
|
19
|
-
"@types/node": "^
|
|
20
|
-
"chai": "^4.
|
|
19
|
+
"@types/node": "^20.11.11",
|
|
20
|
+
"chai": "^4.4.1",
|
|
21
21
|
"chai-as-promised": "^7.1.1",
|
|
22
22
|
"mocha": "^10.2.0",
|
|
23
23
|
"tmp-promise": "^3.0.3",
|
|
24
|
-
"
|
|
24
|
+
"tsx": "^4.7.0",
|
|
25
25
|
"typescript": "^5.3.3",
|
|
26
26
|
"typescript-cp": "^0.1.9"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@prairielearn/error": "^1.0.
|
|
30
|
-
"@prairielearn/logger": "^1.0.
|
|
31
|
-
"@prairielearn/named-locks": "^
|
|
32
|
-
"@prairielearn/postgres": "^1.9.
|
|
29
|
+
"@prairielearn/error": "^1.0.13",
|
|
30
|
+
"@prairielearn/logger": "^1.0.12",
|
|
31
|
+
"@prairielearn/named-locks": "^2.0.0",
|
|
32
|
+
"@prairielearn/postgres": "^1.9.1",
|
|
33
33
|
"fs-extra": "^11.2.0",
|
|
34
34
|
"serialize-error": "^8.1.0",
|
|
35
35
|
"zod": "^3.22.4"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { loadSqlEquiv,
|
|
2
|
+
import { loadSqlEquiv, queryRows } from '@prairielearn/postgres';
|
|
3
3
|
|
|
4
4
|
const sql = loadSqlEquiv(__filename);
|
|
5
5
|
|
|
@@ -26,7 +26,7 @@ export async function selectRecentJobsWithStatus(
|
|
|
26
26
|
status: BatchedMigrationJobStatus,
|
|
27
27
|
limit: number,
|
|
28
28
|
): Promise<BatchedMigrationJobRow[]> {
|
|
29
|
-
return
|
|
29
|
+
return await queryRows(
|
|
30
30
|
sql.select_recent_jobs_with_status,
|
|
31
31
|
{ batched_migration_id: batchedMigrationId, status, limit },
|
|
32
32
|
BatchedMigrationJobRowSchema,
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { assert } from 'chai';
|
|
2
|
-
import {
|
|
3
|
-
makePostgresTestUtils,
|
|
4
|
-
queryAsync,
|
|
5
|
-
queryValidatedOneRow,
|
|
6
|
-
queryValidatedRows,
|
|
7
|
-
} from '@prairielearn/postgres';
|
|
2
|
+
import { makePostgresTestUtils, queryAsync, queryRow, queryRows } from '@prairielearn/postgres';
|
|
8
3
|
import * as namedLocks from '@prairielearn/named-locks';
|
|
9
4
|
import * as error from '@prairielearn/error';
|
|
10
5
|
|
|
@@ -54,7 +49,7 @@ function makeTestBatchMigration() {
|
|
|
54
49
|
}
|
|
55
50
|
|
|
56
51
|
async function getBatchedMigration(migrationId: string) {
|
|
57
|
-
return
|
|
52
|
+
return await queryRow(
|
|
58
53
|
'SELECT * FROM batched_migrations WHERE id = $id;',
|
|
59
54
|
{ id: migrationId },
|
|
60
55
|
BatchedMigrationRowSchema,
|
|
@@ -62,7 +57,7 @@ async function getBatchedMigration(migrationId: string) {
|
|
|
62
57
|
}
|
|
63
58
|
|
|
64
59
|
async function getBatchedMigrationJobs(migrationId: string) {
|
|
65
|
-
return
|
|
60
|
+
return await queryRows(
|
|
66
61
|
'SELECT * FROM batched_migration_jobs WHERE batched_migration_id = $batched_migration_id ORDER BY id ASC;',
|
|
67
62
|
{ batched_migration_id: migrationId },
|
|
68
63
|
BatchedMigrationJobRowSchema,
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
loadSqlEquiv,
|
|
3
|
-
queryAsync,
|
|
4
|
-
queryValidatedOneRow,
|
|
5
|
-
queryValidatedSingleColumnOneRow,
|
|
6
|
-
queryValidatedZeroOrOneRow,
|
|
7
|
-
} from '@prairielearn/postgres';
|
|
1
|
+
import { loadSqlEquiv, queryAsync, queryRow, queryOptionalRow } from '@prairielearn/postgres';
|
|
8
2
|
import { logger } from '@prairielearn/logger';
|
|
9
3
|
import { serializeError } from 'serialize-error';
|
|
10
4
|
import { z } from 'zod';
|
|
@@ -52,7 +46,7 @@ export class BatchedMigrationRunner {
|
|
|
52
46
|
}
|
|
53
47
|
|
|
54
48
|
private async hasIncompleteJobs(migration: BatchedMigrationRow): Promise<boolean> {
|
|
55
|
-
return
|
|
49
|
+
return await queryRow(
|
|
56
50
|
sql.batched_migration_has_incomplete_jobs,
|
|
57
51
|
{ batched_migration_id: migration.id },
|
|
58
52
|
z.boolean(),
|
|
@@ -60,7 +54,7 @@ export class BatchedMigrationRunner {
|
|
|
60
54
|
}
|
|
61
55
|
|
|
62
56
|
private async hasFailedJobs(migration: BatchedMigrationRow): Promise<boolean> {
|
|
63
|
-
return
|
|
57
|
+
return await queryRow(
|
|
64
58
|
sql.batched_migration_has_failed_jobs,
|
|
65
59
|
{ batched_migration_id: migration.id },
|
|
66
60
|
z.boolean(),
|
|
@@ -68,7 +62,7 @@ export class BatchedMigrationRunner {
|
|
|
68
62
|
}
|
|
69
63
|
|
|
70
64
|
private async refreshMigrationStatus(migration: BatchedMigrationRow) {
|
|
71
|
-
this.migrationStatus = await
|
|
65
|
+
this.migrationStatus = await queryRow(
|
|
72
66
|
sql.get_migration_status,
|
|
73
67
|
{
|
|
74
68
|
id: migration.id,
|
|
@@ -94,7 +88,7 @@ export class BatchedMigrationRunner {
|
|
|
94
88
|
private async getNextBatchBounds(
|
|
95
89
|
migration: BatchedMigrationRow,
|
|
96
90
|
): Promise<null | [bigint, bigint]> {
|
|
97
|
-
const lastJob = await
|
|
91
|
+
const lastJob = await queryOptionalRow(
|
|
98
92
|
sql.select_last_batched_migration_job,
|
|
99
93
|
{ batched_migration_id: migration.id },
|
|
100
94
|
BatchedMigrationJobRowSchema,
|
|
@@ -144,7 +138,7 @@ export class BatchedMigrationRunner {
|
|
|
144
138
|
): Promise<BatchedMigrationJobRow | null> {
|
|
145
139
|
const nextBatchBounds = await this.getNextBatchBounds(migration);
|
|
146
140
|
if (nextBatchBounds) {
|
|
147
|
-
return
|
|
141
|
+
return await queryRow(
|
|
148
142
|
sql.insert_batched_migration_job,
|
|
149
143
|
{
|
|
150
144
|
batched_migration_id: migration.id,
|
|
@@ -157,7 +151,7 @@ export class BatchedMigrationRunner {
|
|
|
157
151
|
// Pick up any old pending jobs from this migration. These will only exist if
|
|
158
152
|
// an admin manually elected to retry all failed jobs; we'll never automatically
|
|
159
153
|
// transition failed jobs back to pending.
|
|
160
|
-
return
|
|
154
|
+
return await queryOptionalRow(
|
|
161
155
|
sql.select_first_pending_batched_migration_job,
|
|
162
156
|
{ batched_migration_id: migration.id },
|
|
163
157
|
BatchedMigrationJobRowSchema,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadSqlEquiv,
|
|
3
3
|
queryAsync,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
queryRow,
|
|
5
|
+
queryRows,
|
|
6
|
+
queryOptionalRow,
|
|
7
7
|
} from '@prairielearn/postgres';
|
|
8
8
|
import { z } from 'zod';
|
|
9
9
|
|
|
@@ -76,37 +76,25 @@ type NewBatchedMigration = Pick<
|
|
|
76
76
|
export async function insertBatchedMigration(
|
|
77
77
|
migration: NewBatchedMigration,
|
|
78
78
|
): Promise<BatchedMigrationRow | null> {
|
|
79
|
-
return
|
|
80
|
-
sql.insert_batched_migration,
|
|
81
|
-
migration,
|
|
82
|
-
BatchedMigrationRowSchema,
|
|
83
|
-
);
|
|
79
|
+
return await queryOptionalRow(sql.insert_batched_migration, migration, BatchedMigrationRowSchema);
|
|
84
80
|
}
|
|
85
81
|
|
|
86
82
|
export async function selectAllBatchedMigrations(project: string) {
|
|
87
|
-
return
|
|
88
|
-
sql.select_all_batched_migrations,
|
|
89
|
-
{ project },
|
|
90
|
-
BatchedMigrationRowSchema,
|
|
91
|
-
);
|
|
83
|
+
return await queryRows(sql.select_all_batched_migrations, { project }, BatchedMigrationRowSchema);
|
|
92
84
|
}
|
|
93
85
|
|
|
94
86
|
export async function selectBatchedMigration(
|
|
95
87
|
project: string,
|
|
96
88
|
id: string,
|
|
97
89
|
): Promise<BatchedMigrationRow> {
|
|
98
|
-
return
|
|
99
|
-
sql.select_batched_migration,
|
|
100
|
-
{ project, id },
|
|
101
|
-
BatchedMigrationRowSchema,
|
|
102
|
-
);
|
|
90
|
+
return await queryRow(sql.select_batched_migration, { project, id }, BatchedMigrationRowSchema);
|
|
103
91
|
}
|
|
104
92
|
|
|
105
93
|
export async function selectBatchedMigrationForTimestamp(
|
|
106
94
|
project: string,
|
|
107
95
|
timestamp: string,
|
|
108
96
|
): Promise<BatchedMigrationRow> {
|
|
109
|
-
return
|
|
97
|
+
return await queryRow(
|
|
110
98
|
sql.select_batched_migration_for_timestamp,
|
|
111
99
|
{ project, timestamp },
|
|
112
100
|
BatchedMigrationRowSchema,
|
|
@@ -117,7 +105,7 @@ export async function updateBatchedMigrationStatus(
|
|
|
117
105
|
id: string,
|
|
118
106
|
status: BatchedMigrationStatus,
|
|
119
107
|
): Promise<BatchedMigrationRow> {
|
|
120
|
-
return
|
|
108
|
+
return await queryRow(
|
|
121
109
|
sql.update_batched_migration_status,
|
|
122
110
|
{ id, status },
|
|
123
111
|
BatchedMigrationRowSchema,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { setTimeout as sleep } from 'node:timers/promises';
|
|
4
|
-
import { loadSqlEquiv,
|
|
5
|
-
import { doWithLock
|
|
4
|
+
import { loadSqlEquiv, queryOptionalRow } from '@prairielearn/postgres';
|
|
5
|
+
import { doWithLock } from '@prairielearn/named-locks';
|
|
6
6
|
|
|
7
7
|
import { MigrationFile, readAndValidateMigrationsFromDirectories } from '../load-migrations';
|
|
8
8
|
import {
|
|
@@ -204,23 +204,30 @@ export class BatchedMigrationsRunner extends EventEmitter {
|
|
|
204
204
|
}
|
|
205
205
|
|
|
206
206
|
private async getOrStartMigration(): Promise<BatchedMigrationRow | null> {
|
|
207
|
-
return
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
sql.start_next_pending_migration,
|
|
207
|
+
return doWithLock(
|
|
208
|
+
this.lockName,
|
|
209
|
+
{
|
|
210
|
+
// Don't fail if the lock couldn't be acquired immediately.
|
|
211
|
+
onNotAcquired: () => null,
|
|
212
|
+
},
|
|
213
|
+
async () => {
|
|
214
|
+
let migration = await queryOptionalRow(
|
|
215
|
+
sql.select_running_migration,
|
|
217
216
|
{ project: this.options.project },
|
|
218
217
|
BatchedMigrationRowSchema,
|
|
219
218
|
);
|
|
220
|
-
}
|
|
221
219
|
|
|
222
|
-
|
|
223
|
-
|
|
220
|
+
if (!migration) {
|
|
221
|
+
migration = await queryOptionalRow(
|
|
222
|
+
sql.start_next_pending_migration,
|
|
223
|
+
{ project: this.options.project },
|
|
224
|
+
BatchedMigrationRowSchema,
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return migration;
|
|
229
|
+
},
|
|
230
|
+
);
|
|
224
231
|
}
|
|
225
232
|
|
|
226
233
|
async maybePerformWork(durationMs: number): Promise<boolean> {
|
|
@@ -238,9 +245,13 @@ export class BatchedMigrationsRunner extends EventEmitter {
|
|
|
238
245
|
}
|
|
239
246
|
|
|
240
247
|
let didWork = false;
|
|
241
|
-
await
|
|
248
|
+
await doWithLock(
|
|
242
249
|
this.lockNameForTimestamp(migrationFile.timestamp),
|
|
243
|
-
{
|
|
250
|
+
{
|
|
251
|
+
autoRenew: true,
|
|
252
|
+
// Do nothing if the lock could not immediately be acquired.
|
|
253
|
+
onNotAcquired: () => null,
|
|
254
|
+
},
|
|
244
255
|
async () => {
|
|
245
256
|
didWork = true;
|
|
246
257
|
const migrationImplementation = await this.loadMigrationImplementation(migrationFile);
|
package/tsconfig.json
CHANGED