@powersync/service-module-mongodb-storage 0.20.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/dist/storage/MongoBucketStorage.d.ts +31 -3
- package/dist/storage/MongoBucketStorage.js +365 -206
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoBucketBatch.d.ts +15 -4
- package/dist/storage/implementation/MongoBucketBatch.js +35 -9
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +19 -79
- package/dist/storage/implementation/MongoCompactor.js +27 -238
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoParameterCompactor.d.ts +83 -10
- package/dist/storage/implementation/MongoParameterCompactor.js +309 -96
- package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +9 -1
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js +29 -0
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -1
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +4 -2
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -1
- package/dist/storage/implementation/MongoStorageProvider.js +3 -1
- package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +27 -11
- package/dist/storage/implementation/MongoSyncBucketStorage.js +78 -31
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.js +21 -9
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +9 -7
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js +7 -28
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
- package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +11 -5
- package/dist/storage/implementation/SyncRuleStateUpdate.js +14 -6
- package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -1
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +22 -2
- package/dist/storage/implementation/common/PersistedBatch.d.ts +27 -0
- package/dist/storage/implementation/common/PersistedBatch.js +43 -2
- package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
- package/dist/storage/implementation/db.d.ts +4 -1
- package/dist/storage/implementation/db.js +14 -1
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +31 -0
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +2 -0
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js +22 -0
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +36 -5
- package/dist/storage/implementation/v1/MongoCompactorV1.js +229 -8
- package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +16 -2
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -9
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +18 -11
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +65 -16
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
- package/dist/storage/implementation/v1/models.js +1 -0
- package/dist/storage/implementation/v1/models.js.map +1 -1
- package/dist/storage/implementation/v3/CompactionLease.d.ts +50 -0
- package/dist/storage/implementation/v3/CompactionLease.js +131 -0
- package/dist/storage/implementation/v3/CompactionLease.js.map +1 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +8 -1
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js +90 -19
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +77 -25
- package/dist/storage/implementation/v3/MongoCompactorV3.js +585 -141
- package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +18 -0
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +23 -0
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +2 -15
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +60 -92
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -1
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +19 -9
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +91 -31
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.d.ts +26 -0
- package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js +82 -0
- package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js.map +1 -0
- package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -0
- package/dist/storage/implementation/v3/PersistedBatchV3.js +52 -11
- package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +12 -2
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +42 -3
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
- package/dist/storage/implementation/v3/bucket-format.js +2 -0
- package/dist/storage/implementation/v3/bucket-format.js.map +1 -1
- package/dist/storage/implementation/v3/compact-utils.d.ts +107 -0
- package/dist/storage/implementation/v3/compact-utils.js +216 -0
- package/dist/storage/implementation/v3/compact-utils.js.map +1 -0
- package/dist/storage/implementation/v3/compaction-constants.d.ts +5 -0
- package/dist/storage/implementation/v3/compaction-constants.js +6 -0
- package/dist/storage/implementation/v3/compaction-constants.js.map +1 -0
- package/dist/storage/implementation/v3/models.d.ts +84 -4
- package/dist/storage/implementation/v3/models.js.map +1 -1
- package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.d.ts +7 -8
- package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js +8 -4
- package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js.map +1 -1
- package/dist/storage/implementation/v3/object-storage/ObjectStorage.d.ts +14 -11
- package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.d.ts +3 -5
- package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js +10 -2
- package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js.map +1 -1
- package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.d.ts +37 -0
- package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js +167 -0
- package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js.map +1 -0
- package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.d.ts +37 -12
- package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js +177 -23
- package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js.map +1 -1
- package/dist/storage/implementation/v3/source-table-utils.d.ts +6 -6
- package/dist/storage/implementation/v3/source-table-utils.js +30 -37
- package/dist/storage/implementation/v3/source-table-utils.js.map +1 -1
- package/dist/storage/storage-index.d.ts +2 -1
- package/dist/storage/storage-index.js +1 -0
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/types/types.d.ts +23 -1
- package/dist/types/types.js +16 -7
- package/dist/types/types.js.map +1 -1
- package/dist/utils/util.js +3 -1
- package/dist/utils/util.js.map +1 -1
- package/package.json +10 -9
- package/src/storage/MongoBucketStorage.ts +495 -268
- package/src/storage/implementation/MongoBucketBatch.ts +54 -14
- package/src/storage/implementation/MongoCompactor.ts +35 -346
- package/src/storage/implementation/MongoParameterCompactor.ts +388 -102
- package/src/storage/implementation/MongoParsedSyncConfigSet.ts +34 -0
- package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +4 -2
- package/src/storage/implementation/MongoStorageProvider.ts +3 -1
- package/src/storage/implementation/MongoSyncBucketStorage.ts +114 -40
- package/src/storage/implementation/MongoSyncRulesLock.ts +22 -9
- package/src/storage/implementation/MongoWriteCheckpointAPI.ts +12 -44
- package/src/storage/implementation/SyncRuleStateUpdate.ts +13 -6
- package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +24 -2
- package/src/storage/implementation/common/PersistedBatch.ts +54 -2
- package/src/storage/implementation/db.ts +21 -2
- package/src/storage/implementation/models.ts +34 -0
- package/src/storage/implementation/v1/MongoBucketBatchV1.ts +31 -0
- package/src/storage/implementation/v1/MongoCompactorV1.ts +303 -19
- package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +25 -9
- package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +87 -27
- package/src/storage/implementation/v1/models.ts +1 -0
- package/src/storage/implementation/v3/CompactionLease.ts +152 -0
- package/src/storage/implementation/v3/MongoBucketBatchV3.ts +124 -22
- package/src/storage/implementation/v3/MongoCompactorV3.ts +744 -190
- package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +34 -0
- package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +100 -109
- package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +111 -41
- package/src/storage/implementation/v3/MongoWriteCheckpointAPIV3.ts +111 -0
- package/src/storage/implementation/v3/PersistedBatchV3.ts +57 -12
- package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +55 -4
- package/src/storage/implementation/v3/bucket-format.ts +2 -0
- package/src/storage/implementation/v3/compact-utils.ts +320 -0
- package/src/storage/implementation/v3/compaction-constants.ts +5 -0
- package/src/storage/implementation/v3/models.ts +91 -3
- package/src/storage/implementation/v3/object-storage/BucketDataObjectStorage.ts +16 -8
- package/src/storage/implementation/v3/object-storage/ObjectStorage.ts +20 -5
- package/src/storage/implementation/v3/object-storage/ObjectStorageLifecycle.ts +15 -4
- package/src/storage/implementation/v3/object-storage/ObjectStorageUsage.ts +230 -0
- package/src/storage/implementation/v3/object-storage/S3ObjectStorage.ts +257 -27
- package/src/storage/implementation/v3/source-table-utils.ts +39 -41
- package/src/storage/storage-index.ts +2 -0
- package/src/types/types.ts +24 -7
- package/src/utils/util.ts +3 -1
- package/test/src/__snapshots__/storage.test.ts.snap +25 -0
- package/test/src/__snapshots__/storage_sync.test.ts.snap +605 -16
- package/test/src/cleanup-stopped-sync-configs.test.ts +40 -13
- package/test/src/compact-utils.test.ts +226 -0
- package/test/src/helpers/MemoryObjectStorage.ts +14 -6
- package/test/src/object_storage_usage.test.ts +255 -0
- package/test/src/parameter_compacting_v1.test.ts +120 -0
- package/test/src/parameter_compacting_v3.test.ts +192 -0
- package/test/src/parameter_compaction_fence.test.ts +276 -0
- package/test/src/storage.test.ts +273 -22
- package/test/src/storage_compacting.test.ts +714 -244
- package/test/src/storage_s3_checksums.test.ts +3 -4
- package/test/src/storage_s3_compaction_lifecycle.test.ts +138 -12
- package/test/src/storage_s3_reading.test.ts +243 -1
- package/test/src/storage_s3_writing.test.ts +1 -0
- package/test/src/storage_sync.test.ts +336 -41
- package/test/src/util.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -40,14 +40,24 @@ export class MongoSyncBucketStorageV1 extends MongoSyncBucketStorage {
|
|
|
40
40
|
async fetchCheckpointState(session) {
|
|
41
41
|
const doc = (await this.db.sync_rules.findOne({ _id: this.replicationStreamId }, {
|
|
42
42
|
session,
|
|
43
|
-
projection: {
|
|
43
|
+
projection: {
|
|
44
|
+
_id: 1,
|
|
45
|
+
state: 1,
|
|
46
|
+
last_checkpoint: 1,
|
|
47
|
+
last_checkpoint_lsn: 1,
|
|
48
|
+
snapshot_done: 1,
|
|
49
|
+
// Must be read in the same snapshot as the checkpoint.
|
|
50
|
+
'parameter_compaction.checkpoint_changes_invalid_before': 1
|
|
51
|
+
}
|
|
44
52
|
}));
|
|
45
53
|
if (!doc?.snapshot_done || ![storage.SyncRuleState.ACTIVE, storage.SyncRuleState.ERRORED].includes(doc.state)) {
|
|
46
54
|
return null;
|
|
47
55
|
}
|
|
48
56
|
return {
|
|
49
57
|
checkpoint: doc.last_checkpoint ?? 0n,
|
|
50
|
-
lsn: doc.last_checkpoint_lsn ?? null
|
|
58
|
+
lsn: doc.last_checkpoint_lsn ?? null,
|
|
59
|
+
// Defaults to 0n for streams that have never been compacted.
|
|
60
|
+
parameterChangesInvalidBefore: doc.parameter_compaction?.checkpoint_changes_invalid_before ?? 0n
|
|
51
61
|
};
|
|
52
62
|
}
|
|
53
63
|
async terminateSyncRuleState() {
|
|
@@ -91,7 +101,8 @@ export class MongoSyncBucketStorageV1 extends MongoSyncBucketStorage {
|
|
|
91
101
|
no_checkpoint_before: null
|
|
92
102
|
},
|
|
93
103
|
$unset: {
|
|
94
|
-
snapshot_lsn: 1
|
|
104
|
+
snapshot_lsn: 1,
|
|
105
|
+
parameter_compaction: 1
|
|
95
106
|
}
|
|
96
107
|
}, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
|
|
97
108
|
}
|
|
@@ -105,6 +116,23 @@ export class MongoSyncBucketStorageV1 extends MongoSyncBucketStorage {
|
|
|
105
116
|
createMongoCompactor(options) {
|
|
106
117
|
return new MongoCompactorV1(this, this.db, options);
|
|
107
118
|
}
|
|
119
|
+
async compactInitialReplication(options) {
|
|
120
|
+
this.logger.info(`Compacting after initial replication...`);
|
|
121
|
+
const start = Date.now();
|
|
122
|
+
const maxOpId = options.maxOpId ?? (await this.fetchPersistedOpHead()) ?? undefined;
|
|
123
|
+
const compactor = this.createMongoCompactor({
|
|
124
|
+
...options,
|
|
125
|
+
maxOpId,
|
|
126
|
+
memoryLimitMB: 0,
|
|
127
|
+
logger: this.logger
|
|
128
|
+
});
|
|
129
|
+
const result = await compactor.populateChecksums({
|
|
130
|
+
minBucketChanges: options.minBucketChanges ?? 10
|
|
131
|
+
});
|
|
132
|
+
const duration = Date.now() - start;
|
|
133
|
+
this.logger.info(`Compacted after initial replication in ${(duration / 1000).toFixed(1)}s`);
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
108
136
|
createMongoParameterCompactor(checkpoint, options) {
|
|
109
137
|
return new MongoParameterCompactorV1(this.db, this.replicationStreamId, checkpoint, options);
|
|
110
138
|
}
|
|
@@ -352,21 +380,42 @@ export async function getDataBucketChangesV1(ctx, options) {
|
|
|
352
380
|
updatedDataBuckets: invalidateDataBuckets ? new Set() : new Set(buckets)
|
|
353
381
|
};
|
|
354
382
|
}
|
|
383
|
+
/**
|
|
384
|
+
* Query the parameter entries changed between the two checkpoints, to determine which parameter
|
|
385
|
+
* lookups need to be re-evaluated.
|
|
386
|
+
*
|
|
387
|
+
* This runs at the next checkpoint's snapshot, so it still sees entries that parameter compaction
|
|
388
|
+
* deleted after that snapshot. Compaction that deleted entries before the snapshot is covered by
|
|
389
|
+
* the invalidation fence, checked before we get here.
|
|
390
|
+
*/
|
|
355
391
|
export async function getParameterBucketChangesV1(ctx, options) {
|
|
356
392
|
const limit = 1000;
|
|
357
|
-
const parameterUpdates = await ctx.db.
|
|
358
|
-
.
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
393
|
+
const parameterUpdates = await ctx.db.client.withSession({ snapshot: true }, async (session) => {
|
|
394
|
+
setSessionSnapshotTime(session, options.nextCheckpoint.snapshotTime);
|
|
395
|
+
return await ctx.db.parameterIndexV1
|
|
396
|
+
.find({
|
|
397
|
+
_id: { $gt: options.lastCheckpoint.checkpoint, $lte: options.nextCheckpoint.checkpoint },
|
|
398
|
+
'key.g': ctx.replicationStreamId
|
|
399
|
+
}, {
|
|
400
|
+
session,
|
|
401
|
+
readConcern: 'snapshot',
|
|
402
|
+
projection: {
|
|
403
|
+
lookup: 1
|
|
404
|
+
},
|
|
405
|
+
limit: limit + 1,
|
|
406
|
+
batchSize: limit + 2,
|
|
407
|
+
singleBatch: true
|
|
408
|
+
})
|
|
409
|
+
.toArray()
|
|
410
|
+
.catch((e) => {
|
|
411
|
+
// Includes the case where the checkpoint snapshot has expired. Degrading to
|
|
412
|
+
// invalidateParameterBuckets would be safe in itself - it reads nothing - but it gains
|
|
413
|
+
// nothing: the caller responds to that by re-evaluating the parameter queries at this
|
|
414
|
+
// same snapshot, which fails too. The checkpoint has to be refetched instead, which is
|
|
415
|
+
// what the existing sync retry behavior does.
|
|
416
|
+
throw lib_mongo.mapQueryError(e, 'while querying parameter changes');
|
|
417
|
+
});
|
|
418
|
+
});
|
|
370
419
|
const invalidateParameterUpdates = parameterUpdates.length > limit;
|
|
371
420
|
return {
|
|
372
421
|
invalidateParameterBuckets: invalidateParameterUpdates,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoSyncBucketStorageV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoSyncBucketStorageV1.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoSyncBucketStorageV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoSyncBucketStorageV1.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/models.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,gCAAgC,EAMjC,MAAM,cAAc,CAAC;AAwBtB,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;IAClC,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,SAAS,CAAC,mBAAmB;YAChC,CAAC,EAAE,SAAS,CAAC,MAAM;YACnB,CAAC,EAAE,CAAC;SACL;QACD,iFAAiF;QACjF,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAyB;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAC7B,OAAO;QACL,SAAS,EAAE;YACT,mBAAmB,EAAE,GAAG,CAAC,CAAC;YAC1B,YAAY,EAAE,gCAAgC;YAC9C,MAAM,EAAE,GAAG,CAAC,CAAC;SACd;QACD,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,QAAuC;IACvF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC5C,OAAO,IAA+B,CAAC;AACzC,CAAC"}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/models.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,gCAAgC,EAMjC,MAAM,cAAc,CAAC;AAwBtB,MAAM,UAAU,qBAAqB,CAAC,QAAuB;IAC3D,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC;IAClC,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,SAAS,CAAC,mBAAmB;YAChC,CAAC,EAAE,SAAS,CAAC,MAAM;YACnB,CAAC,EAAE,CAAC;SACL;QACD,iFAAiF;QACjF,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,YAAY,EAAE,QAAQ,CAAC,YAAY;QACnC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAyB;IAChE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAC7B,OAAO;QACL,SAAS,EAAE;YACT,mBAAmB,EAAE,GAAG,CAAC,CAAC;YAC1B,YAAY,EAAE,gCAAgC;YAC9C,MAAM,EAAE,GAAG,CAAC,CAAC;SACd;QACD,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,GAAG,IAAI;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,QAAuC;IACvF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IAC5C,OAAO,IAA+B,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { InternalOpId } from '@powersync/service-core';
|
|
3
|
+
import { BucketStateDocumentV3 } from './models.js';
|
|
4
|
+
/**
|
|
5
|
+
* Filters for buckets that have no lease or an expired lease.
|
|
6
|
+
*/
|
|
7
|
+
export declare const AVAILABLE_LEASE_EXPR: {
|
|
8
|
+
$expr: {
|
|
9
|
+
$or: ({
|
|
10
|
+
$eq: (string | {
|
|
11
|
+
$type: string;
|
|
12
|
+
})[];
|
|
13
|
+
$lte?: undefined;
|
|
14
|
+
} | {
|
|
15
|
+
$lte: string[];
|
|
16
|
+
$eq?: undefined;
|
|
17
|
+
})[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Owns one V3 bucket-compaction lease, including its server-time renewal and
|
|
22
|
+
* the owner-fenced operations which release it.
|
|
23
|
+
*
|
|
24
|
+
* This is intended as a way to reduce redundant work if multiple jobs attempt to
|
|
25
|
+
* compact the same bucket concurrently, but it's not an absolute safety guarantee.
|
|
26
|
+
* The individual operations must still be designed to be safe with concurrent compacting.
|
|
27
|
+
*/
|
|
28
|
+
export declare class CompactionLease implements AsyncDisposable {
|
|
29
|
+
private readonly collection;
|
|
30
|
+
readonly state: BucketStateDocumentV3;
|
|
31
|
+
readonly id: mongo.ObjectId;
|
|
32
|
+
private readonly durationMs;
|
|
33
|
+
readonly startedAt: Date;
|
|
34
|
+
readonly lastOp: InternalOpId;
|
|
35
|
+
private timer;
|
|
36
|
+
private renewalInFlight;
|
|
37
|
+
private renewalError;
|
|
38
|
+
private finalizing;
|
|
39
|
+
private finished;
|
|
40
|
+
private constructor();
|
|
41
|
+
static claim(collection: mongo.Collection<BucketStateDocumentV3>, filter: mongo.Filter<BucketStateDocumentV3>, sort: mongo.Sort | undefined, durationMs: number): Promise<CompactionLease | null>;
|
|
42
|
+
startRenewal(): void;
|
|
43
|
+
throwIfLost(): Promise<void>;
|
|
44
|
+
reschedule(nextCompactCheck: mongo.Document): Promise<void>;
|
|
45
|
+
finalize(update: mongo.Document): Promise<void>;
|
|
46
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
47
|
+
private get filter();
|
|
48
|
+
private renew;
|
|
49
|
+
private finish;
|
|
50
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { CompactionLeaseLostError } from '../MongoCompactor.js';
|
|
3
|
+
const LEASE_RENEW_INTERVAL_MS = 60 * 1000;
|
|
4
|
+
/**
|
|
5
|
+
* Filters for buckets that have no lease or an expired lease.
|
|
6
|
+
*/
|
|
7
|
+
export const AVAILABLE_LEASE_EXPR = {
|
|
8
|
+
// $$NOW is evaluated by MongoDB, avoiding lease expiry races due
|
|
9
|
+
// to clocks on separate compact workers.
|
|
10
|
+
$expr: {
|
|
11
|
+
$or: [{ $eq: [{ $type: '$compact_lease' }, 'missing'] }, { $lte: ['$compact_lease.expires_at', '$$NOW'] }]
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Owns one V3 bucket-compaction lease, including its server-time renewal and
|
|
16
|
+
* the owner-fenced operations which release it.
|
|
17
|
+
*
|
|
18
|
+
* This is intended as a way to reduce redundant work if multiple jobs attempt to
|
|
19
|
+
* compact the same bucket concurrently, but it's not an absolute safety guarantee.
|
|
20
|
+
* The individual operations must still be designed to be safe with concurrent compacting.
|
|
21
|
+
*/
|
|
22
|
+
export class CompactionLease {
|
|
23
|
+
collection;
|
|
24
|
+
state;
|
|
25
|
+
id;
|
|
26
|
+
durationMs;
|
|
27
|
+
startedAt;
|
|
28
|
+
lastOp;
|
|
29
|
+
timer;
|
|
30
|
+
renewalInFlight = false;
|
|
31
|
+
renewalError;
|
|
32
|
+
finalizing = false;
|
|
33
|
+
finished = false;
|
|
34
|
+
constructor(collection, state, id, durationMs) {
|
|
35
|
+
this.collection = collection;
|
|
36
|
+
this.state = state;
|
|
37
|
+
this.id = id;
|
|
38
|
+
this.durationMs = durationMs;
|
|
39
|
+
this.startedAt = new Date(state.compact_lease.expires_at.getTime() - durationMs);
|
|
40
|
+
this.lastOp = state.last_op;
|
|
41
|
+
}
|
|
42
|
+
static async claim(collection, filter, sort, durationMs) {
|
|
43
|
+
const id = new mongo.ObjectId();
|
|
44
|
+
const state = await collection.findOneAndUpdate({
|
|
45
|
+
$and: [filter, AVAILABLE_LEASE_EXPR]
|
|
46
|
+
}, [
|
|
47
|
+
{
|
|
48
|
+
$set: {
|
|
49
|
+
compact_lease: {
|
|
50
|
+
id,
|
|
51
|
+
expires_at: { $dateAdd: { startDate: '$$NOW', unit: 'millisecond', amount: durationMs } }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
], { sort, returnDocument: 'after' });
|
|
56
|
+
return state == null ? null : new CompactionLease(collection, state, id, durationMs);
|
|
57
|
+
}
|
|
58
|
+
startRenewal() {
|
|
59
|
+
const interval = Math.max(1, Math.min(LEASE_RENEW_INTERVAL_MS, Math.floor(this.durationMs / 2)));
|
|
60
|
+
this.timer = setInterval(() => {
|
|
61
|
+
if (this.renewalInFlight) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.renewalInFlight = true;
|
|
65
|
+
void this.renew()
|
|
66
|
+
.catch((error) => {
|
|
67
|
+
this.renewalError = error;
|
|
68
|
+
})
|
|
69
|
+
.finally(() => {
|
|
70
|
+
this.renewalInFlight = false;
|
|
71
|
+
});
|
|
72
|
+
}, interval);
|
|
73
|
+
this.timer.unref();
|
|
74
|
+
}
|
|
75
|
+
async throwIfLost() {
|
|
76
|
+
if (this.renewalError != null) {
|
|
77
|
+
throw this.renewalError;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async reschedule(nextCompactCheck) {
|
|
81
|
+
await this.finish([{ $set: { next_compact_check: nextCompactCheck } }, { $unset: 'compact_lease' }]);
|
|
82
|
+
}
|
|
83
|
+
async finalize(update) {
|
|
84
|
+
await this.finish([{ $set: update }, { $unset: 'compact_lease' }]);
|
|
85
|
+
}
|
|
86
|
+
async [Symbol.asyncDispose]() {
|
|
87
|
+
if (this.timer != null) {
|
|
88
|
+
clearInterval(this.timer);
|
|
89
|
+
this.timer = undefined;
|
|
90
|
+
}
|
|
91
|
+
if (this.finished) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
this.finalizing = true;
|
|
95
|
+
await this.collection.updateOne(this.filter, { $unset: { compact_lease: '' } });
|
|
96
|
+
this.finished = true;
|
|
97
|
+
}
|
|
98
|
+
get filter() {
|
|
99
|
+
return { _id: this.state._id, 'compact_lease.id': this.id };
|
|
100
|
+
}
|
|
101
|
+
async renew() {
|
|
102
|
+
const result = await this.collection.updateOne(this.filter, [
|
|
103
|
+
{
|
|
104
|
+
$set: {
|
|
105
|
+
'compact_lease.expires_at': {
|
|
106
|
+
$dateAdd: { startDate: '$$NOW', unit: 'millisecond', amount: this.durationMs }
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
]);
|
|
111
|
+
// A finalization in progress owns the authoritative fenced result.
|
|
112
|
+
if (result.matchedCount != 1 && !this.finalizing) {
|
|
113
|
+
throw new CompactionLeaseLostError(`Lost compaction lease for bucket ${this.state._id.b}`);
|
|
114
|
+
}
|
|
115
|
+
// A successful renewal confirms that a transient failure has passed. A
|
|
116
|
+
// lease-loss error remains sticky: it means another worker may own it.
|
|
117
|
+
if (!(this.renewalError instanceof CompactionLeaseLostError)) {
|
|
118
|
+
this.renewalError = undefined;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async finish(update) {
|
|
122
|
+
await this.throwIfLost();
|
|
123
|
+
this.finalizing = true;
|
|
124
|
+
const result = await this.collection.updateOne(this.filter, update);
|
|
125
|
+
if (result.matchedCount != 1) {
|
|
126
|
+
throw new CompactionLeaseLostError(`Lost compaction lease for bucket ${this.state._id.b}`);
|
|
127
|
+
}
|
|
128
|
+
this.finished = true;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=CompactionLease.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompactionLease.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/CompactionLease.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { storage } from '@powersync/service-core';
|
|
2
|
+
import { InternalOpId, storage } from '@powersync/service-core';
|
|
3
3
|
import { MongoBucketBatch, MongoBucketBatchOptions } from '../MongoBucketBatch.js';
|
|
4
4
|
import { PersistedBatch } from '../common/PersistedBatch.js';
|
|
5
5
|
import { SourceRecordStore } from '../common/SourceRecordStore.js';
|
|
@@ -7,6 +7,9 @@ import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
|
|
|
7
7
|
export declare class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
8
8
|
readonly db: VersionedPowerSyncMongoV3;
|
|
9
9
|
private readonly store;
|
|
10
|
+
/** Avoid repeating idempotent createIndexes calls for every checkpoint flush. */
|
|
11
|
+
private readonly initializedCustomCheckpointEventIds;
|
|
12
|
+
private readonly knownEventIds;
|
|
10
13
|
private readonly syncConfigIds;
|
|
11
14
|
private needsActivationV3;
|
|
12
15
|
private lastWaitingLogThrottledV3;
|
|
@@ -31,4 +34,8 @@ export declare class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
31
34
|
}): Promise<void>;
|
|
32
35
|
markTableSnapshotRequired(table: storage.SourceTable): Promise<void>;
|
|
33
36
|
markTableSnapshotDone(tables: storage.SourceTable[], no_checkpoint_before_lsn?: string): Promise<storage.SourceTable[]>;
|
|
37
|
+
protected batchCreateCustomWriteCheckpoints(session: lib_mongo.mongo.ClientSession, opId: InternalOpId): Promise<void>;
|
|
38
|
+
protected prepareCustomWriteCheckpoints(): Promise<void>;
|
|
39
|
+
private validateCustomCheckpointEventId;
|
|
40
|
+
private batchCreateEventCustomWriteCheckpoints;
|
|
34
41
|
}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
+
import { ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
3
3
|
import { storage } from '@powersync/service-core';
|
|
4
4
|
import * as bson from 'bson';
|
|
5
5
|
import { mongoTableId } from '../../../utils/util.js';
|
|
6
6
|
import { canCheckpointState } from '../CheckpointState.js';
|
|
7
7
|
import { MongoBucketBatch } from '../MongoBucketBatch.js';
|
|
8
|
-
import {
|
|
8
|
+
import { stopReplicationStreamPipeline } from '../SyncRuleStateUpdate.js';
|
|
9
9
|
import { PersistedBatchV3 } from './PersistedBatchV3.js';
|
|
10
10
|
import { SourceRecordStoreV3 } from './SourceRecordStoreV3.js';
|
|
11
|
-
import { createNewSourceTable,
|
|
11
|
+
import { createNewSourceTable, overlappingSourceTableFilter, planSourceTableReconciliation, sourceTableDesiredResolution, sourceTableFromDocument } from './source-table-utils.js';
|
|
12
12
|
export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
13
13
|
store;
|
|
14
|
+
/** Avoid repeating idempotent createIndexes calls for every checkpoint flush. */
|
|
15
|
+
initializedCustomCheckpointEventIds = new Set();
|
|
16
|
+
// Used only to validate supplied checkpoint ids; it does not initialize collections.
|
|
17
|
+
knownEventIds;
|
|
14
18
|
syncConfigIds;
|
|
15
19
|
needsActivationV3 = true;
|
|
16
20
|
lastWaitingLogThrottledV3 = 0;
|
|
@@ -21,13 +25,16 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
21
25
|
throw new ReplicationAssertionError('Missing sync config id for v3 batch');
|
|
22
26
|
}
|
|
23
27
|
this.syncConfigIds = syncConfigIds;
|
|
28
|
+
this.knownEventIds = new Set(this.mapping.allEventDefinitionIds());
|
|
24
29
|
this.store = new SourceRecordStoreV3(this.db, this.replicationStreamId, this.mapping);
|
|
25
30
|
}
|
|
26
31
|
createPersistedBatch(writtenSize) {
|
|
27
32
|
return new PersistedBatchV3(this.db, this.replicationStreamId, this.mapping, writtenSize, {
|
|
28
33
|
logger: this.logger,
|
|
29
34
|
objectStorage: this.options.objectStorage,
|
|
30
|
-
inlineThresholdBytes: this.options.inlineThresholdBytes
|
|
35
|
+
inlineThresholdBytes: this.options.inlineThresholdBytes,
|
|
36
|
+
signal: this.options.signal,
|
|
37
|
+
objectStorageUsageWriterId: this.objectStorageUsageWriterId
|
|
31
38
|
});
|
|
32
39
|
}
|
|
33
40
|
get sourceRecordStore() {
|
|
@@ -54,7 +61,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
54
61
|
relevantSyncConfigIds(table) {
|
|
55
62
|
const bucketDataSourceIds = table.bucketDataSources.map((source) => this.mapping.bucketSourceId(source));
|
|
56
63
|
const parameterLookupSourceIds = table.parameterLookupSources.map((source) => this.mapping.parameterLookupId(source));
|
|
57
|
-
return this.selectedSyncConfigObjectIds(this.mapping.syncConfigIdsForSourceTable(this.syncConfigIds.map((id) => id.toHexString()), table.ref, bucketDataSourceIds, parameterLookupSourceIds));
|
|
64
|
+
return this.selectedSyncConfigObjectIds(this.mapping.syncConfigIdsForSourceTable(this.syncConfigIds.map((id) => id.toHexString()), table.ref, bucketDataSourceIds, parameterLookupSourceIds, [...table.eventDefinitionIds]));
|
|
58
65
|
}
|
|
59
66
|
relevantSyncConfigIdsForTables(tables) {
|
|
60
67
|
const ids = new Map();
|
|
@@ -87,7 +94,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
87
94
|
.sourceRecords(this.replicationStreamId, mongoTableId(table.id))
|
|
88
95
|
.drop()
|
|
89
96
|
.catch((error) => {
|
|
90
|
-
if (lib_mongo.
|
|
97
|
+
if (lib_mongo.isMongoNamespaceNotFoundError(error)) {
|
|
91
98
|
return;
|
|
92
99
|
}
|
|
93
100
|
throw error;
|
|
@@ -100,6 +107,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
100
107
|
const parsedOverride = options.parsedSyncConfig;
|
|
101
108
|
const syncConfig = parsedOverride?.hydratedSyncConfig ?? this.sync_rules;
|
|
102
109
|
const mapping = parsedOverride?.mapping ?? this.mapping;
|
|
110
|
+
const eventById = (parsedOverride ?? this.options.parsedSyncConfig).eventById;
|
|
103
111
|
const { connection_id, source } = options;
|
|
104
112
|
const reconcile = options.reconcileSourceTables ?? storage.defaultSourceTableReconciler;
|
|
105
113
|
const identity = {
|
|
@@ -121,7 +129,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
121
129
|
const candidateDocs = await col
|
|
122
130
|
.find(overlappingSourceTableFilter(connection_id, identity), { session })
|
|
123
131
|
.toArray();
|
|
124
|
-
const candidateTables = candidateDocs.map((doc) => sourceTableFromDocument(doc, source.connectionTag, syncConfig, mapping));
|
|
132
|
+
const candidateTables = candidateDocs.map((doc) => sourceTableFromDocument(doc, source.connectionTag, syncConfig, mapping, eventById));
|
|
125
133
|
const candidates = candidateTables.map((table) => table.clone());
|
|
126
134
|
const resolution = await reconcile({ source, candidates });
|
|
127
135
|
storage.validateSourceTableCandidateResolution(candidates, resolution);
|
|
@@ -136,7 +144,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
136
144
|
storeCurrentData: source.sendsCompleteRows !== true,
|
|
137
145
|
syncConfig,
|
|
138
146
|
mapping,
|
|
139
|
-
desired: sourceTableDesiredResolution(syncConfig, source, mapping),
|
|
147
|
+
desired: sourceTableDesiredResolution(syncConfig, source, mapping, eventById),
|
|
140
148
|
sourceCompatibleTables: resolution.compatibleTables,
|
|
141
149
|
newTableSourceMetadata: resolution.newTableValues.sourceMetadata
|
|
142
150
|
};
|
|
@@ -150,7 +158,8 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
150
158
|
await col.updateOne({ _id: update.id }, {
|
|
151
159
|
$set: {
|
|
152
160
|
bucket_data_source_ids: update.memberships.bucketDataSourceIds,
|
|
153
|
-
parameter_lookup_source_ids: update.memberships.parameterLookupSourceIds
|
|
161
|
+
parameter_lookup_source_ids: update.memberships.parameterLookupSourceIds,
|
|
162
|
+
event_definition_ids: update.memberships.eventDefinitionIds
|
|
154
163
|
}
|
|
155
164
|
}, { session });
|
|
156
165
|
}
|
|
@@ -163,11 +172,9 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
163
172
|
await this.db.initializeSourceRecordsCollection(this.replicationStreamId, doc._id, session);
|
|
164
173
|
plan.tables.push(table);
|
|
165
174
|
}
|
|
166
|
-
// If memberships are split across multiple source tables, only one may fire events.
|
|
167
|
-
designateEventCarrier(plan.tables, context.desired.triggersEvent);
|
|
168
175
|
result = {
|
|
169
176
|
tables: plan.tables,
|
|
170
|
-
dropTables: plan.dropDocs.map((doc) => sourceTableFromDocument(doc, context.connectionTag, syncConfig, mapping))
|
|
177
|
+
dropTables: plan.dropDocs.map((doc) => sourceTableFromDocument(doc, context.connectionTag, syncConfig, mapping, eventById))
|
|
171
178
|
};
|
|
172
179
|
});
|
|
173
180
|
return result;
|
|
@@ -179,12 +186,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
179
186
|
if (doc == null) {
|
|
180
187
|
return null;
|
|
181
188
|
}
|
|
182
|
-
|
|
183
|
-
// The event-carrier designation is decided per resolveTables result and not persisted -
|
|
184
|
-
// preserve the caller's designation instead of recomputing it from the ref, so that
|
|
185
|
-
// refreshing a non-carrier table does not make it fire events.
|
|
186
|
-
refreshed.syncEvent = table.syncEvent;
|
|
187
|
-
return refreshed;
|
|
189
|
+
return sourceTableFromDocument(doc, table.ref.connectionTag, this.sync_rules, this.mapping, this.options.parsedSyncConfig.eventById);
|
|
188
190
|
}
|
|
189
191
|
async commit(lsn, options) {
|
|
190
192
|
const { createEmptyCheckpoints } = { ...storage.DEFAULT_BUCKET_BATCH_COMMIT_OPTIONS, ...options };
|
|
@@ -385,7 +387,7 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
385
387
|
await this.db.sync_rules.updateMany({
|
|
386
388
|
_id: { $ne: this.replicationStreamId },
|
|
387
389
|
state: { $in: [storage.SyncRuleState.ACTIVE, storage.SyncRuleState.ERRORED] }
|
|
388
|
-
},
|
|
390
|
+
}, stopReplicationStreamPipeline(), { session });
|
|
389
391
|
activated = true;
|
|
390
392
|
}
|
|
391
393
|
else if (doc.state == storage.SyncRuleState.ACTIVE &&
|
|
@@ -516,5 +518,74 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
516
518
|
return copy;
|
|
517
519
|
});
|
|
518
520
|
}
|
|
521
|
+
async batchCreateCustomWriteCheckpoints(session, opId) {
|
|
522
|
+
if (this.write_checkpoint_batch.length == 0) {
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
const checkpointsByEvent = Map.groupBy(this.write_checkpoint_batch, (checkpoint) => this.validateCustomCheckpointEventId(checkpoint.event_id));
|
|
526
|
+
for (const [eventId, checkpoints] of checkpointsByEvent) {
|
|
527
|
+
await this.batchCreateEventCustomWriteCheckpoints(session, opId, eventId, checkpoints);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
async prepareCustomWriteCheckpoints() {
|
|
531
|
+
// Most events never produce custom checkpoints, so create collections lazily
|
|
532
|
+
// only for the event ids present in this batch. This hook runs before the
|
|
533
|
+
// replication transaction because MongoDB cannot create indexes within it.
|
|
534
|
+
const eventIds = new Set(this.write_checkpoint_batch.map((checkpoint) => this.validateCustomCheckpointEventId(checkpoint.event_id)));
|
|
535
|
+
for (const eventId of eventIds) {
|
|
536
|
+
if (this.initializedCustomCheckpointEventIds.has(eventId)) {
|
|
537
|
+
continue;
|
|
538
|
+
}
|
|
539
|
+
await this.db.initializeCustomCheckpointRequestsCollection({
|
|
540
|
+
replicationStreamId: this.replicationStreamId,
|
|
541
|
+
eventId
|
|
542
|
+
});
|
|
543
|
+
this.initializedCustomCheckpointEventIds.add(eventId);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
validateCustomCheckpointEventId(eventId) {
|
|
547
|
+
if (eventId == null) {
|
|
548
|
+
throw new ServiceAssertionError('V3 custom checkpoints require an event definition id');
|
|
549
|
+
}
|
|
550
|
+
if (!this.knownEventIds.has(eventId)) {
|
|
551
|
+
throw new ServiceAssertionError(`Unknown custom checkpoint event definition ${eventId}`);
|
|
552
|
+
}
|
|
553
|
+
return eventId;
|
|
554
|
+
}
|
|
555
|
+
async batchCreateEventCustomWriteCheckpoints(session, opId, eventId, checkpoints) {
|
|
556
|
+
await this.db
|
|
557
|
+
.customCheckpointRequests({
|
|
558
|
+
eventId,
|
|
559
|
+
replicationStreamId: this.replicationStreamId
|
|
560
|
+
})
|
|
561
|
+
.bulkWrite(checkpoints.map((checkpointOptions) => {
|
|
562
|
+
const set = {
|
|
563
|
+
user_id: checkpointOptions.user_id,
|
|
564
|
+
checkpoint: checkpointOptions.checkpoint,
|
|
565
|
+
op_id: opId
|
|
566
|
+
};
|
|
567
|
+
if (checkpointOptions.checkpoint_requested_at != null) {
|
|
568
|
+
set.checkpoint_requested_at = checkpointOptions.checkpoint_requested_at;
|
|
569
|
+
}
|
|
570
|
+
return {
|
|
571
|
+
updateOne: {
|
|
572
|
+
filter: {
|
|
573
|
+
user_id: checkpointOptions.user_id
|
|
574
|
+
},
|
|
575
|
+
update: {
|
|
576
|
+
$set: set,
|
|
577
|
+
...(checkpointOptions.checkpoint_requested_at == null
|
|
578
|
+
? {
|
|
579
|
+
$unset: {
|
|
580
|
+
checkpoint_requested_at: 1
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
: {})
|
|
584
|
+
},
|
|
585
|
+
upsert: true
|
|
586
|
+
}
|
|
587
|
+
};
|
|
588
|
+
}), { session });
|
|
589
|
+
}
|
|
519
590
|
}
|
|
520
591
|
//# sourceMappingURL=MongoBucketBatchV3.js.map
|