@powersync/service-module-mongodb 0.0.0-dev-20260602073133 → 0.0.0-dev-20260909133214
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 +153 -5
- package/dist/api/MongoRouteAPIAdapter.d.ts +4 -2
- package/dist/api/MongoRouteAPIAdapter.js +23 -32
- package/dist/api/MongoRouteAPIAdapter.js.map +1 -1
- package/dist/common/SentinelLSN.d.ts +37 -0
- package/dist/common/SentinelLSN.js +59 -0
- package/dist/common/SentinelLSN.js.map +1 -0
- package/dist/module/MongoModule.js +2 -1
- package/dist/module/MongoModule.js.map +1 -1
- package/dist/replication/ChangeStream.d.ts +24 -0
- package/dist/replication/ChangeStream.js +203 -67
- package/dist/replication/ChangeStream.js.map +1 -1
- package/dist/replication/ChangeStreamReplicationJob.js +3 -2
- package/dist/replication/ChangeStreamReplicationJob.js.map +1 -1
- package/dist/replication/ChangeStreamReplicator.js +1 -1
- package/dist/replication/ChangeStreamReplicator.js.map +1 -1
- package/dist/replication/MongoRelation.d.ts +36 -1
- package/dist/replication/MongoRelation.js +133 -18
- package/dist/replication/MongoRelation.js.map +1 -1
- package/dist/replication/MongoSnapshotter.d.ts +9 -1
- package/dist/replication/MongoSnapshotter.js +129 -67
- package/dist/replication/MongoSnapshotter.js.map +1 -1
- package/dist/replication/RawChangeStream.d.ts +4 -1
- package/dist/replication/RawChangeStream.js +6 -10
- package/dist/replication/RawChangeStream.js.map +1 -1
- package/dist/replication/checkpoints/CheckpointImplementation.d.ts +135 -0
- package/dist/replication/checkpoints/CheckpointImplementation.js +22 -0
- package/dist/replication/checkpoints/CheckpointImplementation.js.map +1 -0
- package/dist/replication/checkpoints/SentinelCheckpointImplementation.d.ts +58 -0
- package/dist/replication/checkpoints/SentinelCheckpointImplementation.js +224 -0
- package/dist/replication/checkpoints/SentinelCheckpointImplementation.js.map +1 -0
- package/dist/replication/checkpoints/TimestampCheckpointImplementation.d.ts +27 -0
- package/dist/replication/checkpoints/TimestampCheckpointImplementation.js +116 -0
- package/dist/replication/checkpoints/TimestampCheckpointImplementation.js.map +1 -0
- package/dist/replication/checkpoints/create-checkpoint-implementation.d.ts +6 -0
- package/dist/replication/checkpoints/create-checkpoint-implementation.js +10 -0
- package/dist/replication/checkpoints/create-checkpoint-implementation.js.map +1 -0
- package/dist/replication/replication-utils.d.ts +6 -0
- package/dist/replication/replication-utils.js +19 -2
- package/dist/replication/replication-utils.js.map +1 -1
- package/dist/types/types.d.ts +7 -2
- package/dist/types/types.js +20 -2
- package/dist/types/types.js.map +1 -1
- package/package.json +11 -21
- package/src/api/MongoRouteAPIAdapter.ts +28 -39
- package/src/common/SentinelLSN.ts +78 -0
- package/src/module/MongoModule.ts +2 -1
- package/src/replication/ChangeStream.ts +223 -78
- package/src/replication/ChangeStreamReplicationJob.ts +3 -2
- package/src/replication/ChangeStreamReplicator.ts +1 -1
- package/src/replication/MongoRelation.ts +153 -21
- package/src/replication/MongoSnapshotter.ts +148 -73
- package/src/replication/RawChangeStream.ts +27 -32
- package/src/replication/checkpoints/CheckpointImplementation.ts +167 -0
- package/src/replication/checkpoints/SentinelCheckpointImplementation.ts +269 -0
- package/src/replication/checkpoints/TimestampCheckpointImplementation.ts +145 -0
- package/src/replication/checkpoints/create-checkpoint-implementation.ts +14 -0
- package/src/replication/replication-utils.ts +23 -2
- package/src/types/types.ts +27 -2
- package/test/DOCUMENTDB_TESTING.md +115 -0
- package/test/src/DatabaseType.ts +25 -0
- package/test/src/change_stream.test.ts +180 -71
- package/test/src/change_stream_utils.ts +117 -29
- package/test/src/checkpoint_retry.test.ts +134 -0
- package/test/src/config.test.ts +34 -0
- package/test/src/documentdb_helpers.test.ts +124 -0
- package/test/src/documentdb_mode.test.ts +1039 -0
- package/test/src/mongo_test.test.ts +15 -5
- package/test/src/raw_change_stream.test.ts +147 -126
- package/test/src/resume.test.ts +2 -2
- package/test/src/resume_token.test.ts +30 -0
- package/test/src/slow_tests.test.ts +4 -1
- package/test/src/test-timeouts.ts +23 -0
- package/test/src/util.ts +14 -32
- package/tsconfig.json +1 -4
- package/tsconfig.scripts.json +1 -2
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -3,13 +3,13 @@ import { container, DatabaseConnectionError, ErrorCode, ReplicationAbortedError,
|
|
|
3
3
|
import { PerformanceTracer, RelationCache, ReplicationLagTracker, SaveOperationTag } from '@powersync/service-core';
|
|
4
4
|
import { ReplicationMetric } from '@powersync/service-types';
|
|
5
5
|
import { performance } from 'node:perf_hooks';
|
|
6
|
-
import { MongoLSN } from '../common/MongoLSN.js';
|
|
7
6
|
import { PostImagesOption } from '../types/types.js';
|
|
8
7
|
import { escapeRegExp } from '../utils.js';
|
|
9
|
-
import {
|
|
8
|
+
import { createCheckpointImplementation } from './checkpoints/create-checkpoint-implementation.js';
|
|
9
|
+
import { getCacheIdentifier, getMongoRelation } from './MongoRelation.js';
|
|
10
10
|
import { MongoSnapshotter } from './MongoSnapshotter.js';
|
|
11
11
|
import { parseChangeDocument, rawChangeStream } from './RawChangeStream.js';
|
|
12
|
-
import { CHECKPOINTS_COLLECTION, timestampToDate } from './replication-utils.js';
|
|
12
|
+
import { CHECKPOINTS_COLLECTION, detectDocumentDb, timestampToDate } from './replication-utils.js';
|
|
13
13
|
import { DirectSourceRowConverter } from './SourceRowConverter.js';
|
|
14
14
|
/**
|
|
15
15
|
* Thrown when the change stream is not valid anymore, and replication
|
|
@@ -49,13 +49,30 @@ export class ChangeStream {
|
|
|
49
49
|
changeStreamTimeout;
|
|
50
50
|
storageHooks;
|
|
51
51
|
sourceRowConverter;
|
|
52
|
+
keepaliveIntervalMs;
|
|
53
|
+
isDocumentDb = false;
|
|
54
|
+
_checkpointImplementation = null;
|
|
55
|
+
/**
|
|
56
|
+
* Last persisted resume timestamp as Date.now(). This represents the equivalent timestamp from the
|
|
57
|
+
* source database, rather than the time when we persisted it.
|
|
58
|
+
*/
|
|
59
|
+
lastPersistedResumeTimestamp = 0;
|
|
60
|
+
lastBatchCheckpoint = 0;
|
|
52
61
|
constructor(options) {
|
|
53
62
|
this.storage = options.storage;
|
|
54
63
|
this.metrics = options.metrics;
|
|
55
|
-
this.group_id = options.storage.
|
|
64
|
+
this.group_id = options.storage.replicationStreamId;
|
|
56
65
|
this.connections = options.connections;
|
|
57
|
-
this.maxAwaitTimeMS = options.maxAwaitTimeMS ?? 10_000;
|
|
58
66
|
this.snapshotChunkLength = options.snapshotChunkLength ?? 6_000;
|
|
67
|
+
this.keepaliveIntervalMs = options.keepaliveIntervalMs ?? 60_000;
|
|
68
|
+
if (options.maxAwaitTimeMS) {
|
|
69
|
+
this.maxAwaitTimeMS = options.maxAwaitTimeMS;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Default to 10s, unless keepaliveIntervalMs is shorter. In that case, use keepaliveIntervalMs,
|
|
73
|
+
// but add a bit of a margin, so that our keepalive logic is triggered on each empty change stream batch.
|
|
74
|
+
this.maxAwaitTimeMS = Math.min(10_000, this.keepaliveIntervalMs + 100);
|
|
75
|
+
}
|
|
59
76
|
this.storageHooks = options.storageHooks;
|
|
60
77
|
this.client = this.connections.client;
|
|
61
78
|
this.defaultDb = this.connections.db;
|
|
@@ -66,11 +83,15 @@ export class ChangeStream {
|
|
|
66
83
|
// The change stream aggregation command should timeout before the socket times out,
|
|
67
84
|
// so we use 90% of the socket timeout value.
|
|
68
85
|
this.changeStreamTimeout = Math.ceil(this.client.options.socketTimeoutMS * 0.9);
|
|
69
|
-
|
|
86
|
+
const baseLogger = options.logger ?? this.storage.logger;
|
|
87
|
+
// Unfortunately the Winston APIs don't have a nice way to append to the prefix,
|
|
88
|
+
// so we replace it here.
|
|
89
|
+
this.logger = baseLogger.child({ prefix: `[${this.storage.replicationStreamName}] [stream] ` });
|
|
90
|
+
const snapshotLogger = baseLogger.child({ prefix: `[${this.storage.replicationStreamName}] [snapshot] ` });
|
|
70
91
|
this.snapshotter = new MongoSnapshotter({
|
|
71
92
|
...options,
|
|
72
93
|
abortSignal: this.abortSignal,
|
|
73
|
-
logger:
|
|
94
|
+
logger: snapshotLogger,
|
|
74
95
|
checkpointStreamId: this.checkpointStreamId
|
|
75
96
|
});
|
|
76
97
|
options.abort_signal.addEventListener('abort', () => {
|
|
@@ -89,6 +110,33 @@ export class ChangeStream {
|
|
|
89
110
|
get configurePostImages() {
|
|
90
111
|
return this.connections.options.postImages == PostImagesOption.AUTO_CONFIGURE;
|
|
91
112
|
}
|
|
113
|
+
/** The active checkpoint strategy. Only valid after ensureDetected(). */
|
|
114
|
+
get checkpointImplementation() {
|
|
115
|
+
if (this._checkpointImplementation == null) {
|
|
116
|
+
throw new ReplicationAssertionError('Checkpoint implementation not initialized - call ensureDetected() first');
|
|
117
|
+
}
|
|
118
|
+
return this._checkpointImplementation;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Detect DocumentDB and select the checkpoint implementation for the streaming
|
|
122
|
+
* loop. Idempotent. The snapshotter detects independently; the two coordinate
|
|
123
|
+
* through stored LSNs, not shared in-memory state.
|
|
124
|
+
*/
|
|
125
|
+
async ensureDetected() {
|
|
126
|
+
if (this._checkpointImplementation != null) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
this.isDocumentDb = await detectDocumentDb(this.defaultDb);
|
|
130
|
+
if (this.isDocumentDb) {
|
|
131
|
+
this.logger.warn('Azure DocumentDB support is in alpha. APIs and behavior may change, and long-term stability is not yet guaranteed.');
|
|
132
|
+
}
|
|
133
|
+
this._checkpointImplementation = createCheckpointImplementation(this.isDocumentDb, {
|
|
134
|
+
client: this.client,
|
|
135
|
+
db: this.defaultDb,
|
|
136
|
+
checkpointStreamId: this.checkpointStreamId,
|
|
137
|
+
logger: this.logger
|
|
138
|
+
});
|
|
139
|
+
}
|
|
92
140
|
getSourceNamespaceFilters() {
|
|
93
141
|
const sourceTables = this.sync_rules.getSourceTables();
|
|
94
142
|
let $inFilters = [
|
|
@@ -126,7 +174,15 @@ export class ChangeStream {
|
|
|
126
174
|
// For details, see:
|
|
127
175
|
// https://github.com/powersync-ja/powersync-service/pull/417
|
|
128
176
|
// https://jira.mongodb.org/browse/SERVER-114532
|
|
129
|
-
|
|
177
|
+
//
|
|
178
|
+
// DocumentDB always opens a cluster-level change stream (admin +
|
|
179
|
+
// allChangesForCluster), even in single-database mode. A coll-only filter
|
|
180
|
+
// would then match same-named collections (including _powersync_checkpoints)
|
|
181
|
+
// in other databases of the cluster, letting a foreign standalone-checkpoint
|
|
182
|
+
// event advance/resolve checkpoints against the wrong source database. So we
|
|
183
|
+
// must filter on the full namespace whenever the stream is cluster-scoped.
|
|
184
|
+
const useFullNamespaceFilter = this.isDocumentDb || multipleDatabases;
|
|
185
|
+
const nsFilter = useFullNamespaceFilter
|
|
130
186
|
? // cluster-level: filter on the entire namespace
|
|
131
187
|
{ ns: { $in: $inFilters } }
|
|
132
188
|
: // collection-level: filter on coll only
|
|
@@ -259,6 +315,7 @@ export class ChangeStream {
|
|
|
259
315
|
async replicate() {
|
|
260
316
|
let streamPromise = null;
|
|
261
317
|
let loopPromise = null;
|
|
318
|
+
let cleanupPromise = null;
|
|
262
319
|
try {
|
|
263
320
|
// If anything errors here, the entire replication process is halted, and
|
|
264
321
|
// all connections automatically closed, including this one.
|
|
@@ -276,6 +333,11 @@ export class ChangeStream {
|
|
|
276
333
|
if (!this.snapshotter.supportsConcurrentSnapshots) {
|
|
277
334
|
await Promise.race([this.snapshotter.waitForInitialSnapshot(), loopPromise]);
|
|
278
335
|
}
|
|
336
|
+
// Unlike the other two, this resolves on completion, not an indefinite loop.
|
|
337
|
+
cleanupPromise = this.cleanupStoppedSyncConfigs().catch((e) => {
|
|
338
|
+
this.abortController.abort(e);
|
|
339
|
+
throw e;
|
|
340
|
+
});
|
|
279
341
|
streamPromise = this.streamChanges()
|
|
280
342
|
.then(() => {
|
|
281
343
|
throw new ReplicationAssertionError(`Replication stream exited unexpectedly`);
|
|
@@ -284,7 +346,7 @@ export class ChangeStream {
|
|
|
284
346
|
this.abortController.abort(e);
|
|
285
347
|
throw e;
|
|
286
348
|
});
|
|
287
|
-
const results = await Promise.allSettled([loopPromise, streamPromise]);
|
|
349
|
+
const results = await Promise.allSettled([loopPromise, streamPromise, cleanupPromise]);
|
|
288
350
|
throw replicationLoopError(results);
|
|
289
351
|
}
|
|
290
352
|
catch (e) {
|
|
@@ -313,6 +375,14 @@ export class ChangeStream {
|
|
|
313
375
|
await this.snapshotter.queueSnapshotTables(result.snapshotLsn);
|
|
314
376
|
}
|
|
315
377
|
}
|
|
378
|
+
async cleanupStoppedSyncConfigs() {
|
|
379
|
+
await this.storage.cleanupStoppedSyncConfigs?.({
|
|
380
|
+
signal: this.abortSignal,
|
|
381
|
+
logger: this.logger,
|
|
382
|
+
defaultSchema: this.defaultDb.databaseName,
|
|
383
|
+
sourceConnectionTag: this.connections.connectionTag
|
|
384
|
+
});
|
|
385
|
+
}
|
|
316
386
|
async streamChanges() {
|
|
317
387
|
try {
|
|
318
388
|
await this.streamChangesInternal();
|
|
@@ -327,12 +397,16 @@ export class ChangeStream {
|
|
|
327
397
|
}
|
|
328
398
|
}
|
|
329
399
|
rawChangeStreamBatches(options) {
|
|
330
|
-
const
|
|
331
|
-
const startAfter =
|
|
332
|
-
const resumeAfter =
|
|
400
|
+
const position = options.lsn ? this.checkpointImplementation.parseResumePosition(options.lsn) : null;
|
|
401
|
+
const startAfter = position?.startAfter ?? undefined;
|
|
402
|
+
const resumeAfter = position?.resumeAfter ?? undefined;
|
|
333
403
|
const filters = options.filters;
|
|
334
404
|
let fullDocument;
|
|
335
|
-
if (this.
|
|
405
|
+
if (this.isDocumentDb) {
|
|
406
|
+
// DocumentDB does not support changeStreamPreAndPostImages, so 'required' won't work.
|
|
407
|
+
fullDocument = 'updateLookup';
|
|
408
|
+
}
|
|
409
|
+
else if (this.usePostImages) {
|
|
336
410
|
// 'read_only' or 'auto_configure'
|
|
337
411
|
// Configuration happens during snapshot, or when we see new
|
|
338
412
|
// collections.
|
|
@@ -342,41 +416,51 @@ export class ChangeStream {
|
|
|
342
416
|
fullDocument = 'updateLookup';
|
|
343
417
|
}
|
|
344
418
|
const streamOptions = {
|
|
345
|
-
showExpandedEvents: true,
|
|
346
419
|
fullDocument: fullDocument
|
|
347
420
|
};
|
|
421
|
+
if (!this.isDocumentDb) {
|
|
422
|
+
// DocumentDB does not support showExpandedEvents.
|
|
423
|
+
streamOptions.showExpandedEvents = true;
|
|
424
|
+
}
|
|
348
425
|
const pipeline = [
|
|
349
426
|
{
|
|
350
427
|
$changeStream: streamOptions
|
|
351
428
|
},
|
|
352
429
|
{
|
|
353
430
|
$match: filters.$match
|
|
354
|
-
}
|
|
355
|
-
{ $changeStreamSplitLargeEvent: {} }
|
|
431
|
+
}
|
|
356
432
|
];
|
|
433
|
+
if (!this.isDocumentDb) {
|
|
434
|
+
// DocumentDB does not support $changeStreamSplitLargeEvent.
|
|
435
|
+
pipeline.push({ $changeStreamSplitLargeEvent: {} });
|
|
436
|
+
}
|
|
357
437
|
/**
|
|
358
438
|
* Only one of these options can be supplied at a time.
|
|
359
439
|
*/
|
|
360
440
|
if (resumeAfter) {
|
|
361
441
|
streamOptions.resumeAfter = resumeAfter;
|
|
362
442
|
}
|
|
363
|
-
else {
|
|
443
|
+
else if (startAfter != null) {
|
|
364
444
|
// Legacy: We don't persist lsns without resumeTokens anymore, but we do still handle the
|
|
365
445
|
// case if we have an old one.
|
|
366
446
|
// This is also relevant for getSnapshotLSN().
|
|
447
|
+
// The sentinel implementation never produces a startAfter, and a fresh DocumentDB stream
|
|
448
|
+
// opens from "now" with neither option set.
|
|
367
449
|
streamOptions.startAtOperationTime = startAfter;
|
|
368
450
|
}
|
|
369
451
|
let watchDb;
|
|
370
|
-
if (filters.multipleDatabases) {
|
|
452
|
+
if (this.isDocumentDb || filters.multipleDatabases) {
|
|
453
|
+
// DocumentDB only supports cluster-level change streams.
|
|
371
454
|
watchDb = this.client.db('admin');
|
|
372
455
|
streamOptions.allChangesForCluster = true;
|
|
373
456
|
}
|
|
374
457
|
else {
|
|
375
458
|
watchDb = this.defaultDb;
|
|
376
459
|
}
|
|
460
|
+
const maxAwaitTimeMS = options.maxAwaitTimeMS ?? this.maxAwaitTimeMS;
|
|
377
461
|
return rawChangeStream(watchDb, pipeline, {
|
|
378
462
|
batchSize: options.batchSize ?? this.snapshotChunkLength,
|
|
379
|
-
maxAwaitTimeMS
|
|
463
|
+
maxAwaitTimeMS,
|
|
380
464
|
maxTimeMS: this.changeStreamTimeout,
|
|
381
465
|
signal: options.signal,
|
|
382
466
|
logger: this.logger,
|
|
@@ -386,31 +470,38 @@ export class ChangeStream {
|
|
|
386
470
|
rawToSqliteRow(row) {
|
|
387
471
|
return this.sourceRowConverter.rawToSqliteRow(row);
|
|
388
472
|
}
|
|
473
|
+
async createBatchCheckpoint() {
|
|
474
|
+
const checkpoint = await this.checkpointImplementation.createBatchCheckpoint();
|
|
475
|
+
this.lastBatchCheckpoint = Date.now();
|
|
476
|
+
return checkpoint;
|
|
477
|
+
}
|
|
389
478
|
async streamChangesInternal() {
|
|
479
|
+
await this.ensureDetected();
|
|
390
480
|
const transactionsReplicatedMetric = this.metrics.getCounter(ReplicationMetric.TRANSACTIONS_REPLICATED);
|
|
391
481
|
const bytesReplicatedMetric = this.metrics.getCounter(ReplicationMetric.DATA_REPLICATED_BYTES);
|
|
392
482
|
const chunksReplicatedMetric = this.metrics.getCounter(ReplicationMetric.CHUNKS_REPLICATED);
|
|
393
483
|
const tracer = new PerformanceTracer('MongoDB streaming replication');
|
|
394
484
|
await this.storage.startBatch({
|
|
395
485
|
logger: this.logger,
|
|
396
|
-
zeroLSN:
|
|
486
|
+
zeroLSN: this.checkpointImplementation.zeroLsn,
|
|
397
487
|
defaultSchema: this.defaultDb.databaseName,
|
|
398
488
|
// We get a complete postimage for every change, so we don't need to store the current data.
|
|
399
489
|
storeCurrentData: false,
|
|
400
490
|
hooks: this.storageHooks,
|
|
491
|
+
signal: this.abortSignal,
|
|
401
492
|
tracer
|
|
402
493
|
}, async (batch) => {
|
|
403
494
|
const { resumeFromLsn } = batch;
|
|
404
495
|
if (resumeFromLsn == null) {
|
|
405
496
|
throw new ReplicationAssertionError(`No LSN found to resume from`);
|
|
406
497
|
}
|
|
407
|
-
|
|
408
|
-
|
|
498
|
+
// Seed the implementation's coordinate state from the stored LSN, and parse
|
|
499
|
+
// the legacy startAfter timestamp (timestamp implementation only) for the
|
|
500
|
+
// resume-boundary dedupe guard below.
|
|
501
|
+
this.checkpointImplementation.seedPosition(resumeFromLsn);
|
|
502
|
+
const { startAfter } = this.checkpointImplementation.parseResumePosition(resumeFromLsn);
|
|
409
503
|
let outerSpan = tracer.span('batch');
|
|
410
|
-
|
|
411
|
-
// of ChangeStream events.
|
|
412
|
-
const tokenAgeSeconds = Math.round((Date.now() - timestampToDate(startAfter).getTime()) / 1000);
|
|
413
|
-
this.logger.info(`Resume streaming at ${startAfter?.inspect()} / ${lastLsn} | Token age: ${tokenAgeSeconds}s`);
|
|
504
|
+
this.checkpointImplementation.logResume(resumeFromLsn);
|
|
414
505
|
const filters = this.getSourceNamespaceFilters();
|
|
415
506
|
// This is closed when the for loop below returns/breaks/throws
|
|
416
507
|
const batchStream = this.rawChangeStreamBatches({
|
|
@@ -422,7 +513,7 @@ export class ChangeStream {
|
|
|
422
513
|
// Always start with a checkpoint.
|
|
423
514
|
// This helps us to clear errors when restarting, even if there is
|
|
424
515
|
// no data to replicate.
|
|
425
|
-
let waitForCheckpointLsn = await
|
|
516
|
+
let waitForCheckpointLsn = await this.createBatchCheckpoint();
|
|
426
517
|
let splitDocument = null;
|
|
427
518
|
let flexDbNameWorkaroundLogged = false;
|
|
428
519
|
let lastEmptyResume = performance.now();
|
|
@@ -437,25 +528,34 @@ export class ChangeStream {
|
|
|
437
528
|
}
|
|
438
529
|
this.touch();
|
|
439
530
|
if (events.length == 0) {
|
|
440
|
-
// No changes in this batch, but we still want to
|
|
531
|
+
// No changes in this batch, but we still want to persist progress.
|
|
441
532
|
// We do this by persisting a keepalive checkpoint.
|
|
442
533
|
// If we don't update it on empty events, we do keep consistency, but resuming the stream
|
|
443
534
|
// with old tokens may cause connection timeouts.
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
535
|
+
const hadRecentKeepalive = performance.now() - lastEmptyResume < this.keepaliveIntervalMs;
|
|
536
|
+
if (waitForCheckpointLsn == null && !hadRecentKeepalive) {
|
|
537
|
+
// Case 1: We have no changes, and we are not waiting for a checkpoint to be created,
|
|
538
|
+
// and we have not recently persisted a keepalive. Persist one now, and call setResumeLsn() below.
|
|
539
|
+
// This is the normal case for an idle stream.
|
|
540
|
+
// The implementation persists a keepalive (timestamp) or bumps the
|
|
541
|
+
// sentinel so a later event commits (sentinel). Logging is handled
|
|
542
|
+
// inside the implementation.
|
|
543
|
+
await this.checkpointImplementation.keepalive(batch, resumeToken);
|
|
447
544
|
this.touch();
|
|
448
545
|
lastEmptyResume = performance.now();
|
|
449
|
-
// Log the token update. This helps as a general "replication is still active" message in the logs.
|
|
450
|
-
// This token would typically be around 10s behind.
|
|
451
|
-
this.logger.info(`Idle change stream. Persisted resumeToken for ${timestampToDate(timestamp).toISOString()}`);
|
|
452
546
|
this.replicationLag.markStarted();
|
|
453
547
|
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
548
|
+
else if (hadRecentKeepalive) {
|
|
549
|
+
// Case 2: We have no changes, and may or may not be waiting for a checkpoint to be created.
|
|
550
|
+
// We have recently persisted a keepalive.
|
|
551
|
+
// Continue waiting.
|
|
457
552
|
continue;
|
|
458
553
|
}
|
|
554
|
+
else {
|
|
555
|
+
// Case 3: Waiting for a checkpoint; have not had a recent keepalive.
|
|
556
|
+
// We cannot call checkpointImplementation.keepalive() here, but we do call
|
|
557
|
+
// setResumeLsn() below.
|
|
558
|
+
}
|
|
459
559
|
}
|
|
460
560
|
this.touch();
|
|
461
561
|
for (let eventIndex = 0; eventIndex < events.length; eventIndex++) {
|
|
@@ -540,43 +640,42 @@ export class ChangeStream {
|
|
|
540
640
|
//
|
|
541
641
|
// It may be useful to also throttle commits due to standalone checkpoints in the future.
|
|
542
642
|
// However, these typically have a much lower rate than batch checkpoints, so we don't do that for now.
|
|
543
|
-
const
|
|
544
|
-
if (
|
|
643
|
+
const kind = this.checkpointImplementation.event.observe(changeDocument);
|
|
644
|
+
if (kind == 'foreign') {
|
|
645
|
+
// Another stream's barrier - ignore.
|
|
646
|
+
continue;
|
|
647
|
+
}
|
|
648
|
+
else if (kind == 'standalone') {
|
|
545
649
|
// Standalone / write checkpoint received.
|
|
546
650
|
// When we are caught up, commit immediately to keep write checkpoint latency low.
|
|
547
651
|
// Once there is already a batch checkpoint pending, or the driver has buffered more
|
|
548
652
|
// change stream events, collapse standalone checkpoints into the normal batch
|
|
549
653
|
// checkpoint flow to avoid commit churn under sustained load.
|
|
550
654
|
const hasBufferedChanges = eventIndex < events.length - 1;
|
|
551
|
-
if (waitForCheckpointLsn
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
655
|
+
if (hasBufferedChanges && waitForCheckpointLsn == null) {
|
|
656
|
+
// Buffered changes - create a new batch checkpoint to rate limit commits
|
|
657
|
+
using _ = tracer.span('source_checkpoint');
|
|
658
|
+
waitForCheckpointLsn = await this.createBatchCheckpoint();
|
|
555
659
|
continue;
|
|
556
660
|
}
|
|
661
|
+
else if (waitForCheckpointLsn != null) {
|
|
662
|
+
// Skip this checkpoint - wait for the batch checkpoint.
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
else {
|
|
666
|
+
// No buffered changes, and no batch checkpoint pending - commit immediately.
|
|
667
|
+
}
|
|
557
668
|
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
timestamp: changeDocument.clusterTime,
|
|
563
|
-
resume_token: changeDocument._id
|
|
564
|
-
});
|
|
565
|
-
if (batch.lastCheckpointLsn != null && lsn < batch.lastCheckpointLsn) {
|
|
566
|
-
// Checkpoint out of order - should never happen with MongoDB.
|
|
567
|
-
// If it does happen, we throw an error to stop the replication - restarting should recover.
|
|
568
|
-
// Since we use batch.lastCheckpointLsn for the next resumeAfter, this should not result in an infinite loop.
|
|
569
|
-
// Originally a workaround for https://jira.mongodb.org/browse/NODE-7042.
|
|
570
|
-
// This has been fixed in the driver in the meantime, but we still keep this as a safety-check.
|
|
571
|
-
throw new ReplicationAssertionError(`Change resumeToken ${changeDocument._id._data} (${timestampToDate(changeDocument.clusterTime).toISOString()}) is less than last checkpoint LSN ${batch.lastCheckpointLsn}. Restarting replication.`);
|
|
572
|
-
}
|
|
573
|
-
if (waitForCheckpointLsn != null && lsn >= waitForCheckpointLsn) {
|
|
669
|
+
// kind == 'own-barrier' falls through to commit.
|
|
670
|
+
const lsn = this.checkpointImplementation.event.lsn(changeDocument);
|
|
671
|
+
if (waitForCheckpointLsn != null &&
|
|
672
|
+
this.checkpointImplementation.event.resolvesBarrier(waitForCheckpointLsn, changeDocument)) {
|
|
574
673
|
waitForCheckpointLsn = null;
|
|
575
674
|
}
|
|
576
|
-
const { checkpointBlocked } = await batch.commit(lsn, {
|
|
675
|
+
const { checkpointBlocked, checkpointCreated } = await batch.commit(lsn, {
|
|
577
676
|
oldestUncommittedChange: this.replicationLag.oldestUncommittedChange
|
|
578
677
|
});
|
|
579
|
-
if (!checkpointBlocked) {
|
|
678
|
+
if (!checkpointBlocked || checkpointCreated) {
|
|
580
679
|
this.replicationLag.markCommitted();
|
|
581
680
|
}
|
|
582
681
|
}
|
|
@@ -585,7 +684,8 @@ export class ChangeStream {
|
|
|
585
684
|
changeDocument.operationType == 'replace' ||
|
|
586
685
|
changeDocument.operationType == 'delete') {
|
|
587
686
|
if (waitForCheckpointLsn == null) {
|
|
588
|
-
|
|
687
|
+
using _ = tracer.span('source_checkpoint');
|
|
688
|
+
waitForCheckpointLsn = await this.createBatchCheckpoint();
|
|
589
689
|
}
|
|
590
690
|
const rel = getMongoRelation(changeDocument.ns, this.connections.connectionTag);
|
|
591
691
|
const tables = await this.getRelations(batch, rel, {
|
|
@@ -597,7 +697,12 @@ export class ChangeStream {
|
|
|
597
697
|
});
|
|
598
698
|
const tablesToReplicate = tables.filter((table) => table.syncAny);
|
|
599
699
|
if (tablesToReplicate.length > 0) {
|
|
600
|
-
this.replicationLag.trackUncommittedChange(
|
|
700
|
+
this.replicationLag.trackUncommittedChange(
|
|
701
|
+
// Standard MongoDB uses clusterTime, unchanged. DocumentDB has no
|
|
702
|
+
// clusterTime, so fall back to wallTime there for the lag metric.
|
|
703
|
+
changeDocument.clusterTime != null
|
|
704
|
+
? timestampToDate(changeDocument.clusterTime)
|
|
705
|
+
: (changeDocument.wallTime ?? null));
|
|
601
706
|
const transactionKeyValue = transactionKey(changeDocument);
|
|
602
707
|
if (transactionKeyValue == null || lastTxnKey != transactionKeyValue) {
|
|
603
708
|
// Very crude metric for counting transactions replicated.
|
|
@@ -649,19 +754,27 @@ export class ChangeStream {
|
|
|
649
754
|
// Batches are generally large (64MB or 6000 events, whichever comes first),
|
|
650
755
|
// so this is a good natural point to flush and mark progress.
|
|
651
756
|
// We avoid this when splitDocument is set, since we cannot resume in the middle of a split event.
|
|
652
|
-
const {
|
|
757
|
+
const { lsn, timestamp } = this.checkpointImplementation.lsnFromResumeToken(resumeToken);
|
|
653
758
|
await batch.flush({ oldestUncommittedChange: this.replicationLag.oldestUncommittedChange });
|
|
654
759
|
// TODO: We should consider making this standard behavior of flush().
|
|
655
760
|
await batch.setResumeLsn(lsn);
|
|
761
|
+
if (timestamp != null) {
|
|
762
|
+
// Note that this timestamp provided by MongoDB is not exact - it can be around 10s behind.
|
|
763
|
+
this.lastPersistedResumeTimestamp = timestamp.getTime();
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
// DocumentDB: No timestamp associated with the resumeToken. Just use the current time.
|
|
767
|
+
this.lastPersistedResumeTimestamp = Date.now();
|
|
768
|
+
}
|
|
656
769
|
}
|
|
657
770
|
batchSpan.end();
|
|
658
|
-
const
|
|
659
|
-
const duration = batchSpan.
|
|
771
|
+
const durationsMicroseconds = outerSpan.end();
|
|
772
|
+
const duration = batchSpan.durationMillis;
|
|
660
773
|
this.logger.info(`Processed batch of ${events.length} changes / ${eventBatch.byteSize} bytes in ${duration}ms`, {
|
|
661
774
|
count: events.length,
|
|
662
775
|
bytes: eventBatch.byteSize,
|
|
663
776
|
duration,
|
|
664
|
-
t:
|
|
777
|
+
t: durationsMicroseconds
|
|
665
778
|
});
|
|
666
779
|
outerSpan = tracer.span('batch');
|
|
667
780
|
}
|
|
@@ -671,6 +784,29 @@ export class ChangeStream {
|
|
|
671
784
|
getReplicationLagMillis() {
|
|
672
785
|
return this.replicationLag.getLagMillis();
|
|
673
786
|
}
|
|
787
|
+
async keepAlive() {
|
|
788
|
+
// This is called on an interval of keepaliveIntervalMs.
|
|
789
|
+
// This writes to _powersync_checkpoints.
|
|
790
|
+
// Main use case: When there are massive bulk writes to another database or collection, the change stream may
|
|
791
|
+
// start timing out due to reading through too much data in one batch. This breaks up those bulk writes,
|
|
792
|
+
// allowing the change stream to make progress.
|
|
793
|
+
// When there is low replication traffic, regular calls to setResumeLsn() with recent resume tokens make this unnecessary.
|
|
794
|
+
// We track that using lastPersistedResumeTimestamp.
|
|
795
|
+
// We add a bit of a margin here, since setResumeLsn is not called on an exact interval.
|
|
796
|
+
const staleResumeLsn = Date.now() - this.lastPersistedResumeTimestamp > this.keepaliveIntervalMs * 1.1;
|
|
797
|
+
// When there is replication lag, that resumeToken can get too outdated. In that case, we periodically create a
|
|
798
|
+
// new back checkpoint. This interval is controlled by the frequency of the keepAlive() call,
|
|
799
|
+
// while also skipping if there was another call to createBatchCheckpoint().
|
|
800
|
+
// We use a factor of 0.9 here, to make sure this is called on every keepAlive() interval, unless there
|
|
801
|
+
// was another call to createBatchCheckpoint().
|
|
802
|
+
const staleBatchCheckpoint = Date.now() - this.lastBatchCheckpoint > this.keepaliveIntervalMs * 0.9;
|
|
803
|
+
// We don't use oldestUncommittedChange here, since that may be unset in some edge cases where we do need
|
|
804
|
+
// to persist new checkpoints.
|
|
805
|
+
if (staleResumeLsn && staleBatchCheckpoint) {
|
|
806
|
+
await this.ensureDetected();
|
|
807
|
+
await this.createBatchCheckpoint();
|
|
808
|
+
}
|
|
809
|
+
}
|
|
674
810
|
lastTouchedAt = performance.now();
|
|
675
811
|
touch() {
|
|
676
812
|
if (performance.now() - this.lastTouchedAt > 1_000) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangeStream.js","sourceRoot":"","sources":["../../src/replication/ChangeStream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChangeStream.js","sourceRoot":"","sources":["../../src/replication/ChangeStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export class ChangeStreamReplicationJob extends replication.AbstractReplicationJ
|
|
|
14
14
|
// Nothing needed here
|
|
15
15
|
}
|
|
16
16
|
async keepAlive() {
|
|
17
|
-
|
|
17
|
+
await this.lastStream?.keepAlive();
|
|
18
18
|
}
|
|
19
19
|
async replicate() {
|
|
20
20
|
try {
|
|
@@ -34,7 +34,7 @@ export class ChangeStreamReplicationJob extends replication.AbstractReplicationJ
|
|
|
34
34
|
}
|
|
35
35
|
if (e instanceof ChangeStreamInvalidatedError) {
|
|
36
36
|
// This stops replication and restarts with a new instance
|
|
37
|
-
await this.options.storage.factory.restartReplication(this.storage.
|
|
37
|
+
await this.options.storage.factory.restartReplication(this.storage.replicationStreamId);
|
|
38
38
|
}
|
|
39
39
|
// No need to rethrow - the error is already logged, and retry behavior is the same on error
|
|
40
40
|
}
|
|
@@ -57,6 +57,7 @@ export class ChangeStreamReplicationJob extends replication.AbstractReplicationJ
|
|
|
57
57
|
storage: this.options.storage,
|
|
58
58
|
metrics: this.options.metrics,
|
|
59
59
|
connections: connectionManager,
|
|
60
|
+
keepaliveIntervalMs: connectionManager.options.heartbeat_interval_seconds * 1_000,
|
|
60
61
|
logger: this.logger
|
|
61
62
|
});
|
|
62
63
|
this.lastStream = stream;
|