@quereus/sync 4.6.0 → 4.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -4
- package/dist/src/metadata/keys.d.ts +29 -1
- package/dist/src/metadata/keys.d.ts.map +1 -1
- package/dist/src/metadata/keys.js +33 -1
- package/dist/src/metadata/keys.js.map +1 -1
- package/dist/src/metadata/schema-migration.d.ts +8 -1
- package/dist/src/metadata/schema-migration.d.ts.map +1 -1
- package/dist/src/metadata/schema-migration.js +28 -3
- package/dist/src/metadata/schema-migration.js.map +1 -1
- package/dist/src/sync/change-applicator.d.ts.map +1 -1
- package/dist/src/sync/change-applicator.js +127 -71
- package/dist/src/sync/change-applicator.js.map +1 -1
- package/dist/src/sync/manager.d.ts +23 -0
- package/dist/src/sync/manager.d.ts.map +1 -1
- package/dist/src/sync/protocol.d.ts +12 -2
- package/dist/src/sync/protocol.d.ts.map +1 -1
- package/dist/src/sync/protocol.js +3 -1
- package/dist/src/sync/protocol.js.map +1 -1
- package/dist/src/sync/snapshot-stream.d.ts +11 -0
- package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
- package/dist/src/sync/snapshot-stream.js +98 -33
- package/dist/src/sync/snapshot-stream.js.map +1 -1
- package/dist/src/sync/snapshot.d.ts.map +1 -1
- package/dist/src/sync/snapshot.js +3 -0
- package/dist/src/sync/snapshot.js.map +1 -1
- package/dist/src/sync/store-adapter.d.ts.map +1 -1
- package/dist/src/sync/store-adapter.js +301 -62
- package/dist/src/sync/store-adapter.js.map +1 -1
- package/dist/src/sync/sync-manager-impl.d.ts +2 -0
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
- package/dist/src/sync/sync-manager-impl.js +38 -16
- package/dist/src/sync/sync-manager-impl.js.map +1 -1
- package/dist/src/sync/wire.d.ts +6 -0
- package/dist/src/sync/wire.d.ts.map +1 -1
- package/dist/src/sync/wire.js +3 -0
- package/dist/src/sync/wire.js.map +1 -1
- package/package.json +6 -6
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
* MV/capture state from the already-committed storage rows; recoverable via
|
|
106
106
|
* MV refresh).
|
|
107
107
|
*/
|
|
108
|
-
import { compareSqlValues, generateIndexDDL, generateTableDDL } from '@quereus/quereus';
|
|
108
|
+
import { compareSqlValues, expressionToString, generateIndexDDL, generateTableDDL, inferType, namedConstraintExists, Parser } from '@quereus/quereus';
|
|
109
109
|
import { makePkIdentityEncoder } from '../metadata/pk-identity.js';
|
|
110
110
|
import { toError } from './sync-context.js';
|
|
111
111
|
/**
|
|
@@ -374,6 +374,8 @@ function decideSchemaChange(db, change) {
|
|
|
374
374
|
}
|
|
375
375
|
case 'drop_table':
|
|
376
376
|
return db.schemaManager.getTable(change.schema, change.table) ? 'execute' : 'already-applied';
|
|
377
|
+
case 'rename_table':
|
|
378
|
+
return decideRenameTable(db, change);
|
|
377
379
|
case 'add_index': {
|
|
378
380
|
// For an index migration `change.table` holds the INDEX name, not the
|
|
379
381
|
// table name (see `mapSchemaMigrationType` / `recordSchemaMigration`).
|
|
@@ -391,51 +393,290 @@ function decideSchemaChange(db, change) {
|
|
|
391
393
|
// converge silently rather than exec a statement that would throw
|
|
392
394
|
// `no such index` and abort the admission unit.
|
|
393
395
|
return db.schemaManager.findIndexOwner(change.schema, change.table) ? 'execute' : 'already-applied';
|
|
396
|
+
case 'alter_column':
|
|
397
|
+
// A table alteration (the coarse "table definition changed" migration the
|
|
398
|
+
// origin records for every ALTER TABLE form). Parse the statement and decide
|
|
399
|
+
// per alteration arm whether the local table is already in the wanted state.
|
|
400
|
+
return decideAlterTable(db, change);
|
|
394
401
|
default:
|
|
395
|
-
//
|
|
396
|
-
//
|
|
402
|
+
// add_column / drop_column are legacy wire types no current origin records
|
|
403
|
+
// (mapSchemaMigrationType folds every table alter into alter_column); run
|
|
404
|
+
// them as before.
|
|
397
405
|
return 'execute';
|
|
398
406
|
}
|
|
399
407
|
}
|
|
400
408
|
/**
|
|
401
|
-
*
|
|
402
|
-
*
|
|
403
|
-
*
|
|
409
|
+
* Idempotency / conflict decision for a replicated `rename_table` migration,
|
|
410
|
+
* read from the local catalog for BOTH names:
|
|
411
|
+
*
|
|
412
|
+
* | old present | new present | verdict |
|
|
413
|
+
* |---|---|---|
|
|
414
|
+
* | yes | no | execute |
|
|
415
|
+
* | no | yes | already-applied — the rename already happened here |
|
|
416
|
+
* | yes | yes | THROW a conflict naming both tables (see below) |
|
|
417
|
+
* | no | no | converge with a warning — nothing to rename (drop won) |
|
|
418
|
+
*
|
|
419
|
+
* A missing `fromTable` (a peer that omitted it) makes the migration
|
|
420
|
+
* undecidable: converge with a warning rather than exec a statement whose
|
|
421
|
+
* outcome we cannot predict.
|
|
422
|
+
*
|
|
423
|
+
* The yes/yes row throws rather than picking a side: renaming would collide
|
|
424
|
+
* with a table that already exists, and silently keeping either shape would
|
|
425
|
+
* record "converged" for a divergence that is not — the same posture as a
|
|
426
|
+
* divergent `create_table` (see {@link assertDefinitionMatches}'s NOTE).
|
|
404
427
|
*
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
428
|
+
* NOTE: sync's per-row bookkeeping (`cv:`/`tb:`/`cl:`) is keyed by table name,
|
|
429
|
+
* so both origin and receiver strand it at the old name and start empty at the
|
|
430
|
+
* new one — later conflict resolution and tombstone blocking lose their history
|
|
431
|
+
* for the renamed table (an old delete no longer blocks a replayed insert).
|
|
432
|
+
* Pre-existing for a purely local rename; replicating the rename makes it
|
|
433
|
+
* happen on every peer. Tracked as
|
|
434
|
+
* `bug-sync-rename-and-pk-change-strand-crdt-metadata` (tickets/backlog).
|
|
411
435
|
*/
|
|
412
|
-
function
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
436
|
+
function decideRenameTable(db, change) {
|
|
437
|
+
if (change.fromTable === undefined) {
|
|
438
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} carries no old table name — `
|
|
439
|
+
+ `undecidable; converging without applying: ${change.ddl}`);
|
|
440
|
+
return 'already-applied';
|
|
441
|
+
}
|
|
442
|
+
const oldPresent = db.schemaManager.getTable(change.schema, change.fromTable) !== undefined;
|
|
443
|
+
const newPresent = db.schemaManager.getTable(change.schema, change.table) !== undefined;
|
|
444
|
+
if (oldPresent && newPresent) {
|
|
445
|
+
throw new Error(`Schema conflict applying remote ${change.type} for ${change.schema}.${change.fromTable}: ` +
|
|
446
|
+
`renaming to ${change.schema}.${change.table} would collide with a table that already exists locally.\n` +
|
|
447
|
+
` remote: ${change.ddl}`);
|
|
448
|
+
}
|
|
449
|
+
if (oldPresent)
|
|
450
|
+
return 'execute';
|
|
451
|
+
if (newPresent)
|
|
452
|
+
return 'already-applied';
|
|
453
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither `
|
|
454
|
+
+ `'${change.fromTable}' nor '${change.table}' exists locally — converging without applying: ${change.ddl}`);
|
|
455
|
+
return 'already-applied';
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Idempotency decision for a replicated `alter_column` migration. The migration
|
|
459
|
+
* carries only the statement text, so parse it with the engine's own parser and
|
|
460
|
+
* compare the parsed alteration against the local {@link TableSchema}.
|
|
461
|
+
*
|
|
462
|
+
* Two peers offline can each run `alter table orders add column sku text`;
|
|
463
|
+
* whichever migration wins the HLC comparison is then delivered to a peer that
|
|
464
|
+
* already has `sku`. Re-executing the raw DDL there throws, aborting the whole
|
|
465
|
+
* admission unit before its CRDT metadata commits — the same permanent re-fail
|
|
466
|
+
* loop `create_table` idempotency exists to prevent.
|
|
467
|
+
*/
|
|
468
|
+
function decideAlterTable(db, change) {
|
|
469
|
+
let stmt;
|
|
470
|
+
try {
|
|
471
|
+
const parsed = new Parser().parse(change.ddl);
|
|
472
|
+
if (parsed.type !== 'alterTable')
|
|
473
|
+
return 'execute';
|
|
474
|
+
stmt = parsed;
|
|
475
|
+
}
|
|
476
|
+
catch (e) {
|
|
477
|
+
// A parse failure must not be swallowed into a skip: execute the DDL so the
|
|
478
|
+
// underlying engine error is what the operator sees, not a parser message.
|
|
479
|
+
console.error(`[Sync] Could not parse replicated ${change.type} DDL for ${change.schema}.${change.table} — executing as-is:`, e);
|
|
480
|
+
return 'execute';
|
|
481
|
+
}
|
|
482
|
+
// NOTE: the decision reads the migration's `(schema, table)` envelope, never
|
|
483
|
+
// `stmt.table` — the origin filed the envelope from the same event that carried
|
|
484
|
+
// this text, so the two agree for anything the pipeline produces. A hand-crafted
|
|
485
|
+
// migration whose DDL names a different table would be decided against the wrong
|
|
486
|
+
// local table; if migrations ever arrive from outside the capture path, compare
|
|
487
|
+
// the two here first.
|
|
488
|
+
const action = stmt.action;
|
|
489
|
+
// The tag/maintained arms have no idempotency arm — execute as before. A
|
|
490
|
+
// renameTable action under `alter_column` can only come from a peer on an older
|
|
491
|
+
// build (a current origin records it as `rename_table`, decided by
|
|
492
|
+
// decideRenameTable above); execute it as those builds always did.
|
|
493
|
+
if (action.type === 'renameTable' || action.type === 'setTags' || action.type === 'dropTags'
|
|
494
|
+
|| action.type === 'setMaintained' || action.type === 'dropMaintained') {
|
|
495
|
+
return 'execute';
|
|
496
|
+
}
|
|
497
|
+
const local = db.schemaManager.getTable(change.schema, change.table);
|
|
498
|
+
if (!local) {
|
|
499
|
+
// Nothing to alter: the receiver dropped the table (drop is the more
|
|
500
|
+
// destructive migration and wins). Converge with a warning rather than exec a
|
|
501
|
+
// statement that would throw `no such table` and abort the admission unit —
|
|
502
|
+
// consistent with drop_index's absent-owner arm.
|
|
503
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} names a table this peer does not have — `
|
|
504
|
+
+ `converging without applying: ${change.ddl}`);
|
|
505
|
+
return 'already-applied';
|
|
506
|
+
}
|
|
507
|
+
switch (action.type) {
|
|
508
|
+
case 'addColumn':
|
|
509
|
+
return decideAddColumn(local, action.column, change);
|
|
510
|
+
case 'dropColumn':
|
|
511
|
+
return localColumn(local, action.name) ? 'execute' : 'already-applied';
|
|
512
|
+
case 'renameColumn': {
|
|
513
|
+
// Old name still present ⇒ the rename has not happened here (if the new name
|
|
514
|
+
// ALSO exists the exec surfaces the engine's own duplicate-name error — a
|
|
515
|
+
// genuine divergence, not one to paper over).
|
|
516
|
+
if (localColumn(local, action.oldName))
|
|
517
|
+
return 'execute';
|
|
518
|
+
if (localColumn(local, action.newName))
|
|
519
|
+
return 'already-applied';
|
|
520
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither column `
|
|
521
|
+
+ `'${action.oldName}' nor '${action.newName}' exists locally — converging without applying`);
|
|
522
|
+
return 'already-applied';
|
|
523
|
+
}
|
|
524
|
+
case 'addConstraint': {
|
|
525
|
+
const constraint = action.constraint;
|
|
526
|
+
// Named: presence of the name is the whole check — see the NOTE on
|
|
527
|
+
// decideAddColumn for why no definition comparison is attempted.
|
|
528
|
+
if (constraint.name) {
|
|
529
|
+
return namedConstraintExists(local, constraint.name) ? 'already-applied' : 'execute';
|
|
530
|
+
}
|
|
531
|
+
// Unnamed UNIQUE: an equivalent UNIQUE over the same column set converges.
|
|
532
|
+
if (constraint.type === 'unique' && constraint.columns) {
|
|
533
|
+
return equivalentUniqueExists(local, constraint.columns.map(c => c.name)) ? 'already-applied' : 'execute';
|
|
534
|
+
}
|
|
535
|
+
// Unnamed CHECK (or other forms): no identity to compare against — execute.
|
|
536
|
+
// NOTE: two peers that concurrently add the SAME unnamed CHECK therefore end
|
|
537
|
+
// up enforcing it twice (the engine auto-names each install separately), which
|
|
538
|
+
// is semantically harmless — same predicate, evaluated twice. If the duplicate
|
|
539
|
+
// ever matters (per-row cost, or a confusing `table_info`), the identity to
|
|
540
|
+
// compare on is the rendered predicate expression, not the constraint name.
|
|
541
|
+
return 'execute';
|
|
542
|
+
}
|
|
543
|
+
case 'dropConstraint':
|
|
544
|
+
return namedConstraintExists(local, action.name) ? 'execute' : 'already-applied';
|
|
545
|
+
case 'renameConstraint': {
|
|
546
|
+
if (namedConstraintExists(local, action.oldName))
|
|
547
|
+
return 'execute';
|
|
548
|
+
if (namedConstraintExists(local, action.newName))
|
|
549
|
+
return 'already-applied';
|
|
550
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither constraint `
|
|
551
|
+
+ `'${action.oldName}' nor '${action.newName}' exists locally — converging without applying`);
|
|
552
|
+
return 'already-applied';
|
|
553
|
+
}
|
|
554
|
+
case 'alterColumn': {
|
|
555
|
+
const col = localColumn(local, action.columnName);
|
|
556
|
+
if (!col) {
|
|
557
|
+
// Most-destructive-wins (docs/sync-schema.md § Conflict Resolution): a
|
|
558
|
+
// concurrent local DROP COLUMN beats the alteration, so converge.
|
|
559
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: column `
|
|
560
|
+
+ `'${action.columnName}' does not exist locally — converging without applying: ${change.ddl}`);
|
|
561
|
+
return 'already-applied';
|
|
562
|
+
}
|
|
563
|
+
if (action.setDataType !== undefined) {
|
|
564
|
+
return inferType(action.setDataType).name === col.logicalType.name ? 'already-applied' : 'execute';
|
|
565
|
+
}
|
|
566
|
+
if (action.setNotNull !== undefined) {
|
|
567
|
+
// A `set not null` executes against the rows this peer currently holds, and
|
|
568
|
+
// schema changes are applied ahead of the same batch's data facts — so the
|
|
569
|
+
// very batch that fills the NULLs fails its own DDL and only succeeds on the
|
|
570
|
+
// next sync round. Whole class (tightening DDL vs. the data that satisfies
|
|
571
|
+
// it); tracked as `bug-sync-tightening-ddl-applied-before-its-data`.
|
|
572
|
+
return col.notNull === action.setNotNull ? 'already-applied' : 'execute';
|
|
573
|
+
}
|
|
574
|
+
if (action.setDefault !== undefined) {
|
|
575
|
+
if (action.setDefault === null) {
|
|
576
|
+
return col.defaultValue === null ? 'already-applied' : 'execute';
|
|
577
|
+
}
|
|
578
|
+
return col.defaultValue !== null
|
|
579
|
+
&& expressionToString(col.defaultValue) === expressionToString(action.setDefault)
|
|
580
|
+
? 'already-applied' : 'execute';
|
|
581
|
+
}
|
|
582
|
+
if (action.setCollation !== undefined) {
|
|
583
|
+
return col.collation.toLowerCase() === action.setCollation.toLowerCase() ? 'already-applied' : 'execute';
|
|
584
|
+
}
|
|
585
|
+
return 'execute';
|
|
586
|
+
}
|
|
587
|
+
case 'alterPrimaryKey': {
|
|
588
|
+
// NOTE: replicating a PK change re-keys the table on EVERY peer, and sync's
|
|
589
|
+
// cv:/tb:/cl: metadata is filed under the row's old pk identity — so conflict
|
|
590
|
+
// resolution for existing rows silently restarts from empty. Pre-existing for
|
|
591
|
+
// a local PK change; tracked as
|
|
592
|
+
// `bug-sync-rename-and-pk-change-strand-crdt-metadata` (tickets/backlog).
|
|
593
|
+
const wanted = action.columns;
|
|
594
|
+
const current = local.primaryKeyDefinition;
|
|
595
|
+
const same = wanted.length === current.length && wanted.every((w, i) => {
|
|
596
|
+
const def = current[i];
|
|
597
|
+
const col = local.columns[def.index];
|
|
598
|
+
return col.name.toLowerCase() === w.name.toLowerCase()
|
|
599
|
+
&& (def.desc === true) === (w.direction === 'desc');
|
|
600
|
+
});
|
|
601
|
+
return same ? 'already-applied' : 'execute';
|
|
602
|
+
}
|
|
603
|
+
default:
|
|
604
|
+
return 'execute';
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/** Position of the local column named `name`, or undefined. */
|
|
608
|
+
function localColumnIndex(table, name) {
|
|
609
|
+
return table.columnIndexMap.get(name.toLowerCase());
|
|
610
|
+
}
|
|
611
|
+
/** The local column named `name`, or undefined. */
|
|
612
|
+
function localColumn(table, name) {
|
|
613
|
+
const idx = localColumnIndex(table, name);
|
|
614
|
+
return idx === undefined ? undefined : table.columns[idx];
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* ADD COLUMN idempotency: absent ⇒ execute; present with the same LOGICAL TYPE ⇒
|
|
618
|
+
* converged; present with a different type ⇒ conflict.
|
|
619
|
+
*
|
|
620
|
+
* NOTE: only the logical type is compared, deliberately. A type difference is the
|
|
621
|
+
* dangerous divergence — two peers would interpret the same rows under different
|
|
622
|
+
* shapes, exactly what the create_table arm refuses to paper over. Anything
|
|
623
|
+
* richer would compare an AST column definition (rendered from the origin's
|
|
624
|
+
* statement) against a ColumnSchema (rendered from the receiver's catalog), and
|
|
625
|
+
* those do not round-trip: an unnamed inline CHECK is auto-named `_check_<col>`
|
|
626
|
+
* on the way into the catalog, session `default_column_nullability` decides
|
|
627
|
+
* whether `not null` is even spelled, and so on. A false conflict permanently
|
|
628
|
+
* blocks the peer — strictly worse than converging on a constraint-level
|
|
629
|
+
* difference. So constraint-level drift between two same-named, same-typed
|
|
630
|
+
* columns converges silently; if that ever bites, the fix is to compare parsed
|
|
631
|
+
* schemas, not rendered text.
|
|
632
|
+
*/
|
|
633
|
+
function decideAddColumn(local, column, change) {
|
|
634
|
+
const existing = localColumn(local, column.name);
|
|
635
|
+
if (!existing)
|
|
636
|
+
return 'execute';
|
|
637
|
+
const wanted = inferType(column.dataType);
|
|
638
|
+
if (wanted.name === existing.logicalType.name)
|
|
639
|
+
return 'already-applied';
|
|
640
|
+
throw new Error(`Schema conflict applying remote ${change.type} for ${change.schema}.${change.table}: ` +
|
|
641
|
+
`column '${column.name}' already exists with type ${existing.logicalType.name}, ` +
|
|
642
|
+
`but the remote alteration adds it as ${wanted.name}.\n` +
|
|
643
|
+
` remote: ${change.ddl}`);
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* True when the table already has a UNIQUE constraint over exactly this column
|
|
647
|
+
* set (order-insensitive — `unique (a, b)` and `unique (b, a)` enforce the same
|
|
648
|
+
* predicate). A column name the local table lacks ⇒ false, and the exec surfaces
|
|
649
|
+
* the engine's own error.
|
|
650
|
+
*
|
|
651
|
+
* PARTIAL constraints do not count. A table-level `unique (a)` is unconditional,
|
|
652
|
+
* while a `predicate`-carrying constraint (only ever synthesized from a
|
|
653
|
+
* `create unique index … where …`) enforces over a subset of the rows — treating
|
|
654
|
+
* it as equivalent would converge the peer onto WEAKER enforcement than the
|
|
655
|
+
* alteration asked for, and duplicate-but-outside-the-predicate rows would then
|
|
656
|
+
* replicate here and be rejected on the origin.
|
|
657
|
+
*/
|
|
658
|
+
function equivalentUniqueExists(table, columnNames) {
|
|
659
|
+
const wanted = [];
|
|
660
|
+
for (const name of columnNames) {
|
|
661
|
+
const idx = localColumnIndex(table, name);
|
|
662
|
+
if (idx === undefined)
|
|
663
|
+
return false;
|
|
664
|
+
wanted.push(idx);
|
|
424
665
|
}
|
|
666
|
+
const wantedKey = sortedIndexKey(wanted);
|
|
667
|
+
return (table.uniqueConstraints ?? []).some(uc => uc.predicate === undefined && sortedIndexKey(uc.columns) === wantedKey);
|
|
668
|
+
}
|
|
669
|
+
/** Order-insensitive identity of a column-index set. */
|
|
670
|
+
function sortedIndexKey(columns) {
|
|
671
|
+
return [...columns].sort((a, b) => a - b).join(',');
|
|
425
672
|
}
|
|
426
673
|
/**
|
|
427
674
|
* Apply one schema change (DDL) to the database, idempotently.
|
|
428
675
|
*/
|
|
429
676
|
async function applySchemaChange(db, events, change, _options) {
|
|
430
|
-
// A blank `ddl` still
|
|
431
|
-
//
|
|
432
|
-
//
|
|
433
|
-
// drop/index migrations. Such a migration runs nothing, so it also EMITS
|
|
434
|
-
// nothing — registering a remote-event expectation for it would leave that
|
|
435
|
-
// expectation pending forever (the emitter refcounts expectations and never
|
|
436
|
-
// expires them), and the next genuine LOCAL DDL of the same signature would be
|
|
437
|
-
// consumed by it, marked remote, and dropped from the SyncManager's local-fact
|
|
438
|
-
// capture — silently never replicated.
|
|
677
|
+
// A blank `ddl` can still reach here from a peer on an older build (blank
|
|
678
|
+
// drop/index/alter migrations). Such a migration runs nothing; skip it before
|
|
679
|
+
// deciding anything (an empty string is not a parseable statement).
|
|
439
680
|
if (change.ddl.trim() === '') {
|
|
440
681
|
// Deliberately NOT scoped to `alter_column`, unlike the origin-side warning in
|
|
441
682
|
// `recordSchemaMigration` (sync-manager-impl.ts): a peer on an older build can
|
|
@@ -450,41 +691,33 @@ async function applySchemaChange(db, events, change, _options) {
|
|
|
450
691
|
+ `not applied; this peer's schema is unchanged`);
|
|
451
692
|
return;
|
|
452
693
|
}
|
|
453
|
-
// Decide BEFORE registering the remote-event expectation, for the same reason:
|
|
454
|
-
// an expectation for DDL that is then not executed would linger and mis-mark a
|
|
455
|
-
// later genuine LOCAL DDL of the same signature as remote.
|
|
456
694
|
if (decideSchemaChange(db, change) === 'already-applied') {
|
|
457
695
|
console.debug(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} already applied locally — converging without re-executing DDL`);
|
|
458
696
|
return;
|
|
459
697
|
}
|
|
460
|
-
|
|
461
|
-
//
|
|
462
|
-
//
|
|
463
|
-
//
|
|
464
|
-
//
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
698
|
+
// Mark every schema event the replicated DDL emits as remote, so the
|
|
699
|
+
// SyncManager doesn't re-record it as a local change and broadcast it back
|
|
700
|
+
// out. The scope covers zero, one, or several events, and the `finally`
|
|
701
|
+
// releases it whether the exec succeeds or throws — so a statement that emits
|
|
702
|
+
// nothing leaves no residue to swallow the next genuine local DDL. (See
|
|
703
|
+
// `StoreEventEmitter.beginRemoteSchemaScope` for the concurrency tradeoff.)
|
|
704
|
+
//
|
|
705
|
+
// A rename_table scopes BOTH names: the store module's renameTable announces
|
|
706
|
+
// under the NEW name (`change.table`), but scoping the old one too costs
|
|
707
|
+
// nothing and protects against a module that announces under the pre-rename
|
|
708
|
+
// name.
|
|
709
|
+
const scopeNames = change.type === 'rename_table' && change.fromTable !== undefined
|
|
710
|
+
? [change.table, change.fromTable]
|
|
711
|
+
: [change.table];
|
|
712
|
+
for (const name of scopeNames)
|
|
713
|
+
events.beginRemoteSchemaScope(change.schema, name);
|
|
471
714
|
try {
|
|
472
|
-
// Execute the DDL statement
|
|
473
|
-
// The module will emit a schema event, which will be marked as remote
|
|
474
715
|
await db.exec(change.ddl);
|
|
475
716
|
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
type: eventType,
|
|
480
|
-
objectType,
|
|
481
|
-
schemaName: change.schema,
|
|
482
|
-
objectName: change.table,
|
|
483
|
-
});
|
|
484
|
-
throw e;
|
|
717
|
+
finally {
|
|
718
|
+
for (const name of scopeNames)
|
|
719
|
+
events.endRemoteSchemaScope(change.schema, name);
|
|
485
720
|
}
|
|
486
|
-
// Note: We don't emit a separate event here anymore.
|
|
487
|
-
// The module's event is automatically marked as remote.
|
|
488
721
|
}
|
|
489
722
|
/**
|
|
490
723
|
* Collapse one row group's changes into a single ExternalRowOp — the group's NET
|
|
@@ -553,8 +786,14 @@ async function mergeColumnUpdates(table, pk, changes, rowDeletedInGroup = false)
|
|
|
553
786
|
columnsApplied++;
|
|
554
787
|
}
|
|
555
788
|
else {
|
|
556
|
-
//
|
|
557
|
-
|
|
789
|
+
// Now that DROP COLUMN and RENAME COLUMN replicate, the ordinary cause is a
|
|
790
|
+
// change-log fact recorded before the alteration reached this peer — the value
|
|
791
|
+
// is correctly discarded. A name that is neither dropped nor renamed still
|
|
792
|
+
// indicates a genuine source/destination mismatch, so this stays a warning.
|
|
793
|
+
// NOTE: one line per unknown column per change. If a wide table's drop ever
|
|
794
|
+
// makes this drown the log, aggregate per (table, column) instead of demoting.
|
|
795
|
+
console.warn(`[Sync] Column '${colName}' not found in ${tableSchema.schemaName}.${tableSchema.name} — ` +
|
|
796
|
+
`discarding its value (expected if a replicated ALTER TABLE dropped or renamed it). ` +
|
|
558
797
|
`Available columns: ${[...tableSchema.columnIndexMap.keys()].join(', ')}`);
|
|
559
798
|
}
|
|
560
799
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-adapter.js","sourceRoot":"","sources":["../../../src/sync/store-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store-adapter.js","sourceRoot":"","sources":["../../../src/sync/store-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -424,6 +424,8 @@ export declare class SyncManagerImpl implements SyncManager, SyncContext {
|
|
|
424
424
|
getSnapshotStream(chunkSize?: number): AsyncIterable<SnapshotChunk>;
|
|
425
425
|
applySnapshotStream(chunks: AsyncIterable<SnapshotChunk>, onProgress?: (progress: SnapshotProgress) => void): Promise<void>;
|
|
426
426
|
getSnapshotCheckpoint(snapshotId: string): Promise<SnapshotCheckpoint | undefined>;
|
|
427
|
+
listSnapshotCheckpoints(): Promise<SnapshotCheckpoint[]>;
|
|
428
|
+
clearSnapshotCheckpoint(snapshotId: string): Promise<void>;
|
|
427
429
|
resumeSnapshotStream(checkpoint: SnapshotCheckpoint): AsyncIterable<SnapshotChunk>;
|
|
428
430
|
}
|
|
429
431
|
//# sourceMappingURL=sync-manager-impl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager-impl.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-manager-impl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAGX,QAAQ,EACR,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EAGtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,KAAK,GAAG,EAAwD,MAAM,iBAAiB,CAAC;AAC7G,OAAO,EAEN,KAAK,MAAM,EAKX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAoD,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,cAAc,EAAwB,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAuB,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACN,mBAAmB,EAOnB,KAAK,yBAAyB,EAE9B,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAQN,KAAK,QAAQ,EACb,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,KAAK,EACX,UAAU,EACV,SAAS,EAIT,WAAW,EACX,QAAQ,EAGR,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-manager-impl.d.ts","sourceRoot":"","sources":["../../../src/sync/sync-manager-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ import { StagedTransactionMetadata } from './staged-transaction-metadata.js';
|
|
|
22
22
|
import { applyChanges as applyChangesImpl, drainHeldChanges as drainHeldChangesImpl, drainReappearedTables } from './change-applicator.js';
|
|
23
23
|
import { buildTransactionChangeSets } from './change-grouping.js';
|
|
24
24
|
import { getSnapshot as getSnapshotImpl, applySnapshot as applySnapshotImpl } from './snapshot.js';
|
|
25
|
-
import { getSnapshotStream as getSnapshotStreamImpl, applySnapshotStream as applySnapshotStreamImpl, getSnapshotCheckpoint as getSnapshotCheckpointImpl, resumeSnapshotStream as resumeSnapshotStreamImpl, } from './snapshot-stream.js';
|
|
25
|
+
import { getSnapshotStream as getSnapshotStreamImpl, applySnapshotStream as applySnapshotStreamImpl, getSnapshotCheckpoint as getSnapshotCheckpointImpl, listSnapshotCheckpoints as listSnapshotCheckpointsImpl, clearSnapshotCheckpoint as clearSnapshotCheckpointImpl, resumeSnapshotStream as resumeSnapshotStreamImpl, } from './snapshot-stream.js';
|
|
26
26
|
/**
|
|
27
27
|
* Guard a transaction's running `opSeq` against the uint32 bound. `opSeq` is
|
|
28
28
|
* serialized as a big-endian uint32 in the HLC comparison key, so a fact count
|
|
@@ -36,14 +36,22 @@ export function assertOpSeqInRange(opSeq) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Map an engine schema-change event
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
39
|
+
* Map an engine schema-change event to the sync {@link SchemaMigrationType} it
|
|
40
|
+
* records, or `undefined` when the combination is not tracked for replication
|
|
41
|
+
* (e.g. column-level or view/trigger objects, or an `alter` on an index). Takes
|
|
42
|
+
* the whole event rather than `(objectType, type)` because a rename is only
|
|
43
|
+
* distinguishable by `oldObjectName`, which exactly the three RENAME TO emit sites
|
|
44
|
+
* set — `StoreModuleRename.renameTable`, the memory module's `renameTable`, and the
|
|
45
|
+
* engine's own `runRenameTable` tail (for a module with no emitter of its own). All
|
|
46
|
+
* three put the NEW name in `objectName`. Every other `'table' alter` is recorded as
|
|
47
|
+
* `alter_column` — the coarse "table definition changed" migration the schema-sync
|
|
48
|
+
* layer replays.
|
|
44
49
|
*/
|
|
45
|
-
function mapSchemaMigrationType(
|
|
50
|
+
function mapSchemaMigrationType(event) {
|
|
51
|
+
const { objectType, type } = event;
|
|
46
52
|
if (objectType === 'table') {
|
|
53
|
+
if (type === 'alter' && event.oldObjectName !== undefined)
|
|
54
|
+
return 'rename_table';
|
|
47
55
|
switch (type) {
|
|
48
56
|
case 'create': return 'create_table';
|
|
49
57
|
case 'drop': return 'drop_table';
|
|
@@ -694,18 +702,18 @@ export class SyncManagerImpl {
|
|
|
694
702
|
* running per-table schema version across this transaction's migrations.
|
|
695
703
|
*/
|
|
696
704
|
async recordSchemaMigration(batch, event, nextHlc, versionCounters) {
|
|
697
|
-
const migrationType = mapSchemaMigrationType(event
|
|
705
|
+
const migrationType = mapSchemaMigrationType(event);
|
|
698
706
|
if (!migrationType)
|
|
699
707
|
return;
|
|
700
708
|
const { schemaName, objectName, ddl } = event;
|
|
701
|
-
//
|
|
702
|
-
//
|
|
703
|
-
//
|
|
704
|
-
//
|
|
705
|
-
//
|
|
706
|
-
//
|
|
707
|
-
//
|
|
708
|
-
if (migrationType === 'alter_column' && !ddl?.trim()) {
|
|
709
|
+
// Every tracked type now carries canonical DDL — ALTER TABLE events included
|
|
710
|
+
// (the engine renders the statement's schema-qualified SQL at plan-build and the
|
|
711
|
+
// store module puts it on the event; see SchemaChangeInfo.ddl). A blank
|
|
712
|
+
// `alter_column`/`rename_table` can therefore only come from an older event
|
|
713
|
+
// producer; the migration below still records and still advances the schema
|
|
714
|
+
// version (destructiveness comparison depends on it), but a blank one reaches a
|
|
715
|
+
// peer as an empty statement, so it is still worth an operator hearing about.
|
|
716
|
+
if ((migrationType === 'alter_column' || migrationType === 'rename_table') && !ddl?.trim()) {
|
|
709
717
|
console.warn(`[Sync] ${schemaName}.${objectName}: recording an ${migrationType} migration with no DDL — `
|
|
710
718
|
+ `this table alteration will NOT reach other synced devices`);
|
|
711
719
|
}
|
|
@@ -726,8 +734,16 @@ export class SyncManagerImpl {
|
|
|
726
734
|
}
|
|
727
735
|
version += 1;
|
|
728
736
|
versionCounters.set(counterKey, version);
|
|
737
|
+
// A rename files under the NEW name (`objectName`) with the old one in
|
|
738
|
+
// `fromTable`, so later alterations of the renamed table share one contiguous
|
|
739
|
+
// version stream where the table actually lives. The rename may start a fresh
|
|
740
|
+
// counter under the new name (version 1 if nothing was ever named that) —
|
|
741
|
+
// harmless, the same thing happens when a dropped name is reused.
|
|
729
742
|
this.schemaMigrations.recordMigrationBatch(batch, schemaName, kind, objectName, {
|
|
730
743
|
type: migrationType,
|
|
744
|
+
...(migrationType === 'rename_table' && event.oldObjectName !== undefined
|
|
745
|
+
? { fromTable: event.oldObjectName }
|
|
746
|
+
: {}),
|
|
731
747
|
ddl: ddl || '',
|
|
732
748
|
hlc: nextHlc(),
|
|
733
749
|
schemaVersion: version,
|
|
@@ -1283,6 +1299,12 @@ export class SyncManagerImpl {
|
|
|
1283
1299
|
async getSnapshotCheckpoint(snapshotId) {
|
|
1284
1300
|
return getSnapshotCheckpointImpl(this, snapshotId);
|
|
1285
1301
|
}
|
|
1302
|
+
async listSnapshotCheckpoints() {
|
|
1303
|
+
return listSnapshotCheckpointsImpl(this);
|
|
1304
|
+
}
|
|
1305
|
+
async clearSnapshotCheckpoint(snapshotId) {
|
|
1306
|
+
return clearSnapshotCheckpointImpl(this, snapshotId);
|
|
1307
|
+
}
|
|
1286
1308
|
async *resumeSnapshotStream(checkpoint) {
|
|
1287
1309
|
yield* resumeSnapshotStreamImpl(this, checkpoint);
|
|
1288
1310
|
}
|