@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.
Files changed (77) hide show
  1. package/CHANGELOG.md +153 -5
  2. package/dist/api/MongoRouteAPIAdapter.d.ts +4 -2
  3. package/dist/api/MongoRouteAPIAdapter.js +23 -32
  4. package/dist/api/MongoRouteAPIAdapter.js.map +1 -1
  5. package/dist/common/SentinelLSN.d.ts +37 -0
  6. package/dist/common/SentinelLSN.js +59 -0
  7. package/dist/common/SentinelLSN.js.map +1 -0
  8. package/dist/module/MongoModule.js +2 -1
  9. package/dist/module/MongoModule.js.map +1 -1
  10. package/dist/replication/ChangeStream.d.ts +24 -0
  11. package/dist/replication/ChangeStream.js +203 -67
  12. package/dist/replication/ChangeStream.js.map +1 -1
  13. package/dist/replication/ChangeStreamReplicationJob.js +3 -2
  14. package/dist/replication/ChangeStreamReplicationJob.js.map +1 -1
  15. package/dist/replication/ChangeStreamReplicator.js +1 -1
  16. package/dist/replication/ChangeStreamReplicator.js.map +1 -1
  17. package/dist/replication/MongoRelation.d.ts +36 -1
  18. package/dist/replication/MongoRelation.js +133 -18
  19. package/dist/replication/MongoRelation.js.map +1 -1
  20. package/dist/replication/MongoSnapshotter.d.ts +9 -1
  21. package/dist/replication/MongoSnapshotter.js +129 -67
  22. package/dist/replication/MongoSnapshotter.js.map +1 -1
  23. package/dist/replication/RawChangeStream.d.ts +4 -1
  24. package/dist/replication/RawChangeStream.js +6 -10
  25. package/dist/replication/RawChangeStream.js.map +1 -1
  26. package/dist/replication/checkpoints/CheckpointImplementation.d.ts +135 -0
  27. package/dist/replication/checkpoints/CheckpointImplementation.js +22 -0
  28. package/dist/replication/checkpoints/CheckpointImplementation.js.map +1 -0
  29. package/dist/replication/checkpoints/SentinelCheckpointImplementation.d.ts +58 -0
  30. package/dist/replication/checkpoints/SentinelCheckpointImplementation.js +224 -0
  31. package/dist/replication/checkpoints/SentinelCheckpointImplementation.js.map +1 -0
  32. package/dist/replication/checkpoints/TimestampCheckpointImplementation.d.ts +27 -0
  33. package/dist/replication/checkpoints/TimestampCheckpointImplementation.js +116 -0
  34. package/dist/replication/checkpoints/TimestampCheckpointImplementation.js.map +1 -0
  35. package/dist/replication/checkpoints/create-checkpoint-implementation.d.ts +6 -0
  36. package/dist/replication/checkpoints/create-checkpoint-implementation.js +10 -0
  37. package/dist/replication/checkpoints/create-checkpoint-implementation.js.map +1 -0
  38. package/dist/replication/replication-utils.d.ts +6 -0
  39. package/dist/replication/replication-utils.js +19 -2
  40. package/dist/replication/replication-utils.js.map +1 -1
  41. package/dist/types/types.d.ts +7 -2
  42. package/dist/types/types.js +20 -2
  43. package/dist/types/types.js.map +1 -1
  44. package/package.json +11 -21
  45. package/src/api/MongoRouteAPIAdapter.ts +28 -39
  46. package/src/common/SentinelLSN.ts +78 -0
  47. package/src/module/MongoModule.ts +2 -1
  48. package/src/replication/ChangeStream.ts +223 -78
  49. package/src/replication/ChangeStreamReplicationJob.ts +3 -2
  50. package/src/replication/ChangeStreamReplicator.ts +1 -1
  51. package/src/replication/MongoRelation.ts +153 -21
  52. package/src/replication/MongoSnapshotter.ts +148 -73
  53. package/src/replication/RawChangeStream.ts +27 -32
  54. package/src/replication/checkpoints/CheckpointImplementation.ts +167 -0
  55. package/src/replication/checkpoints/SentinelCheckpointImplementation.ts +269 -0
  56. package/src/replication/checkpoints/TimestampCheckpointImplementation.ts +145 -0
  57. package/src/replication/checkpoints/create-checkpoint-implementation.ts +14 -0
  58. package/src/replication/replication-utils.ts +23 -2
  59. package/src/types/types.ts +27 -2
  60. package/test/DOCUMENTDB_TESTING.md +115 -0
  61. package/test/src/DatabaseType.ts +25 -0
  62. package/test/src/change_stream.test.ts +180 -71
  63. package/test/src/change_stream_utils.ts +117 -29
  64. package/test/src/checkpoint_retry.test.ts +134 -0
  65. package/test/src/config.test.ts +34 -0
  66. package/test/src/documentdb_helpers.test.ts +124 -0
  67. package/test/src/documentdb_mode.test.ts +1039 -0
  68. package/test/src/mongo_test.test.ts +15 -5
  69. package/test/src/raw_change_stream.test.ts +147 -126
  70. package/test/src/resume.test.ts +2 -2
  71. package/test/src/resume_token.test.ts +30 -0
  72. package/test/src/slow_tests.test.ts +4 -1
  73. package/test/src/test-timeouts.ts +23 -0
  74. package/test/src/util.ts +14 -32
  75. package/tsconfig.json +1 -4
  76. package/tsconfig.scripts.json +1 -2
  77. 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 { createCheckpoint, getCacheIdentifier, getMongoRelation, STANDALONE_CHECKPOINT_ID } from './MongoRelation.js';
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.group_id;
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
- this.logger = options.logger ?? this.storage.logger;
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: this.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
- const nsFilter = multipleDatabases
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 lastLsn = options.lsn ? MongoLSN.fromSerialized(options.lsn) : null;
331
- const startAfter = lastLsn?.timestamp;
332
- const resumeAfter = lastLsn?.resumeToken;
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.usePostImages) {
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: options.maxAwaitTimeMS ?? this.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: MongoLSN.ZERO.comparable,
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
- const lastLsn = MongoLSN.fromSerialized(resumeFromLsn);
408
- const startAfter = lastLsn?.timestamp;
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
- // It is normal for this to be a minute or two old when there is a low volume
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 createCheckpoint(this.client, this.defaultDb, this.checkpointStreamId);
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 keep the connection alive.
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
- if (waitForCheckpointLsn == null && performance.now() - lastEmptyResume > 60_000) {
445
- const { comparable: lsn, timestamp } = MongoLSN.fromResumeToken(resumeToken);
446
- await batch.keepalive(lsn);
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
- // If we have no changes, we can just persist the keepalive.
455
- // This is throttled to once per minute.
456
- if (performance.now() - lastEmptyResume < 60_000) {
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 checkpointId = changeDocument.documentKey._id;
544
- if (checkpointId == STANDALONE_CHECKPOINT_ID) {
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 != null || hasBufferedChanges) {
552
- if (waitForCheckpointLsn == null) {
553
- waitForCheckpointLsn = await createCheckpoint(this.client, this.defaultDb, this.checkpointStreamId);
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
- else if (!this.checkpointStreamId.equals(checkpointId)) {
559
- continue;
560
- }
561
- const { comparable: lsn } = new MongoLSN({
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
- waitForCheckpointLsn = await createCheckpoint(this.client, this.defaultDb, this.checkpointStreamId);
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(changeDocument.clusterTime == null ? null : timestampToDate(changeDocument.clusterTime));
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 { comparable: lsn } = MongoLSN.fromResumeToken(resumeToken);
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 durations = outerSpan.end();
659
- const duration = batchSpan.endAt - batchSpan.startAt;
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: durations
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
- // Nothing needed here
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.group_id);
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;