@powersync/service-module-mongodb 0.0.0-dev-20250724093011 → 0.0.0-dev-20250724111728

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 CHANGED
@@ -1,6 +1,10 @@
1
1
  # @powersync/service-module-mongodb
2
2
 
3
- ## 0.0.0-dev-20250724093011
3
+ ## 0.0.0-dev-20250724111728
4
+
5
+ ### Minor Changes
6
+
7
+ - d56eeb9: Delay switching over to new sync rules until we have a consistent checkpoint.
4
8
 
5
9
  ### Patch Changes
6
10
 
@@ -8,11 +12,12 @@
8
12
  - Updated dependencies [f1d187b]
9
13
  - Updated dependencies [4ebc3bf]
10
14
  - Updated dependencies [1aafdaf]
15
+ - Updated dependencies [d56eeb9]
11
16
  - Updated dependencies [a700ec9]
12
- - @powersync/service-core@0.0.0-dev-20250724093011
13
- - @powersync/service-types@0.0.0-dev-20250724093011
14
- - @powersync/lib-services-framework@0.0.0-dev-20250724093011
15
- - @powersync/lib-service-mongodb@0.0.0-dev-20250724093011
17
+ - @powersync/service-core@0.0.0-dev-20250724111728
18
+ - @powersync/service-types@0.0.0-dev-20250724111728
19
+ - @powersync/lib-services-framework@0.0.0-dev-20250724111728
20
+ - @powersync/lib-service-mongodb@0.0.0-dev-20250724111728
16
21
 
17
22
  ## 0.10.4
18
23
 
