@proteinjs/db 1.32.2 → 1.33.0
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 +22 -0
- package/dist/src/MigrationRunner.d.ts +14 -3
- package/dist/src/MigrationRunner.d.ts.map +1 -1
- package/dist/src/MigrationRunner.js +56 -28
- package/dist/src/MigrationRunner.js.map +1 -1
- package/dist/src/schema/TableManager.d.ts +25 -1
- package/dist/src/schema/TableManager.d.ts.map +1 -1
- package/dist/src/schema/TableManager.js +82 -25
- package/dist/src/schema/TableManager.js.map +1 -1
- package/dist/src/tables/MigrationTable.d.ts +9 -0
- package/dist/src/tables/MigrationTable.d.ts.map +1 -1
- package/dist/src/tables/MigrationTable.js +1 -0
- package/dist/src/tables/MigrationTable.js.map +1 -1
- package/package.json +2 -2
- package/src/MigrationRunner.ts +29 -4
- package/src/schema/TableManager.ts +66 -17
- package/src/tables/MigrationTable.ts +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.33.0](https://github.com/proteinjs/db/compare/@proteinjs/db@1.32.3...@proteinjs/db@1.33.0) (2026-08-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **db:** retired-migration flag — the deploy series stamps source-less ledger rows and never auto-runs retired rows ([f468125](https://github.com/proteinjs/db/commit/f4681257439e2e7e031f9d7f4d90b7463cc46456))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [1.32.3](https://github.com/proteinjs/db/compare/@proteinjs/db@1.32.2...@proteinjs/db@1.32.3) (2026-08-15)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* reconcile re-read rides out brief INFORMATION_SCHEMA propagation (bounded retry) ([0f4739b](https://github.com/proteinjs/db/commit/0f4739bb2f233d9dff462cf7ec74777f53ea0de6))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
## [1.32.2](https://github.com/proteinjs/db/compare/@proteinjs/db@1.32.1...@proteinjs/db@1.32.2) (2026-08-15)
|
|
7
29
|
|
|
8
30
|
|
|
@@ -14,8 +14,17 @@ export interface MigrationSeriesSummary {
|
|
|
14
14
|
skippedManual: string[];
|
|
15
15
|
/** Already in 'success' status — skipped (ensureMigrationRun's idempotence). */
|
|
16
16
|
alreadyApplied: string[];
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Ledger rows with no source record (a loader deleted after its run; the table keeps history) —
|
|
19
|
+
* each one is STAMPED `retired: true` by this run, so a source class that ships again later can
|
|
20
|
+
* never silently re-arm it.
|
|
21
|
+
*/
|
|
18
22
|
unresolved: string[];
|
|
23
|
+
/**
|
|
24
|
+
* Rows that arrived already `retired: true` — never auto-run, even when the source class ships
|
|
25
|
+
* again, until someone un-retires them on the Migrations page.
|
|
26
|
+
*/
|
|
27
|
+
retired: string[];
|
|
19
28
|
/** The failure that stopped the series, if any. */
|
|
20
29
|
failed?: {
|
|
21
30
|
id: string;
|
|
@@ -66,8 +75,10 @@ export declare class MigrationRunner implements MigrationRunnerService {
|
|
|
66
75
|
* class keeps the Migrations-page flow ({@link Migration.manual}).
|
|
67
76
|
* - rows already in 'success' are skipped; any other status is pending — including 'running'
|
|
68
77
|
* (a crashed earlier Job): {@link ensureMigrationRun} re-runs it.
|
|
69
|
-
* - rows with no source record are history (a loader deleted after its run) —
|
|
70
|
-
* reported as `unresolved`.
|
|
78
|
+
* - rows with no source record are history (a loader deleted after its run) — STAMPED
|
|
79
|
+
* `retired: true`, skipped, reported as `unresolved`.
|
|
80
|
+
* - rows with `retired: true` are NEVER auto-run — even if the source class returns in a later
|
|
81
|
+
* build — until un-retired on the Migrations page; skipped, reported as `retired`.
|
|
71
82
|
* - the FIRST failure STOPS the series (later migrations may build on earlier ones). The
|
|
72
83
|
* caller exits non-zero, the Job fails, the rollout does not advance.
|
|
73
84
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationRunner.d.ts","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,eAAO,MAAM,kBAAkB,uBACyE,CAAC;AAEzG;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB
|
|
1
|
+
{"version":3,"file":"MigrationRunner.d.ts","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAA6B,MAAM,mCAAmC,CAAC;AACtG,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,eAAO,MAAM,kBAAkB,uBACyE,CAAC;AAEzG;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,qCAAqC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mFAAmF;IACnF,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,8FAA8F;IAC9F,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,qBAAa,eAAgB,YAAW,sBAAsB;IAC5D,OAAO,CAAC,MAAM,CAA+C;IACtD,eAAe,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAQhD;IAEF;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC;;;;;;;;;;;OAWG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAcxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,oBAAoB,IAAI,OAAO,CAAC,sBAAsB,CAAC;YA2E/C,YAAY;IA8B1B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,QAAQ;CA4BjB"}
|
|
@@ -126,8 +126,10 @@ var MigrationRunner = /** @class */ (function () {
|
|
|
126
126
|
* class keeps the Migrations-page flow ({@link Migration.manual}).
|
|
127
127
|
* - rows already in 'success' are skipped; any other status is pending — including 'running'
|
|
128
128
|
* (a crashed earlier Job): {@link ensureMigrationRun} re-runs it.
|
|
129
|
-
* - rows with no source record are history (a loader deleted after its run) —
|
|
130
|
-
* reported as `unresolved`.
|
|
129
|
+
* - rows with no source record are history (a loader deleted after its run) — STAMPED
|
|
130
|
+
* `retired: true`, skipped, reported as `unresolved`.
|
|
131
|
+
* - rows with `retired: true` are NEVER auto-run — even if the source class returns in a later
|
|
132
|
+
* build — until un-retired on the Migrations page; skipped, reported as `retired`.
|
|
131
133
|
* - the FIRST failure STOPS the series (later migrations may build on earlier ones). The
|
|
132
134
|
* caller exits non-zero, the Job fails, the rollout does not advance.
|
|
133
135
|
*
|
|
@@ -159,41 +161,67 @@ var MigrationRunner = /** @class */ (function () {
|
|
|
159
161
|
skippedManual: [],
|
|
160
162
|
alreadyApplied: [],
|
|
161
163
|
unresolved: [],
|
|
164
|
+
retired: [],
|
|
162
165
|
notAttempted: [],
|
|
163
166
|
};
|
|
164
167
|
sourceRecordRepo = new SourceRecordRepo_1.SourceRecordRepo();
|
|
165
168
|
pending = [];
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
169
|
+
_i = 0, ledger_1 = ledger;
|
|
170
|
+
_a.label = 2;
|
|
171
|
+
case 2:
|
|
172
|
+
if (!(_i < ledger_1.length)) return [3 /*break*/, 6];
|
|
173
|
+
row = ledger_1[_i];
|
|
174
|
+
if (row.retired) {
|
|
175
|
+
summary.retired.push(row.id);
|
|
176
|
+
return [3 /*break*/, 5];
|
|
177
|
+
}
|
|
178
|
+
source = sourceRecordRepo.getSourceRecord(migrationTable.name, row.id);
|
|
179
|
+
if (!!source) return [3 /*break*/, 4];
|
|
180
|
+
// Stamp, don't just skip: the ledger must remember the source class was gone. If the
|
|
181
|
+
// class ships again in a later build, the row stays excluded until a human un-retires it
|
|
182
|
+
// on the Migrations page — a returned loader id is not consent to auto-run.
|
|
183
|
+
return [4 /*yield*/, db.update(migrationTable, { id: row.id, retired: true })];
|
|
184
|
+
case 3:
|
|
185
|
+
// Stamp, don't just skip: the ledger must remember the source class was gone. If the
|
|
186
|
+
// class ships again in a later build, the row stays excluded until a human un-retires it
|
|
187
|
+
// on the Migrations page — a returned loader id is not consent to auto-run.
|
|
188
|
+
_a.sent();
|
|
189
|
+
summary.unresolved.push(row.id);
|
|
190
|
+
return [3 /*break*/, 5];
|
|
191
|
+
case 4:
|
|
192
|
+
if (source.manual) {
|
|
193
|
+
summary.skippedManual.push(row.id);
|
|
194
|
+
return [3 /*break*/, 5];
|
|
195
|
+
}
|
|
196
|
+
if (row.status === 'success') {
|
|
197
|
+
summary.alreadyApplied.push(row.id);
|
|
198
|
+
return [3 /*break*/, 5];
|
|
182
199
|
}
|
|
200
|
+
pending.push(row);
|
|
201
|
+
_a.label = 5;
|
|
202
|
+
case 5:
|
|
203
|
+
_i++;
|
|
204
|
+
return [3 /*break*/, 2];
|
|
205
|
+
case 6:
|
|
183
206
|
this.logger.info({
|
|
184
207
|
message: "Running ".concat(pending.length, " pending migration").concat(pending.length === 1 ? '' : 's', " in series, oldest-first"),
|
|
185
|
-
obj: {
|
|
208
|
+
obj: {
|
|
209
|
+
pending: pending.map(function (row) { return row.id; }),
|
|
210
|
+
skippedManual: summary.skippedManual,
|
|
211
|
+
skippedRetired: summary.retired,
|
|
212
|
+
stampedRetired: summary.unresolved,
|
|
213
|
+
},
|
|
186
214
|
});
|
|
187
215
|
i = 0;
|
|
188
|
-
_a.label =
|
|
189
|
-
case
|
|
190
|
-
if (!(i < pending.length)) return [3 /*break*/,
|
|
216
|
+
_a.label = 7;
|
|
217
|
+
case 7:
|
|
218
|
+
if (!(i < pending.length)) return [3 /*break*/, 10];
|
|
191
219
|
return [4 /*yield*/, this.ensureMigrationRun(pending[i].id)];
|
|
192
|
-
case
|
|
220
|
+
case 8:
|
|
193
221
|
outcome = _a.sent();
|
|
194
222
|
if (outcome.status === 'success') {
|
|
195
223
|
summary.applied.push(outcome.id);
|
|
196
|
-
return [3 /*break*/,
|
|
224
|
+
return [3 /*break*/, 9];
|
|
197
225
|
}
|
|
198
226
|
summary.failed = {
|
|
199
227
|
id: outcome.id,
|
|
@@ -201,11 +229,11 @@ var MigrationRunner = /** @class */ (function () {
|
|
|
201
229
|
failureMessage: outcome.failureMessage,
|
|
202
230
|
};
|
|
203
231
|
summary.notAttempted = pending.slice(i + 1).map(function (row) { return row.id; });
|
|
204
|
-
return [3 /*break*/,
|
|
205
|
-
case
|
|
232
|
+
return [3 /*break*/, 10];
|
|
233
|
+
case 9:
|
|
206
234
|
i++;
|
|
207
|
-
return [3 /*break*/,
|
|
208
|
-
case
|
|
235
|
+
return [3 /*break*/, 7];
|
|
236
|
+
case 10:
|
|
209
237
|
this.logger.info({ message: "Migration series finished", obj: summary });
|
|
210
238
|
return [2 /*return*/, summary];
|
|
211
239
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationRunner.js","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA8C;AAC9C,2BAAgD;AAEhD,8DAA6D;AAC7D,4EAAsG;AACtG,0DAAoE;AACpE,6DAA4D;AAE5D,4CAA2C;AAEpC,IAAM,kBAAkB,GAAG;IAChC,OAAA,OAAO,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAE,IAAA,kDAAyB,GAAsB;AAAtG,CAAsG,CAAC;AAD5F,QAAA,kBAAkB,sBAC0E;
|
|
1
|
+
{"version":3,"file":"MigrationRunner.js","sourceRoot":"","sources":["../../src/MigrationRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,14 @@ export interface ColumnTypeFactory {
|
|
|
6
6
|
getType(column: Column<any, any>): string;
|
|
7
7
|
}
|
|
8
8
|
export declare class TableManager {
|
|
9
|
+
/**
|
|
10
|
+
* Bounded verification re-reads for {@link reconcileConcurrentSchemaChange}: an already-exists
|
|
11
|
+
* DDL error proves the conflicting schema change COMMITTED, but INFORMATION_SCHEMA on this
|
|
12
|
+
* connection can briefly lag that commit — 5 × 200ms rides out the propagation without letting
|
|
13
|
+
* a genuine conflict stall for more than ~1s.
|
|
14
|
+
*/
|
|
15
|
+
private static readonly RECONCILE_VERIFY_ATTEMPTS;
|
|
16
|
+
private static readonly RECONCILE_VERIFY_RETRY_DELAY_MS;
|
|
9
17
|
private logger;
|
|
10
18
|
columnTypeFactory: ColumnTypeFactory;
|
|
11
19
|
schemaOperations: SchemaOperations;
|
|
@@ -44,7 +52,9 @@ export declare class TableManager {
|
|
|
44
52
|
* getTableChanges uses) must confirm every table now exists AND has no remaining changes of
|
|
45
53
|
* the kind we attempted. A concurrent actor applying our EXACT change satisfies this; a
|
|
46
54
|
* genuine conflict (e.g. the column landed with a different type, so a column-type change is
|
|
47
|
-
* still outstanding) does not.
|
|
55
|
+
* still outstanding) does not. The re-read is resilient to brief schema propagation — see
|
|
56
|
+
* {@link verifyIntendedDefinition} for the bounded retry that prevents a momentarily-stale
|
|
57
|
+
* INFORMATION_SCHEMA read from false-negativing into the very crash this closes.
|
|
48
58
|
* If either gate fails, the ORIGINAL error propagates unchanged. Because every actor runs this
|
|
49
59
|
* same reconcile, it closes all three windows: migration-Job-vs-pod, pod-vs-pod, and
|
|
50
60
|
* multi-replica boot.
|
|
@@ -55,9 +65,23 @@ export declare class TableManager {
|
|
|
55
65
|
* absent, re-throwing) — so an unexpected activation is visible in prod logs rather than silent.
|
|
56
66
|
*/
|
|
57
67
|
private reconcileConcurrentSchemaChange;
|
|
68
|
+
/**
|
|
69
|
+
* Re-read the live schema until `table` is present with the intended definition, retrying a
|
|
70
|
+
* BOUNDED number of times ({@link RECONCILE_VERIFY_ATTEMPTS} × {@link RECONCILE_VERIFY_RETRY_DELAY_MS}).
|
|
71
|
+
*
|
|
72
|
+
* The already-exists error means the conflicting DDL has COMMITTED — the object exists — but
|
|
73
|
+
* INFORMATION_SCHEMA on this connection can briefly lag that commit, and a single point-in-time
|
|
74
|
+
* read that misses it would false-negative into a re-throw, reintroducing the exact boot crash
|
|
75
|
+
* this reconcile closes. So the re-read's job is (a) to wait out momentary invisibility and
|
|
76
|
+
* (b) to verify the DEFINITION matches intent. A momentary stale read resolves via retry into
|
|
77
|
+
* success; only a definition still absent or mismatched after every attempt is a genuine
|
|
78
|
+
* conflict — logged at WARN, then the ORIGINAL error re-throws.
|
|
79
|
+
*/
|
|
80
|
+
private verifyIntendedDefinition;
|
|
58
81
|
/** Concise, loggable reason from a schema-update error: the backend names the offending object
|
|
59
82
|
* in `details` (validation phase) or `message` (apply phase). */
|
|
60
83
|
private schemaErrorReason;
|
|
84
|
+
private delay;
|
|
61
85
|
private validateDynamicReferenceColumns;
|
|
62
86
|
private shouldAlterTable;
|
|
63
87
|
private getTableChanges;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableManager.d.ts","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;CAC3C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA2F;IAClG,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;gBAGpC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,CAAC,EAAE,cAAc;IAO3B,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAInC;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAgBnC,mBAAmB;IAajC
|
|
1
|
+
{"version":3,"file":"TableManager.d.ts","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAa,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAMjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;CAC3C;AAED,qBAAa,YAAY;IACvB;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAK;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAO;IAC9D,OAAO,CAAC,MAAM,CAA2F;IAClG,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;gBAGpC,QAAQ,EAAE,QAAQ,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,CAAC,EAAE,cAAc;IAO3B,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IAInC;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3B,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAgBnC,mBAAmB;IAajC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;YACW,+BAA+B;IAiB7C;;;;;;;;;;;OAWG;YACW,wBAAwB;IAyCtC;sEACkE;IAClE,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,+BAA+B;IAwDvC,OAAO,CAAC,gBAAgB;YAgBV,eAAe;YA6Ff,kBAAkB;CA8CjC"}
|
|
@@ -221,7 +221,9 @@ var TableManager = /** @class */ (function () {
|
|
|
221
221
|
* getTableChanges uses) must confirm every table now exists AND has no remaining changes of
|
|
222
222
|
* the kind we attempted. A concurrent actor applying our EXACT change satisfies this; a
|
|
223
223
|
* genuine conflict (e.g. the column landed with a different type, so a column-type change is
|
|
224
|
-
* still outstanding) does not.
|
|
224
|
+
* still outstanding) does not. The re-read is resilient to brief schema propagation — see
|
|
225
|
+
* {@link verifyIntendedDefinition} for the bounded retry that prevents a momentarily-stale
|
|
226
|
+
* INFORMATION_SCHEMA read from false-negativing into the very crash this closes.
|
|
225
227
|
* If either gate fails, the ORIGINAL error propagates unchanged. Because every actor runs this
|
|
226
228
|
* same reconcile, it closes all three windows: migration-Job-vs-pod, pod-vs-pod, and
|
|
227
229
|
* multi-replica boot.
|
|
@@ -234,7 +236,7 @@ var TableManager = /** @class */ (function () {
|
|
|
234
236
|
TableManager.prototype.reconcileConcurrentSchemaChange = function (tables, error) {
|
|
235
237
|
var _a, _b;
|
|
236
238
|
return __awaiter(this, void 0, void 0, function () {
|
|
237
|
-
var tableNames, reason, _i, tables_2, table
|
|
239
|
+
var tableNames, reason, _i, tables_2, table;
|
|
238
240
|
return __generator(this, function (_c) {
|
|
239
241
|
switch (_c.label) {
|
|
240
242
|
case 0:
|
|
@@ -246,39 +248,83 @@ var TableManager = /** @class */ (function () {
|
|
|
246
248
|
_i = 0, tables_2 = tables;
|
|
247
249
|
_c.label = 1;
|
|
248
250
|
case 1:
|
|
249
|
-
if (!(_i < tables_2.length)) return [3 /*break*/,
|
|
251
|
+
if (!(_i < tables_2.length)) return [3 /*break*/, 4];
|
|
250
252
|
table = tables_2[_i];
|
|
251
|
-
return [4 /*yield*/, this.
|
|
253
|
+
return [4 /*yield*/, this.verifyIntendedDefinition(table, tableNames, reason, error)];
|
|
252
254
|
case 2:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
255
|
+
_c.sent();
|
|
256
|
+
_c.label = 3;
|
|
257
|
+
case 3:
|
|
258
|
+
_i++;
|
|
259
|
+
return [3 /*break*/, 1];
|
|
260
|
+
case 4:
|
|
261
|
+
this.logger.warn({
|
|
262
|
+
message: "[schema reconcile] tolerated concurrent ALREADY_EXISTS for table(s) '".concat(tableNames, "' \u2014 re-read verified the object present with the intended definition, treating as applied (a concurrent actor won the race). reason: ").concat(reason),
|
|
263
|
+
});
|
|
264
|
+
return [2 /*return*/];
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Re-read the live schema until `table` is present with the intended definition, retrying a
|
|
271
|
+
* BOUNDED number of times ({@link RECONCILE_VERIFY_ATTEMPTS} × {@link RECONCILE_VERIFY_RETRY_DELAY_MS}).
|
|
272
|
+
*
|
|
273
|
+
* The already-exists error means the conflicting DDL has COMMITTED — the object exists — but
|
|
274
|
+
* INFORMATION_SCHEMA on this connection can briefly lag that commit, and a single point-in-time
|
|
275
|
+
* read that misses it would false-negative into a re-throw, reintroducing the exact boot crash
|
|
276
|
+
* this reconcile closes. So the re-read's job is (a) to wait out momentary invisibility and
|
|
277
|
+
* (b) to verify the DEFINITION matches intent. A momentary stale read resolves via retry into
|
|
278
|
+
* success; only a definition still absent or mismatched after every attempt is a genuine
|
|
279
|
+
* conflict — logged at WARN, then the ORIGINAL error re-throws.
|
|
280
|
+
*/
|
|
281
|
+
TableManager.prototype.verifyIntendedDefinition = function (table, tableNames, reason, error) {
|
|
282
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
283
|
+
var remainingChanges, attempt;
|
|
284
|
+
return __generator(this, function (_a) {
|
|
285
|
+
switch (_a.label) {
|
|
286
|
+
case 0:
|
|
287
|
+
attempt = 1;
|
|
288
|
+
_a.label = 1;
|
|
289
|
+
case 1:
|
|
290
|
+
if (!(attempt <= TableManager.RECONCILE_VERIFY_ATTEMPTS)) return [3 /*break*/, 7];
|
|
291
|
+
if (!(attempt > 1)) return [3 /*break*/, 3];
|
|
292
|
+
return [4 /*yield*/, this.delay(TableManager.RECONCILE_VERIFY_RETRY_DELAY_MS)];
|
|
293
|
+
case 2:
|
|
294
|
+
_a.sent();
|
|
295
|
+
_a.label = 3;
|
|
296
|
+
case 3: return [4 /*yield*/, this.tableExists(table)];
|
|
297
|
+
case 4:
|
|
298
|
+
if (!(_a.sent())) {
|
|
299
|
+
remainingChanges = undefined;
|
|
300
|
+
return [3 /*break*/, 6];
|
|
260
301
|
}
|
|
261
302
|
return [4 /*yield*/, this.getTableChanges(table)];
|
|
262
|
-
case
|
|
263
|
-
remainingChanges =
|
|
264
|
-
if (this.shouldAlterTable(remainingChanges)) {
|
|
265
|
-
|
|
266
|
-
|
|
303
|
+
case 5:
|
|
304
|
+
remainingChanges = _a.sent();
|
|
305
|
+
if (!this.shouldAlterTable(remainingChanges)) {
|
|
306
|
+
return [2 /*return*/]; // verified: present with the intended definition
|
|
307
|
+
}
|
|
308
|
+
_a.label = 6;
|
|
309
|
+
case 6:
|
|
310
|
+
attempt++;
|
|
311
|
+
return [3 /*break*/, 1];
|
|
312
|
+
case 7:
|
|
313
|
+
if (!remainingChanges) {
|
|
314
|
+
// Still absent after every re-read — not the concurrent-winner case; surface the original
|
|
315
|
+
// error rather than masking it.
|
|
267
316
|
this.logger.warn({
|
|
268
|
-
message: "[schema reconcile] caught ALREADY_EXISTS for table '".concat(
|
|
269
|
-
obj: { remainingChanges: remainingChanges },
|
|
317
|
+
message: "[schema reconcile] caught ALREADY_EXISTS for table(s) '".concat(tableNames, "' but '").concat(table.name, "' is still absent after ").concat(TableManager.RECONCILE_VERIFY_ATTEMPTS, " re-reads \u2014 NOT a concurrent apply; re-throwing. reason: ").concat(reason),
|
|
270
318
|
});
|
|
271
319
|
throw error;
|
|
272
320
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
_i++;
|
|
276
|
-
return [3 /*break*/, 1];
|
|
277
|
-
case 5:
|
|
321
|
+
// The object exists but the live schema still differs from the intended definition, so a
|
|
322
|
+
// concurrent actor did NOT apply our exact change (a genuine conflict). Propagate.
|
|
278
323
|
this.logger.warn({
|
|
279
|
-
message: "[schema reconcile]
|
|
324
|
+
message: "[schema reconcile] caught ALREADY_EXISTS for table '".concat(table.name, "' but the live schema does NOT match the intended definition after ").concat(TableManager.RECONCILE_VERIFY_ATTEMPTS, " re-reads (genuine conflict) \u2014 re-throwing. reason: ").concat(reason),
|
|
325
|
+
obj: { remainingChanges: remainingChanges },
|
|
280
326
|
});
|
|
281
|
-
|
|
327
|
+
throw error;
|
|
282
328
|
}
|
|
283
329
|
});
|
|
284
330
|
});
|
|
@@ -290,6 +336,9 @@ var TableManager = /** @class */ (function () {
|
|
|
290
336
|
var candidate = error;
|
|
291
337
|
return String((_b = (_a = candidate === null || candidate === void 0 ? void 0 : candidate.details) !== null && _a !== void 0 ? _a : candidate === null || candidate === void 0 ? void 0 : candidate.message) !== null && _b !== void 0 ? _b : error);
|
|
292
338
|
};
|
|
339
|
+
TableManager.prototype.delay = function (ms) {
|
|
340
|
+
return new Promise(function (resolve) { return setTimeout(resolve, ms); });
|
|
341
|
+
};
|
|
293
342
|
TableManager.prototype.validateDynamicReferenceColumns = function (table) {
|
|
294
343
|
var isDynamicRefColumn = function (column) {
|
|
295
344
|
return typeof column.dynamicRefTableColName === 'string';
|
|
@@ -484,6 +533,14 @@ var TableManager = /** @class */ (function () {
|
|
|
484
533
|
});
|
|
485
534
|
});
|
|
486
535
|
};
|
|
536
|
+
/**
|
|
537
|
+
* Bounded verification re-reads for {@link reconcileConcurrentSchemaChange}: an already-exists
|
|
538
|
+
* DDL error proves the conflicting schema change COMMITTED, but INFORMATION_SCHEMA on this
|
|
539
|
+
* connection can briefly lag that commit — 5 × 200ms rides out the propagation without letting
|
|
540
|
+
* a genuine conflict stall for more than ~1s.
|
|
541
|
+
*/
|
|
542
|
+
TableManager.RECONCILE_VERIFY_ATTEMPTS = 5;
|
|
543
|
+
TableManager.RECONCILE_VERIFY_RETRY_DELAY_MS = 200;
|
|
487
544
|
return TableManager;
|
|
488
545
|
}());
|
|
489
546
|
exports.TableManager = TableManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableManager.js","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableManager.js","sourceRoot":"","sources":["../../../src/schema/TableManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,14 @@ export interface Migration extends SourceRecord {
|
|
|
12
12
|
* schema, not in deploy-pipeline prose.
|
|
13
13
|
*/
|
|
14
14
|
manual?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Ledger-owned state (like `status` — never declared on a source record): stamped `true` by the
|
|
17
|
+
* deploy-gated series ({@link MigrationRunner.runPendingMigrations}) when the row's source class
|
|
18
|
+
* no longer ships. A retired row is NEVER auto-run — even if its source class returns in a later
|
|
19
|
+
* build — until someone un-retires it on the Migrations page (the record form's Un-retire
|
|
20
|
+
* button). A returned loader id is not consent to auto-run.
|
|
21
|
+
*/
|
|
22
|
+
retired?: boolean;
|
|
15
23
|
status?: 'proposed' | 'running' | 'success' | 'failure';
|
|
16
24
|
failureMessage?: string;
|
|
17
25
|
failureStack?: string;
|
|
@@ -38,6 +46,7 @@ export declare class MigrationTable extends Table<Migration> {
|
|
|
38
46
|
} & {} & {
|
|
39
47
|
description: import("../Table").Column<string, any>;
|
|
40
48
|
manual: import("../Table").Column<boolean | undefined, any>;
|
|
49
|
+
retired: import("../Table").Column<boolean | undefined, any>;
|
|
41
50
|
status: import("../Table").Column<"proposed" | "running" | "success" | "failure" | undefined, any>;
|
|
42
51
|
failureMessage: import("../Table").Column<string | undefined, any>;
|
|
43
52
|
failureStack: import("../Table").Column<string | undefined, any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationTable.d.ts","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAA2B,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC3C,IAAI,SAAe;IAC1B;;;;;OAKG;IACI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAGnC;IACK,OAAO
|
|
1
|
+
{"version":3,"file":"MigrationTable.d.ts","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,YAAY,EAA2B,MAAM,wBAAwB,CAAC;AAE/E,MAAM,WAAW,SAAU,SAAQ,YAAY;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAChC;AAED,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC3C,IAAI,SAAe;IAC1B;;;;;OAKG;IACI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAGnC;IACK,OAAO;;;;;;;;;;;;;;;;;;MAWX;IACI,mBAAmB;;;;;MAKxB;CACH"}
|
|
@@ -73,6 +73,7 @@ var MigrationTable = /** @class */ (function (_super) {
|
|
|
73
73
|
_this.columns = (0, SourceRecord_1.withSourceRecordColumns)({
|
|
74
74
|
description: new Columns_1.StringColumn('description', {}, 4000),
|
|
75
75
|
manual: new Columns_1.BooleanColumn('manual'),
|
|
76
|
+
retired: new Columns_1.BooleanColumn('retired'),
|
|
76
77
|
status: new Columns_1.StringColumn('status', { defaultValue: function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
77
78
|
return [2 /*return*/, 'proposed'];
|
|
78
79
|
}); }); } }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MigrationTable.js","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sCAAuF;AACvF,kCAAiC;AACjC,uDAA+E;
|
|
1
|
+
{"version":3,"file":"MigrationTable.js","sourceRoot":"","sources":["../../../src/tables/MigrationTable.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sCAAuF;AACvF,kCAAiC;AACjC,uDAA+E;AA+B/E;IAAoC,kCAAgB;IAApD;QAAA,qEA8BC;QA7BQ,UAAI,GAAG,WAAW,CAAC;QAC1B;;;;;WAKG;QACI,UAAI,GAA6B;YACtC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE;SACxC,CAAC;QACK,aAAO,GAAG,IAAA,sCAAuB,EAAY;YAClD,WAAW,EAAE,IAAI,sBAAY,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC;YACtD,MAAM,EAAE,IAAI,uBAAa,CAAC,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI,uBAAa,CAAC,SAAS,CAAC;YACrC,MAAM,EAAE,IAAI,sBAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE;oBAAY,sBAAA,UAAU,EAAA;yBAAA,EAAE,CAAC;YAC5E,cAAc,EAAE,IAAI,sBAAY,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,CAAC;YAC7D,YAAY,EAAE,IAAI,sBAAY,CAAC,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC;YAC1D,SAAS,EAAE,IAAI,wBAAc,CAAC,YAAY,CAAC;YAC3C,OAAO,EAAE,IAAI,wBAAc,CAAC,UAAU,CAAC;YACvC,QAAQ,EAAE,IAAI,sBAAY,CAAC,UAAU,CAAC;YACtC,MAAM,EAAE,IAAI,sBAAY,CAAC,QAAQ,CAAC;SACnC,CAAC,CAAC;QACI,yBAAmB,GAAG;YAC3B,8BAA8B,EAAE,IAAI;YACpC,EAAE,EAAE;gBACF,WAAW,EAAE,IAAI;aAClB;SACF,CAAC;;IACJ,CAAC;IAAD,qBAAC;AAAD,CAAC,AA9BD,CAAoC,aAAK,GA8BxC;AA9BY,wCAAc"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@proteinjs/db",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.0",
|
|
4
4
|
"main": "./dist/generated/index.js",
|
|
5
5
|
"types": "./dist/generated/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -66,5 +66,5 @@
|
|
|
66
66
|
"ts-jest": "29.1.1",
|
|
67
67
|
"typescript": "5.2.2"
|
|
68
68
|
},
|
|
69
|
-
"gitHead": "
|
|
69
|
+
"gitHead": "23b168ca8f82ba392500b545230adc6e8c761b4e"
|
|
70
70
|
}
|
package/src/MigrationRunner.ts
CHANGED
|
@@ -23,8 +23,17 @@ export interface MigrationSeriesSummary {
|
|
|
23
23
|
skippedManual: string[];
|
|
24
24
|
/** Already in 'success' status — skipped (ensureMigrationRun's idempotence). */
|
|
25
25
|
alreadyApplied: string[];
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Ledger rows with no source record (a loader deleted after its run; the table keeps history) —
|
|
28
|
+
* each one is STAMPED `retired: true` by this run, so a source class that ships again later can
|
|
29
|
+
* never silently re-arm it.
|
|
30
|
+
*/
|
|
27
31
|
unresolved: string[];
|
|
32
|
+
/**
|
|
33
|
+
* Rows that arrived already `retired: true` — never auto-run, even when the source class ships
|
|
34
|
+
* again, until someone un-retires them on the Migrations page.
|
|
35
|
+
*/
|
|
36
|
+
retired: string[];
|
|
28
37
|
/** The failure that stopped the series, if any. */
|
|
29
38
|
failed?: { id: string; description: string; failureMessage?: string };
|
|
30
39
|
/** Ordered after the failure — never started (later migrations may build on earlier ones). */
|
|
@@ -99,8 +108,10 @@ export class MigrationRunner implements MigrationRunnerService {
|
|
|
99
108
|
* class keeps the Migrations-page flow ({@link Migration.manual}).
|
|
100
109
|
* - rows already in 'success' are skipped; any other status is pending — including 'running'
|
|
101
110
|
* (a crashed earlier Job): {@link ensureMigrationRun} re-runs it.
|
|
102
|
-
* - rows with no source record are history (a loader deleted after its run) —
|
|
103
|
-
* reported as `unresolved`.
|
|
111
|
+
* - rows with no source record are history (a loader deleted after its run) — STAMPED
|
|
112
|
+
* `retired: true`, skipped, reported as `unresolved`.
|
|
113
|
+
* - rows with `retired: true` are NEVER auto-run — even if the source class returns in a later
|
|
114
|
+
* build — until un-retired on the Migrations page; skipped, reported as `retired`.
|
|
104
115
|
* - the FIRST failure STOPS the series (later migrations may build on earlier ones). The
|
|
105
116
|
* caller exits non-zero, the Job fails, the rollout does not advance.
|
|
106
117
|
*
|
|
@@ -126,13 +137,22 @@ export class MigrationRunner implements MigrationRunnerService {
|
|
|
126
137
|
skippedManual: [],
|
|
127
138
|
alreadyApplied: [],
|
|
128
139
|
unresolved: [],
|
|
140
|
+
retired: [],
|
|
129
141
|
notAttempted: [],
|
|
130
142
|
};
|
|
131
143
|
const sourceRecordRepo = new SourceRecordRepo();
|
|
132
144
|
const pending: Migration[] = [];
|
|
133
145
|
for (const row of ledger) {
|
|
146
|
+
if (row.retired) {
|
|
147
|
+
summary.retired.push(row.id);
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
134
150
|
const source = sourceRecordRepo.getSourceRecord<Migration>(migrationTable.name, row.id);
|
|
135
151
|
if (!source) {
|
|
152
|
+
// Stamp, don't just skip: the ledger must remember the source class was gone. If the
|
|
153
|
+
// class ships again in a later build, the row stays excluded until a human un-retires it
|
|
154
|
+
// on the Migrations page — a returned loader id is not consent to auto-run.
|
|
155
|
+
await db.update(migrationTable, { id: row.id, retired: true } as Partial<Migration>);
|
|
136
156
|
summary.unresolved.push(row.id);
|
|
137
157
|
continue;
|
|
138
158
|
}
|
|
@@ -149,7 +169,12 @@ export class MigrationRunner implements MigrationRunnerService {
|
|
|
149
169
|
|
|
150
170
|
this.logger.info({
|
|
151
171
|
message: `Running ${pending.length} pending migration${pending.length === 1 ? '' : 's'} in series, oldest-first`,
|
|
152
|
-
obj: {
|
|
172
|
+
obj: {
|
|
173
|
+
pending: pending.map((row) => row.id),
|
|
174
|
+
skippedManual: summary.skippedManual,
|
|
175
|
+
skippedRetired: summary.retired,
|
|
176
|
+
stampedRetired: summary.unresolved,
|
|
177
|
+
},
|
|
153
178
|
});
|
|
154
179
|
for (let i = 0; i < pending.length; i++) {
|
|
155
180
|
const outcome = await this.ensureMigrationRun(pending[i].id);
|
|
@@ -13,6 +13,14 @@ export interface ColumnTypeFactory {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
export class TableManager {
|
|
16
|
+
/**
|
|
17
|
+
* Bounded verification re-reads for {@link reconcileConcurrentSchemaChange}: an already-exists
|
|
18
|
+
* DDL error proves the conflicting schema change COMMITTED, but INFORMATION_SCHEMA on this
|
|
19
|
+
* connection can briefly lag that commit — 5 × 200ms rides out the propagation without letting
|
|
20
|
+
* a genuine conflict stall for more than ~1s.
|
|
21
|
+
*/
|
|
22
|
+
private static readonly RECONCILE_VERIFY_ATTEMPTS = 5;
|
|
23
|
+
private static readonly RECONCILE_VERIFY_RETRY_DELAY_MS = 200;
|
|
16
24
|
private logger = new Logger({ name: this.constructor.name, logLevel: getEnvVar('DB_LOG_LEVEL') as any });
|
|
17
25
|
public columnTypeFactory: ColumnTypeFactory;
|
|
18
26
|
public schemaOperations: SchemaOperations;
|
|
@@ -119,7 +127,9 @@ export class TableManager {
|
|
|
119
127
|
* getTableChanges uses) must confirm every table now exists AND has no remaining changes of
|
|
120
128
|
* the kind we attempted. A concurrent actor applying our EXACT change satisfies this; a
|
|
121
129
|
* genuine conflict (e.g. the column landed with a different type, so a column-type change is
|
|
122
|
-
* still outstanding) does not.
|
|
130
|
+
* still outstanding) does not. The re-read is resilient to brief schema propagation — see
|
|
131
|
+
* {@link verifyIntendedDefinition} for the bounded retry that prevents a momentarily-stale
|
|
132
|
+
* INFORMATION_SCHEMA read from false-negativing into the very crash this closes.
|
|
123
133
|
* If either gate fails, the ORIGINAL error propagates unchanged. Because every actor runs this
|
|
124
134
|
* same reconcile, it closes all three windows: migration-Job-vs-pod, pod-vs-pod, and
|
|
125
135
|
* multi-replica boot.
|
|
@@ -138,30 +148,65 @@ export class TableManager {
|
|
|
138
148
|
const reason = this.schemaErrorReason(error);
|
|
139
149
|
|
|
140
150
|
for (const table of tables) {
|
|
141
|
-
|
|
142
|
-
|
|
151
|
+
await this.verifyIntendedDefinition(table, tableNames, reason, error);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
this.logger.warn({
|
|
155
|
+
message: `[schema reconcile] tolerated concurrent ALREADY_EXISTS for table(s) '${tableNames}' — re-read verified the object present with the intended definition, treating as applied (a concurrent actor won the race). reason: ${reason}`,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Re-read the live schema until `table` is present with the intended definition, retrying a
|
|
161
|
+
* BOUNDED number of times ({@link RECONCILE_VERIFY_ATTEMPTS} × {@link RECONCILE_VERIFY_RETRY_DELAY_MS}).
|
|
162
|
+
*
|
|
163
|
+
* The already-exists error means the conflicting DDL has COMMITTED — the object exists — but
|
|
164
|
+
* INFORMATION_SCHEMA on this connection can briefly lag that commit, and a single point-in-time
|
|
165
|
+
* read that misses it would false-negative into a re-throw, reintroducing the exact boot crash
|
|
166
|
+
* this reconcile closes. So the re-read's job is (a) to wait out momentary invisibility and
|
|
167
|
+
* (b) to verify the DEFINITION matches intent. A momentary stale read resolves via retry into
|
|
168
|
+
* success; only a definition still absent or mismatched after every attempt is a genuine
|
|
169
|
+
* conflict — logged at WARN, then the ORIGINAL error re-throws.
|
|
170
|
+
*/
|
|
171
|
+
private async verifyIntendedDefinition(
|
|
172
|
+
table: Table<any>,
|
|
173
|
+
tableNames: string,
|
|
174
|
+
reason: string,
|
|
175
|
+
error: unknown
|
|
176
|
+
): Promise<void> {
|
|
177
|
+
let remainingChanges: TableChanges | undefined;
|
|
178
|
+
for (let attempt = 1; attempt <= TableManager.RECONCILE_VERIFY_ATTEMPTS; attempt++) {
|
|
179
|
+
if (attempt > 1) {
|
|
180
|
+
await this.delay(TableManager.RECONCILE_VERIFY_RETRY_DELAY_MS);
|
|
181
|
+
}
|
|
182
|
+
|
|
143
183
|
if (!(await this.tableExists(table))) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
throw error;
|
|
184
|
+
remainingChanges = undefined;
|
|
185
|
+
continue;
|
|
148
186
|
}
|
|
149
187
|
|
|
150
|
-
|
|
151
|
-
if (this.shouldAlterTable(remainingChanges)) {
|
|
152
|
-
//
|
|
153
|
-
// concurrent actor did NOT apply our exact change (a genuine conflict). Propagate.
|
|
154
|
-
this.logger.warn({
|
|
155
|
-
message: `[schema reconcile] caught ALREADY_EXISTS for table '${table.name}' but the live schema does NOT match the intended definition on re-read (genuine conflict) — re-throwing. reason: ${reason}`,
|
|
156
|
-
obj: { remainingChanges },
|
|
157
|
-
});
|
|
158
|
-
throw error;
|
|
188
|
+
remainingChanges = await this.getTableChanges(table);
|
|
189
|
+
if (!this.shouldAlterTable(remainingChanges)) {
|
|
190
|
+
return; // verified: present with the intended definition
|
|
159
191
|
}
|
|
160
192
|
}
|
|
161
193
|
|
|
194
|
+
if (!remainingChanges) {
|
|
195
|
+
// Still absent after every re-read — not the concurrent-winner case; surface the original
|
|
196
|
+
// error rather than masking it.
|
|
197
|
+
this.logger.warn({
|
|
198
|
+
message: `[schema reconcile] caught ALREADY_EXISTS for table(s) '${tableNames}' but '${table.name}' is still absent after ${TableManager.RECONCILE_VERIFY_ATTEMPTS} re-reads — NOT a concurrent apply; re-throwing. reason: ${reason}`,
|
|
199
|
+
});
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// The object exists but the live schema still differs from the intended definition, so a
|
|
204
|
+
// concurrent actor did NOT apply our exact change (a genuine conflict). Propagate.
|
|
162
205
|
this.logger.warn({
|
|
163
|
-
message: `[schema reconcile]
|
|
206
|
+
message: `[schema reconcile] caught ALREADY_EXISTS for table '${table.name}' but the live schema does NOT match the intended definition after ${TableManager.RECONCILE_VERIFY_ATTEMPTS} re-reads (genuine conflict) — re-throwing. reason: ${reason}`,
|
|
207
|
+
obj: { remainingChanges },
|
|
164
208
|
});
|
|
209
|
+
throw error;
|
|
165
210
|
}
|
|
166
211
|
|
|
167
212
|
/** Concise, loggable reason from a schema-update error: the backend names the offending object
|
|
@@ -171,6 +216,10 @@ export class TableManager {
|
|
|
171
216
|
return String(candidate?.details ?? candidate?.message ?? error);
|
|
172
217
|
}
|
|
173
218
|
|
|
219
|
+
private delay(ms: number): Promise<void> {
|
|
220
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
221
|
+
}
|
|
222
|
+
|
|
174
223
|
private validateDynamicReferenceColumns(table: Table<any>): void {
|
|
175
224
|
const isDynamicRefColumn = (column: any): column is DynamicReferenceColumn<any> =>
|
|
176
225
|
typeof column.dynamicRefTableColName === 'string';
|
|
@@ -14,6 +14,14 @@ export interface Migration extends SourceRecord {
|
|
|
14
14
|
* schema, not in deploy-pipeline prose.
|
|
15
15
|
*/
|
|
16
16
|
manual?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Ledger-owned state (like `status` — never declared on a source record): stamped `true` by the
|
|
19
|
+
* deploy-gated series ({@link MigrationRunner.runPendingMigrations}) when the row's source class
|
|
20
|
+
* no longer ships. A retired row is NEVER auto-run — even if its source class returns in a later
|
|
21
|
+
* build — until someone un-retires it on the Migrations page (the record form's Un-retire
|
|
22
|
+
* button). A returned loader id is not consent to auto-run.
|
|
23
|
+
*/
|
|
24
|
+
retired?: boolean;
|
|
17
25
|
status?: 'proposed' | 'running' | 'success' | 'failure';
|
|
18
26
|
failureMessage?: string;
|
|
19
27
|
failureStack?: string;
|
|
@@ -39,6 +47,7 @@ export class MigrationTable extends Table<Migration> {
|
|
|
39
47
|
public columns = withSourceRecordColumns<Migration>({
|
|
40
48
|
description: new StringColumn('description', {}, 4000),
|
|
41
49
|
manual: new BooleanColumn('manual'),
|
|
50
|
+
retired: new BooleanColumn('retired'),
|
|
42
51
|
status: new StringColumn('status', { defaultValue: async () => 'proposed' }),
|
|
43
52
|
failureMessage: new StringColumn('failure_message', {}, 4000),
|
|
44
53
|
failureStack: new StringColumn('failure_stack', {}, 'MAX'),
|