@memberjunction/metadata-sync 6.1.2 → 6.1.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/README.md +88 -25
- package/dist/config.d.ts +23 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/file-backup-manager.d.ts +10 -0
- package/dist/lib/file-backup-manager.d.ts.map +1 -1
- package/dist/lib/file-backup-manager.js +17 -0
- package/dist/lib/file-backup-manager.js.map +1 -1
- package/dist/lib/file-write-batch.d.ts +0 -4
- package/dist/lib/file-write-batch.d.ts.map +1 -1
- package/dist/lib/file-write-batch.js +10 -8
- package/dist/lib/file-write-batch.js.map +1 -1
- package/dist/lib/graph-provider-pool.d.ts +62 -33
- package/dist/lib/graph-provider-pool.d.ts.map +1 -1
- package/dist/lib/graph-provider-pool.js +131 -79
- package/dist/lib/graph-provider-pool.js.map +1 -1
- package/dist/lib/push-outcome.d.ts +66 -0
- package/dist/lib/push-outcome.d.ts.map +1 -0
- package/dist/lib/push-outcome.js +81 -0
- package/dist/lib/push-outcome.js.map +1 -0
- package/dist/lib/push-write-mode.d.ts +47 -0
- package/dist/lib/push-write-mode.d.ts.map +1 -0
- package/dist/lib/push-write-mode.js +53 -0
- package/dist/lib/push-write-mode.js.map +1 -0
- package/dist/lib/record-primary-key.d.ts +35 -0
- package/dist/lib/record-primary-key.d.ts.map +1 -0
- package/dist/lib/record-primary-key.js +44 -0
- package/dist/lib/record-primary-key.js.map +1 -0
- package/dist/lib/transaction-manager.d.ts +11 -1
- package/dist/lib/transaction-manager.d.ts.map +1 -1
- package/dist/lib/transaction-manager.js +20 -4
- package/dist/lib/transaction-manager.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +43 -17
- package/dist/plugins/index.js.map +1 -1
- package/dist/services/PullService.d.ts +0 -1
- package/dist/services/PullService.d.ts.map +1 -1
- package/dist/services/PullService.js +8 -19
- package/dist/services/PullService.js.map +1 -1
- package/dist/services/PushService.d.ts +109 -0
- package/dist/services/PushService.d.ts.map +1 -1
- package/dist/services/PushService.js +631 -319
- package/dist/services/PushService.js.map +1 -1
- package/package.json +14 -14
package/README.md
CHANGED
|
@@ -577,7 +577,7 @@ flowchart TD
|
|
|
577
577
|
B -->|Found| C[Return ID immediately]
|
|
578
578
|
B -->|Not found| D{Has ?allowDefer?}
|
|
579
579
|
D -->|Yes| E[Skip this field, continue processing]
|
|
580
|
-
D -->|No| F[
|
|
580
|
+
D -->|No| F[Push fails - transaction rolled back]
|
|
581
581
|
E --> G[Save record without deferred field]
|
|
582
582
|
G --> H[Queue record for re-processing]
|
|
583
583
|
H --> I[Phase 2.5: Re-process entire record]
|
|
@@ -642,7 +642,7 @@ This means: "Look up the category, create if missing, and if the lookup still fa
|
|
|
642
642
|
|
|
643
643
|
**Important notes:**
|
|
644
644
|
- Deferred records are processed before the final commit (Phase 2.5)
|
|
645
|
-
- If any deferred record fails on retry, the
|
|
645
|
+
- If any deferred record fails on retry, the push stops and its transaction is rolled back. In an atomic push (the default) that undoes everything. In a directory using isolated transactions, creates and updates from Phase 1 were already committed and stay, including the deferred record's first save without the deferred field
|
|
646
646
|
- Use sparingly -- only for genuine circular dependencies
|
|
647
647
|
- The record must have a primaryKey defined in the metadata file
|
|
648
648
|
|
|
@@ -1044,7 +1044,7 @@ mj sync push
|
|
|
1044
1044
|
mj sync push --dir="ai-prompts"
|
|
1045
1045
|
mj sync push -v
|
|
1046
1046
|
mj sync push --dry-run
|
|
1047
|
-
mj sync push --parallel-batch-size=20
|
|
1047
|
+
mj sync push --isolated-transactions --parallel-batch-size=20 # parallel, NOT rolled back on failure
|
|
1048
1048
|
|
|
1049
1049
|
# Directory filtering
|
|
1050
1050
|
mj sync push --exclude="actions"
|
|
@@ -1134,7 +1134,8 @@ The tool uses the existing `mj.config.cjs` for database configuration and a hier
|
|
|
1134
1134
|
"validateBeforePush": true,
|
|
1135
1135
|
"requireConfirmation": true,
|
|
1136
1136
|
"autoCreateMissingRecords": false,
|
|
1137
|
-
"alwaysPush": false
|
|
1137
|
+
"alwaysPush": false,
|
|
1138
|
+
"isolatedTransactions": false
|
|
1138
1139
|
},
|
|
1139
1140
|
"sqlLogging": {
|
|
1140
1141
|
"enabled": true,
|
|
@@ -1234,6 +1235,25 @@ Use cases:
|
|
|
1234
1235
|
|
|
1235
1236
|
**Note**: This flag should be used judiciously as it causes database writes for all records. Enable temporarily when needed, then disable for normal operations.
|
|
1236
1237
|
|
|
1238
|
+
#### isolatedTransactions
|
|
1239
|
+
|
|
1240
|
+
Whether each JSON-root graph gets its own connection and transaction. Defaults to `false`, and can be set **per entity directory** as well as at the root.
|
|
1241
|
+
|
|
1242
|
+
- `false`: all-or-nothing. Every create, update and delete runs in one database transaction, one graph at a time. If anything fails, nothing is saved and the metadata files are restored.
|
|
1243
|
+
- `true`: sibling graphs run in parallel (`--parallel-batch-size`) on their own connections, and each create and update is committed as soon as it is saved. A failure does **not** roll those back.
|
|
1244
|
+
|
|
1245
|
+
An entity's own `.mj-sync.json` overrides the root, and the CLI flags `--isolated-transactions` and `--no-isolated-transactions` override both, in either direction. See [Atomic and Isolated Pushes](#atomic-and-isolated-pushes).
|
|
1246
|
+
|
|
1247
|
+
```json
|
|
1248
|
+
// root .mj-sync.json — the default for this tree
|
|
1249
|
+
{ "push": { "isolatedTransactions": false } }
|
|
1250
|
+
|
|
1251
|
+
// orders/.mj-sync.json — this entity opts in
|
|
1252
|
+
{ "entity": "MJ_BizApps_Orders: Orders", "push": { "isolatedTransactions": true } }
|
|
1253
|
+
```
|
|
1254
|
+
|
|
1255
|
+
Choose it for throughput on entities whose partial writes are acceptable. Nested transaction scopes inside a save work either way: on the shared connection they become savepoints.
|
|
1256
|
+
|
|
1237
1257
|
### Directory Processing Order
|
|
1238
1258
|
|
|
1239
1259
|
Directory order is configured in the root-level `.mj-sync.json` file only (not inherited by subdirectories):
|
|
@@ -1370,7 +1390,7 @@ The pull command supports smart update capabilities with extensive configuration
|
|
|
1370
1390
|
|
|
1371
1391
|
`push.skipGeoCoding` maps to `EntitySaveOptions.SkipGeoCoding` for this entity only. Use it on display-only geo entities (People/Organizations whose coords are virtual `PrimaryAddressLatitude`). Do **not** use a global CLI `--skip-geocode` as the only control. Addresses with native lat/lng already set do not call the provider even without this flag.
|
|
1372
1392
|
|
|
1373
|
-
|
|
1393
|
+
A push is atomic by default, so every save runs inside the push transaction. Durable After* entity actions without a queue submitter wait until the push transaction ends before they run. In a directory using isolated transactions each graph runs on its own `CreateIndependentInstance()`, and those actions run once that instance's own save commits. See [Atomic and Isolated Pushes](#atomic-and-isolated-pushes).
|
|
1374
1394
|
|
|
1375
1395
|
### Pull Configuration Options
|
|
1376
1396
|
|
|
@@ -1532,39 +1552,82 @@ When `recursive: true` is set:
|
|
|
1532
1552
|
3. Circular reference protection prevents infinite loops by tracking processed record IDs
|
|
1533
1553
|
4. All recursive levels use the same `lookupFields`, `externalizeFields`, etc.
|
|
1534
1554
|
|
|
1535
|
-
##
|
|
1555
|
+
## Atomic and Isolated Pushes
|
|
1536
1556
|
|
|
1537
|
-
|
|
1557
|
+
A push is **all-or-nothing by default**. One database transaction covers every create, update and delete, and graphs run one at a time inside it.
|
|
1538
1558
|
|
|
1539
|
-
|
|
1540
|
-
- **Level 0**: Records with no dependencies
|
|
1541
|
-
- **Level 1**: Records that depend only on Level 0 records
|
|
1542
|
-
- **Level 2**: Records that depend on Level 0 or Level 1 records
|
|
1559
|
+
An entity directory can opt out with `push.isolatedTransactions: true`, which gives each of its JSON-root graphs its own connection and transaction so siblings run in parallel. That buys throughput and costs atomicity: those creates and updates commit as they are saved and are not rolled back with the push.
|
|
1543
1560
|
|
|
1544
|
-
|
|
1561
|
+
| | Shared (default) | Isolated (`isolatedTransactions: true`) |
|
|
1562
|
+
|---|---|---|
|
|
1563
|
+
| Creates and updates | Host connection, inside the push transaction | One connection per JSON-root graph |
|
|
1564
|
+
| Graphs at once | 1 | `--parallel-batch-size` (default 10) |
|
|
1565
|
+
| A failure anywhere | Rolls back **everything** that directory wrote, with every other shared directory; metadata files are restored | Rolls back deletes and deferred records only. Creates and updates that already ran **stay committed** |
|
|
1566
|
+
| After a failure the push says | `rolled back successfully. Nothing from this push was saved.` | Which files and records are still in the database |
|
|
1545
1567
|
|
|
1546
|
-
|
|
1568
|
+
The setting resolves per entity directory: the CLI flag wins, then that directory's `.mj-sync.json`, then the root's, then shared.
|
|
1547
1569
|
|
|
1548
|
-
|
|
1570
|
+
```bash
|
|
1571
|
+
# Default: all-or-nothing
|
|
1572
|
+
mj sync push
|
|
1549
1573
|
|
|
1550
|
-
|
|
1574
|
+
# One run with isolation forced on or off, whatever the files say
|
|
1575
|
+
mj sync push --isolated-transactions
|
|
1576
|
+
mj sync push --no-isolated-transactions
|
|
1577
|
+
mj sync push --isolated-transactions --parallel-batch-size=20
|
|
1578
|
+
```
|
|
1551
1579
|
|
|
1552
|
-
|
|
1580
|
+
**A mixed push is not all-or-nothing as a whole.** It is all-or-nothing for the shared directories, and best effort for the isolated ones. A failure names the files and records that stayed.
|
|
1553
1581
|
|
|
1554
|
-
|
|
1555
|
-
# Default processing (batch size 10, isolated providers)
|
|
1556
|
-
mj sync push
|
|
1582
|
+
**Order isolated directories first** in `directoryOrder` when they touch rows the shared directories also write. The push transaction holds its locks until the end, so an isolated directory running after a shared one can block against the push's own transaction.
|
|
1557
1583
|
|
|
1558
|
-
|
|
1559
|
-
mj sync push --parallel-batch-size=20
|
|
1584
|
+
### How a push runs
|
|
1560
1585
|
|
|
1561
|
-
|
|
1562
|
-
|
|
1586
|
+
```mermaid
|
|
1587
|
+
flowchart TD
|
|
1588
|
+
B[Begin push transaction] --> P1[Phase 1: creates and updates]
|
|
1589
|
+
P1 --> P2[Phase 2: deletes, reverse dependency order]
|
|
1590
|
+
P2 --> P25[Phase 2.5: deferred records]
|
|
1591
|
+
P25 --> C{Commit}
|
|
1592
|
+
C -->|OK| P3[Phase 3: write files with deletions, save incremental state]
|
|
1593
|
+
C -->|Rejected| RB
|
|
1594
|
+
P1 -->|Any record error| RB[Roll back, restore files, report what is left]
|
|
1595
|
+
P2 -->|Any delete error| RB
|
|
1596
|
+
P25 -->|Any deferred error| RB
|
|
1563
1597
|
|
|
1564
|
-
|
|
1565
|
-
|
|
1598
|
+
style RB fill:#b8762f,stroke:#8a5722,color:#fff
|
|
1599
|
+
style P3 fill:#2d8659,stroke:#1a5c3a,color:#fff
|
|
1566
1600
|
```
|
|
1567
1601
|
|
|
1602
|
+
- **Every record error stops the push.** That includes a record that fails without throwing, such as a missing primary key with `autoCreateMissingRecords=false`. A dry run keeps counting errors instead, since it writes nothing.
|
|
1603
|
+
- **Incremental state** (`--incremental`) is saved only after the commit, so a failed push never marks its files as pushed.
|
|
1604
|
+
- **PostgreSQL checks deferred foreign keys at COMMIT.** A delete that breaks a foreign key therefore fails when the push commits, and the error cannot be tied to one record.
|
|
1605
|
+
- **On PostgreSQL, any statement that fails inside the push transaction aborts it,** including a read. A healthy database does not hit this. A database whose views are missing columns that the metadata expects fails the whole atomic push at the first such read.
|
|
1606
|
+
|
|
1607
|
+
### Trade-offs of the shared default
|
|
1608
|
+
|
|
1609
|
+
- **Speed.** Creates and updates are roughly 30–50% slower than an isolated one. A push with no changes is not slower.
|
|
1610
|
+
- **Locks.** The transaction holds its locks until the push commits. With read committed snapshot off, other sessions that read the touched tables wait for the push, and that includes MJAPI.
|
|
1611
|
+
- **Deadlocks with other sessions.** An atomic push cannot deadlock against itself: everything runs on one connection. It can still deadlock against another session, such as MJAPI or a data import. The whole push then fails and must be re-run.
|
|
1612
|
+
|
|
1613
|
+
### Graphs and providers
|
|
1614
|
+
|
|
1615
|
+
Records are grouped into dependency levels:
|
|
1616
|
+
- **Level 0**: Records with no dependencies
|
|
1617
|
+
- **Level 1**: Records that depend only on Level 0 records
|
|
1618
|
+
- **Level 2**: Records that depend on Level 0 or Level 1 records
|
|
1619
|
+
|
|
1620
|
+
Records are also grouped into **JSON-root graphs**: an Action and its nested Action Params share one graph. Every DB read and write for a graph uses the graph's provider: `GetEntityObject`, `Save`, `Load`, `RunView`, lookups and RecordGeoCode. That is an **ORM** invariant (`BaseEntity.BindProvider`). Mixing the host connection with a graph instance in one tree is a deadlock, because the child FK waits on an uncommitted parent on another pooled connection.
|
|
1621
|
+
|
|
1622
|
+
In a **shared** directory every graph's provider is the host, and graphs run one at a time. The pool refuses to hand the host to a second graph while another graph holds it.
|
|
1623
|
+
|
|
1624
|
+
In an **isolated** directory each graph gets one `CreateIndependentInstance()`.
|
|
1625
|
+
- After each parallel batch the pool releases a graph when it will not appear at a later level, **or** when `TransactionDepth` is already 0. In the second case `Save()` has settled, so a fresh instance at the next level is safe.
|
|
1626
|
+
- Graphs with leftover depth stay live until their last level. Peak live independent instances is therefore bounded by `--parallel-batch-size`, plus any still-open leftover-depth graphs.
|
|
1627
|
+
- Leftover depth, such as a subclass `BeginTransaction` or a nested entity action, is committed at drain on success and rolled back on failure.
|
|
1628
|
+
- The push checks once, before any graph runs, that independent instances are available. If they are not, every directory runs shared and the push says so. If `CreateIndependentInstance` fails later, the file is aborted; a graph never falls back to the host.
|
|
1629
|
+
- Releasing settled graphs between levels costs more `CreateIndependentInstance` calls: one per graph per level when `Save()` settles, so L×N instead of N. If a large isolated push is slow, look here first.
|
|
1630
|
+
|
|
1568
1631
|
## Validation System
|
|
1569
1632
|
|
|
1570
1633
|
The MetadataSync tool includes a comprehensive validation system that checks metadata files for correctness before pushing to the database.
|
package/dist/config.d.ts
CHANGED
|
@@ -99,6 +99,18 @@ export interface SyncConfig {
|
|
|
99
99
|
* Defaults to false.
|
|
100
100
|
*/
|
|
101
101
|
alwaysPush?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Default for every entity directory in this tree: whether each JSON-root graph gets its own
|
|
104
|
+
* connection and transaction. Defaults to false, and an entity directory's own
|
|
105
|
+
* `push.isolatedTransactions` overrides it.
|
|
106
|
+
* - `false` (default): all-or-nothing. Every create, update and delete runs in one database
|
|
107
|
+
* transaction, one graph at a time. If anything fails, nothing is saved.
|
|
108
|
+
* - `true`: sibling graphs run in parallel (`--parallel-batch-size`) on their own connections,
|
|
109
|
+
* and each create and update commits as soon as it is saved. A failure does NOT roll those
|
|
110
|
+
* back. For entities that manage their own transaction scopes and want the parallelism.
|
|
111
|
+
* The CLI flags `--isolated-transactions` / `--no-isolated-transactions` override both.
|
|
112
|
+
*/
|
|
113
|
+
isolatedTransactions?: boolean;
|
|
102
114
|
};
|
|
103
115
|
/** SQL logging configuration (only applies to root-level config, not inherited by subdirectories) */
|
|
104
116
|
sqlLogging?: {
|
|
@@ -308,6 +320,17 @@ export interface EntityConfig {
|
|
|
308
320
|
* Per-entity, not a global CLI kill switch.
|
|
309
321
|
*/
|
|
310
322
|
skipGeoCoding?: boolean;
|
|
323
|
+
/**
|
|
324
|
+
* Whether this entity's JSON-root graphs each get their own connection and transaction, so
|
|
325
|
+
* siblings can be written in parallel. Overrides the root config; the CLI flags
|
|
326
|
+
* `--isolated-transactions` / `--no-isolated-transactions` override this.
|
|
327
|
+
*
|
|
328
|
+
* `true` buys parallelism and costs atomicity: each create and update commits as it is saved,
|
|
329
|
+
* so a later failure leaves them behind. Nested transaction scopes inside a save work either
|
|
330
|
+
* way — on the shared connection they become savepoints — so choose this for throughput on
|
|
331
|
+
* entities whose partial writes are acceptable, not to make nested scopes work.
|
|
332
|
+
*/
|
|
333
|
+
isolatedTransactions?: boolean;
|
|
311
334
|
/**
|
|
312
335
|
* When false, skips creating or updating sync metadata blocks (`record.sync`)
|
|
313
336
|
* on records pushed from this directory. Used by decision metadata directories
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,mGAAmG;IACnG,UAAU,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IACxC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oDAAoD;IACpD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iCAAiC;IACjC,IAAI,CAAC,EAAE;QACL,6DAA6D;QAC7D,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,uDAAuD;QACvD,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B;;;WAGG;QACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC;;;;;WAKG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiWrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAC,YAAY,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEnD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAW;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAErD,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export { PullService } from './services/PullService.js';
|
|
|
33
33
|
export type { PullOptions, PullCallbacks, PullResult } from './services/PullService.js';
|
|
34
34
|
export { PushService } from './services/PushService.js';
|
|
35
35
|
export type { PushOptions, PushCallbacks, PushResult } from './services/PushService.js';
|
|
36
|
+
export { PushAbortedError, describeRollbackOutcome, describeCommittedWrites, describeCommitFailure } from './lib/push-outcome.js';
|
|
37
|
+
export type { CommittedWrite, PushAbortedDetails, PushPartialTotals } from './lib/push-outcome.js';
|
|
38
|
+
export { resolveDirectoryMode, graphBatchSizeFor, isolatedModeWarning, unusedBatchSizeWarning, DEFAULT_PARALLEL_BATCH_SIZE } from './lib/push-write-mode.js';
|
|
39
|
+
export type { PushWriteMode, PushWriteModeInput, PushWriteModeSource, PushDirectoryMode } from './lib/push-write-mode.js';
|
|
40
|
+
export { GraphProviderPool, probeIndependentInstances } from './lib/graph-provider-pool.js';
|
|
41
|
+
export type { GraphProviderLike, GraphProviderMode, GraphSettleOutcome, GraphProviderPoolOptions } from './lib/graph-provider-pool.js';
|
|
36
42
|
export { StatusService } from './services/StatusService.js';
|
|
37
43
|
export type { StatusOptions, StatusCallbacks, StatusResult } from './services/StatusService.js';
|
|
38
44
|
export { FileResetService } from './services/FileResetService.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,8DAA8D,CAAC;AAGtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACrH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAErF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,9 @@ export { DeletionReportGenerator } from './lib/deletion-report-generator.js';
|
|
|
25
25
|
export { InitService } from './services/InitService.js';
|
|
26
26
|
export { PullService } from './services/PullService.js';
|
|
27
27
|
export { PushService } from './services/PushService.js';
|
|
28
|
+
export { PushAbortedError, describeRollbackOutcome, describeCommittedWrites, describeCommitFailure } from './lib/push-outcome.js';
|
|
29
|
+
export { resolveDirectoryMode, graphBatchSizeFor, isolatedModeWarning, unusedBatchSizeWarning, DEFAULT_PARALLEL_BATCH_SIZE } from './lib/push-write-mode.js';
|
|
30
|
+
export { GraphProviderPool, probeIndependentInstances } from './lib/graph-provider-pool.js';
|
|
28
31
|
export { StatusService } from './services/StatusService.js';
|
|
29
32
|
export { FileResetService } from './services/FileResetService.js';
|
|
30
33
|
export { WatchService } from './services/WatchService.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,8DAA8D,CAAC;AAEtE,uBAAuB;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,yBAAyB;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,8DAA8D,CAAC;AAEtE,uBAAuB;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAG1E,yBAAyB;AACzB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE/H,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAE1J,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,sBAAsB;AACtB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAIjB,MAAM,UAAU,CAAC;AAElB,qBAAqB;AACrB,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EAChB,MAAM,sBAAsB,CAAC"}
|
|
@@ -57,6 +57,16 @@ export declare class FileBackupManager {
|
|
|
57
57
|
* @throws Error if backup operation fails
|
|
58
58
|
*/
|
|
59
59
|
backupFile(filePath: string): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Stop tracking a file so {@link rollback} leaves it as it is now.
|
|
62
|
+
*
|
|
63
|
+
* Used for files in an isolated directory whose records were already committed: restoring the
|
|
64
|
+
* old file would drop the primary keys and sync blocks of rows that stay in the database.
|
|
65
|
+
*
|
|
66
|
+
* @param filePath - Absolute path of a file previously passed to {@link backupFile}
|
|
67
|
+
* @returns true when a backup was tracked for this file
|
|
68
|
+
*/
|
|
69
|
+
releaseBackup(filePath: string): boolean;
|
|
60
70
|
/**
|
|
61
71
|
* Rollback all file changes by restoring from backups
|
|
62
72
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-backup-manager.d.ts","sourceRoot":"","sources":["../../src/lib/file-backup-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAkB;IAErC;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;;;;;;;;OASG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD;;;;;;;;;OASG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC/B;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B;;;;OAIG;IACH,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;CAO9E"}
|
|
1
|
+
{"version":3,"file":"file-backup-manager.d.ts","sourceRoot":"","sources":["../../src/lib/file-backup-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAkB;IAErC;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;;;;;;;;OASG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BjD;;;;;;;;OAQG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IASxC;;;;;;;;;OASG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAsC/B;;;;;;;OAOG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B;;;;OAIG;IACH,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;CAO9E"}
|
|
@@ -96,6 +96,23 @@ export class FileBackupManager {
|
|
|
96
96
|
}
|
|
97
97
|
this.backups.push(backupEntry);
|
|
98
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Stop tracking a file so {@link rollback} leaves it as it is now.
|
|
101
|
+
*
|
|
102
|
+
* Used for files in an isolated directory whose records were already committed: restoring the
|
|
103
|
+
* old file would drop the primary keys and sync blocks of rows that stay in the database.
|
|
104
|
+
*
|
|
105
|
+
* @param filePath - Absolute path of a file previously passed to {@link backupFile}
|
|
106
|
+
* @returns true when a backup was tracked for this file
|
|
107
|
+
*/
|
|
108
|
+
releaseBackup(filePath) {
|
|
109
|
+
const index = this.backups.findIndex(b => b.originalPath === filePath);
|
|
110
|
+
if (index < 0) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
this.backups.splice(index, 1);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
99
116
|
/**
|
|
100
117
|
* Rollback all file changes by restoring from backups
|
|
101
118
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-backup-manager.js","sourceRoot":"","sources":["../../src/lib/file-backup-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAcpC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,iBAAiB;IAA9B;QACU,cAAS,GAAW,EAAE,CAAC;QACvB,YAAO,GAAkB,EAAE,CAAC;QAC5B,gBAAW,GAAY,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"file-backup-manager.js","sourceRoot":"","sources":["../../src/lib/file-backup-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,9 +54,5 @@ export declare class FileWriteBatch {
|
|
|
54
54
|
* Add a change to the batch
|
|
55
55
|
*/
|
|
56
56
|
private addChange;
|
|
57
|
-
/**
|
|
58
|
-
* Create a primary key lookup string (same logic as PullService)
|
|
59
|
-
*/
|
|
60
|
-
private createPrimaryKeyLookup;
|
|
61
57
|
}
|
|
62
58
|
//# sourceMappingURL=file-write-batch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-write-batch.d.ts","sourceRoot":"","sources":["../../src/lib/file-write-batch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"file-write-batch.d.ts","sourceRoot":"","sources":["../../src/lib/file-write-batch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAoB3C;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,YAAY,CAAgD;IAEpE;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;IASnE;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAoB7F;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,GAAG,IAAI;IASpE;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;YACW,YAAY;IAsD1B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAgC9B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,OAAO,CAAC,SAAS;CAMlB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs-extra';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { JsonWriteHelper } from './json-write-helper.js';
|
|
4
|
+
import { createPrimaryKeyLookup, hasCompletePrimaryKey } from './record-primary-key.js';
|
|
4
5
|
/**
|
|
5
6
|
* Batches file write operations to improve performance and ensure consistent property ordering.
|
|
6
7
|
* Collects all changes during processing and writes each file only once at the end.
|
|
@@ -30,6 +31,14 @@ export class FileWriteBatch {
|
|
|
30
31
|
* @param primaryKeyLookup - Primary key lookup string to identify the record
|
|
31
32
|
*/
|
|
32
33
|
queueArrayUpdate(filePath, updatedRecord, primaryKeyLookup) {
|
|
34
|
+
// Array updates match entries by primary key. A record whose key has no value ({ ID: undefined },
|
|
35
|
+
// written to the file as `primaryKey: {}`) matches every other such record, so each queued record
|
|
36
|
+
// would overwrite the last and a batch of N new records would write exactly one (#3415).
|
|
37
|
+
// Refuse rather than lose data.
|
|
38
|
+
if (!hasCompletePrimaryKey(updatedRecord.primaryKey)) {
|
|
39
|
+
throw new Error(`Refusing to queue an update to ${path.basename(filePath)} for a record with an incomplete primary key ` +
|
|
40
|
+
`(${JSON.stringify(updatedRecord.primaryKey ?? {})}): it would overwrite other records in the file.`);
|
|
41
|
+
}
|
|
33
42
|
const absolutePath = path.resolve(filePath);
|
|
34
43
|
this.addChange(absolutePath, {
|
|
35
44
|
filePath: absolutePath,
|
|
@@ -88,7 +97,7 @@ export class FileWriteBatch {
|
|
|
88
97
|
const contentArray = Array.isArray(currentContent) ? currentContent : [];
|
|
89
98
|
if (change.primaryKeyLookup) {
|
|
90
99
|
// Find existing record with matching primary key
|
|
91
|
-
const index = contentArray.findIndex(r =>
|
|
100
|
+
const index = contentArray.findIndex(r => createPrimaryKeyLookup(r.primaryKey) === change.primaryKeyLookup);
|
|
92
101
|
if (index >= 0) {
|
|
93
102
|
// Update existing record
|
|
94
103
|
contentArray[index] = change.data;
|
|
@@ -170,12 +179,5 @@ export class FileWriteBatch {
|
|
|
170
179
|
}
|
|
171
180
|
this.changes.get(filePath).push(change);
|
|
172
181
|
}
|
|
173
|
-
/**
|
|
174
|
-
* Create a primary key lookup string (same logic as PullService)
|
|
175
|
-
*/
|
|
176
|
-
createPrimaryKeyLookup(primaryKey) {
|
|
177
|
-
const keys = Object.keys(primaryKey).sort();
|
|
178
|
-
return keys.map(k => `${k}:${primaryKey[k]}`).join('|');
|
|
179
|
-
}
|
|
180
182
|
}
|
|
181
183
|
//# sourceMappingURL=file-write-batch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-write-batch.js","sourceRoot":"","sources":["../../src/lib/file-write-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-write-batch.js","sourceRoot":"","sources":["../../src/lib/file-write-batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Provider assignment per JSON-root graph for `mj sync push`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* one provider so every DB op in that graph uses the same connection. Mixing the
|
|
6
|
-
* host connection with a graph instance in the same tree is a deadlock (child FK
|
|
7
|
-
* waits on an uncommitted parent).
|
|
4
|
+
* Two modes, fixed when the pool is built. A pool never mixes them.
|
|
8
5
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* so
|
|
12
|
-
*
|
|
13
|
-
*
|
|
6
|
+
* - **`host`** (atomic push, the default): every graph uses the host provider, inside the
|
|
7
|
+
* push transaction. Nothing commits until the push commits. The host has ONE transaction
|
|
8
|
+
* stack, so graphs must run one at a time: `obtain` throws if a second graph asks for the
|
|
9
|
+
* host while another graph still holds it. The caller releases a graph with `drainBatch`.
|
|
10
|
+
*
|
|
11
|
+
* - **`independent`** (an entity directory using isolated transactions): each graph gets its own instance from
|
|
12
|
+
* `CreateIndependentInstance()` (shared pool, own transaction stack), so sibling graphs can
|
|
13
|
+
* run in parallel. A root and its nested relatedEntities share one instance, so every DB op
|
|
14
|
+
* in that graph uses the same connection. Each `Save()` commits on its own, so this mode is
|
|
15
|
+
* NOT atomic: `onGraphSettled` reports which graphs left committed rows behind.
|
|
16
|
+
* If `CreateIndependentInstance` fails, `obtain` throws. It never falls back to the host,
|
|
17
|
+
* because mixing the host connection with graph instances is a deadlock (child FK waits on
|
|
18
|
+
* an uncommitted parent). The caller decides the mode up front (see `probeIndependentInstances`).
|
|
19
|
+
*
|
|
20
|
+
* Drain (independent mode): a graph is released at the end of a batch when (a) it will not
|
|
21
|
+
* appear at a later level, or (b) its TransactionDepth is 0 (Save already committed, so a fresh
|
|
22
|
+
* instance at the next level is safe). Graphs with leftover depth stay live until their last
|
|
23
|
+
* level. Peak live independent instances is therefore bounded by the batch size, plus any
|
|
24
|
+
* still-open leftover-depth graphs.
|
|
14
25
|
*/
|
|
15
26
|
export interface GraphProviderLike {
|
|
16
27
|
TransactionDepth: number;
|
|
@@ -19,15 +30,36 @@ export interface GraphProviderLike {
|
|
|
19
30
|
RollbackTransaction(): Promise<void>;
|
|
20
31
|
ReleaseIndependentInstance(): Promise<void>;
|
|
21
32
|
}
|
|
33
|
+
export type GraphProviderMode = 'host' | 'independent';
|
|
34
|
+
/**
|
|
35
|
+
* How a graph's writes ended when its provider was released.
|
|
36
|
+
* `committed`: its rows are in the database (independent mode only).
|
|
37
|
+
* `rolledBack`: its open transaction was rolled back.
|
|
38
|
+
*/
|
|
39
|
+
export type GraphSettleOutcome = 'committed' | 'rolledBack';
|
|
40
|
+
export interface GraphProviderPoolOptions {
|
|
41
|
+
mode: GraphProviderMode;
|
|
42
|
+
log?: (message: string) => void;
|
|
43
|
+
/** Independent mode only: called once per released graph with how its writes ended. */
|
|
44
|
+
onGraphSettled?: (graphId: string, outcome: GraphSettleOutcome) => void;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Checks once whether the host can create independent instances. Used to pick the pool mode
|
|
48
|
+
* before any graph runs, so a push never discovers mid-file that it has to switch topology.
|
|
49
|
+
* @returns `undefined` when independent instances work, otherwise the reason they do not.
|
|
50
|
+
*/
|
|
51
|
+
export declare function probeIndependentInstances(host: GraphProviderLike): Promise<string | undefined>;
|
|
22
52
|
export declare class GraphProviderPool {
|
|
23
53
|
private readonly host;
|
|
24
|
-
private readonly log;
|
|
25
54
|
private readonly providers;
|
|
26
55
|
private readonly lastLevelByGraph;
|
|
27
|
-
private
|
|
28
|
-
private
|
|
56
|
+
private readonly mode;
|
|
57
|
+
private readonly log;
|
|
58
|
+
private readonly onGraphSettled?;
|
|
59
|
+
private hostHolder;
|
|
29
60
|
private anyFailed;
|
|
30
|
-
constructor(host: GraphProviderLike,
|
|
61
|
+
constructor(host: GraphProviderLike, options: GraphProviderPoolOptions);
|
|
62
|
+
get Mode(): GraphProviderMode;
|
|
31
63
|
/**
|
|
32
64
|
* Record, per graphId, the highest dependency-level index it occupies so we
|
|
33
65
|
* can drain (commit/rollback + release) as soon as that level finishes.
|
|
@@ -38,30 +70,27 @@ export declare class GraphProviderPool {
|
|
|
38
70
|
/** One record error anywhere in the file rolls back every graph in that file. */
|
|
39
71
|
markFailed(): void;
|
|
40
72
|
get hasFailed(): boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Provider for this graph. Never returns a mix: either every graph in the
|
|
43
|
-
* file gets its own independent instance, or (if the *first*
|
|
44
|
-
* CreateIndependentInstance fails) every graph uses the host.
|
|
45
|
-
*
|
|
46
|
-
* If independent instances already exist and a later CreateIndependentInstance
|
|
47
|
-
* throws, this throws rather than handing the rest of the file to the host.
|
|
48
|
-
* Mid-file topology change is the deadlock this pool exists to prevent.
|
|
49
|
-
*
|
|
50
|
-
* The host itself is never stored in the map, so release cannot
|
|
51
|
-
* RollbackTransaction the global push TX.
|
|
52
|
-
*/
|
|
73
|
+
/** Provider for this graph. See the class comment for the per-mode rules. */
|
|
53
74
|
obtain(graphId: string): Promise<GraphProviderLike>;
|
|
75
|
+
private obtainHost;
|
|
54
76
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* Returns the first settle error so the caller cannot report success
|
|
60
|
-
* with uncommitted rows.
|
|
77
|
+
* Release graphs in this batch that are done. Host mode: frees the host for the next graph
|
|
78
|
+
* (the push transaction settles it later). Independent mode: commit-or-rollback + release the
|
|
79
|
+
* graphs whose last level is `levelIndex`, or whose TransactionDepth is already 0.
|
|
80
|
+
* Returns the first settle error so the caller cannot report success with uncommitted rows.
|
|
61
81
|
*/
|
|
62
82
|
drainBatch(graphIds: string[], levelIndex: number): Promise<Error | undefined>;
|
|
63
|
-
/** Release every remaining
|
|
83
|
+
/** Release every remaining graph. Safe to call from `finally`. */
|
|
64
84
|
releaseAll(): Promise<Error | undefined>;
|
|
85
|
+
private releaseHost;
|
|
65
86
|
private releaseGraphs;
|
|
87
|
+
/** Settle one independent instance, report the outcome, and always release it. */
|
|
88
|
+
private settleAndRelease;
|
|
89
|
+
/**
|
|
90
|
+
* Depth 0: every Save on this instance already committed. Leftover depth: commit it, or
|
|
91
|
+
* roll it back explicitly when the file failed (do not rely on ReleaseIndependentInstance).
|
|
92
|
+
*/
|
|
93
|
+
private settle;
|
|
94
|
+
private rollbackQuietly;
|
|
66
95
|
}
|
|
67
96
|
//# sourceMappingURL=graph-provider-pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-provider-pool.d.ts","sourceRoot":"","sources":["../../src/lib/graph-provider-pool.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"graph-provider-pool.d.ts","sourceRoot":"","sources":["../../src/lib/graph-provider-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxD,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,aAAa,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,uFAAuF;IACvF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACzE;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAapG;AAED,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyD;IACzF,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,SAAS,CAAS;gBAGP,IAAI,EAAE,iBAAiB,EACxC,OAAO,EAAE,wBAAwB;IAOnC,IAAI,IAAI,IAAI,iBAAiB,CAE5B;IAED;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,GAAG,IAAI;IAS3D,iFAAiF;IACjF,UAAU,IAAI,IAAI;IAIlB,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,6EAA6E;IACvE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoBzD,OAAO,CAAC,UAAU;IAWlB;;;;;OAKG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAcpF,kEAAkE;IAC5D,UAAU,IAAI,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAQ9C,OAAO,CAAC,WAAW;YAML,aAAa;IAa3B,kFAAkF;YACpE,gBAAgB;IAqB9B;;;OAGG;YACW,MAAM;YAYN,eAAe;CAS9B"}
|