@powersync/service-module-mssql 0.0.0-dev-20260313100403 → 0.0.0-dev-20260515144844
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +91 -6
- package/dist/api/MSSQLRouteAPIAdapter.d.ts +2 -2
- package/dist/api/MSSQLRouteAPIAdapter.js +3 -3
- package/dist/api/MSSQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/CaptureInstance.d.ts +14 -0
- package/dist/common/CaptureInstance.js +2 -0
- package/dist/common/CaptureInstance.js.map +1 -0
- package/dist/common/MSSQLSourceTable.d.ts +16 -14
- package/dist/common/MSSQLSourceTable.js +35 -16
- package/dist/common/MSSQLSourceTable.js.map +1 -1
- package/dist/common/MSSQLSourceTableCache.js.map +1 -1
- package/dist/common/mssqls-to-sqlite.d.ts +1 -1
- package/dist/common/mssqls-to-sqlite.js +1 -1
- package/dist/common/mssqls-to-sqlite.js.map +1 -1
- package/dist/module/MSSQLModule.js +4 -4
- package/dist/module/MSSQLModule.js.map +1 -1
- package/dist/replication/CDCPoller.d.ts +45 -23
- package/dist/replication/CDCPoller.js +201 -61
- package/dist/replication/CDCPoller.js.map +1 -1
- package/dist/replication/CDCReplicationJob.d.ts +2 -2
- package/dist/replication/CDCReplicationJob.js +12 -4
- package/dist/replication/CDCReplicationJob.js.map +1 -1
- package/dist/replication/CDCReplicator.d.ts +2 -3
- package/dist/replication/CDCReplicator.js +1 -24
- package/dist/replication/CDCReplicator.js.map +1 -1
- package/dist/replication/CDCStream.d.ts +39 -16
- package/dist/replication/CDCStream.js +195 -102
- package/dist/replication/CDCStream.js.map +1 -1
- package/dist/replication/MSSQLConnectionManager.d.ts +1 -1
- package/dist/replication/MSSQLConnectionManager.js +17 -6
- package/dist/replication/MSSQLConnectionManager.js.map +1 -1
- package/dist/replication/MSSQLConnectionManagerFactory.d.ts +1 -1
- package/dist/replication/MSSQLConnectionManagerFactory.js.map +1 -1
- package/dist/replication/MSSQLSnapshotQuery.d.ts +1 -1
- package/dist/replication/MSSQLSnapshotQuery.js +2 -2
- package/dist/replication/MSSQLSnapshotQuery.js.map +1 -1
- package/dist/types/types.d.ts +4 -56
- package/dist/types/types.js +5 -24
- package/dist/types/types.js.map +1 -1
- package/dist/utils/deadlock.d.ts +9 -0
- package/dist/utils/deadlock.js +40 -0
- package/dist/utils/deadlock.js.map +1 -0
- package/dist/utils/mssql.d.ts +36 -18
- package/dist/utils/mssql.js +102 -100
- package/dist/utils/mssql.js.map +1 -1
- package/dist/utils/schema.d.ts +9 -0
- package/dist/utils/schema.js +34 -0
- package/dist/utils/schema.js.map +1 -1
- package/package.json +14 -14
- package/src/api/MSSQLRouteAPIAdapter.ts +4 -4
- package/src/common/CaptureInstance.ts +15 -0
- package/src/common/MSSQLSourceTable.ts +33 -24
- package/src/common/MSSQLSourceTableCache.ts +1 -1
- package/src/common/mssqls-to-sqlite.ts +1 -1
- package/src/module/MSSQLModule.ts +4 -4
- package/src/replication/CDCPoller.ts +275 -75
- package/src/replication/CDCReplicationJob.ts +13 -6
- package/src/replication/CDCReplicator.ts +2 -28
- package/src/replication/CDCStream.ts +265 -124
- package/src/replication/MSSQLConnectionManager.ts +17 -7
- package/src/replication/MSSQLConnectionManagerFactory.ts +1 -1
- package/src/replication/MSSQLSnapshotQuery.ts +3 -3
- package/src/types/types.ts +5 -28
- package/src/utils/deadlock.ts +44 -0
- package/src/utils/mssql.ts +163 -128
- package/src/utils/schema.ts +44 -1
- package/test/src/CDCStream.test.ts +7 -7
- package/test/src/CDCStreamTestContext.ts +14 -8
- package/test/src/CDCStream_resumable_snapshot.test.ts +6 -6
- package/test/src/LSN.test.ts +1 -1
- package/test/src/mssql-to-sqlite.test.ts +25 -17
- package/test/src/schema-changes.test.ts +474 -0
- package/test/src/util.ts +79 -22
- package/test/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { container, DatabaseConnectionError,
|
|
2
|
-
import { getUuidReplicaIdentityBson, storage } from '@powersync/service-core';
|
|
1
|
+
import { container, DatabaseConnectionError, logger as defaultLogger, ErrorCode, ReplicationAbortedError, ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
+
import { getUuidReplicaIdentityBson, ReplicationLagTracker, storage } from '@powersync/service-core';
|
|
3
3
|
import { ReplicationMetric } from '@powersync/service-types';
|
|
4
|
-
import { BatchedSnapshotQuery, SimpleSnapshotQuery } from './MSSQLSnapshotQuery.js';
|
|
5
|
-
import { getReplicationIdentityColumns, getTablesFromPattern } from '../utils/schema.js';
|
|
6
|
-
import { checkSourceConfiguration, createCheckpoint, getCaptureInstance, getLatestLSN, getLatestReplicatedLSN, isIColumnMetadata, isTableEnabledForCDC, isWithinRetentionThreshold, toQualifiedTableName } from '../utils/mssql.js';
|
|
7
4
|
import sql from 'mssql';
|
|
8
|
-
import { CDCToSqliteRow, toSqliteInputRow } from '../common/mssqls-to-sqlite.js';
|
|
9
5
|
import { LSN } from '../common/LSN.js';
|
|
6
|
+
import { CDCToSqliteRow, toSqliteInputRow } from '../common/mssqls-to-sqlite.js';
|
|
10
7
|
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
11
8
|
import { MSSQLSourceTableCache } from '../common/MSSQLSourceTableCache.js';
|
|
12
|
-
import {
|
|
9
|
+
import { checkRetentionThresholds, checkSourceConfiguration, createCheckpoint, getCaptureInstances, getLatestLSN, getLatestReplicatedLSN, isIColumnMetadata } from '../utils/mssql.js';
|
|
10
|
+
import { getReplicationIdentityColumns, getTablesFromPattern } from '../utils/schema.js';
|
|
11
|
+
import { CDCPoller, SchemaChangeType } from './CDCPoller.js';
|
|
12
|
+
import { BatchedSnapshotQuery, SimpleSnapshotQuery } from './MSSQLSnapshotQuery.js';
|
|
13
13
|
export var SnapshotStatus;
|
|
14
14
|
(function (SnapshotStatus) {
|
|
15
|
-
SnapshotStatus["
|
|
15
|
+
SnapshotStatus["INITIAL"] = "initial";
|
|
16
|
+
SnapshotStatus["RESUME"] = "resume";
|
|
16
17
|
SnapshotStatus["DONE"] = "done";
|
|
17
|
-
SnapshotStatus["
|
|
18
|
+
SnapshotStatus["LIMITED_RESNAPSHOT"] = "limited-resnapshot";
|
|
18
19
|
})(SnapshotStatus || (SnapshotStatus = {}));
|
|
19
20
|
export class CDCConfigurationError extends Error {
|
|
20
21
|
constructor(message) {
|
|
@@ -41,16 +42,7 @@ export class CDCStream {
|
|
|
41
42
|
abortSignal;
|
|
42
43
|
logger;
|
|
43
44
|
tableCache = new MSSQLSourceTableCache();
|
|
44
|
-
|
|
45
|
-
* Time of the oldest uncommitted change, according to the source db.
|
|
46
|
-
* This is used to determine the replication lag.
|
|
47
|
-
*/
|
|
48
|
-
oldestUncommittedChange = null;
|
|
49
|
-
/**
|
|
50
|
-
* Keep track of whether we have done a commit or keepalive yet.
|
|
51
|
-
* We can only compute replication lag if isStartingReplication == false, or oldestUncommittedChange is present.
|
|
52
|
-
*/
|
|
53
|
-
isStartingReplication = true;
|
|
45
|
+
replicationLag = new ReplicationLagTracker();
|
|
54
46
|
constructor(options) {
|
|
55
47
|
this.options = options;
|
|
56
48
|
this.logger = options.logger ?? defaultLogger;
|
|
@@ -65,6 +57,9 @@ export class CDCStream {
|
|
|
65
57
|
get stopped() {
|
|
66
58
|
return this.abortSignal.aborted;
|
|
67
59
|
}
|
|
60
|
+
get isStartingReplication() {
|
|
61
|
+
return this.replicationLag.isStartingReplication;
|
|
62
|
+
}
|
|
68
63
|
get defaultSchema() {
|
|
69
64
|
return this.connections.schema;
|
|
70
65
|
}
|
|
@@ -108,13 +103,10 @@ export class CDCStream {
|
|
|
108
103
|
logger: this.logger,
|
|
109
104
|
zeroLSN: LSN.ZERO,
|
|
110
105
|
defaultSchema: this.defaultSchema,
|
|
111
|
-
storeCurrentData:
|
|
106
|
+
storeCurrentData: false
|
|
112
107
|
}, async (batch) => {
|
|
113
108
|
for (let tablePattern of sourceTables) {
|
|
114
|
-
|
|
115
|
-
for (const table of tables) {
|
|
116
|
-
this.tableCache.set(table);
|
|
117
|
-
}
|
|
109
|
+
await this.getQualifiedTableNames(batch, tablePattern);
|
|
118
110
|
}
|
|
119
111
|
});
|
|
120
112
|
}
|
|
@@ -122,18 +114,11 @@ export class CDCStream {
|
|
|
122
114
|
if (tablePattern.connectionTag != this.connections.connectionTag) {
|
|
123
115
|
return [];
|
|
124
116
|
}
|
|
117
|
+
const captureInstances = await getCaptureInstances({ connectionManager: this.connections });
|
|
125
118
|
const matchedTables = await getTablesFromPattern(this.connections, tablePattern);
|
|
126
119
|
const tables = [];
|
|
127
120
|
for (const matchedTable of matchedTables) {
|
|
128
|
-
const
|
|
129
|
-
connectionManager: this.connections,
|
|
130
|
-
table: matchedTable.name,
|
|
131
|
-
schema: matchedTable.schema
|
|
132
|
-
});
|
|
133
|
-
if (!isEnabled) {
|
|
134
|
-
this.logger.info(`Skipping ${matchedTable.schema}.${matchedTable.name} - table is not enabled for CDC.`);
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
121
|
+
const captureInstanceDetails = captureInstances.get(matchedTable.objectId);
|
|
137
122
|
// TODO: Check RLS settings for table
|
|
138
123
|
const replicaIdColumns = await getReplicationIdentityColumns({
|
|
139
124
|
connectionManager: this.connections,
|
|
@@ -145,12 +130,12 @@ export class CDCStream {
|
|
|
145
130
|
schema: matchedTable.schema,
|
|
146
131
|
objectId: matchedTable.objectId,
|
|
147
132
|
replicaIdColumns: replicaIdColumns.columns
|
|
148
|
-
}, false);
|
|
133
|
+
}, captureInstanceDetails?.instances[0] ?? null, false);
|
|
149
134
|
tables.push(table);
|
|
150
135
|
}
|
|
151
136
|
return tables;
|
|
152
137
|
}
|
|
153
|
-
async processTable(batch, table, snapshot) {
|
|
138
|
+
async processTable(batch, table, captureInstance, snapshot) {
|
|
154
139
|
if (!table.objectId && typeof table.objectId != 'number') {
|
|
155
140
|
throw new ReplicationAssertionError(`objectId expected, got ${typeof table.objectId}`);
|
|
156
141
|
}
|
|
@@ -161,35 +146,25 @@ export class CDCStream {
|
|
|
161
146
|
entity_descriptor: table,
|
|
162
147
|
sync_rules: this.syncRules
|
|
163
148
|
});
|
|
164
|
-
const
|
|
165
|
-
connectionManager: this.connections,
|
|
166
|
-
tableName: resolved.table.name,
|
|
167
|
-
schema: resolved.table.schema
|
|
168
|
-
});
|
|
149
|
+
const resolvedTable = new MSSQLSourceTable(resolved.table);
|
|
169
150
|
if (!captureInstance) {
|
|
170
|
-
|
|
151
|
+
this.logger.warn(`Missing capture instance for table ${resolvedTable.toQualifiedName()}. This table will not be replicated until CDC is enabled for it.`);
|
|
171
152
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
153
|
+
else {
|
|
154
|
+
resolvedTable.setCaptureInstance(captureInstance);
|
|
155
|
+
}
|
|
156
|
+
this.tableCache.set(resolvedTable);
|
|
176
157
|
// Drop conflicting tables. This includes for example renamed tables.
|
|
177
158
|
await batch.drop(resolved.dropTables);
|
|
178
159
|
// Snapshot if:
|
|
179
|
-
// 1.
|
|
180
|
-
// 2.
|
|
181
|
-
|
|
182
|
-
const shouldSnapshot = snapshot && !resolved.table.snapshotComplete && resolved.table.syncAny;
|
|
160
|
+
// 1. The table is in the sync config and snapshot is requested, or not already done.
|
|
161
|
+
// 2. AND the table is enabled for CDC with a valid capture instance.
|
|
162
|
+
const shouldSnapshot = snapshot && !resolved.table.snapshotComplete && resolved.table.syncAny && resolvedTable.enabledForCDC();
|
|
183
163
|
if (shouldSnapshot) {
|
|
184
164
|
// Truncate this table in case a previous snapshot was interrupted.
|
|
185
165
|
await batch.truncate([resolved.table]);
|
|
186
166
|
// Start the snapshot inside a transaction.
|
|
187
|
-
|
|
188
|
-
await this.snapshotTableInTx(batch, resolvedTable);
|
|
189
|
-
}
|
|
190
|
-
finally {
|
|
191
|
-
// TODO Cleanup?
|
|
192
|
-
}
|
|
167
|
+
await this.snapshotTableInTx(batch, resolvedTable);
|
|
193
168
|
}
|
|
194
169
|
return resolvedTable;
|
|
195
170
|
}
|
|
@@ -217,6 +192,7 @@ export class CDCStream {
|
|
|
217
192
|
// Side note: A ROLLBACK would probably also be fine here, since we only read in this transaction.
|
|
218
193
|
await transaction.commit();
|
|
219
194
|
const [updatedSourceTable] = await batch.markTableSnapshotDone([table.sourceTable], postSnapshotLSN.toString());
|
|
195
|
+
this.logger.info(`Snapshot of ${table.toQualifiedName()} completed. Post-snapshot LSN: ${postSnapshotLSN.toString()}`);
|
|
220
196
|
this.tableCache.updateSourceTable(updatedSourceTable);
|
|
221
197
|
}
|
|
222
198
|
catch (e) {
|
|
@@ -237,15 +213,15 @@ export class CDCStream {
|
|
|
237
213
|
const orderByKey = table.sourceTable.replicaIdColumns[0];
|
|
238
214
|
query = new BatchedSnapshotQuery(transaction, table, this.snapshotBatchSize, table.sourceTable.snapshotStatus?.lastKey ?? null);
|
|
239
215
|
if (table.sourceTable.snapshotStatus?.lastKey != null) {
|
|
240
|
-
this.logger.info(`
|
|
216
|
+
this.logger.info(`Snapshotting ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()} - resuming from ${orderByKey.name} > ${query.lastKey}`);
|
|
241
217
|
}
|
|
242
218
|
else {
|
|
243
|
-
this.logger.info(`
|
|
219
|
+
this.logger.info(`Snapshotting ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()} - resumable`);
|
|
244
220
|
}
|
|
245
221
|
}
|
|
246
222
|
else {
|
|
247
223
|
// Fallback case - query the entire table
|
|
248
|
-
this.logger.info(`
|
|
224
|
+
this.logger.info(`Snapshotting ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()} - not resumable`);
|
|
249
225
|
query = new SimpleSnapshotQuery(transaction, table);
|
|
250
226
|
replicatedCount = 0;
|
|
251
227
|
}
|
|
@@ -305,7 +281,6 @@ export class CDCStream {
|
|
|
305
281
|
totalEstimatedCount: totalEstimatedCount
|
|
306
282
|
});
|
|
307
283
|
this.tableCache.updateSourceTable(updatedSourceTable);
|
|
308
|
-
this.logger.info(`Replicating ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()}`);
|
|
309
284
|
if (this.abortSignal.aborted) {
|
|
310
285
|
// We only abort after flushing
|
|
311
286
|
throw new ReplicationAbortedError(`Initial replication interrupted`);
|
|
@@ -314,6 +289,9 @@ export class CDCStream {
|
|
|
314
289
|
if (batchReplicatedCount < this.snapshotBatchSize) {
|
|
315
290
|
hasRemainingData = false;
|
|
316
291
|
}
|
|
292
|
+
else {
|
|
293
|
+
this.logger.info(`Snapshotting ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()}`);
|
|
294
|
+
}
|
|
317
295
|
}
|
|
318
296
|
}
|
|
319
297
|
/**
|
|
@@ -337,12 +315,7 @@ export class CDCStream {
|
|
|
337
315
|
* and starts again from scratch.
|
|
338
316
|
*/
|
|
339
317
|
async startInitialReplication(snapshotStatus) {
|
|
340
|
-
let { status, snapshotLSN } = snapshotStatus;
|
|
341
|
-
if (status === SnapshotStatus.RESTART_REQUIRED) {
|
|
342
|
-
this.logger.info(`Snapshot restart required, clearing state.`);
|
|
343
|
-
// This happens if the last replicated checkpoint LSN is no longer available in the CDC tables.
|
|
344
|
-
await this.storage.clear({ signal: this.abortSignal });
|
|
345
|
-
}
|
|
318
|
+
let { status, snapshotLSN, specificTablesToResnapshot } = snapshotStatus;
|
|
346
319
|
await this.storage.startBatch({
|
|
347
320
|
logger: this.logger,
|
|
348
321
|
zeroLSN: LSN.ZERO,
|
|
@@ -350,15 +323,26 @@ export class CDCStream {
|
|
|
350
323
|
storeCurrentData: false,
|
|
351
324
|
skipExistingRows: true
|
|
352
325
|
}, async (batch) => {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
326
|
+
switch (status) {
|
|
327
|
+
case SnapshotStatus.INITIAL:
|
|
328
|
+
// First replication attempt - set the snapshot LSN to the current LSN before starting
|
|
329
|
+
snapshotLSN = (await getLatestReplicatedLSN(this.connections)).toString();
|
|
330
|
+
await batch.setResumeLsn(snapshotLSN);
|
|
331
|
+
const latestLSN = (await getLatestLSN(this.connections)).toString();
|
|
332
|
+
this.logger.info(`Marking snapshot at ${snapshotLSN}, Latest DB LSN ${latestLSN}.`);
|
|
333
|
+
break;
|
|
334
|
+
case SnapshotStatus.RESUME:
|
|
335
|
+
this.logger.info(`Resuming snapshot at ${snapshotLSN}.`);
|
|
336
|
+
break;
|
|
337
|
+
case SnapshotStatus.LIMITED_RESNAPSHOT:
|
|
338
|
+
for (const table of specificTablesToResnapshot) {
|
|
339
|
+
await batch.drop([table.sourceTable]);
|
|
340
|
+
// Update table in the table cache
|
|
341
|
+
await this.processTable(batch, table.sourceTable, table.captureInstance, false);
|
|
342
|
+
}
|
|
343
|
+
break;
|
|
344
|
+
default:
|
|
345
|
+
throw new ReplicationAssertionError(`Unsupported snapshot status: ${status}`);
|
|
362
346
|
}
|
|
363
347
|
const tablesToSnapshot = [];
|
|
364
348
|
for (const table of this.tableCache.getAll()) {
|
|
@@ -366,13 +350,16 @@ export class CDCStream {
|
|
|
366
350
|
this.logger.info(`Skipping table [${table.toQualifiedName()}] - snapshot already done.`);
|
|
367
351
|
continue;
|
|
368
352
|
}
|
|
353
|
+
if (!table.enabledForCDC()) {
|
|
354
|
+
this.logger.info(`Skipping table [${table.toQualifiedName()}] - not enabled for CDC.`);
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
369
357
|
const count = await this.estimatedCountNumber(table);
|
|
370
358
|
const updatedSourceTable = await batch.updateTableProgress(table.sourceTable, {
|
|
371
359
|
totalEstimatedCount: count
|
|
372
360
|
});
|
|
373
361
|
this.tableCache.updateSourceTable(updatedSourceTable);
|
|
374
362
|
tablesToSnapshot.push(table);
|
|
375
|
-
this.logger.info(`To replicate: ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()}`);
|
|
376
363
|
}
|
|
377
364
|
for (const table of tablesToSnapshot) {
|
|
378
365
|
await this.snapshotTableInTx(batch, table);
|
|
@@ -383,7 +370,12 @@ export class CDCStream {
|
|
|
383
370
|
const postSnapshotLSN = await getLatestLSN(this.connections);
|
|
384
371
|
await batch.markAllSnapshotDone(postSnapshotLSN.toString());
|
|
385
372
|
await batch.commit(snapshotLSN);
|
|
386
|
-
|
|
373
|
+
if (tablesToSnapshot.length > 0) {
|
|
374
|
+
this.logger.info(`All snapshots done. Need to replicate from ${snapshotLSN} to ${postSnapshotLSN} to be consistent.`);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.logger.info(`No tables to snapshot. Need to replicate from ${snapshotLSN}.`);
|
|
378
|
+
}
|
|
387
379
|
});
|
|
388
380
|
}
|
|
389
381
|
async initReplication() {
|
|
@@ -396,6 +388,9 @@ export class CDCStream {
|
|
|
396
388
|
if (snapshotStatus.status !== SnapshotStatus.DONE) {
|
|
397
389
|
await this.startInitialReplication(snapshotStatus);
|
|
398
390
|
}
|
|
391
|
+
else {
|
|
392
|
+
this.logger.info(`Initial replication already done`);
|
|
393
|
+
}
|
|
399
394
|
}
|
|
400
395
|
/**
|
|
401
396
|
* Checks if the initial sync has already been completed and if updates from the last checkpoint are still available
|
|
@@ -404,23 +399,44 @@ export class CDCStream {
|
|
|
404
399
|
async checkSnapshotStatus() {
|
|
405
400
|
const status = await this.storage.getStatus();
|
|
406
401
|
if (status.snapshot_done && status.checkpoint_lsn) {
|
|
402
|
+
const additionalTablesToSnapshot = new Set();
|
|
403
|
+
const newTables = this.tableCache.getAll().filter((table) => !table.sourceTable.snapshotComplete);
|
|
404
|
+
if (newTables.length > 0) {
|
|
405
|
+
this.logger.info(`Detected new table(s) [${newTables.map((table) => table.toQualifiedName()).join(', ')}] that have not been snapshotted yet.`);
|
|
406
|
+
newTables.forEach((table) => additionalTablesToSnapshot.add(table));
|
|
407
|
+
}
|
|
407
408
|
// Snapshot is done, but we still need to check that the last known checkpoint LSN is still
|
|
408
|
-
// within the threshold of the CDC tables
|
|
409
|
-
this.logger.info(`Initial replication already done`);
|
|
409
|
+
// within the retention threshold of the CDC tables
|
|
410
410
|
const lastCheckpointLSN = LSN.fromString(status.checkpoint_lsn);
|
|
411
411
|
// Check that the CDC tables still have valid data
|
|
412
|
-
const
|
|
412
|
+
const tablesOutsideRetentionThreshold = await checkRetentionThresholds({
|
|
413
413
|
checkpointLSN: lastCheckpointLSN,
|
|
414
414
|
tables: this.tableCache.getAll(),
|
|
415
415
|
connectionManager: this.connections
|
|
416
416
|
});
|
|
417
|
-
if (
|
|
418
|
-
this.logger.warn(`Updates from the last checkpoint are no longer available in the CDC
|
|
417
|
+
if (tablesOutsideRetentionThreshold.length > 0) {
|
|
418
|
+
this.logger.warn(`Updates from the last checkpoint are no longer available in the CDC instances of the following table(s): ${tablesOutsideRetentionThreshold.map((table) => table.toQualifiedName()).join(', ')}.`);
|
|
419
|
+
tablesOutsideRetentionThreshold.forEach((table) => additionalTablesToSnapshot.add(table));
|
|
420
|
+
}
|
|
421
|
+
if (additionalTablesToSnapshot.size > 0) {
|
|
422
|
+
return {
|
|
423
|
+
status: SnapshotStatus.LIMITED_RESNAPSHOT,
|
|
424
|
+
snapshotLSN: status.checkpoint_lsn,
|
|
425
|
+
specificTablesToResnapshot: Array.from(additionalTablesToSnapshot)
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
return {
|
|
430
|
+
status: SnapshotStatus.DONE,
|
|
431
|
+
snapshotLSN: null
|
|
432
|
+
};
|
|
419
433
|
}
|
|
420
|
-
return { status: isAvailable ? SnapshotStatus.DONE : SnapshotStatus.RESTART_REQUIRED, snapshotLSN: null };
|
|
421
434
|
}
|
|
422
435
|
else {
|
|
423
|
-
return {
|
|
436
|
+
return {
|
|
437
|
+
status: status.snapshot_lsn != null ? SnapshotStatus.RESUME : SnapshotStatus.INITIAL,
|
|
438
|
+
snapshotLSN: status.snapshot_lsn
|
|
439
|
+
};
|
|
424
440
|
}
|
|
425
441
|
}
|
|
426
442
|
async streamChanges() {
|
|
@@ -435,15 +451,16 @@ export class CDCStream {
|
|
|
435
451
|
throw new ReplicationAssertionError(`No LSN found to resume replication from.`);
|
|
436
452
|
}
|
|
437
453
|
const startLSN = LSN.fromString(batch.resumeFromLsn);
|
|
438
|
-
const sourceTables = this.tableCache.getAll();
|
|
439
454
|
const eventHandler = this.createEventHandler(batch);
|
|
440
455
|
const poller = new CDCPoller({
|
|
441
456
|
connectionManager: this.connections,
|
|
442
457
|
eventHandler,
|
|
443
|
-
|
|
458
|
+
getReplicatedTables: () => this.tableCache.getAll(),
|
|
459
|
+
sourceTables: this.syncRules.getSourceTables(),
|
|
444
460
|
startLSN,
|
|
445
461
|
logger: this.logger,
|
|
446
|
-
additionalConfig: this.options.additionalConfig
|
|
462
|
+
additionalConfig: this.options.additionalConfig,
|
|
463
|
+
schemaCheckIntervalMs: this.options.schemaCheckIntervalMs
|
|
447
464
|
});
|
|
448
465
|
this.abortSignal.addEventListener('abort', async () => {
|
|
449
466
|
await poller.stop();
|
|
@@ -493,17 +510,95 @@ export class CDCStream {
|
|
|
493
510
|
this.metrics.getCounter(ReplicationMetric.ROWS_REPLICATED).add(1);
|
|
494
511
|
},
|
|
495
512
|
onCommit: async (lsn, transactionCount) => {
|
|
496
|
-
const { checkpointBlocked } = await batch.commit(lsn
|
|
513
|
+
const { checkpointBlocked } = await batch.commit(lsn, {
|
|
514
|
+
oldestUncommittedChange: this.replicationLag.oldestUncommittedChange
|
|
515
|
+
});
|
|
497
516
|
this.metrics.getCounter(ReplicationMetric.TRANSACTIONS_REPLICATED).add(transactionCount);
|
|
498
517
|
if (!checkpointBlocked) {
|
|
499
|
-
this.
|
|
518
|
+
this.replicationLag.markCommitted();
|
|
500
519
|
}
|
|
501
520
|
},
|
|
502
|
-
onSchemaChange: async () => {
|
|
503
|
-
|
|
521
|
+
onSchemaChange: async (schemaChange) => {
|
|
522
|
+
await this.handleSchemaChange(batch, schemaChange);
|
|
504
523
|
}
|
|
505
524
|
};
|
|
506
525
|
}
|
|
526
|
+
async handleSchemaChange(batch, change) {
|
|
527
|
+
let actionedSchemaChange = true;
|
|
528
|
+
switch (change.type) {
|
|
529
|
+
case SchemaChangeType.TABLE_RENAME:
|
|
530
|
+
const fromTable = change.table;
|
|
531
|
+
this.logger.info(`Table ${fromTable.toQualifiedName()} has been renamed ${change.newTable ? `to [${change.newTable.name}].` : '.'}`);
|
|
532
|
+
// Old table needs to be cleaned up
|
|
533
|
+
await batch.drop([fromTable.sourceTable]);
|
|
534
|
+
this.tableCache.delete(fromTable.objectId);
|
|
535
|
+
if (change.newTable) {
|
|
536
|
+
await this.handleCreateOrUpdateTable(batch, change.newTable, change.newCaptureInstance);
|
|
537
|
+
}
|
|
538
|
+
break;
|
|
539
|
+
case SchemaChangeType.TABLE_CREATE:
|
|
540
|
+
await this.handleCreateOrUpdateTable(batch, change.newTable, change.newCaptureInstance);
|
|
541
|
+
break;
|
|
542
|
+
case SchemaChangeType.TABLE_COLUMN_CHANGES:
|
|
543
|
+
await this.handleColumnChanges(change.table, change.newCaptureInstance);
|
|
544
|
+
actionedSchemaChange = false;
|
|
545
|
+
break;
|
|
546
|
+
case SchemaChangeType.NEW_CAPTURE_INSTANCE:
|
|
547
|
+
this.logger.info(`New CDC capture instance detected for table ${change.table.toQualifiedName()}. Re-snapshotting table...`);
|
|
548
|
+
await batch.drop([change.table.sourceTable]);
|
|
549
|
+
this.tableCache.delete(change.table.objectId);
|
|
550
|
+
await this.handleCreateOrUpdateTable(batch, change.table.sourceTable, change.newCaptureInstance);
|
|
551
|
+
break;
|
|
552
|
+
case SchemaChangeType.TABLE_DROP:
|
|
553
|
+
await batch.drop([change.table.sourceTable]);
|
|
554
|
+
this.tableCache.delete(change.table.objectId);
|
|
555
|
+
break;
|
|
556
|
+
case SchemaChangeType.MISSING_CAPTURE_INSTANCE:
|
|
557
|
+
// Stop replication for this table until CDC is re-enabled.
|
|
558
|
+
this.logger.warn(`Table ${change.table.toQualifiedName()} has been disabled for CDC. Re-enable CDC to continue replication.`);
|
|
559
|
+
change.table.clearCaptureInstance();
|
|
560
|
+
actionedSchemaChange = false;
|
|
561
|
+
break;
|
|
562
|
+
default:
|
|
563
|
+
throw new ReplicationAssertionError(`Unknown schema change type: ${change.type}`);
|
|
564
|
+
}
|
|
565
|
+
// Create a new checkpoint after the schema change
|
|
566
|
+
if (actionedSchemaChange) {
|
|
567
|
+
await createCheckpoint(this.connections);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
async handleCreateOrUpdateTable(batch, table, captureInstance) {
|
|
571
|
+
const replicaIdColumns = await getReplicationIdentityColumns({
|
|
572
|
+
connectionManager: this.connections,
|
|
573
|
+
tableName: table.name,
|
|
574
|
+
schema: table.schema
|
|
575
|
+
});
|
|
576
|
+
await this.processTable(batch, {
|
|
577
|
+
name: table.name,
|
|
578
|
+
schema: table.schema,
|
|
579
|
+
objectId: table.objectId,
|
|
580
|
+
replicaIdColumns: replicaIdColumns.columns
|
|
581
|
+
}, captureInstance, true);
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* There is very little that can be automatically done to handle the column changes other than to warn the user about the schema drift.
|
|
585
|
+
*
|
|
586
|
+
* Due to the way CDC works, users are prevented from making column schema changes that affect the replication identities of a table.
|
|
587
|
+
* If changes like that are required, CDC has to be disabled and re-enabled for the table. This would then be handled by the detection of the new
|
|
588
|
+
* capture instance.
|
|
589
|
+
* @param table
|
|
590
|
+
* @param captureInstance
|
|
591
|
+
*/
|
|
592
|
+
async handleColumnChanges(table, captureInstance) {
|
|
593
|
+
// Check there are any new pending schema changes
|
|
594
|
+
if (table.captureInstance?.objectId === captureInstance.objectId &&
|
|
595
|
+
table.captureInstance?.pendingSchemaChanges.length === captureInstance.pendingSchemaChanges.length) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
// New pending schema changes were detected - warn about those as well.
|
|
599
|
+
this.logger.warn(`Schema drift detected for table ${table.toQualifiedName()}. To ensure consistency, disable and re-enable CDC for this table.\n Pending schema changes:\n ${captureInstance.pendingSchemaChanges.join(', \n')}`);
|
|
600
|
+
table.captureInstance = captureInstance;
|
|
601
|
+
}
|
|
507
602
|
/**
|
|
508
603
|
* Convert CDC row data to SqliteRow format.
|
|
509
604
|
* CDC rows include table columns plus CDC metadata columns (__$operation, __$start_lsn, etc.).
|
|
@@ -513,23 +608,21 @@ export class CDCStream {
|
|
|
513
608
|
const inputRow = CDCToSqliteRow({ row, columns });
|
|
514
609
|
return this.syncRules.applyRowContext(inputRow);
|
|
515
610
|
}
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
if (this.isStartingReplication) {
|
|
519
|
-
// We don't have anything to compute replication lag with yet.
|
|
520
|
-
return undefined;
|
|
521
|
-
}
|
|
522
|
-
else {
|
|
523
|
-
// We don't have any uncommitted changes, so replication is up-to-date.
|
|
524
|
-
return 0;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
return Date.now() - this.oldestUncommittedChange.getTime();
|
|
611
|
+
getReplicationLagMillis() {
|
|
612
|
+
return this.replicationLag.getLagMillis();
|
|
528
613
|
}
|
|
529
614
|
touch() {
|
|
530
615
|
container.probes.touch().catch((e) => {
|
|
531
616
|
this.logger.error(`Error touching probe`, e);
|
|
532
617
|
});
|
|
533
618
|
}
|
|
619
|
+
/**
|
|
620
|
+
* Creates an update in the source database to ensure regular checkpoints via the CDC
|
|
621
|
+
*/
|
|
622
|
+
async keepAlive() {
|
|
623
|
+
if (!this.replicationLag.isStartingReplication && !this.stopped) {
|
|
624
|
+
await createCheckpoint(this.connections);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
534
627
|
}
|
|
535
628
|
//# sourceMappingURL=CDCStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CDCStream.js","sourceRoot":"","sources":["../../src/replication/CDCStream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CDCStream.js","sourceRoot":"","sources":["../../src/replication/CDCStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseObserver } from '@powersync/lib-services-framework';
|
|
2
2
|
import sql from 'mssql';
|
|
3
|
-
import { NormalizedMSSQLConnectionConfig } from '../types/types.js';
|
|
4
3
|
import { MSSQLParameter } from '../types/mssql-data-types.js';
|
|
4
|
+
import { NormalizedMSSQLConnectionConfig } from '../types/types.js';
|
|
5
5
|
export declare const DEFAULT_SCHEMA = "dbo";
|
|
6
6
|
export interface MSSQLConnectionManagerListener {
|
|
7
7
|
onEnded(): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BaseObserver, logger } from '@powersync/lib-services-framework';
|
|
2
|
-
import sql from 'mssql';
|
|
3
2
|
import { POWERSYNC_VERSION } from '@powersync/service-core';
|
|
3
|
+
import sql from 'mssql';
|
|
4
4
|
import { addParameters } from '../utils/mssql.js';
|
|
5
5
|
export const DEFAULT_SCHEMA = 'dbo';
|
|
6
6
|
export class MSSQLConnectionManager extends BaseObserver {
|
|
@@ -69,13 +69,24 @@ export class MSSQLConnectionManager extends BaseObserver {
|
|
|
69
69
|
}
|
|
70
70
|
async execute(procedure, parameters) {
|
|
71
71
|
await this.ensureConnected();
|
|
72
|
-
let
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
request =
|
|
72
|
+
for (let tries = 2;; tries--) {
|
|
73
|
+
try {
|
|
74
|
+
logger.debug(`Executing procedure: ${procedure}`);
|
|
75
|
+
let request = this.pool.request();
|
|
76
|
+
if (parameters) {
|
|
77
|
+
if (parameters) {
|
|
78
|
+
request = addParameters(request, parameters);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return request.execute(procedure);
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
if (tries == 1) {
|
|
85
|
+
throw e;
|
|
86
|
+
}
|
|
87
|
+
logger.warn(`Error executing stored procedure: ${procedure}, retrying..`, e);
|
|
76
88
|
}
|
|
77
89
|
}
|
|
78
|
-
return request.execute(procedure);
|
|
79
90
|
}
|
|
80
91
|
async end() {
|
|
81
92
|
if (this.pool.connected) {
|