@ftschopp/dynatable-migrations 1.2.3 → 1.2.4
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 +7 -0
- package/dist/core/lock-heartbeat.d.ts +15 -0
- package/dist/core/lock-heartbeat.d.ts.map +1 -0
- package/dist/core/lock-heartbeat.js +44 -0
- package/dist/core/lock-heartbeat.js.map +1 -0
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +11 -1
- package/dist/core/runner.js.map +1 -1
- package/dist/core/tracker.d.ts +16 -0
- package/dist/core/tracker.d.ts.map +1 -1
- package/dist/core/tracker.js +132 -59
- package/dist/core/tracker.js.map +1 -1
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/core/lock-heartbeat.test.ts +78 -0
- package/src/core/lock-heartbeat.ts +48 -0
- package/src/core/runner.ts +9 -1
- package/src/core/tracker.test.ts +150 -0
- package/src/core/tracker.ts +144 -61
- package/src/types/index.ts +12 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## @ftschopp/dynatable-migrations [1.2.4](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.2.3...@ftschopp/dynatable-migrations@1.2.4) (2026-05-08)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **migrations:** add lock refresh and gate tracker writes on ownership ([#28](https://github.com/ftschopp/dynatable/issues/28)) ([5d9d033](https://github.com/ftschopp/dynatable/commit/5d9d0336c0e79179208209906f4c72797eb5f275)), closes [#9](https://github.com/ftschopp/dynatable/issues/9)
|
|
7
|
+
|
|
1
8
|
## @ftschopp/dynatable-migrations [1.2.3](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.2.2...@ftschopp/dynatable-migrations@1.2.3) (2026-05-08)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { MigrationTracker } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Periodically refreshes the migration lock so that migrations longer than
|
|
4
|
+
* the lock TTL don't have their lock taken by another worker.
|
|
5
|
+
*
|
|
6
|
+
* Returns a stop function. Call it from the same `finally` that releases
|
|
7
|
+
* the lock to make sure the interval doesn't leak.
|
|
8
|
+
*
|
|
9
|
+
* The heartbeat fires every `ttlSeconds / 3` seconds. Errors from the
|
|
10
|
+
* underlying refresh are logged and swallowed: if the lock is genuinely
|
|
11
|
+
* lost, the next tracker mutation will fail its ConditionCheck and the
|
|
12
|
+
* runner will surface a clear `TransactionCanceledException` to the user.
|
|
13
|
+
*/
|
|
14
|
+
export declare function startLockHeartbeat(tracker: MigrationTracker, ttlSeconds: number): () => void;
|
|
15
|
+
//# sourceMappingURL=lock-heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock-heartbeat.d.ts","sourceRoot":"","sources":["../../src/core/lock-heartbeat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,MAAM,GACjB,MAAM,IAAI,CA8BZ"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.startLockHeartbeat = startLockHeartbeat;
|
|
4
|
+
/**
|
|
5
|
+
* Periodically refreshes the migration lock so that migrations longer than
|
|
6
|
+
* the lock TTL don't have their lock taken by another worker.
|
|
7
|
+
*
|
|
8
|
+
* Returns a stop function. Call it from the same `finally` that releases
|
|
9
|
+
* the lock to make sure the interval doesn't leak.
|
|
10
|
+
*
|
|
11
|
+
* The heartbeat fires every `ttlSeconds / 3` seconds. Errors from the
|
|
12
|
+
* underlying refresh are logged and swallowed: if the lock is genuinely
|
|
13
|
+
* lost, the next tracker mutation will fail its ConditionCheck and the
|
|
14
|
+
* runner will surface a clear `TransactionCanceledException` to the user.
|
|
15
|
+
*/
|
|
16
|
+
function startLockHeartbeat(tracker, ttlSeconds) {
|
|
17
|
+
// Fire well before expiry so a single missed beat doesn't drop the lock.
|
|
18
|
+
const intervalMs = Math.max(1000, Math.floor((ttlSeconds * 1000) / 3));
|
|
19
|
+
let active = true;
|
|
20
|
+
const handle = setInterval(() => {
|
|
21
|
+
if (!active)
|
|
22
|
+
return;
|
|
23
|
+
void tracker.refreshLock().catch((err) => {
|
|
24
|
+
const name = err?.name;
|
|
25
|
+
const message = err?.message ?? String(err);
|
|
26
|
+
if (name === 'ConditionalCheckFailedException') {
|
|
27
|
+
console.warn('⚠️ Migration lock was taken by another process. ' +
|
|
28
|
+
'Subsequent tracker writes will fail.');
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.warn(`⚠️ Failed to refresh migration lock: ${message}`);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}, intervalMs);
|
|
35
|
+
// Don't keep the Node event loop alive just for the heartbeat.
|
|
36
|
+
if (typeof handle.unref === 'function') {
|
|
37
|
+
handle.unref();
|
|
38
|
+
}
|
|
39
|
+
return () => {
|
|
40
|
+
active = false;
|
|
41
|
+
clearInterval(handle);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=lock-heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lock-heartbeat.js","sourceRoot":"","sources":["../../src/core/lock-heartbeat.ts"],"names":[],"mappings":";;AAcA,gDAiCC;AA7CD;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAChC,OAAyB,EACzB,UAAkB;IAElB,yEAAyE;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YAChD,MAAM,IAAI,GAAI,GAAgC,EAAE,IAAI,CAAC;YACrD,MAAM,OAAO,GAAI,GAAmC,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7E,IAAI,IAAI,KAAK,iCAAiC,EAAE,CAAC;gBAC/C,OAAO,CAAC,IAAI,CACV,mDAAmD;oBACjD,sCAAsC,CACzC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,UAAU,CAAC,CAAC;IAEf,+DAA+D;IAC/D,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,GAAG,EAAE;QACV,MAAM,GAAG,KAAK,CAAC;QACf,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAa/D,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAa/D,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM7F,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAOnE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,EAAE,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAoG5D;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAyEhF;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IA6B1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACH,OAAO,CAAC,aAAa;CAoBtB"}
|
package/dist/core/runner.js
CHANGED
|
@@ -5,6 +5,7 @@ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
|
5
5
|
const tracker_1 = require("./tracker");
|
|
6
6
|
const loader_1 = require("./loader");
|
|
7
7
|
const semver_1 = require("./semver");
|
|
8
|
+
const lock_heartbeat_1 = require("./lock-heartbeat");
|
|
8
9
|
class MigrationRunner {
|
|
9
10
|
constructor(client, config) {
|
|
10
11
|
this.client = client;
|
|
@@ -25,12 +26,14 @@ class MigrationRunner {
|
|
|
25
26
|
const { limit, dryRun = false } = options;
|
|
26
27
|
await this.initialize();
|
|
27
28
|
// Acquire lock unless dry run
|
|
29
|
+
let stopHeartbeat;
|
|
28
30
|
if (!dryRun) {
|
|
29
31
|
const lockAcquired = await this.tracker.acquireLock();
|
|
30
32
|
if (!lockAcquired) {
|
|
31
33
|
throw new Error('Could not acquire migration lock. Another migration may be in progress. ' +
|
|
32
34
|
'If you believe this is an error, wait a few minutes and try again.');
|
|
33
35
|
}
|
|
36
|
+
stopHeartbeat = (0, lock_heartbeat_1.startLockHeartbeat)(this.tracker, this.tracker.lockTtlSeconds);
|
|
34
37
|
}
|
|
35
38
|
try {
|
|
36
39
|
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
@@ -85,7 +88,10 @@ class MigrationRunner {
|
|
|
85
88
|
return executed;
|
|
86
89
|
}
|
|
87
90
|
finally {
|
|
88
|
-
// Always release lock
|
|
91
|
+
// Always stop the heartbeat and release the lock — in that order, so
|
|
92
|
+
// we don't refresh a lock we're about to delete.
|
|
93
|
+
if (stopHeartbeat)
|
|
94
|
+
stopHeartbeat();
|
|
89
95
|
if (!dryRun) {
|
|
90
96
|
await this.tracker.releaseLock();
|
|
91
97
|
}
|
|
@@ -97,11 +103,13 @@ class MigrationRunner {
|
|
|
97
103
|
async down(steps = 1, dryRun = false) {
|
|
98
104
|
await this.initialize();
|
|
99
105
|
// Acquire lock unless dry run
|
|
106
|
+
let stopHeartbeat;
|
|
100
107
|
if (!dryRun) {
|
|
101
108
|
const lockAcquired = await this.tracker.acquireLock();
|
|
102
109
|
if (!lockAcquired) {
|
|
103
110
|
throw new Error('Could not acquire migration lock. Another migration may be in progress.');
|
|
104
111
|
}
|
|
112
|
+
stopHeartbeat = (0, lock_heartbeat_1.startLockHeartbeat)(this.tracker, this.tracker.lockTtlSeconds);
|
|
105
113
|
}
|
|
106
114
|
try {
|
|
107
115
|
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
@@ -145,6 +153,8 @@ class MigrationRunner {
|
|
|
145
153
|
return rolledBack;
|
|
146
154
|
}
|
|
147
155
|
finally {
|
|
156
|
+
if (stopHeartbeat)
|
|
157
|
+
stopHeartbeat();
|
|
148
158
|
if (!dryRun) {
|
|
149
159
|
await this.tracker.releaseLock();
|
|
150
160
|
}
|
package/dist/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";;;AACA,wDAW+B;AAE/B,uCAAqD;AACrD,qCAA2C;AAC3C,qCAAyC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tracker.d.ts
CHANGED
|
@@ -1,17 +1,33 @@
|
|
|
1
1
|
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
2
2
|
import { MigrationTracker, MigrationRecord, SchemaChange, MigrationConfig } from '../types';
|
|
3
|
+
/** Default lock TTL in seconds. Configurable via MigrationConfig.lockTtlSeconds. */
|
|
4
|
+
export declare const DEFAULT_LOCK_TTL_SECONDS = 300;
|
|
3
5
|
export declare class DynamoDBMigrationTracker implements MigrationTracker {
|
|
4
6
|
private client;
|
|
5
7
|
private tableName;
|
|
6
8
|
private trackingPrefix;
|
|
7
9
|
private gsi1Name;
|
|
8
10
|
private lockId;
|
|
11
|
+
/** TTL for newly-acquired or refreshed locks. */
|
|
12
|
+
readonly lockTtlSeconds: number;
|
|
9
13
|
constructor(client: DynamoDBDocumentClient, config: MigrationConfig);
|
|
14
|
+
private get lockKey();
|
|
15
|
+
/** Throws if there is no active lock. Call before any tracker write. */
|
|
16
|
+
private requireLock;
|
|
17
|
+
/** Builds a TransactWrite ConditionCheck that asserts we still own the lock. */
|
|
18
|
+
private lockOwnershipCheck;
|
|
10
19
|
initialize(): Promise<void>;
|
|
11
20
|
/**
|
|
12
21
|
* Acquire a distributed lock to prevent concurrent migrations
|
|
13
22
|
*/
|
|
14
23
|
acquireLock(): Promise<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Extend the lock's expiration by another `lockTtlSeconds`. Throws
|
|
26
|
+
* `ConditionalCheckFailedException` if another worker has already taken
|
|
27
|
+
* the lock — callers should treat that as "we lost the race; stop
|
|
28
|
+
* making writes". Silent no-op if no lock is currently held.
|
|
29
|
+
*/
|
|
30
|
+
refreshLock(): Promise<void>;
|
|
15
31
|
/**
|
|
16
32
|
* Release the distributed lock
|
|
17
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAS/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAS/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG5F,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,iDAAiD;IACjD,SAAgB,cAAc,EAAE,MAAM,CAAC;gBAE3B,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAQnE,OAAO,KAAK,OAAO,GAKlB;IAED,wEAAwE;IACxE,OAAO,CAAC,WAAW;IASnB,gFAAgF;IAChF,OAAO,CAAC,kBAAkB;IAcpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAiCrC;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBlC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBlC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAuBlD,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcjD;;;OAGG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,aAAa,CAAC,EAAE,YAAY,EAAE,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAuHhB;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuDhD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8D3D,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCvD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAc9D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAInD"}
|
package/dist/core/tracker.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DynamoDBMigrationTracker = void 0;
|
|
3
|
+
exports.DynamoDBMigrationTracker = exports.DEFAULT_LOCK_TTL_SECONDS = void 0;
|
|
4
4
|
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
5
5
|
const semver_1 = require("./semver");
|
|
6
|
-
|
|
6
|
+
/** Default lock TTL in seconds. Configurable via MigrationConfig.lockTtlSeconds. */
|
|
7
|
+
exports.DEFAULT_LOCK_TTL_SECONDS = 300; // 5 minutes
|
|
7
8
|
class DynamoDBMigrationTracker {
|
|
8
9
|
constructor(client, config) {
|
|
9
10
|
this.lockId = null;
|
|
@@ -11,6 +12,34 @@ class DynamoDBMigrationTracker {
|
|
|
11
12
|
this.tableName = config.tableName;
|
|
12
13
|
this.trackingPrefix = config.trackingPrefix || '_SCHEMA#VERSION';
|
|
13
14
|
this.gsi1Name = config.gsi1Name || 'GSI1';
|
|
15
|
+
this.lockTtlSeconds = config.lockTtlSeconds ?? exports.DEFAULT_LOCK_TTL_SECONDS;
|
|
16
|
+
}
|
|
17
|
+
get lockKey() {
|
|
18
|
+
return {
|
|
19
|
+
PK: `${this.trackingPrefix}#LOCK`,
|
|
20
|
+
SK: `${this.trackingPrefix}#LOCK`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Throws if there is no active lock. Call before any tracker write. */
|
|
24
|
+
requireLock() {
|
|
25
|
+
if (!this.lockId) {
|
|
26
|
+
throw new Error('Tracker has no active lock; refusing to issue tracker mutations. ' +
|
|
27
|
+
'Call acquireLock() first.');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Builds a TransactWrite ConditionCheck that asserts we still own the lock. */
|
|
31
|
+
lockOwnershipCheck() {
|
|
32
|
+
this.requireLock();
|
|
33
|
+
return {
|
|
34
|
+
ConditionCheck: {
|
|
35
|
+
TableName: this.tableName,
|
|
36
|
+
Key: this.lockKey,
|
|
37
|
+
ConditionExpression: 'lockId = :lockId',
|
|
38
|
+
ExpressionAttributeValues: {
|
|
39
|
+
':lockId': this.lockId,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
14
43
|
}
|
|
15
44
|
async initialize() {
|
|
16
45
|
// Check if current version pointer exists, if not create it
|
|
@@ -34,24 +63,21 @@ class DynamoDBMigrationTracker {
|
|
|
34
63
|
* Acquire a distributed lock to prevent concurrent migrations
|
|
35
64
|
*/
|
|
36
65
|
async acquireLock() {
|
|
37
|
-
const lockKey = {
|
|
38
|
-
PK: `${this.trackingPrefix}#LOCK`,
|
|
39
|
-
SK: `${this.trackingPrefix}#LOCK`,
|
|
40
|
-
};
|
|
41
66
|
const now = Date.now();
|
|
42
|
-
const expiresAt = now +
|
|
67
|
+
const expiresAt = now + this.lockTtlSeconds * 1000;
|
|
43
68
|
this.lockId = `lock-${now}-${Math.random().toString(36).substring(7)}`;
|
|
44
69
|
try {
|
|
45
70
|
await this.client.send(new lib_dynamodb_1.PutCommand({
|
|
46
71
|
TableName: this.tableName,
|
|
47
72
|
Item: {
|
|
48
|
-
...lockKey,
|
|
73
|
+
...this.lockKey,
|
|
49
74
|
lockId: this.lockId,
|
|
50
75
|
acquiredAt: new Date().toISOString(),
|
|
51
76
|
expiresAt,
|
|
52
77
|
},
|
|
53
|
-
// Only succeed if lock doesn't exist or has expired
|
|
54
|
-
|
|
78
|
+
// Only succeed if lock doesn't exist or has expired. The `<=`
|
|
79
|
+
// covers the boundary where two clocks read the exact ms.
|
|
80
|
+
ConditionExpression: 'attribute_not_exists(PK) OR expiresAt <= :now',
|
|
55
81
|
ExpressionAttributeValues: {
|
|
56
82
|
':now': now,
|
|
57
83
|
},
|
|
@@ -66,20 +92,37 @@ class DynamoDBMigrationTracker {
|
|
|
66
92
|
throw error;
|
|
67
93
|
}
|
|
68
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Extend the lock's expiration by another `lockTtlSeconds`. Throws
|
|
97
|
+
* `ConditionalCheckFailedException` if another worker has already taken
|
|
98
|
+
* the lock — callers should treat that as "we lost the race; stop
|
|
99
|
+
* making writes". Silent no-op if no lock is currently held.
|
|
100
|
+
*/
|
|
101
|
+
async refreshLock() {
|
|
102
|
+
if (!this.lockId)
|
|
103
|
+
return;
|
|
104
|
+
const newExpiresAt = Date.now() + this.lockTtlSeconds * 1000;
|
|
105
|
+
await this.client.send(new lib_dynamodb_1.UpdateCommand({
|
|
106
|
+
TableName: this.tableName,
|
|
107
|
+
Key: this.lockKey,
|
|
108
|
+
UpdateExpression: 'SET expiresAt = :exp',
|
|
109
|
+
ConditionExpression: 'lockId = :lockId',
|
|
110
|
+
ExpressionAttributeValues: {
|
|
111
|
+
':exp': newExpiresAt,
|
|
112
|
+
':lockId': this.lockId,
|
|
113
|
+
},
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
69
116
|
/**
|
|
70
117
|
* Release the distributed lock
|
|
71
118
|
*/
|
|
72
119
|
async releaseLock() {
|
|
73
120
|
if (!this.lockId)
|
|
74
121
|
return;
|
|
75
|
-
const lockKey = {
|
|
76
|
-
PK: `${this.trackingPrefix}#LOCK`,
|
|
77
|
-
SK: `${this.trackingPrefix}#LOCK`,
|
|
78
|
-
};
|
|
79
122
|
try {
|
|
80
123
|
await this.client.send(new lib_dynamodb_1.DeleteCommand({
|
|
81
124
|
TableName: this.tableName,
|
|
82
|
-
Key: lockKey,
|
|
125
|
+
Key: this.lockKey,
|
|
83
126
|
// Only delete if we own the lock
|
|
84
127
|
ConditionExpression: 'lockId = :lockId',
|
|
85
128
|
ExpressionAttributeValues: {
|
|
@@ -132,6 +175,7 @@ class DynamoDBMigrationTracker {
|
|
|
132
175
|
* Handles both new migrations and re-applying rolled back migrations
|
|
133
176
|
*/
|
|
134
177
|
async markAsApplied(version, name, schemaDefinition, schemaChanges, checksum) {
|
|
178
|
+
this.requireLock();
|
|
135
179
|
const now = new Date().toISOString();
|
|
136
180
|
// Check if migration record already exists (e.g., rolled back or failed)
|
|
137
181
|
const existing = await this.getMigration(version);
|
|
@@ -158,6 +202,7 @@ class DynamoDBMigrationTracker {
|
|
|
158
202
|
}
|
|
159
203
|
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
160
204
|
TransactItems: [
|
|
205
|
+
this.lockOwnershipCheck(),
|
|
161
206
|
{
|
|
162
207
|
Update: {
|
|
163
208
|
TableName: this.tableName,
|
|
@@ -198,6 +243,7 @@ class DynamoDBMigrationTracker {
|
|
|
198
243
|
// Create new migration record
|
|
199
244
|
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
200
245
|
TransactItems: [
|
|
246
|
+
this.lockOwnershipCheck(),
|
|
201
247
|
{
|
|
202
248
|
Put: {
|
|
203
249
|
TableName: this.tableName,
|
|
@@ -213,8 +259,9 @@ class DynamoDBMigrationTracker {
|
|
|
213
259
|
schemaChanges,
|
|
214
260
|
checksum,
|
|
215
261
|
},
|
|
216
|
-
// Ensure migration wasn't already applied
|
|
217
|
-
|
|
262
|
+
// Ensure migration wasn't already applied (uniqueness on
|
|
263
|
+
// SK; PK is shared across all migration rows).
|
|
264
|
+
ConditionExpression: 'attribute_not_exists(SK)',
|
|
218
265
|
},
|
|
219
266
|
},
|
|
220
267
|
{
|
|
@@ -240,6 +287,7 @@ class DynamoDBMigrationTracker {
|
|
|
240
287
|
* Mark migration as rolled back using TransactWrite for atomicity
|
|
241
288
|
*/
|
|
242
289
|
async markAsRolledBack(version) {
|
|
290
|
+
this.requireLock();
|
|
243
291
|
const now = new Date().toISOString();
|
|
244
292
|
// Find previous version
|
|
245
293
|
const migrations = await this.getAppliedMigrations();
|
|
@@ -250,6 +298,7 @@ class DynamoDBMigrationTracker {
|
|
|
250
298
|
// Use TransactWrite to atomically update record and pointer
|
|
251
299
|
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
252
300
|
TransactItems: [
|
|
301
|
+
this.lockOwnershipCheck(),
|
|
253
302
|
{
|
|
254
303
|
Update: {
|
|
255
304
|
TableName: this.tableName,
|
|
@@ -286,62 +335,86 @@ class DynamoDBMigrationTracker {
|
|
|
286
335
|
}));
|
|
287
336
|
}
|
|
288
337
|
async markAsFailed(version, error) {
|
|
338
|
+
this.requireLock();
|
|
289
339
|
// Check if the migration record exists first
|
|
290
340
|
const existing = await this.getMigration(version);
|
|
341
|
+
const now = new Date().toISOString();
|
|
291
342
|
if (existing) {
|
|
292
|
-
// Update existing record
|
|
293
|
-
await this.client.send(new lib_dynamodb_1.
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
343
|
+
// Update existing record, gated by lock ownership
|
|
344
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
345
|
+
TransactItems: [
|
|
346
|
+
this.lockOwnershipCheck(),
|
|
347
|
+
{
|
|
348
|
+
Update: {
|
|
349
|
+
TableName: this.tableName,
|
|
350
|
+
Key: {
|
|
351
|
+
PK: this.trackingPrefix,
|
|
352
|
+
SK: version,
|
|
353
|
+
},
|
|
354
|
+
UpdateExpression: 'SET #status = :status, #error = :error, failedAt = :timestamp',
|
|
355
|
+
ExpressionAttributeNames: {
|
|
356
|
+
'#status': 'status',
|
|
357
|
+
'#error': 'error',
|
|
358
|
+
},
|
|
359
|
+
ExpressionAttributeValues: {
|
|
360
|
+
':status': 'failed',
|
|
361
|
+
':error': error,
|
|
362
|
+
':timestamp': now,
|
|
363
|
+
},
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
],
|
|
309
367
|
}));
|
|
310
368
|
}
|
|
311
369
|
else {
|
|
312
|
-
// Create new record for failed migration
|
|
313
|
-
await this.client.send(new lib_dynamodb_1.
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
370
|
+
// Create new record for failed migration, gated by lock ownership
|
|
371
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
372
|
+
TransactItems: [
|
|
373
|
+
this.lockOwnershipCheck(),
|
|
374
|
+
{
|
|
375
|
+
Put: {
|
|
376
|
+
TableName: this.tableName,
|
|
377
|
+
Item: {
|
|
378
|
+
PK: this.trackingPrefix,
|
|
379
|
+
SK: version,
|
|
380
|
+
version,
|
|
381
|
+
name: 'unknown',
|
|
382
|
+
status: 'failed',
|
|
383
|
+
error,
|
|
384
|
+
failedAt: now,
|
|
385
|
+
timestamp: now,
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
],
|
|
325
390
|
}));
|
|
326
391
|
}
|
|
327
392
|
}
|
|
328
393
|
async recordSchemaChange(change) {
|
|
394
|
+
this.requireLock();
|
|
329
395
|
const currentVersion = await this.getCurrentVersion();
|
|
330
396
|
if (!currentVersion || currentVersion === 'v0000') {
|
|
331
397
|
throw new Error('Cannot record schema change: No migration has been applied yet');
|
|
332
398
|
}
|
|
333
|
-
// Append to schemaChanges array
|
|
334
|
-
await this.client.send(new lib_dynamodb_1.
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
399
|
+
// Append to schemaChanges array, gated by lock ownership
|
|
400
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
401
|
+
TransactItems: [
|
|
402
|
+
this.lockOwnershipCheck(),
|
|
403
|
+
{
|
|
404
|
+
Update: {
|
|
405
|
+
TableName: this.tableName,
|
|
406
|
+
Key: {
|
|
407
|
+
PK: this.trackingPrefix,
|
|
408
|
+
SK: currentVersion,
|
|
409
|
+
},
|
|
410
|
+
UpdateExpression: 'SET schemaChanges = list_append(if_not_exists(schemaChanges, :empty_list), :change)',
|
|
411
|
+
ExpressionAttributeValues: {
|
|
412
|
+
':empty_list': [],
|
|
413
|
+
':change': [change],
|
|
414
|
+
},
|
|
415
|
+
},
|
|
416
|
+
},
|
|
417
|
+
],
|
|
345
418
|
}));
|
|
346
419
|
}
|
|
347
420
|
async getMigration(version) {
|
package/dist/core/tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -95,6 +95,12 @@ export interface MigrationConfig {
|
|
|
95
95
|
migrationsDir?: string;
|
|
96
96
|
trackingPrefix?: string;
|
|
97
97
|
gsi1Name?: string;
|
|
98
|
+
/**
|
|
99
|
+
* How long an acquired migration lock stays valid before another worker
|
|
100
|
+
* can take it over, in seconds. The runner sends a heartbeat every
|
|
101
|
+
* `lockTtlSeconds / 3` to extend it. Default: 300 (5 minutes).
|
|
102
|
+
*/
|
|
103
|
+
lockTtlSeconds?: number;
|
|
98
104
|
}
|
|
99
105
|
/**
|
|
100
106
|
* Migration tracker interface
|
|
@@ -120,6 +126,11 @@ export interface MigrationTracker {
|
|
|
120
126
|
* Release the distributed lock
|
|
121
127
|
*/
|
|
122
128
|
releaseLock(): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Extend the lock's expiration. Throws `ConditionalCheckFailedException`
|
|
131
|
+
* if the lock has already been taken by someone else.
|
|
132
|
+
*/
|
|
133
|
+
refreshLock(): Promise<void>;
|
|
123
134
|
/**
|
|
124
135
|
* Mark migration as applied
|
|
125
136
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ftschopp/dynatable-migrations",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "DynamoDB migration tool for single table design with schema versioning",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
"@repo/typescript-config": "*",
|
|
29
29
|
"@types/jest": "^30.0.0",
|
|
30
30
|
"@types/node": "^25.0.3",
|
|
31
|
+
"aws-sdk-client-mock": "^4.1.0",
|
|
31
32
|
"jest": "^30.2.0",
|
|
32
33
|
"ts-jest": "^29.4.6",
|
|
33
34
|
"typescript": "5.9.3"
|