@quereus/sync 4.5.0 → 4.7.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 +14 -6
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/metadata/column-version.d.ts.map +1 -1
- package/dist/src/metadata/column-version.js +8 -9
- package/dist/src/metadata/column-version.js.map +1 -1
- package/dist/src/metadata/keys.d.ts +99 -39
- package/dist/src/metadata/keys.d.ts.map +1 -1
- package/dist/src/metadata/keys.js +213 -158
- package/dist/src/metadata/keys.js.map +1 -1
- package/dist/src/metadata/pk-identity.d.ts +19 -14
- package/dist/src/metadata/pk-identity.d.ts.map +1 -1
- package/dist/src/metadata/pk-identity.js +21 -28
- package/dist/src/metadata/pk-identity.js.map +1 -1
- package/dist/src/metadata/schema-migration.d.ts +33 -10
- package/dist/src/metadata/schema-migration.d.ts.map +1 -1
- package/dist/src/metadata/schema-migration.js +77 -18
- package/dist/src/metadata/schema-migration.js.map +1 -1
- package/dist/src/sync/change-applicator.d.ts +19 -3
- package/dist/src/sync/change-applicator.d.ts.map +1 -1
- package/dist/src/sync/change-applicator.js +253 -63
- package/dist/src/sync/change-applicator.js.map +1 -1
- package/dist/src/sync/maintenance.d.ts +8 -5
- package/dist/src/sync/maintenance.d.ts.map +1 -1
- package/dist/src/sync/maintenance.js +7 -4
- package/dist/src/sync/maintenance.js.map +1 -1
- package/dist/src/sync/manager.d.ts +46 -1
- package/dist/src/sync/manager.d.ts.map +1 -1
- package/dist/src/sync/protocol.d.ts +42 -3
- package/dist/src/sync/protocol.d.ts.map +1 -1
- package/dist/src/sync/protocol.js +40 -0
- package/dist/src/sync/protocol.js.map +1 -1
- package/dist/src/sync/snapshot-identity.d.ts.map +1 -1
- package/dist/src/sync/snapshot-identity.js +1 -9
- package/dist/src/sync/snapshot-identity.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 +134 -67
- 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 +15 -30
- package/dist/src/sync/snapshot.js.map +1 -1
- package/dist/src/sync/store-adapter.d.ts +5 -4
- package/dist/src/sync/store-adapter.d.ts.map +1 -1
- package/dist/src/sync/store-adapter.js +328 -108
- package/dist/src/sync/store-adapter.js.map +1 -1
- package/dist/src/sync/sync-manager-impl.d.ts +37 -4
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
- package/dist/src/sync/sync-manager-impl.js +110 -56
- 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 +7 -7
package/README.md
CHANGED
|
@@ -119,14 +119,22 @@ await syncManager.applySnapshot(snapshot);
|
|
|
119
119
|
Streaming snapshots support checkpoint-based resumption:
|
|
120
120
|
|
|
121
121
|
```typescript
|
|
122
|
-
//
|
|
123
|
-
|
|
122
|
+
// After a restart the snapshotId is gone (it only ever arrived in the header
|
|
123
|
+
// chunk), so discover any interrupted transfer instead. A non-empty list means
|
|
124
|
+
// this replica's data is PARTIAL — an apply cleared local metadata and never
|
|
125
|
+
// reached its footer.
|
|
126
|
+
const [checkpoint] = await syncManager.listSnapshotCheckpoints();
|
|
127
|
+
|
|
128
|
+
// Or look one up directly, when the id is still in hand
|
|
129
|
+
// const checkpoint = await syncManager.getSnapshotCheckpoint(snapshotId);
|
|
124
130
|
|
|
125
|
-
// Resume from where we left off
|
|
126
131
|
if (checkpoint) {
|
|
132
|
+
// Resume from where we left off...
|
|
127
133
|
for await (const chunk of syncManager.resumeSnapshotStream(checkpoint)) {
|
|
128
134
|
sendToPeer(chunk);
|
|
129
135
|
}
|
|
136
|
+
// ...or abandon a transfer that will not be resumed:
|
|
137
|
+
// await syncManager.clearSnapshotCheckpoint(checkpoint.snapshotId);
|
|
130
138
|
}
|
|
131
139
|
```
|
|
132
140
|
|
|
@@ -180,9 +188,9 @@ This means concurrent updates to *different* columns of the same row both apply,
|
|
|
180
188
|
|
|
181
189
|
### Maintenance Exports
|
|
182
190
|
|
|
183
|
-
The
|
|
191
|
+
The five housekeeping sweeps (`drainHeldChanges` / `pruneQuarantine` / `pruneTombstones` / `repairChangeLog` / `evictExpiredBasisTables`) are methods on `SyncManager`; this package deliberately schedules none of them — the host arms the timer. What it does ship is the *shape* of one pass, so every host runs the same semantics:
|
|
184
192
|
|
|
185
|
-
- `runSyncMaintenancePass(target, log)` - Runs all
|
|
193
|
+
- `runSyncMaintenancePass(target, log)` - Runs all five sweeps in drain-before-prune order. Each sweep is error-isolated (a throw is reported to `log` and the remaining sweeps still run); the pass never rejects
|
|
186
194
|
- `createSyncMaintenanceTicker(getTarget, log)` - Wraps the pass with the single-flight and null-target guards a timer needs. The collapsed tick resolves immediately rather than joining the running pass — a host that must *await* the in-flight pass (to close stores at shutdown) should hold the pass promise itself
|
|
187
195
|
- `SYNC_MAINTENANCE_INTERVAL_MS` - Suggested cadence (5 minutes), sized for the one latency-sensitive sweep (`drainHeldChanges`). A host where that sweep is inert — a relay with no `getTableSchema` oracle — is free to run slower
|
|
188
196
|
- `SyncMaintenanceTarget` / `MaintenanceLogger` - The structural slice of `SyncManager` the pass calls, and the failure-reporting callback
|
|
@@ -199,7 +207,7 @@ The four housekeeping sweeps (`drainHeldChanges` / `pruneQuarantine` / `pruneTom
|
|
|
199
207
|
- `ChangeSet` - Collection of changes from one transaction
|
|
200
208
|
- `Change` (`ColumnChange | RowDeletion`) - Single column or row change
|
|
201
209
|
- `SchemaMigration` - Schema change (CREATE/ALTER/DROP TABLE)
|
|
202
|
-
- `SnapshotChunk` - Streaming snapshot data, in emission order: header, schema-migration, table-start, column-versions, table-end, tombstone, footer. All DDL precedes all table data — see docs/sync.md § Streaming Snapshot API
|
|
210
|
+
- `SnapshotChunk` - Streaming snapshot data, in emission order: header, schema-migration, table-start, column-versions, table-end, tombstone, footer. All DDL precedes all table data — see docs/sync-protocol.md § Streaming Snapshot API
|
|
203
211
|
- `ApplyResult` - Result of applying changes (applied, skipped, conflicts, transactions)
|
|
204
212
|
- `SyncConfig` / `DEFAULT_SYNC_CONFIG` - Configuration (retentionHorizonMs, allowResurrection, etc.)
|
|
205
213
|
|
package/dist/src/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* const { syncManager, syncEvents } = await createSyncModule(kv, { transactionSource: db });
|
|
21
21
|
*/
|
|
22
22
|
export { type HLC, HLCManager, compareHLC, hlcEquals, maxHLC, createHLC, deterministicTxnId, MAX_OPSEQ, serializeHLC, deserializeHLC, type SerializedHLC, hlcToJson, hlcFromJson, type SiteId, generateSiteId, siteIdToBase64, siteIdFromBase64, toBase64Url, fromBase64Url, siteIdEquals, type SiteIdentity, serializeSiteIdentity, deserializeSiteIdentity, SITE_ID_KEY, } from './clock/index.js';
|
|
23
|
-
export { type ColumnChange, type RowDeletion, type Change, type SchemaMigrationType, type SchemaMigration, type ChangeSet, type ApplyRejection, type ApplyResult, type ColumnVersionEntry, type TableSnapshot, type Snapshot, type SnapshotTombstone, type PeerSyncState, SNAPSHOT_WIRE_FORMAT_VERSION, type SnapshotChunkType, type SnapshotHeaderChunk, type SnapshotTableStartChunk, type SnapshotColumnVersionsChunk, type SnapshotTableEndChunk, type SnapshotSchemaMigrationChunk, type SnapshotFooterChunk, type SnapshotChunk, type SnapshotProgress, type ApplyToStoreOptions, type DataChangeToApply, type SchemaChangeToApply, type ApplyToStoreResult, type ApplyToStoreCallback, type ConflictContext, type ConflictResolution, type ConflictResolver, type UnknownTableDisposition, type BasisEvictionConfig, type DropLocalTableCallback, type SyncConfig, DEFAULT_SYNC_CONFIG, } from './sync/protocol.js';
|
|
23
|
+
export { type ColumnChange, type RowDeletion, type Change, type SchemaMigrationType, type SchemaObjectKind, migrationObjectKind, type SchemaMigration, type ChangeSet, type ApplyRejection, type ApplyResult, type ColumnVersionEntry, type TableSnapshot, type Snapshot, type SnapshotTombstone, type PeerSyncState, SNAPSHOT_WIRE_FORMAT_VERSION, type SnapshotChunkType, type SnapshotHeaderChunk, type SnapshotTableStartChunk, type SnapshotColumnVersionsChunk, type SnapshotTableEndChunk, type SnapshotSchemaMigrationChunk, type SnapshotFooterChunk, type SnapshotChunk, type SnapshotProgress, type ApplyToStoreOptions, type DataChangeToApply, type SchemaChangeToApply, type ApplyToStoreResult, type ApplyToStoreCallback, type ConflictContext, type ConflictResolution, type ConflictResolver, type UnknownTableDisposition, type BasisEvictionConfig, type DropLocalTableCallback, type SyncConfig, DEFAULT_SYNC_CONFIG, } from './sync/protocol.js';
|
|
24
24
|
export { PROTOCOL_VERSION, bytesToBase64, base64ToBytes, serializeHLCForTransport, deserializeHLCFromTransport, type SerializedChangeSet, type SerializedChange, type SerializedSchemaMigration, type SerializedSnapshotChunk, type SerializedSnapshotHeaderChunk, type SerializedSnapshotTableStartChunk, type SerializedSnapshotColumnVersionsChunk, type SerializedSnapshotTombstoneChunk, type SerializedSnapshotTableEndChunk, type SerializedSnapshotSchemaMigrationChunk, type SerializedSnapshotFooterChunk, type SerializedSnapshotCheckpoint, serializeChangeSet, deserializeChangeSet, serializeSnapshotChunk, deserializeSnapshotChunk, serializeSnapshotCheckpoint, deserializeSnapshotCheckpoint, type ClientMessage, type HandshakeMessage, type GetChangesMessage, type ApplyChangesMessage, type GetSnapshotMessage, type ResumeSnapshotMessage, type PingMessage, type ServerMessage, type HandshakeAckMessage, type ChangesMessage, type PushChangesMessage, type ApplyResultMessage, type SnapshotChunkMessage, type SnapshotCompleteMessage, type RequestChangesMessage, type ErrorMessage, type PongMessage, } from './sync/wire.js';
|
|
25
25
|
export { SYNC_MAINTENANCE_INTERVAL_MS, type SyncMaintenanceTarget, type MaintenanceLogger, runSyncMaintenancePass, createSyncMaintenanceTicker, } from './sync/maintenance.js';
|
|
26
26
|
export { lwwResolver, localWinsResolver, remoteWinsResolver, } from './sync/conflict-resolvers.js';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -24,7 +24,7 @@ export { HLCManager, compareHLC, hlcEquals, maxHLC, createHLC, deterministicTxnI
|
|
|
24
24
|
// Base64url encoding
|
|
25
25
|
siteIdToBase64, siteIdFromBase64, toBase64Url, fromBase64Url, siteIdEquals, serializeSiteIdentity, deserializeSiteIdentity, SITE_ID_KEY, } from './clock/index.js';
|
|
26
26
|
// Sync protocol types
|
|
27
|
-
export {
|
|
27
|
+
export { migrationObjectKind,
|
|
28
28
|
// Snapshot wire-format gate (both apply paths refuse a mismatched stamp)
|
|
29
29
|
SNAPSHOT_WIRE_FORMAT_VERSION, DEFAULT_SYNC_CONFIG, } from './sync/protocol.js';
|
|
30
30
|
// Wire protocol - shared transport/JSON layer (base64 helpers, Serialized* types,
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAe;AACf,OAAO,EAGL,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,cAAc,EAGd,SAAS,EACT,WAAW,EAGX,cAAc;AACd,qBAAqB;AACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,EAEZ,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,sBAAsB;AACtB,OAAO;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAe;AACf,OAAO,EAGL,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,cAAc,EAGd,SAAS,EACT,WAAW,EAGX,cAAc;AACd,qBAAqB;AACrB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,EAEZ,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,sBAAsB;AACtB,OAAO,EAQL,mBAAmB;AAYnB,yEAAyE;AACzE,4BAA4B,EA4B5B,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,kFAAkF;AAClF,kFAAkF;AAClF,mDAAmD;AACnD,OAAO;AACL,UAAU;AACV,gBAAgB;AAChB,iCAAiC;AACjC,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,2BAA2B;AAc3B,kBAAkB;AAClB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,6BAA6B,GAmB9B,MAAM,gBAAgB,CAAC;AAExB,8EAA8E;AAC9E,6EAA6E;AAC7E,iCAAiC;AACjC,OAAO,EACL,4BAA4B,EAG5B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,8BAA8B;AAC9B,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,4CAA4C;AAC5C,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAC;AAE3F,uEAAuE;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,mBAAmB;AACnB,OAAO,EACL,gBAAgB,GAKjB,MAAM,yBAAyB,CAAC;AAEjC,kBAAkB;AAClB,OAAO,EAYL,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB;AACnB,OAAO;AACL,eAAe;AACf,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,iCAAiC,EACjC,wBAAwB,EACxB,8BAA8B,EAI9B,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAI5B,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB;AACxB,mEAAmE;AACnE,cAAc,EACd,cAAc,EAGd,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAGpB,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,kBAAkB,EAClB,yBAAyB,EAKzB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACX,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,EACtB,gCAAgC,EAGhC,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EAKpB,kBAAkB,EAClB,qBAAqB,EACrB,4BAA4B,EAC5B,gCAAgC,EAChC,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB;AACrB,wBAAwB;AACxB,kBAAkB,EAClB,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-version.d.ts","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,KAAK,GAAG,EAAwF,MAAM,iBAAiB,CAAC;AAEjI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,QAAQ,CAAC;IAChB,EAAE,EAAE,QAAQ,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAe1D;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,UAAU,CAgBpE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,CAS1E;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAUnD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,QAAQ,CA2BnD;AAED;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,gBAAgB;IAG3C,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAIrC;;;OAGG;IACG,0BAA0B,CAC9B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAOrC;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC;IAKhB;;;;;;OAMG;IACH,qBAAqB,CACnB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,IAAI;IAKP;;OAEG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,QAAQ,EAAE,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"column-version.d.ts","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* When merging changes, the column with the higher HLC wins.
|
|
6
6
|
*/
|
|
7
7
|
import { serializeHLC, deserializeHLC, compareHLC, hlcToJson, hlcFromJson } from '../clock/hlc.js';
|
|
8
|
-
import { buildColumnVersionKey,
|
|
8
|
+
import { buildColumnVersionKey, buildColumnVersionScanBounds, encodePkIdentity, parseColumnVersionKey } from './keys.js';
|
|
9
9
|
/**
|
|
10
10
|
* Serialize a column version for storage.
|
|
11
11
|
* Format: 30 bytes HLC + JSON payload `{ v, k, pv?, ph? }`.
|
|
@@ -160,16 +160,15 @@ export class ColumnVersionStore {
|
|
|
160
160
|
async getRowVersions(schemaName, tableName, pk) {
|
|
161
161
|
const identity = this.identity(schemaName, tableName, pk);
|
|
162
162
|
const bounds = buildColumnVersionScanBounds(schemaName, tableName, identity);
|
|
163
|
-
const prefix = buildColumnVersionRowPrefix(schemaName, tableName, identity);
|
|
164
|
-
const decoder = new TextDecoder();
|
|
165
163
|
const versions = new Map();
|
|
166
164
|
for await (const entry of this.kv.iterate(bounds)) {
|
|
167
|
-
//
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
165
|
+
// Every key component is length-prefixed, so the column name comes back
|
|
166
|
+
// verbatim even when it (or the table name, or the identity) contains
|
|
167
|
+
// `:` or `.` — see `metadata/keys.ts`.
|
|
168
|
+
const parsed = parseColumnVersionKey(entry.key);
|
|
169
|
+
if (!parsed)
|
|
170
|
+
continue;
|
|
171
|
+
versions.set(parsed.column, deserializeColumnVersion(entry.value));
|
|
173
172
|
}
|
|
174
173
|
return versions;
|
|
175
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-version.js","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjI,OAAO,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"column-version.js","sourceRoot":"","sources":["../../../src/metadata/column-version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgC,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjI,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAgDzH;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,EAAiB;IACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAmC;QAC9C,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3B,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC;KAC7B,CAAC;IACF,IAAI,EAAE,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAkB;IACzD,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAmC,CAAC;IACzG,MAAM,EAAE,GAAkB,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;IACvG,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC7B,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,EAAE,CAAC,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,CAAW;IACxC,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE;YAAE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU;IACvC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,CAA4B,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;gBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,qFAAqF;QACrF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC;YACpF,CAAC,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAW,CAAC;gBAC1E,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAa,CAAC;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IAEV;IACA;IAFnB,YACmB,EAAW,EACX,MAAwB;QADxB,OAAE,GAAF,EAAE,CAAS;QACX,WAAM,GAAN,MAAM,CAAkB;IACxC,CAAC;IAEI,QAAQ,CAAC,UAAkB,EAAE,SAAiB,EAAE,EAAc;QACpE,OAAO,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc;QAEd,OAAO,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAClH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,0BAA0B,CAC9B,UAAkB,EAClB,SAAiB,EACjB,QAAgB,EAChB,MAAc;QAEd,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAC5B,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc,EACd,OAA0B;QAE1B,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3G,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;OAMG;IACH,qBAAqB,CACnB,KAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc,EACd,OAA0B;QAE1B,MAAM,GAAG,GAAG,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3G,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,SAAiB,EACjB,EAAc;QAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,4BAA4B,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;QAElD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,wEAAwE;YACxE,sEAAsE;YACtE,uCAAuC;YACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CACtB,KAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc;QAEd,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,sBAAsB,CAC1B,KAAiB,EACjB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,WAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACtE,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC7B,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YACD,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CACpB,UAAkB,EAClB,SAAiB,EACjB,EAAc,EACd,MAAc,EACd,WAAgB;QAEhB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/E,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -7,17 +7,19 @@
|
|
|
7
7
|
* tx: - Transaction records
|
|
8
8
|
* ps: - Peer sync state (received watermark: highest HLC pulled from a peer)
|
|
9
9
|
* pt: - Peer sent state (sent watermark: highest HLC pushed to a peer and acked)
|
|
10
|
-
* sm: - Schema migrations
|
|
10
|
+
* sm: - Schema migrations (keyed by object KIND as well as name — see buildSchemaMigrationKey)
|
|
11
11
|
* si: - Site identity
|
|
12
12
|
* hc: - HLC clock state
|
|
13
13
|
* cl: - Change log (HLC-indexed for efficient delta queries)
|
|
14
14
|
* qt: - Quarantine (held out-of-basis straggler changes)
|
|
15
15
|
* bl: - Basis-table lifecycle (mapped/derivation-source/unreferenced/detached bookkeeping)
|
|
16
16
|
* fv: - Sync-metadata format version (single record; see SYNC_METADATA_FORMAT_VERSION)
|
|
17
|
+
* sc: - Snapshot checkpoints (resume position of an interrupted streaming snapshot apply)
|
|
17
18
|
*/
|
|
18
19
|
import type { SqlValue } from '@quereus/quereus';
|
|
19
20
|
import { type SiteId } from '../clock/site.js';
|
|
20
21
|
import type { HLC } from '../clock/hlc.js';
|
|
22
|
+
import type { SchemaObjectKind } from '../sync/protocol.js';
|
|
21
23
|
/** Key prefix bytes for sync metadata. */
|
|
22
24
|
export declare const SYNC_KEY_PREFIX: {
|
|
23
25
|
readonly COLUMN_VERSION: Uint8Array<ArrayBuffer>;
|
|
@@ -32,18 +34,54 @@ export declare const SYNC_KEY_PREFIX: {
|
|
|
32
34
|
readonly QUARANTINE: Uint8Array<ArrayBuffer>;
|
|
33
35
|
readonly BASIS_LIFECYCLE: Uint8Array<ArrayBuffer>;
|
|
34
36
|
readonly FORMAT_VERSION: Uint8Array<ArrayBuffer>;
|
|
37
|
+
readonly SNAPSHOT_CHECKPOINT: Uint8Array<ArrayBuffer>;
|
|
35
38
|
};
|
|
36
39
|
/**
|
|
37
40
|
* Current sync-metadata storage format version, persisted under the `fv:` key.
|
|
38
41
|
*
|
|
42
|
+
* Version 5: schema migration RECORDS (`sm:` values) carry a length-prefixed
|
|
43
|
+
* `fromTable` slot between the migration type and the DDL (see
|
|
44
|
+
* `metadata/schema-migration.ts`), so a `rename_table` migration can name the
|
|
45
|
+
* table it renamed. The DDL was previously "rest of buffer", so the slot could
|
|
46
|
+
* not be appended — version-4 records are unreadable under this layout.
|
|
47
|
+
*
|
|
48
|
+
* Version 4: schema migration keys (`sm:`) carry the object KIND (`table` /
|
|
49
|
+
* `index`) alongside the object name, so a table and a same-named index no
|
|
50
|
+
* longer share one version counter and suppress each other's migrations
|
|
51
|
+
* (version 3 keyed only `(schema, name)`).
|
|
52
|
+
*
|
|
53
|
+
* Version 3: EVERY variable-length key component — schema, table, pk identity,
|
|
54
|
+
* column — is length-prefixed via {@link joinKeyParts}, so no character is
|
|
55
|
+
* reserved as a delimiter and a name containing `:` or `.` cannot shift the
|
|
56
|
+
* split (version 2 packed schema/table as `{schema}.{table}:`, which mis-parsed
|
|
57
|
+
* a table named `a:b` as table `a`) — retained in version 4.
|
|
58
|
+
*
|
|
39
59
|
* Version 2: per-row records (`cv:`/`tb:`/`cl:`) are keyed by the pk IDENTITY
|
|
40
60
|
* (collation- and semantic-transform-normalized, via {@link encodePkIdentity})
|
|
41
|
-
* and carry the raw pk in the record VALUE
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* snapshot (see docs/sync.md
|
|
61
|
+
* and carry the raw pk in the record VALUE — retained since.
|
|
62
|
+
*
|
|
63
|
+
* Older metadata is unreadable under this layout; a replica whose stored version
|
|
64
|
+
* mismatches must re-bootstrap from a peer snapshot (see docs/sync.md
|
|
65
|
+
* § Metadata format version).
|
|
45
66
|
*/
|
|
46
|
-
export declare const SYNC_METADATA_FORMAT_VERSION =
|
|
67
|
+
export declare const SYNC_METADATA_FORMAT_VERSION = 5;
|
|
68
|
+
/**
|
|
69
|
+
* Join variable-length key components, each prefixed with its own length in
|
|
70
|
+
* string code units: `{len}:{part}{len}:{part}…`.
|
|
71
|
+
*
|
|
72
|
+
* This is the ONLY encoding used for schema names, table names, pk identities
|
|
73
|
+
* and column names in metadata keys. Every one of those is arbitrary text — a
|
|
74
|
+
* quoted SQL identifier may contain `.` or `:`, and a pk identity freely
|
|
75
|
+
* contains `:` (type tags) and `\0` (member separator) — so no separator
|
|
76
|
+
* character can be reserved, and an explicit length is the only split that
|
|
77
|
+
* cannot shift. Two distinct component tuples can therefore never produce the
|
|
78
|
+
* same key.
|
|
79
|
+
*
|
|
80
|
+
* The length is in code units of the DECODED key string, which the byte
|
|
81
|
+
* encoding preserves: `TextEncoder` folds an unpaired surrogate to U+FFFD, one
|
|
82
|
+
* code unit for one code unit, and paired surrogates survive intact.
|
|
83
|
+
*/
|
|
84
|
+
export declare function joinKeyParts(...parts: string[]): string;
|
|
47
85
|
/**
|
|
48
86
|
* Per-pk-column normalization for one table, resolved once from its schema
|
|
49
87
|
* (see `metadata/pk-identity.ts`). Mirrors the engine's row-identity rule:
|
|
@@ -79,18 +117,14 @@ export declare function encodePkIdentity(pk: SqlValue[], keying: PkKeying): stri
|
|
|
79
117
|
export declare function encodeRawPkIdentity(pk: SqlValue[]): string;
|
|
80
118
|
/**
|
|
81
119
|
* Build a column version key.
|
|
82
|
-
* Format: cv:{schema}
|
|
120
|
+
* Format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
|
|
83
121
|
*
|
|
84
|
-
*
|
|
85
|
-
* it freely contains `:` (type tags) and `\0` (member separator) — no separator
|
|
86
|
-
* character is guaranteed absent, so an explicit length is the only unambiguous
|
|
87
|
-
* split between identity and column.
|
|
122
|
+
* Every component is length-prefixed — see {@link joinKeyParts}.
|
|
88
123
|
*/
|
|
89
124
|
export declare function buildColumnVersionKey(schemaName: string, tableName: string, identity: string, column: string): Uint8Array;
|
|
90
125
|
/**
|
|
91
126
|
* Build a tombstone key.
|
|
92
|
-
* Format: tb:{schema}
|
|
93
|
-
* (No length prefix — the identity is the final component.)
|
|
127
|
+
* Format: tb:{n}:{schema}{n}:{table}{n}:{identity}
|
|
94
128
|
*/
|
|
95
129
|
export declare function buildTombstoneKey(schemaName: string, tableName: string, identity: string): Uint8Array;
|
|
96
130
|
/**
|
|
@@ -117,30 +151,29 @@ export declare function buildPeerSentStateKey(siteId: SiteId): Uint8Array;
|
|
|
117
151
|
export declare function parsePeerStateKey(key: Uint8Array): SiteId | null;
|
|
118
152
|
/**
|
|
119
153
|
* Build a schema migration key.
|
|
120
|
-
* Format: sm:{schema}
|
|
154
|
+
* Format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
|
|
155
|
+
*
|
|
156
|
+
* `kind` distinguishes the two things `objectName` can be: for an index
|
|
157
|
+
* migration it is the INDEX name, for every other migration type the TABLE name.
|
|
158
|
+
* Without it a table `orders` and an index `orders` share one version counter,
|
|
159
|
+
* and a concurrent migration of one silently suppresses the other on the
|
|
160
|
+
* receiving replica.
|
|
161
|
+
*
|
|
162
|
+
* The version is fixed-width zero-padded (not length-prefixed) so migrations of
|
|
163
|
+
* one object sort by version within that object's prefix.
|
|
121
164
|
*/
|
|
122
|
-
export declare function buildSchemaMigrationKey(schemaName: string,
|
|
165
|
+
export declare function buildSchemaMigrationKey(schemaName: string, kind: SchemaObjectKind, objectName: string, version: number): Uint8Array;
|
|
123
166
|
/**
|
|
124
167
|
* Build scan bounds for all column versions of a table.
|
|
125
|
-
* Returns keys to scan cv:{schema}
|
|
168
|
+
* Returns keys to scan cv:{n}:{schema}{n}:{table}*
|
|
126
169
|
*/
|
|
127
170
|
export declare function buildTableColumnVersionScanBounds(schemaName: string, tableName: string): {
|
|
128
171
|
gte: Uint8Array;
|
|
129
172
|
lt: Uint8Array;
|
|
130
173
|
};
|
|
131
|
-
/**
|
|
132
|
-
* The key prefix shared by every column version of one row:
|
|
133
|
-
* `cv:{schema}.{table}:{identity_length}:{identity}:`.
|
|
134
|
-
*
|
|
135
|
-
* Exported so a row scan can recover each entry's column name by stripping this
|
|
136
|
-
* exact prefix, rather than splitting the key at its last `:` — the column name
|
|
137
|
-
* is the only unbounded, separator-bearing component, so only the prefix is
|
|
138
|
-
* unambiguous (see {@link parseColumnVersionKey}, which has no pk to anchor on).
|
|
139
|
-
*/
|
|
140
|
-
export declare function buildColumnVersionRowPrefix(schemaName: string, tableName: string, identity: string): string;
|
|
141
174
|
/**
|
|
142
175
|
* Build scan bounds for all column versions of a row.
|
|
143
|
-
* Returns keys to scan cv:{schema}
|
|
176
|
+
* Returns keys to scan cv:{n}:{schema}{n}:{table}{n}:{identity}*
|
|
144
177
|
*/
|
|
145
178
|
export declare function buildColumnVersionScanBounds(schemaName: string, tableName: string, identity: string): {
|
|
146
179
|
gte: Uint8Array;
|
|
@@ -154,9 +187,10 @@ export declare function buildTombstoneScanBounds(schemaName: string, tableName:
|
|
|
154
187
|
lt: Uint8Array;
|
|
155
188
|
};
|
|
156
189
|
/**
|
|
157
|
-
* Build scan bounds for all schema migrations of a table
|
|
190
|
+
* Build scan bounds for all schema migrations of one object — a table's or an
|
|
191
|
+
* index's, per `kind`. A table and a same-named index have disjoint bounds.
|
|
158
192
|
*/
|
|
159
|
-
export declare function buildSchemaMigrationScanBounds(schemaName: string,
|
|
193
|
+
export declare function buildSchemaMigrationScanBounds(schemaName: string, kind: SchemaObjectKind, objectName: string): {
|
|
160
194
|
gte: Uint8Array;
|
|
161
195
|
lt: Uint8Array;
|
|
162
196
|
};
|
|
@@ -183,12 +217,12 @@ export declare function buildAllSchemaMigrationsScanBounds(): {
|
|
|
183
217
|
};
|
|
184
218
|
/**
|
|
185
219
|
* Parse a column version key to extract components.
|
|
186
|
-
* Key format: cv:{schema}
|
|
220
|
+
* Key format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
|
|
187
221
|
*
|
|
188
222
|
* Returns the pk IDENTITY string — the identity is lossy and cannot be decoded
|
|
189
223
|
* back to values; the raw pk lives in the record VALUE (`ColumnVersion.pk`).
|
|
190
|
-
* The length
|
|
191
|
-
* what characters
|
|
224
|
+
* The per-component length prefixes make every split unambiguous regardless of
|
|
225
|
+
* what characters any component contains.
|
|
192
226
|
*/
|
|
193
227
|
export declare function parseColumnVersionKey(key: Uint8Array): {
|
|
194
228
|
schema: string;
|
|
@@ -198,7 +232,7 @@ export declare function parseColumnVersionKey(key: Uint8Array): {
|
|
|
198
232
|
} | null;
|
|
199
233
|
/**
|
|
200
234
|
* Parse a tombstone key to extract components.
|
|
201
|
-
* Key format: tb:{schema}
|
|
235
|
+
* Key format: tb:{n}:{schema}{n}:{table}{n}:{identity}
|
|
202
236
|
*
|
|
203
237
|
* Returns the pk IDENTITY string; the raw pk lives in the record VALUE
|
|
204
238
|
* (`Tombstone.pk`).
|
|
@@ -210,10 +244,14 @@ export declare function parseTombstoneKey(key: Uint8Array): {
|
|
|
210
244
|
} | null;
|
|
211
245
|
/**
|
|
212
246
|
* Parse a schema migration key to extract components.
|
|
213
|
-
* Key format: sm:{schema}
|
|
247
|
+
* Key format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
|
|
248
|
+
*
|
|
249
|
+
* `table` carries the object name whatever its kind — for an `index` key it is
|
|
250
|
+
* the index name, not the table the index is on (which the key never held).
|
|
214
251
|
*/
|
|
215
252
|
export declare function parseSchemaMigrationKey(key: Uint8Array): {
|
|
216
253
|
schema: string;
|
|
254
|
+
kind: SchemaObjectKind;
|
|
217
255
|
table: string;
|
|
218
256
|
version: number;
|
|
219
257
|
} | null;
|
|
@@ -233,11 +271,11 @@ export declare function serializeHLCForKey(hlc: HLC): Uint8Array;
|
|
|
233
271
|
export declare function deserializeHLCFromKey(buffer: Uint8Array): HLC;
|
|
234
272
|
/**
|
|
235
273
|
* Build a change log key.
|
|
236
|
-
* Format: cl:{hlc_bytes}{type_byte}{schema}
|
|
274
|
+
* Format: cl:{hlc_bytes}{type_byte}{n}:{schema}{n}:{table}{n}:{identity}[{n}:{column}]
|
|
237
275
|
*
|
|
238
276
|
* The HLC comes first to enable efficient range scans by time.
|
|
239
277
|
* type_byte: 0x01 for column change, 0x02 for delete
|
|
240
|
-
*
|
|
278
|
+
* Every text component is length-prefixed — see {@link joinKeyParts}.
|
|
241
279
|
*/
|
|
242
280
|
export declare function buildChangeLogKey(hlc: HLC, entryType: ChangeLogEntryType, schemaName: string, tableName: string, identity: string, column?: string): Uint8Array;
|
|
243
281
|
/**
|
|
@@ -268,7 +306,7 @@ export declare function parseChangeLogKey(key: Uint8Array): {
|
|
|
268
306
|
} | null;
|
|
269
307
|
/**
|
|
270
308
|
* Build a quarantine key for a held out-of-basis straggler change.
|
|
271
|
-
* Format: qt:{schema}
|
|
309
|
+
* Format: qt:{n}:{schema}{n}:{table} + hlc_bytes(30) + type_byte(1) + {n}:{raw_identity}[{n}:{column}]
|
|
272
310
|
*
|
|
273
311
|
* Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
|
|
274
312
|
* range scans by `(schema, table)` for operator inspection. The HLC + type + pk
|
|
@@ -288,7 +326,9 @@ export declare function buildQuarantineKey(schemaName: string, tableName: string
|
|
|
288
326
|
/**
|
|
289
327
|
* Build scan bounds over quarantine entries.
|
|
290
328
|
* - both `schemaName` and `tableName`: a single table's held changes.
|
|
291
|
-
* - `schemaName` only: all held changes in that schema
|
|
329
|
+
* - `schemaName` only: all held changes in that schema — `qt:{n}:{schema}` is
|
|
330
|
+
* exact, since the schema's own length prefix terminates it (a different
|
|
331
|
+
* schema differs in either that length or its text).
|
|
292
332
|
* - neither: every quarantine entry (the GC sweep).
|
|
293
333
|
*/
|
|
294
334
|
export declare function buildQuarantineScanBounds(schemaName?: string, tableName?: string): {
|
|
@@ -297,7 +337,7 @@ export declare function buildQuarantineScanBounds(schemaName?: string, tableName
|
|
|
297
337
|
};
|
|
298
338
|
/**
|
|
299
339
|
* Build a basis-table lifecycle key.
|
|
300
|
-
* Format: bl:{schema}
|
|
340
|
+
* Format: bl:{n}:{schema}{n}:{table} (both lowercased — basis relations are keyed
|
|
301
341
|
* lowercased throughout the lens deployment snapshot, so the lifecycle key
|
|
302
342
|
* matches `relationBacking` / `derivation.sourceTables` keys exactly).
|
|
303
343
|
*
|
|
@@ -315,4 +355,24 @@ export declare function buildAllBasisLifecycleScanBounds(): {
|
|
|
315
355
|
gte: Uint8Array;
|
|
316
356
|
lt: Uint8Array;
|
|
317
357
|
};
|
|
358
|
+
/**
|
|
359
|
+
* Build a snapshot checkpoint key — the resume position of one streaming
|
|
360
|
+
* snapshot apply.
|
|
361
|
+
* Format: sc:{snapshotId}
|
|
362
|
+
*
|
|
363
|
+
* Unlike `cv:` / `tb:` / `cl:`, this suffix is NOT length-prefixed and has no
|
|
364
|
+
* `parse…Key` counterpart: it is a single UUID, which cannot contain the `:`
|
|
365
|
+
* separator, so nothing can shift the split. Callers that need the id back read
|
|
366
|
+
* the `snapshotId` field of the record VALUE (see `snapshot-stream.ts`).
|
|
367
|
+
*/
|
|
368
|
+
export declare function buildSnapshotCheckpointKey(snapshotId: string): Uint8Array;
|
|
369
|
+
/**
|
|
370
|
+
* Build scan bounds over every saved snapshot checkpoint. A non-empty scan means
|
|
371
|
+
* a streaming snapshot apply cleared local metadata and never reached its footer,
|
|
372
|
+
* so this replica's data is partial (see `listSnapshotCheckpoints`).
|
|
373
|
+
*/
|
|
374
|
+
export declare function buildAllSnapshotCheckpointScanBounds(): {
|
|
375
|
+
gte: Uint8Array;
|
|
376
|
+
lt: Uint8Array;
|
|
377
|
+
};
|
|
318
378
|
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
|