@@ -75,7 +75,15 @@ export declare class ChangeStream {
75
75
  initSlot(): Promise<InitResult>;
76
76
  estimatedCount(table: storage.SourceTable): Promise<string>;
77
77
  estimatedCountNumber(table: storage.SourceTable): Promise<number>;
78
+ /**
79
+ * This gets a LSN before starting a snapshot, which we can resume streaming from after the snapshot.
80
+ *
81
+ * This LSN can survive initial replication restarts.
82
+ */
78
83
  private getSnapshotLsn;
84
+ /**
85
+ * Given a snapshot LSN, validate that we can read from it, by opening a change stream.
86
+ */
79
87
  private validateSnapshotLsn;
80
88
  initialReplication(snapshotLsn: string | null): Promise<void>;
81
89
  private setupCheckpointsCollection;
@@ -96,5 +104,7 @@ export declare class ChangeStream {
96
104
  private openChangeStream;
97
105
  streamChangesInternal(): Promise<void>;
98
106
  getReplicationLagMillis(): Promise<number | undefined>;
107
+ private lastTouchedAt;
108
+ private touch;
99
109
  }
100
110
  export {};
@@ -178,6 +178,11 @@ export class ChangeStream {
178
178
  const db = this.client.db(table.schema);
179
179
  return await db.collection(table.table).estimatedDocumentCount();
180
180
  }
181
+ /**
182
+ * This gets a LSN before starting a snapshot, which we can resume streaming from after the snapshot.
183
+ *
184
+ * This LSN can survive initial replication restarts.
185
+ */
181
186
  async getSnapshotLsn() {
182
187
  const env_1 = { stack: [], error: void 0, hasError: false };
183
188
  try {
@@ -246,6 +251,9 @@ export class ChangeStream {
246
251
  await result_1;
247
252
  }
248
253
  }
254
+ /**
255
+ * Given a snapshot LSN, validate that we can read from it, by opening a change stream.
256
+ */
249
257
  async validateSnapshotLsn(lsn) {
250
258
  const env_2 = { stack: [], error: void 0, hasError: false };
251
259
  try {
@@ -284,7 +292,7 @@ export class ChangeStream {
284
292
  if (snapshotLsn == null) {
285
293
  // First replication attempt - get a snapshot and store the timestamp
286
294
  snapshotLsn = await this.getSnapshotLsn();
287
- await batch.setSnapshotLsn(snapshotLsn);
295
+ await batch.setResumeLsn(snapshotLsn);
288
296
  this.logger.info(`Marking snapshot at ${snapshotLsn}`);
289
297
  }
290
298
  else {
@@ -317,10 +325,17 @@ export class ChangeStream {
317
325
  for (let table of tablesWithStatus) {
318
326
  await this.snapshotTable(batch, table);
319
327
  await batch.markSnapshotDone([table], MongoLSN.ZERO.comparable);
320
- await touch();
328
+ this.touch();
321
329
  }
322
- this.logger.info(`Snapshot commit at ${snapshotLsn}`);
330
+ // The checkpoint here is a marker - we need to replicate up to at least this
331
+ // point before the data can be considered consistent.
332
+ // We could do this for each individual table, but may as well just do it once for the entire snapshot.
333
+ const checkpoint = await createCheckpoint(this.client, this.defaultDb, STANDALONE_CHECKPOINT_ID);
334
+ await batch.markSnapshotDone([], checkpoint);
335
+ // This will not create a consistent checkpoint yet, but will persist the op.
336
+ // Actual checkpoint will be created when streaming replication caught up.
323
337
  await batch.commit(snapshotLsn);
338
+ this.logger.info(`Snapshot done. Need to replicate from ${snapshotLsn} to ${checkpoint} to be consistent`);
324
339
  });
325
340
  }
326
341
  async setupCheckpointsCollection() {
@@ -436,7 +451,7 @@ export class ChangeStream {
436
451
  const duration = performance.now() - lastBatch;
437
452
  lastBatch = performance.now();
438
453
  this.logger.info(`Replicating ${table.qualifiedName} ${table.formatSnapshotProgress()} in ${duration.toFixed(0)}ms`);
439
- await touch();
454
+ this.touch();
440
455
  }
441
456
  // In case the loop was interrupted, make sure we await the last promise.
442
457
  await nextChunkPromise;
@@ -669,24 +684,26 @@ export class ChangeStream {
669
684
  };
670
685
  }
671
686
  async streamChangesInternal() {
672
- // Auto-activate as soon as initial replication is done
673
- await this.storage.autoActivate();
674
687
  await this.storage.startBatch({
675
688
  logger: this.logger,
676
689
  zeroLSN: MongoLSN.ZERO.comparable,
677
690
  defaultSchema: this.defaultDb.databaseName,
691
+ // We get a complete postimage for every change, so we don't need to store the current data.
678
692
  storeCurrentData: false
679
693
  }, async (batch) => {
680
694
  const env_4 = { stack: [], error: void 0, hasError: false };
681
695
  try {
682
- const { lastCheckpointLsn } = batch;
683
- const lastLsn = MongoLSN.fromSerialized(lastCheckpointLsn);
696
+ const { resumeFromLsn } = batch;
697
+ if (resumeFromLsn == null) {
698
+ throw new ReplicationAssertionError(`No LSN found to resume from`);
699
+ }
700
+ const lastLsn = MongoLSN.fromSerialized(resumeFromLsn);
684
701
  const startAfter = lastLsn?.timestamp;
685
702
  // It is normal for this to be a minute or two old when there is a low volume
686
703
  // of ChangeStream events.
687
704
  const tokenAgeSeconds = Math.round((Date.now() - timestampToDate(startAfter).getTime()) / 1000);
688
705
  this.logger.info(`Resume streaming at ${startAfter?.inspect()} / ${lastLsn} | Token age: ${tokenAgeSeconds}s`);
689
- const streamManager = __addDisposableResource(env_4, this.openChangeStream({ lsn: lastCheckpointLsn }), true);
706
+ const streamManager = __addDisposableResource(env_4, this.openChangeStream({ lsn: resumeFromLsn }), true);
690
707
  const { stream, filters } = streamManager;
691
708
  if (this.abort_signal.aborted) {
692
709
  await stream.close();
@@ -698,6 +715,7 @@ export class ChangeStream {
698
715
  let waitForCheckpointLsn = await createCheckpoint(this.client, this.defaultDb, this.checkpointStreamId);
699
716
  let splitDocument = null;
700
717
  let flexDbNameWorkaroundLogged = false;
718
+ let changesSinceLastCheckpoint = 0;
701
719
  let lastEmptyResume = performance.now();
702
720
  while (true) {
703
721
  if (this.abort_signal.aborted) {
@@ -727,7 +745,7 @@ export class ChangeStream {
727
745
  if (waitForCheckpointLsn == null && performance.now() - lastEmptyResume > 60_000) {
728
746
  const { comparable: lsn, timestamp } = MongoLSN.fromResumeToken(stream.resumeToken);
729
747
  await batch.keepalive(lsn);
730
- await touch();
748
+ this.touch();
731
749
  lastEmptyResume = performance.now();
732
750
  // Log the token update. This helps as a general "replication is still active" message in the logs.
733
751
  // This token would typically be around 10s behind.
@@ -736,7 +754,7 @@ export class ChangeStream {
736
754
  }
737
755
  continue;
738
756
  }
739
- await touch();
757
+ this.touch();
740
758
  if (startAfter != null && originalChangeDocument.clusterTime?.lte(startAfter)) {
741
759
  continue;
742
760
  }
@@ -836,6 +854,7 @@ export class ChangeStream {
836
854
  if (didCommit) {
837
855
  this.oldestUncommittedChange = null;
838
856
  this.isStartingReplication = false;
857
+ changesSinceLastCheckpoint = 0;
839
858
  }
840
859
  }
841
860
  else if (changeDocument.operationType == 'insert' ||
@@ -857,7 +876,21 @@ export class ChangeStream {
857
876
  if (this.oldestUncommittedChange == null && changeDocument.clusterTime != null) {
858
877
  this.oldestUncommittedChange = timestampToDate(changeDocument.clusterTime);
859
878
  }
860
- await this.writeChange(batch, table, changeDocument);
879
+ const flushResult = await this.writeChange(batch, table, changeDocument);
880
+ changesSinceLastCheckpoint += 1;
881
+ if (flushResult != null && changesSinceLastCheckpoint >= 20_000) {
882
+ // When we are catching up replication after an initial snapshot, there may be a very long delay
883
+ // before we do a commit(). In that case, we need to periodically persist the resume LSN, so
884
+ // we don't restart from scratch if we restart replication.
885
+ // The same could apply if we need to catch up on replication after some downtime.
886
+ const { comparable: lsn } = new MongoLSN({
887
+ timestamp: changeDocument.clusterTime,
888
+ resume_token: changeDocument._id
889
+ });
890
+ this.logger.info(`Updating resume LSN to ${lsn} after ${changesSinceLastCheckpoint} changes`);
891
+ await batch.setResumeLsn(lsn);
892
+ changesSinceLastCheckpoint = 0;
893
+ }
861
894
  }
862
895
  }
863
896
  else if (changeDocument.operationType == 'drop') {
@@ -916,12 +949,16 @@ export class ChangeStream {
916
949
  }
917
950
  return Date.now() - this.oldestUncommittedChange.getTime();
918
951
  }
919
- }
920
- async function touch() {
921
- // FIXME: The hosted Kubernetes probe does not actually check the timestamp on this.
922
- // FIXME: We need a timeout of around 5+ minutes in Kubernetes if we do start checking the timestamp,
923
- // or reduce PING_INTERVAL here.
924
- return container.probes.touch();
952
+ lastTouchedAt = performance.now();
953
+ touch() {
954
+ if (performance.now() - this.lastTouchedAt > 1_000) {
955
+ this.lastTouchedAt = performance.now();
956
+ // Update the probes, but don't wait for it
957
+ container.probes.touch().catch((e) => {
958
+ this.logger.error(`Failed to touch the container probe: ${e.message}`, e);
959
+ });
960
+ }
961
+ }
925
962
  }
926
963
  function mapChangeStreamError(e) {
927
964
  if (isMongoNetworkTimeoutError(e)) {
@@ -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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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@powersync/service-module-mongodb",
3
3
  "repository": "https://github.com/powersync-ja/powersync-service",
4
4
  "types": "dist/index.d.ts",
5
- "version": "0.0.0-dev-20250724093011",
5
+ "version": "0.0.0-dev-20250724111728",
6
6
  "main": "dist/index.js",
7
7
  "license": "FSL-1.1-Apache-2.0",
8
8
  "type": "module",
@@ -25,17 +25,17 @@
25
25
  "bson": "^6.10.3",
26
26
  "ts-codec": "^1.3.0",
27
27
  "uuid": "^11.1.0",
28
- "@powersync/lib-service-mongodb": "0.0.0-dev-20250724093011",
29
- "@powersync/lib-services-framework": "0.0.0-dev-20250724093011",
30
- "@powersync/service-core": "0.0.0-dev-20250724093011",
31
- "@powersync/service-types": "0.0.0-dev-20250724093011",
28
+ "@powersync/lib-service-mongodb": "0.0.0-dev-20250724111728",
29
+ "@powersync/lib-services-framework": "0.0.0-dev-20250724111728",
30
+ "@powersync/service-core": "0.0.0-dev-20250724111728",
31
+ "@powersync/service-types": "0.0.0-dev-20250724111728",
32
32
  "@powersync/service-jsonbig": "0.17.10",
33
33
  "@powersync/service-sync-rules": "0.27.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@powersync/service-core-tests": "0.0.0-dev-20250724093011",
37
- "@powersync/service-module-mongodb-storage": "0.0.0-dev-20250724093011",
38
- "@powersync/service-module-postgres-storage": "0.0.0-dev-20250724093011"
36
+ "@powersync/service-core-tests": "0.0.0-dev-20250724111728",
37
+ "@powersync/service-module-mongodb-storage": "0.0.0-dev-20250724111728",
38
+ "@powersync/service-module-postgres-storage": "0.0.0-dev-20250724111728"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b",
@@ -218,6 +218,11 @@ export class ChangeStream {
218
218
  return await db.collection(table.table).estimatedDocumentCount();
219
219
  }
220
220
 
221
+ /**
222
+ * This gets a LSN before starting a snapshot, which we can resume streaming from after the snapshot.
223
+ *
224
+ * This LSN can survive initial replication restarts.
225
+ */
221
226
  private async getSnapshotLsn(): Promise<string> {
222
227
  const hello = await this.defaultDb.command({ hello: 1 });
223
228
  // Basic sanity check
@@ -292,6 +297,9 @@ export class ChangeStream {
292
297
  );
293
298
  }
294
299
 
300
+ /**
301
+ * Given a snapshot LSN, validate that we can read from it, by opening a change stream.
302
+ */
295
303
  private async validateSnapshotLsn(lsn: string) {
296
304
  await using streamManager = this.openChangeStream({ lsn: lsn, maxAwaitTimeMs: 0 });
297
305
  const { stream } = streamManager;
@@ -321,7 +329,7 @@ export class ChangeStream {
321
329
  if (snapshotLsn == null) {
322
330
  // First replication attempt - get a snapshot and store the timestamp
323
331
  snapshotLsn = await this.getSnapshotLsn();
324
- await batch.setSnapshotLsn(snapshotLsn);
332
+ await batch.setResumeLsn(snapshotLsn);
325
333
  this.logger.info(`Marking snapshot at ${snapshotLsn}`);
326
334
  } else {
327
335
  this.logger.info(`Resuming snapshot at ${snapshotLsn}`);
@@ -359,11 +367,20 @@ export class ChangeStream {
359
367
  await this.snapshotTable(batch, table);
360
368
  await batch.markSnapshotDone([table], MongoLSN.ZERO.comparable);
361
369
 
362
- await touch();
370
+ this.touch();
363
371
  }
364
372
 
365
- this.logger.info(`Snapshot commit at ${snapshotLsn}`);
373
+ // The checkpoint here is a marker - we need to replicate up to at least this
374
+ // point before the data can be considered consistent.
375
+ // We could do this for each individual table, but may as well just do it once for the entire snapshot.
376
+ const checkpoint = await createCheckpoint(this.client, this.defaultDb, STANDALONE_CHECKPOINT_ID);
377
+ await batch.markSnapshotDone([], checkpoint);
378
+
379
+ // This will not create a consistent checkpoint yet, but will persist the op.
380
+ // Actual checkpoint will be created when streaming replication caught up.
366
381
  await batch.commit(snapshotLsn);
382
+
383
+ this.logger.info(`Snapshot done. Need to replicate from ${snapshotLsn} to ${checkpoint} to be consistent`);
367
384
  }
368
385
  );
369
386
  }
@@ -492,7 +509,7 @@ export class ChangeStream {
492
509
  this.logger.info(
493
510
  `Replicating ${table.qualifiedName} ${table.formatSnapshotProgress()} in ${duration.toFixed(0)}ms`
494
511
  );
495
- await touch();
512
+ this.touch();
496
513
  }
497
514
  // In case the loop was interrupted, make sure we await the last promise.
498
515
  await nextChunkPromise;
@@ -656,7 +673,6 @@ export class ChangeStream {
656
673
  try {
657
674
  // If anything errors here, the entire replication process is halted, and
658
675
  // all connections automatically closed, including this one.
659
-
660
676
  await this.initReplication();
661
677
  await this.streamChanges();
662
678
  } catch (e) {
@@ -757,19 +773,20 @@ export class ChangeStream {
757
773
  }
758
774
 
759
775
  async streamChangesInternal() {
760
- // Auto-activate as soon as initial replication is done
761
- await this.storage.autoActivate();
762
-
763
776
  await this.storage.startBatch(
764
777
  {
765
778
  logger: this.logger,
766
779
  zeroLSN: MongoLSN.ZERO.comparable,
767
780
  defaultSchema: this.defaultDb.databaseName,
781
+ // We get a complete postimage for every change, so we don't need to store the current data.
768
782
  storeCurrentData: false
769
783
  },
770
784
  async (batch) => {
771
- const { lastCheckpointLsn } = batch;
772
- const lastLsn = MongoLSN.fromSerialized(lastCheckpointLsn!);
785
+ const { resumeFromLsn } = batch;
786
+ if (resumeFromLsn == null) {
787
+ throw new ReplicationAssertionError(`No LSN found to resume from`);
788
+ }
789
+ const lastLsn = MongoLSN.fromSerialized(resumeFromLsn);
773
790
  const startAfter = lastLsn?.timestamp;
774
791
 
775
792
  // It is normal for this to be a minute or two old when there is a low volume
@@ -778,7 +795,7 @@ export class ChangeStream {
778
795
 
779
796
  this.logger.info(`Resume streaming at ${startAfter?.inspect()} / ${lastLsn} | Token age: ${tokenAgeSeconds}s`);
780
797
 
781
- await using streamManager = this.openChangeStream({ lsn: lastCheckpointLsn });
798
+ await using streamManager = this.openChangeStream({ lsn: resumeFromLsn });
782
799
  const { stream, filters } = streamManager;
783
800
  if (this.abort_signal.aborted) {
784
801
  await stream.close();
@@ -797,6 +814,7 @@ export class ChangeStream {
797
814
  let splitDocument: mongo.ChangeStreamDocument | null = null;
798
815
 
799
816
  let flexDbNameWorkaroundLogged = false;
817
+ let changesSinceLastCheckpoint = 0;
800
818
 
801
819
  let lastEmptyResume = performance.now();
802
820
 
@@ -831,7 +849,7 @@ export class ChangeStream {
831
849
  if (waitForCheckpointLsn == null && performance.now() - lastEmptyResume > 60_000) {
832
850
  const { comparable: lsn, timestamp } = MongoLSN.fromResumeToken(stream.resumeToken);
833
851
  await batch.keepalive(lsn);
834
- await touch();
852
+ this.touch();
835
853
  lastEmptyResume = performance.now();
836
854
  // Log the token update. This helps as a general "replication is still active" message in the logs.
837
855
  // This token would typically be around 10s behind.
@@ -843,7 +861,7 @@ export class ChangeStream {
843
861
  continue;
844
862
  }
845
863
 
846
- await touch();
864
+ this.touch();
847
865
 
848
866
  if (startAfter != null && originalChangeDocument.clusterTime?.lte(startAfter)) {
849
867
  continue;
@@ -966,6 +984,7 @@ export class ChangeStream {
966
984
  if (didCommit) {
967
985
  this.oldestUncommittedChange = null;
968
986
  this.isStartingReplication = false;
987
+ changesSinceLastCheckpoint = 0;
969
988
  }
970
989
  } else if (
971
990
  changeDocument.operationType == 'insert' ||
@@ -988,7 +1007,21 @@ export class ChangeStream {
988
1007
  if (this.oldestUncommittedChange == null && changeDocument.clusterTime != null) {
989
1008
  this.oldestUncommittedChange = timestampToDate(changeDocument.clusterTime);
990
1009
  }
991
- await this.writeChange(batch, table, changeDocument);
1010
+ const flushResult = await this.writeChange(batch, table, changeDocument);
1011
+ changesSinceLastCheckpoint += 1;
1012
+ if (flushResult != null && changesSinceLastCheckpoint >= 20_000) {
1013
+ // When we are catching up replication after an initial snapshot, there may be a very long delay
1014
+ // before we do a commit(). In that case, we need to periodically persist the resume LSN, so
1015
+ // we don't restart from scratch if we restart replication.
1016
+ // The same could apply if we need to catch up on replication after some downtime.
1017
+ const { comparable: lsn } = new MongoLSN({
1018
+ timestamp: changeDocument.clusterTime!,
1019
+ resume_token: changeDocument._id
1020
+ });
1021
+ this.logger.info(`Updating resume LSN to ${lsn} after ${changesSinceLastCheckpoint} changes`);
1022
+ await batch.setResumeLsn(lsn);
1023
+ changesSinceLastCheckpoint = 0;
1024
+ }
992
1025
  }
993
1026
  } else if (changeDocument.operationType == 'drop') {
994
1027
  const rel = getMongoRelation(changeDocument.ns);
@@ -1036,13 +1069,18 @@ export class ChangeStream {
1036
1069
  }
1037
1070
  return Date.now() - this.oldestUncommittedChange.getTime();
1038
1071
  }
1039
- }
1040
1072
 
1041
- async function touch() {
1042
- // FIXME: The hosted Kubernetes probe does not actually check the timestamp on this.
1043
- // FIXME: We need a timeout of around 5+ minutes in Kubernetes if we do start checking the timestamp,
1044
- // or reduce PING_INTERVAL here.
1045
- return container.probes.touch();
1073
+ private lastTouchedAt = performance.now();
1074
+
1075
+ private touch() {
1076
+ if (performance.now() - this.lastTouchedAt > 1_000) {
1077
+ this.lastTouchedAt = performance.now();
1078
+ // Update the probes, but don't wait for it
1079
+ container.probes.touch().catch((e) => {
1080
+ this.logger.error(`Failed to touch the container probe: ${e.message}`, e);
1081
+ });
1082
+ }
1083
+ }
1046
1084
  }
1047
1085
 
1048
1086
  function mapChangeStreamError(e: any) {
@@ -23,7 +23,9 @@ describe('change stream', () => {
23
23
 
24
24
  function defineChangeStreamTests(factory: storage.TestStorageFactory) {
25
25
  test('replicating basic values', async () => {
26
- await using context = await ChangeStreamTestContext.open(factory);
26
+ await using context = await ChangeStreamTestContext.open(factory, {
27
+ mongoOptions: { postImages: PostImagesOption.READ_ONLY }
28
+ });
27
29
  const { db } = context;
28
30
  await context.updateSyncRules(`
29
31
  bucket_definitions:
@@ -32,7 +34,7 @@ bucket_definitions:
32
34
  - SELECT _id as id, description, num FROM "test_data"`);
33
35
 
34
36
  await db.createCollection('test_data', {
35
- changeStreamPreAndPostImages: { enabled: false }
37
+ changeStreamPreAndPostImages: { enabled: true }
36
38
  });
37
39
  const collection = db.collection('test_data');
38
40
 
@@ -42,11 +44,8 @@ bucket_definitions:
42
44
 
43
45
  const result = await collection.insertOne({ description: 'test1', num: 1152921504606846976n });
44
46
  const test_id = result.insertedId;
45
- await setTimeout(30);
46
47
  await collection.updateOne({ _id: test_id }, { $set: { description: 'test2' } });
47
- await setTimeout(30);
48
48
  await collection.replaceOne({ _id: test_id }, { description: 'test3' });
49
- await setTimeout(30);
50
49
  await collection.deleteOne({ _id: test_id });
51
50
 
52
51
  const data = await context.getBucketData('global[]');
@@ -354,6 +353,9 @@ bucket_definitions:
354
353
  const test_id = result.insertedId.toHexString();
355
354
 
356
355
  await context.replicateSnapshot();
356
+ // Note: snapshot is only consistent some time into the streaming request.
357
+ // At the point that we get the first acknowledged checkpoint, as is required
358
+ // for getBucketData(), the data should be consistent.
357
359
  context.startStreaming();
358
360
 
359
361
  const data = await context.getBucketData('global[]');
@@ -512,10 +514,13 @@ bucket_definitions:
512
514
  await collection.insertOne({ description: 'test1', num: 1152921504606846976n });
513
515
 
514
516
  await context.replicateSnapshot();
517
+ await context.markSnapshotConsistent();
515
518
 
516
519
  // Simulate an error
517
520
  await context.storage!.reportError(new Error('simulated error'));
518
- expect((await context.factory.getActiveSyncRulesContent())?.last_fatal_error).toEqual('simulated error');
521
+ const syncRules = await context.factory.getActiveSyncRulesContent();
522
+ expect(syncRules).toBeTruthy();
523
+ expect(syncRules?.last_fatal_error).toEqual('simulated error');
519
524
 
520
525
  // startStreaming() should automatically clear the error.
521
526
  context.startStreaming();