@quereus/sync 4.4.0 → 4.4.1
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 +19 -1
- package/dist/src/create-sync-module.d.ts +11 -1
- package/dist/src/create-sync-module.d.ts.map +1 -1
- package/dist/src/create-sync-module.js +2 -2
- package/dist/src/create-sync-module.js.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/metadata/change-log.d.ts +39 -3
- package/dist/src/metadata/change-log.d.ts.map +1 -1
- package/dist/src/metadata/change-log.js +43 -8
- package/dist/src/metadata/change-log.js.map +1 -1
- package/dist/src/metadata/column-version.d.ts +62 -9
- package/dist/src/metadata/column-version.d.ts.map +1 -1
- package/dist/src/metadata/column-version.js +79 -25
- package/dist/src/metadata/column-version.js.map +1 -1
- package/dist/src/metadata/index.d.ts +1 -0
- package/dist/src/metadata/index.d.ts.map +1 -1
- package/dist/src/metadata/index.js +1 -0
- package/dist/src/metadata/index.js.map +1 -1
- package/dist/src/metadata/keys.d.ts +88 -22
- package/dist/src/metadata/keys.d.ts.map +1 -1
- package/dist/src/metadata/keys.js +134 -77
- package/dist/src/metadata/keys.js.map +1 -1
- package/dist/src/metadata/pk-identity.d.ts +60 -0
- package/dist/src/metadata/pk-identity.d.ts.map +1 -0
- package/dist/src/metadata/pk-identity.js +94 -0
- package/dist/src/metadata/pk-identity.js.map +1 -0
- package/dist/src/metadata/tombstones.d.ts +41 -11
- package/dist/src/metadata/tombstones.d.ts.map +1 -1
- package/dist/src/metadata/tombstones.js +58 -33
- package/dist/src/metadata/tombstones.js.map +1 -1
- package/dist/src/sync/change-applicator.d.ts +30 -1
- package/dist/src/sync/change-applicator.d.ts.map +1 -1
- package/dist/src/sync/change-applicator.js +161 -40
- package/dist/src/sync/change-applicator.js.map +1 -1
- package/dist/src/sync/maintenance.d.ts +70 -0
- package/dist/src/sync/maintenance.d.ts.map +1 -0
- package/dist/src/sync/maintenance.js +84 -0
- package/dist/src/sync/maintenance.js.map +1 -0
- package/dist/src/sync/protocol.d.ts +61 -10
- package/dist/src/sync/protocol.d.ts.map +1 -1
- package/dist/src/sync/protocol.js +15 -0
- package/dist/src/sync/protocol.js.map +1 -1
- package/dist/src/sync/snapshot-identity.d.ts +62 -0
- package/dist/src/sync/snapshot-identity.d.ts.map +1 -0
- package/dist/src/sync/snapshot-identity.js +88 -0
- package/dist/src/sync/snapshot-identity.js.map +1 -0
- package/dist/src/sync/snapshot-stream.d.ts +8 -1
- package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
- package/dist/src/sync/snapshot-stream.js +166 -67
- package/dist/src/sync/snapshot-stream.js.map +1 -1
- package/dist/src/sync/snapshot.d.ts +1 -1
- package/dist/src/sync/snapshot.d.ts.map +1 -1
- package/dist/src/sync/snapshot.js +75 -44
- package/dist/src/sync/snapshot.js.map +1 -1
- package/dist/src/sync/staged-transaction-metadata.d.ts +75 -0
- package/dist/src/sync/staged-transaction-metadata.d.ts.map +1 -0
- package/dist/src/sync/staged-transaction-metadata.js +100 -0
- package/dist/src/sync/staged-transaction-metadata.js.map +1 -0
- package/dist/src/sync/store-adapter.d.ts +10 -4
- package/dist/src/sync/store-adapter.d.ts.map +1 -1
- package/dist/src/sync/store-adapter.js +244 -21
- package/dist/src/sync/store-adapter.js.map +1 -1
- package/dist/src/sync/sync-context.d.ts +54 -2
- package/dist/src/sync/sync-context.d.ts.map +1 -1
- package/dist/src/sync/sync-context.js +66 -0
- package/dist/src/sync/sync-context.js.map +1 -1
- package/dist/src/sync/sync-manager-impl.d.ts +70 -4
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
- package/dist/src/sync/sync-manager-impl.js +206 -36
- package/dist/src/sync/sync-manager-impl.js.map +1 -1
- package/dist/src/sync/wire.d.ts +47 -6
- package/dist/src/sync/wire.d.ts.map +1 -1
- package/dist/src/sync/wire.js +62 -11
- package/dist/src/sync/wire.js.map +1 -1
- package/package.json +6 -6
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { compareHLC, maxHLC, assertWithinDrift } from '../clock/hlc.js';
|
|
10
10
|
import { siteIdEquals } from '../clock/site.js';
|
|
11
|
-
import {
|
|
12
|
-
import { toError } from './sync-context.js';
|
|
11
|
+
import { encodePkIdentity, RAW_PK_KEYING } from '../metadata/keys.js';
|
|
12
|
+
import { toError, deleteRowVersionsAndLogEntries } from './sync-context.js';
|
|
13
13
|
import { admitGroup } from './admission.js';
|
|
14
14
|
/** Stable `schema.table` map key for batch deltas and diversion groups. */
|
|
15
15
|
function tableKey(schema, table) {
|
|
@@ -62,6 +62,10 @@ export async function applyChanges(ctx, changes) {
|
|
|
62
62
|
const schemaChangesToApply = [];
|
|
63
63
|
const appliedChanges = [];
|
|
64
64
|
const resolvedDataChanges = [];
|
|
65
|
+
// Every data-change resolution in batch order, with its relaying changeset's
|
|
66
|
+
// siteId. Counters and apply lists are built from these AFTER the in-batch
|
|
67
|
+
// delete reconciliation below, not inside the resolve loop.
|
|
68
|
+
const dataResolutions = [];
|
|
65
69
|
const pendingSchemaMigrations = [];
|
|
66
70
|
// Out-of-basis straggler changes diverted out of the resolve/apply/metadata
|
|
67
71
|
// path, grouped per table for disposition + telemetry.
|
|
@@ -123,8 +127,8 @@ export async function applyChanges(ctx, changes) {
|
|
|
123
127
|
// resolveChange / dataChangesToApply / commitChangeMetadata, so no CRDT
|
|
124
128
|
// metadata is written for a table the receiver does not have.
|
|
125
129
|
const key = tableKey(change.schema, change.table);
|
|
126
|
-
const
|
|
127
|
-
|
|
130
|
+
const inBasis = ctx.isTableInBasis(change.schema, change.table);
|
|
131
|
+
const known = (inBasis || batchCreated.has(key)) && !batchDropped.has(key);
|
|
128
132
|
if (!known) {
|
|
129
133
|
let group = unknownByTable.get(key);
|
|
130
134
|
if (!group) {
|
|
@@ -134,22 +138,42 @@ export async function applyChanges(ctx, changes) {
|
|
|
134
138
|
group.changes.push(change);
|
|
135
139
|
continue;
|
|
136
140
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
141
|
+
// A table known ONLY via this batch's create_table has no local schema
|
|
142
|
+
// yet (Phase 2 DDL hasn't run) and hence no resolvable pk-identity keying
|
|
143
|
+
// — and, being locally fresh, no local metadata to resolve against either.
|
|
144
|
+
// Resolve it read-free rather than throwing from the keying resolver;
|
|
145
|
+
// Phase 3's metadata commit runs after the DDL, when the keying resolves.
|
|
146
|
+
const freshLocalTable = !inBasis;
|
|
147
|
+
const resolved = await resolveChange(ctx, change, freshLocalTable);
|
|
148
|
+
if (freshLocalTable)
|
|
149
|
+
resolved.freshLocalTable = true;
|
|
150
|
+
dataResolutions.push({ resolved, siteId: changeSet.siteId });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// In-batch delete reconciliation: Phase 1 resolved each change against
|
|
154
|
+
// PRE-batch stored state only, so a delete and a column change for the same
|
|
155
|
+
// row in this one batch never saw each other. Apply the tombstone-blocking
|
|
156
|
+
// rule across the batch BEFORE any data or metadata write, then build the
|
|
157
|
+
// counters, the store apply list, and the emitted-change list from the
|
|
158
|
+
// reconciled outcomes — so `ApplyResult` and `onRemoteChange` reflect what is
|
|
159
|
+
// actually written.
|
|
160
|
+
const reconciled = reconcileInBatchDeletes(ctx, dataResolutions.map(entry => entry.resolved));
|
|
161
|
+
for (let i = 0; i < reconciled.length; i++) {
|
|
162
|
+
const resolved = reconciled[i];
|
|
163
|
+
if (resolved.outcome === 'applied') {
|
|
164
|
+
applied++;
|
|
165
|
+
appliedChanges.push({ change: resolved.change, siteId: dataResolutions[i].siteId });
|
|
166
|
+
resolvedDataChanges.push(resolved);
|
|
167
|
+
if (resolved.dataChange) {
|
|
168
|
+
dataChangesToApply.push(resolved.dataChange);
|
|
151
169
|
}
|
|
152
170
|
}
|
|
171
|
+
else if (resolved.outcome === 'skipped') {
|
|
172
|
+
skipped++;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
conflicts++;
|
|
176
|
+
}
|
|
153
177
|
}
|
|
154
178
|
const disposition = ctx.config.unknownTableDisposition;
|
|
155
179
|
// Single receive timestamp for every quarantine entry this apply (GC horizon).
|
|
@@ -347,6 +371,7 @@ async function drainTableGroup(ctx, group) {
|
|
|
347
371
|
const appliedEntries = [];
|
|
348
372
|
let applied = 0;
|
|
349
373
|
let skipped = 0;
|
|
374
|
+
const resolutions = [];
|
|
350
375
|
for (const change of group.changes) {
|
|
351
376
|
// Schema-drift filter: a held column change for a column the re-created table
|
|
352
377
|
// no longer has is resolved-and-dropped (never sent to resolveChange or the
|
|
@@ -359,7 +384,12 @@ async function drainTableGroup(ctx, group) {
|
|
|
359
384
|
}
|
|
360
385
|
// Identical LWW / tombstone-blocking / allowResurrection semantics as a fresh
|
|
361
386
|
// receive — the held change is just an older inbound change resolved late.
|
|
362
|
-
|
|
387
|
+
resolutions.push(await resolveChange(ctx, change));
|
|
388
|
+
}
|
|
389
|
+
// Same in-batch delete reconciliation as applyChanges: a held delete and a held
|
|
390
|
+
// column write for one row drain together and must block each other exactly as
|
|
391
|
+
// they would arriving in one wire batch.
|
|
392
|
+
for (const resolved of reconcileInBatchDeletes(ctx, resolutions)) {
|
|
363
393
|
if (resolved.outcome === 'applied') {
|
|
364
394
|
applied++;
|
|
365
395
|
resolvedDataChanges.push(resolved);
|
|
@@ -367,7 +397,7 @@ async function drainTableGroup(ctx, group) {
|
|
|
367
397
|
dataChangesToApply.push(resolved.dataChange);
|
|
368
398
|
// Group revival events by the held change's ORIGINAL origin (its HLC
|
|
369
399
|
// siteId) — a held change carries no relaying changeset.
|
|
370
|
-
appliedEntries.push({ change, siteId: change.hlc.siteId });
|
|
400
|
+
appliedEntries.push({ change: resolved.change, siteId: resolved.change.hlc.siteId });
|
|
371
401
|
}
|
|
372
402
|
else {
|
|
373
403
|
skipped++;
|
|
@@ -440,14 +470,19 @@ export async function drainReappearedTables(ctx, tables) {
|
|
|
440
470
|
* Resolve CRDT conflicts for a single change WITHOUT writing metadata.
|
|
441
471
|
*
|
|
442
472
|
* Phase 1 of the 3-phase apply pattern.
|
|
473
|
+
*
|
|
474
|
+
* `freshLocalTable` marks a table that exists only via the SAME batch's
|
|
475
|
+
* create_table: it has no local schema yet (so no pk-identity keying) and no
|
|
476
|
+
* local metadata, so every read is skipped and the change resolves as a first
|
|
477
|
+
* write. Phase 3 commits its metadata after the DDL has executed.
|
|
443
478
|
*/
|
|
444
|
-
export async function resolveChange(ctx, change) {
|
|
479
|
+
export async function resolveChange(ctx, change, freshLocalTable = false) {
|
|
445
480
|
// Skip changes that originated from ourselves (echo prevention)
|
|
446
481
|
if (siteIdEquals(change.hlc.siteId, ctx.getSiteId())) {
|
|
447
482
|
return { outcome: 'skipped', change };
|
|
448
483
|
}
|
|
449
484
|
if (change.type === 'delete') {
|
|
450
|
-
const existingTombstone = await ctx.tombstones.getTombstone(change.schema, change.table, change.pk);
|
|
485
|
+
const existingTombstone = freshLocalTable ? undefined : await ctx.tombstones.getTombstone(change.schema, change.table, change.pk);
|
|
451
486
|
if (existingTombstone && compareHLC(change.hlc, existingTombstone.hlc) <= 0) {
|
|
452
487
|
return { outcome: 'skipped', change };
|
|
453
488
|
}
|
|
@@ -465,7 +500,7 @@ export async function resolveChange(ctx, change) {
|
|
|
465
500
|
}
|
|
466
501
|
else {
|
|
467
502
|
// Column change: single getColumnVersion read, then decide via resolver or HLC
|
|
468
|
-
const localVersion = await ctx.columnVersions.getColumnVersion(change.schema, change.table, change.pk, change.column);
|
|
503
|
+
const localVersion = freshLocalTable ? undefined : await ctx.columnVersions.getColumnVersion(change.schema, change.table, change.pk, change.column);
|
|
469
504
|
// Surface the incoming change's before-image to the resolver and conflict
|
|
470
505
|
// events (spread only when present — keeps the no-prior fast path identical).
|
|
471
506
|
const remotePrior = change.priorHlc !== undefined
|
|
@@ -501,7 +536,7 @@ export async function resolveChange(ctx, change) {
|
|
|
501
536
|
}
|
|
502
537
|
}
|
|
503
538
|
// Remote wins or no local version — check tombstone blocking
|
|
504
|
-
const isBlocked = await ctx.tombstones.isDeletedAndBlocking(change.schema, change.table, change.pk, change.hlc, ctx.config.allowResurrection);
|
|
539
|
+
const isBlocked = freshLocalTable ? false : await ctx.tombstones.isDeletedAndBlocking(change.schema, change.table, change.pk, change.hlc, ctx.config.allowResurrection);
|
|
505
540
|
if (isBlocked) {
|
|
506
541
|
return { outcome: 'skipped', change };
|
|
507
542
|
}
|
|
@@ -532,6 +567,60 @@ export async function resolveChange(ctx, change) {
|
|
|
532
567
|
};
|
|
533
568
|
}
|
|
534
569
|
}
|
|
570
|
+
/**
|
|
571
|
+
* Re-resolve column changes against deletes that landed in the SAME batch.
|
|
572
|
+
*
|
|
573
|
+
* Phase 1 compares each change only to PRE-batch stored state, so an in-batch
|
|
574
|
+
* delete is invisible to an in-batch column change for the same row. This pass
|
|
575
|
+
* applies the same tombstone-blocking rule as
|
|
576
|
+
* `TombstoneStore.isDeletedAndBlocking`, with each row's max-HLC in-batch
|
|
577
|
+
* APPLIED delete as the blocker:
|
|
578
|
+
* - `allowResurrection: false` (default): every same-row column change in the
|
|
579
|
+
* batch is blocked, whatever its HLC;
|
|
580
|
+
* - `allowResurrection: true`: a column change at or below the delete's HLC is
|
|
581
|
+
* blocked; one that beats it survives and is recorded on the winning
|
|
582
|
+
* delete's {@link ResolvedChange.keepColumns} so `commitChangeMetadata`'s
|
|
583
|
+
* post-commit cleanup keeps its cell record and change-log entry.
|
|
584
|
+
*
|
|
585
|
+
* Returns a same-length, same-order list with each blocked column change flipped
|
|
586
|
+
* to `'skipped'` (its `dataChange` dropped, so it never reaches the store).
|
|
587
|
+
* Net effect: one apply batch produces the same result as the same changes split
|
|
588
|
+
* across separate applies.
|
|
589
|
+
*/
|
|
590
|
+
function reconcileInBatchDeletes(ctx, resolved) {
|
|
591
|
+
// Max-HLC applied in-batch delete per row identity. Ties keep the first, the
|
|
592
|
+
// same preference keepMaxHLC applies, so the annotated delete below is the
|
|
593
|
+
// object commitChangeMetadata's deleteWinners collapse keeps.
|
|
594
|
+
const deleteWinnersByRow = new Map();
|
|
595
|
+
for (const entry of resolved) {
|
|
596
|
+
if (entry.outcome !== 'applied' || entry.change.type !== 'delete')
|
|
597
|
+
continue;
|
|
598
|
+
const key = rowIdentityKey(ctx, entry.change, entry.freshLocalTable);
|
|
599
|
+
const prev = deleteWinnersByRow.get(key);
|
|
600
|
+
if (!prev || compareHLC(entry.change.hlc, prev.change.hlc) > 0) {
|
|
601
|
+
deleteWinnersByRow.set(key, entry);
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
if (deleteWinnersByRow.size === 0)
|
|
605
|
+
return resolved;
|
|
606
|
+
return resolved.map(entry => {
|
|
607
|
+
if (entry.outcome !== 'applied' || entry.change.type !== 'column')
|
|
608
|
+
return entry;
|
|
609
|
+
const winner = deleteWinnersByRow.get(rowIdentityKey(ctx, entry.change, entry.freshLocalTable));
|
|
610
|
+
if (!winner)
|
|
611
|
+
return entry;
|
|
612
|
+
if (ctx.config.allowResurrection && compareHLC(entry.change.hlc, winner.change.hlc) > 0) {
|
|
613
|
+
(winner.keepColumns ??= new Set()).add(entry.change.column);
|
|
614
|
+
// Phase 1 read this cell's PRE-batch version as the before-image, but the
|
|
615
|
+
// in-batch delete erases that lineage: applied in separate batches the
|
|
616
|
+
// resurrecting write finds no version at all and records no prior (which is
|
|
617
|
+
// also what the ORIGIN recorded past its own delete). Drop the prior so the
|
|
618
|
+
// stored version — and everything getChangesSince relays from it — matches.
|
|
619
|
+
return { ...entry, priorErasedByInBatchDelete: true };
|
|
620
|
+
}
|
|
621
|
+
return { outcome: 'skipped', change: entry.change };
|
|
622
|
+
});
|
|
623
|
+
}
|
|
535
624
|
/**
|
|
536
625
|
* Commit CRDT metadata for resolved changes.
|
|
537
626
|
*
|
|
@@ -548,6 +637,11 @@ export async function resolveChange(ctx, change) {
|
|
|
548
637
|
* pre-batch prior entry is deleted once. Mirrors the local write-path dedup in
|
|
549
638
|
* `recordDataEvent` / `recordColumnVersions`, keeping the delete and column paths
|
|
550
639
|
* symmetric.
|
|
640
|
+
*
|
|
641
|
+
* Cross-type (delete vs column) same-row collisions were already settled upstream by
|
|
642
|
+
* {@link reconcileInBatchDeletes}: every column change still `'applied'` here is one
|
|
643
|
+
* that must be written, and a winning delete's {@link ResolvedChange.keepColumns}
|
|
644
|
+
* names the columns its cleanup must leave alone.
|
|
551
645
|
*/
|
|
552
646
|
export async function commitChangeMetadata(ctx, resolvedChanges) {
|
|
553
647
|
if (resolvedChanges.length === 0)
|
|
@@ -562,10 +656,10 @@ export async function commitChangeMetadata(ctx, resolvedChanges) {
|
|
|
562
656
|
continue;
|
|
563
657
|
const change = resolved.change;
|
|
564
658
|
if (change.type === 'delete') {
|
|
565
|
-
keepMaxHLC(deleteWinners, deleteKey(change), resolved);
|
|
659
|
+
keepMaxHLC(deleteWinners, deleteKey(ctx, change), resolved);
|
|
566
660
|
}
|
|
567
661
|
else {
|
|
568
|
-
keepMaxHLC(columnWinners, columnKey(change), resolved);
|
|
662
|
+
keepMaxHLC(columnWinners, columnKey(ctx, change), resolved);
|
|
569
663
|
}
|
|
570
664
|
}
|
|
571
665
|
const batch = ctx.kv.batch();
|
|
@@ -579,28 +673,52 @@ export async function commitChangeMetadata(ctx, resolvedChanges) {
|
|
|
579
673
|
const change = resolved.change;
|
|
580
674
|
if (change.type !== 'column')
|
|
581
675
|
continue; // homogeneous map; narrows the union
|
|
582
|
-
commitColumnMetadata(ctx, batch, change, resolved.oldColumnVersion);
|
|
676
|
+
commitColumnMetadata(ctx, batch, change, resolved.oldColumnVersion, resolved.priorErasedByInBatchDelete);
|
|
583
677
|
}
|
|
584
678
|
await batch.write();
|
|
585
679
|
// Column-version cleanup for deletes requires async iteration — once per winning
|
|
586
|
-
// delete (losers were never written, so there is nothing of theirs to clean).
|
|
680
|
+
// delete (losers were never written, so there is nothing of theirs to clean). The
|
|
681
|
+
// row's change-log column entries go in the same batch as its versions: an inbound
|
|
682
|
+
// delete must leave no more index garbage behind than a local one, and this is the
|
|
683
|
+
// path a relay runs almost exclusively. `keepColumns` spares the cell records this
|
|
684
|
+
// same batch wrote past the delete (allowResurrection winners) — the scan reads
|
|
685
|
+
// committed storage, which by now INCLUDES them (the metadata batch above is
|
|
686
|
+
// already written, so no staged overlay is needed here; each cleanup commits in
|
|
687
|
+
// its own batch).
|
|
587
688
|
for (const resolved of deleteWinners.values()) {
|
|
588
689
|
const change = resolved.change;
|
|
589
690
|
if (change.type !== 'delete')
|
|
590
691
|
continue;
|
|
591
|
-
|
|
692
|
+
const cleanupBatch = ctx.kv.batch();
|
|
693
|
+
await deleteRowVersionsAndLogEntries(ctx, cleanupBatch, change.schema, change.table, change.pk, {
|
|
694
|
+
keepColumns: resolved.keepColumns,
|
|
695
|
+
});
|
|
696
|
+
await cleanupBatch.write();
|
|
592
697
|
}
|
|
593
698
|
}
|
|
594
|
-
//
|
|
595
|
-
// the actual KV keys (buildTombstoneKey / buildColumnVersionKey) — two pks
|
|
596
|
-
// iff they would collide on disk.
|
|
699
|
+
// Grouping keys reuse the pk-identity encoding so in-batch grouping matches the canonical
|
|
700
|
+
// pk identity of the actual KV keys (buildTombstoneKey / buildColumnVersionKey) — two pks
|
|
701
|
+
// collapse here iff they would collide on disk ('apple'/'APPLE' under nocase, 'PT1H'/'PT60M').
|
|
702
|
+
/**
|
|
703
|
+
* Row-identity grouping key shared by the collapse maps and the in-batch delete
|
|
704
|
+
* reconciliation. A fresh-local table (created by this same batch, pre-DDL) has no
|
|
705
|
+
* resolvable keying yet, so its changes group under the raw encoding — internally
|
|
706
|
+
* consistent within the batch, which is all the reconciliation needs. (The Phase-3
|
|
707
|
+
* collapse runs post-DDL with the resolved keying; for a fresh table with
|
|
708
|
+
* collation-variant pk spellings in ONE batch the two groupings can disagree, an
|
|
709
|
+
* edge accepted here.)
|
|
710
|
+
*/
|
|
711
|
+
function rowIdentityKey(ctx, change, freshLocalTable) {
|
|
712
|
+
const keying = freshLocalTable ? RAW_PK_KEYING : ctx.getPkKeying(change.schema, change.table);
|
|
713
|
+
return `${change.schema}.${change.table}:${encodePkIdentity(change.pk, keying)}`;
|
|
714
|
+
}
|
|
597
715
|
/** Stable per-pk key for collapsing repeated delete entries within one batch. */
|
|
598
|
-
function deleteKey(change) {
|
|
599
|
-
return `delete:${
|
|
716
|
+
function deleteKey(ctx, change) {
|
|
717
|
+
return `delete:${rowIdentityKey(ctx, change)}`;
|
|
600
718
|
}
|
|
601
719
|
/** Stable per-(pk, column) key for collapsing repeated column entries within one batch. */
|
|
602
|
-
function columnKey(change) {
|
|
603
|
-
return `column:${
|
|
720
|
+
function columnKey(ctx, change) {
|
|
721
|
+
return `column:${rowIdentityKey(ctx, change)}:${change.column}`;
|
|
604
722
|
}
|
|
605
723
|
/** Keep the max-HLC resolved change per key, collapsing in-batch repeats to one winner. */
|
|
606
724
|
function keepMaxHLC(winners, key, resolved) {
|
|
@@ -625,8 +743,10 @@ function commitDeleteMetadata(ctx, batch, change, oldTombstone) {
|
|
|
625
743
|
ctx.changeLog.recordDeletionBatch(batch, change.hlc, change.schema, change.table, change.pk);
|
|
626
744
|
}
|
|
627
745
|
/** Write a winning column's version + change-log entry, deleting any prior column entry. */
|
|
628
|
-
function commitColumnMetadata(ctx, batch, change, oldColumnVersion) {
|
|
629
|
-
// Delete the prior (pk, column) change-log entry if one exists.
|
|
746
|
+
function commitColumnMetadata(ctx, batch, change, oldColumnVersion, priorErasedByInBatchDelete = false) {
|
|
747
|
+
// Delete the prior (pk, column) change-log entry if one exists. Still required
|
|
748
|
+
// when the prior lineage is erased below — the entry is real storage, and the
|
|
749
|
+
// winning delete's cleanup skips this column (see ResolvedChange.keepColumns).
|
|
630
750
|
if (oldColumnVersion) {
|
|
631
751
|
ctx.changeLog.deleteEntryBatch(batch, oldColumnVersion.hlc, 'column', change.schema, change.table, change.pk, change.column);
|
|
632
752
|
}
|
|
@@ -634,8 +754,9 @@ function commitColumnMetadata(ctx, batch, change, oldColumnVersion) {
|
|
|
634
754
|
// write replaced here (`oldColumnVersion`). In causal-order delivery that equals
|
|
635
755
|
// the origin's prior, so re-relay forwards the origin's chain (the prior's own
|
|
636
756
|
// origin HLC, never reset to this receiver's clock). A first write here records
|
|
637
|
-
// no prior, matching the local write path in `recordColumnVersions
|
|
638
|
-
|
|
757
|
+
// no prior, matching the local write path in `recordColumnVersions` — as does a
|
|
758
|
+
// write that resurrected past a same-batch delete, which erased that lineage.
|
|
759
|
+
const prior = oldColumnVersion && !priorErasedByInBatchDelete
|
|
639
760
|
? { priorHlc: oldColumnVersion.hlc, priorValue: oldColumnVersion.value }
|
|
640
761
|
: undefined;
|
|
641
762
|
ctx.columnVersions.setColumnVersionBatch(batch, change.schema, change.table, change.pk, change.column, { hlc: change.hlc, value: change.value, ...prior });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-applicator.js","sourceRoot":"","sources":["../../../src/sync/change-applicator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"change-applicator.js","sourceRoot":"","sources":["../../../src/sync/change-applicator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-agnostic tick body for the periodic sync-maintenance loop.
|
|
3
|
+
*
|
|
4
|
+
* `@quereus/sync` is deliberately timer-free: it exposes the four host-driven
|
|
5
|
+
* sweeps (`drainHeldChanges` / `pruneQuarantine` / `pruneTombstones` /
|
|
6
|
+
* `evictExpiredBasisTables`) but never schedules them — the host owns cadence
|
|
7
|
+
* (`docs/sync.md` § Who drives the sweep, `docs/migration.md` § 4 Contract).
|
|
8
|
+
* What lives here is only the *shape* of one pass — ordering, error isolation,
|
|
9
|
+
* single-flight — with no timer and no `SyncManager` import, so every host
|
|
10
|
+
* (browser worker, relay coordinator, native app) runs the same semantics
|
|
11
|
+
* instead of re-deriving them. Arming a timer around `createSyncMaintenanceTicker`
|
|
12
|
+
* stays the host's job.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Default cadence for a host's sync-maintenance loop (5 minutes).
|
|
16
|
+
*
|
|
17
|
+
* The latency-sensitive sweep is `drainHeldChanges` (held edits replay within
|
|
18
|
+
* one interval once a table reappears); prune/evict act only at horizon
|
|
19
|
+
* granularity (default 30 days) so are latency-insensitive. Every sweep is
|
|
20
|
+
* zero-cost when nothing is held/expired, so minutes is ample. A host with no
|
|
21
|
+
* latency-sensitive sweep (a relay, where `drainHeldChanges` is inert) is free
|
|
22
|
+
* to pick a slower cadence of its own.
|
|
23
|
+
*/
|
|
24
|
+
export declare const SYNC_MAINTENANCE_INTERVAL_MS: number;
|
|
25
|
+
/**
|
|
26
|
+
* Minimal structural view of the four host-driven sweeps the loop calls. Avoids
|
|
27
|
+
* depending on the full `SyncManager` surface and keeps test fakes tiny — a
|
|
28
|
+
* `SyncManager` is structurally assignable to this.
|
|
29
|
+
*/
|
|
30
|
+
export interface SyncMaintenanceTarget {
|
|
31
|
+
drainHeldChanges(): Promise<number>;
|
|
32
|
+
pruneQuarantine(): Promise<number>;
|
|
33
|
+
pruneTombstones(): Promise<number>;
|
|
34
|
+
evictExpiredBasisTables(): Promise<number>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reports a failed sweep. Called once per failing step; the remaining sweeps
|
|
38
|
+
* still run. `error` is the thrown value verbatim.
|
|
39
|
+
*/
|
|
40
|
+
export type MaintenanceLogger = (step: string, error: unknown) => void;
|
|
41
|
+
/**
|
|
42
|
+
* One maintenance pass. Runs every sweep even if an earlier one throws (each is
|
|
43
|
+
* wrapped + logged); never rejects.
|
|
44
|
+
*
|
|
45
|
+
* Order: `drainHeldChanges` first — it replays held out-of-basis changes into
|
|
46
|
+
* tables that have reappeared in the local basis — THEN `pruneQuarantine` GCs
|
|
47
|
+
* the truly-expired remainder, then `pruneTombstones`, then
|
|
48
|
+
* `evictExpiredBasisTables`. Draining before pruning means a held change for a
|
|
49
|
+
* table that has come back is replayed rather than GC'd out from under it.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runSyncMaintenancePass(target: SyncMaintenanceTarget, log: MaintenanceLogger): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Build a single-flight maintenance ticker with the re-entrancy and null-target
|
|
54
|
+
* guards folded in, so the host holds no separate boolean and the guard logic is
|
|
55
|
+
* drivable from a test.
|
|
56
|
+
*
|
|
57
|
+
* - `getTarget` returns the live maintenance target, or null when there is no
|
|
58
|
+
* sync module yet / after `close()`. A null target is a clean no-op (the timer
|
|
59
|
+
* can fire once between `close()` nulling the manager and `clearInterval`).
|
|
60
|
+
* - While a pass is in flight, a concurrent tick is a clean no-op until the
|
|
61
|
+
* first settles — a pass slower than the interval must not overlap itself. The
|
|
62
|
+
* in-flight flag lives in the returned closure.
|
|
63
|
+
*
|
|
64
|
+
* Note the collapsed tick *does not* join the in-flight pass — it resolves
|
|
65
|
+
* immediately. That suits a fire-and-forget timer; a host that must await the
|
|
66
|
+
* running pass (to close its stores at shutdown, say) needs to hold the pass
|
|
67
|
+
* promise itself rather than rely on this return value.
|
|
68
|
+
*/
|
|
69
|
+
export declare function createSyncMaintenanceTicker(getTarget: () => SyncMaintenanceTarget | null, log: MaintenanceLogger): () => Promise<void>;
|
|
70
|
+
//# sourceMappingURL=maintenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../../src/sync/maintenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,QAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAevE;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,qBAAqB,GAAG,IAAI,EAC7C,GAAG,EAAE,iBAAiB,GACrB,MAAM,OAAO,CAAC,IAAI,CAAC,CAarB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-agnostic tick body for the periodic sync-maintenance loop.
|
|
3
|
+
*
|
|
4
|
+
* `@quereus/sync` is deliberately timer-free: it exposes the four host-driven
|
|
5
|
+
* sweeps (`drainHeldChanges` / `pruneQuarantine` / `pruneTombstones` /
|
|
6
|
+
* `evictExpiredBasisTables`) but never schedules them — the host owns cadence
|
|
7
|
+
* (`docs/sync.md` § Who drives the sweep, `docs/migration.md` § 4 Contract).
|
|
8
|
+
* What lives here is only the *shape* of one pass — ordering, error isolation,
|
|
9
|
+
* single-flight — with no timer and no `SyncManager` import, so every host
|
|
10
|
+
* (browser worker, relay coordinator, native app) runs the same semantics
|
|
11
|
+
* instead of re-deriving them. Arming a timer around `createSyncMaintenanceTicker`
|
|
12
|
+
* stays the host's job.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Default cadence for a host's sync-maintenance loop (5 minutes).
|
|
16
|
+
*
|
|
17
|
+
* The latency-sensitive sweep is `drainHeldChanges` (held edits replay within
|
|
18
|
+
* one interval once a table reappears); prune/evict act only at horizon
|
|
19
|
+
* granularity (default 30 days) so are latency-insensitive. Every sweep is
|
|
20
|
+
* zero-cost when nothing is held/expired, so minutes is ample. A host with no
|
|
21
|
+
* latency-sensitive sweep (a relay, where `drainHeldChanges` is inert) is free
|
|
22
|
+
* to pick a slower cadence of its own.
|
|
23
|
+
*/
|
|
24
|
+
export const SYNC_MAINTENANCE_INTERVAL_MS = 5 * 60 * 1000;
|
|
25
|
+
/** Run one sweep, isolating its failure: a throw is logged, never re-thrown. */
|
|
26
|
+
async function runStep(step, run, log) {
|
|
27
|
+
try {
|
|
28
|
+
await run();
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
log(step, error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* One maintenance pass. Runs every sweep even if an earlier one throws (each is
|
|
36
|
+
* wrapped + logged); never rejects.
|
|
37
|
+
*
|
|
38
|
+
* Order: `drainHeldChanges` first — it replays held out-of-basis changes into
|
|
39
|
+
* tables that have reappeared in the local basis — THEN `pruneQuarantine` GCs
|
|
40
|
+
* the truly-expired remainder, then `pruneTombstones`, then
|
|
41
|
+
* `evictExpiredBasisTables`. Draining before pruning means a held change for a
|
|
42
|
+
* table that has come back is replayed rather than GC'd out from under it.
|
|
43
|
+
*/
|
|
44
|
+
export async function runSyncMaintenancePass(target, log) {
|
|
45
|
+
await runStep('drainHeldChanges', () => target.drainHeldChanges(), log);
|
|
46
|
+
await runStep('pruneQuarantine', () => target.pruneQuarantine(), log);
|
|
47
|
+
await runStep('pruneTombstones', () => target.pruneTombstones(), log);
|
|
48
|
+
await runStep('evictExpiredBasisTables', () => target.evictExpiredBasisTables(), log);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build a single-flight maintenance ticker with the re-entrancy and null-target
|
|
52
|
+
* guards folded in, so the host holds no separate boolean and the guard logic is
|
|
53
|
+
* drivable from a test.
|
|
54
|
+
*
|
|
55
|
+
* - `getTarget` returns the live maintenance target, or null when there is no
|
|
56
|
+
* sync module yet / after `close()`. A null target is a clean no-op (the timer
|
|
57
|
+
* can fire once between `close()` nulling the manager and `clearInterval`).
|
|
58
|
+
* - While a pass is in flight, a concurrent tick is a clean no-op until the
|
|
59
|
+
* first settles — a pass slower than the interval must not overlap itself. The
|
|
60
|
+
* in-flight flag lives in the returned closure.
|
|
61
|
+
*
|
|
62
|
+
* Note the collapsed tick *does not* join the in-flight pass — it resolves
|
|
63
|
+
* immediately. That suits a fire-and-forget timer; a host that must await the
|
|
64
|
+
* running pass (to close its stores at shutdown, say) needs to hold the pass
|
|
65
|
+
* promise itself rather than rely on this return value.
|
|
66
|
+
*/
|
|
67
|
+
export function createSyncMaintenanceTicker(getTarget, log) {
|
|
68
|
+
let running = false;
|
|
69
|
+
return async () => {
|
|
70
|
+
if (running)
|
|
71
|
+
return;
|
|
72
|
+
const target = getTarget();
|
|
73
|
+
if (!target)
|
|
74
|
+
return;
|
|
75
|
+
running = true;
|
|
76
|
+
try {
|
|
77
|
+
await runSyncMaintenancePass(target, log);
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
running = false;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=maintenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../../src/sync/maintenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAoB1D,gFAAgF;AAChF,KAAK,UAAU,OAAO,CACpB,IAAY,EACZ,GAA0B,EAC1B,GAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAA6B,EAC7B,GAAsB;IAEtB,MAAM,OAAO,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,OAAO,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,2BAA2B,CACzC,SAA6C,EAC7C,GAAsB;IAEtB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,MAAM,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|