@powersync/service-module-mongodb-storage 0.11.0 → 0.12.1
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 +44 -0
- package/LICENSE +3 -3
- package/dist/storage/implementation/MongoBucketBatch.d.ts +1 -1
- package/dist/storage/implementation/MongoBucketBatch.js +7 -4
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoChecksums.d.ts +34 -0
- package/dist/storage/implementation/MongoChecksums.js +274 -0
- package/dist/storage/implementation/MongoChecksums.js.map +1 -0
- package/dist/storage/implementation/MongoCompactor.d.ts +16 -2
- package/dist/storage/implementation/MongoCompactor.js +204 -51
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +5 -3
- package/dist/storage/implementation/MongoSyncBucketStorage.js +29 -70
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/PersistedBatch.d.ts +1 -0
- package/dist/storage/implementation/PersistedBatch.js +12 -5
- package/dist/storage/implementation/PersistedBatch.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +14 -0
- package/dist/storage/implementation/util.d.ts +1 -1
- package/dist/storage/implementation/util.js.map +1 -1
- package/package.json +9 -9
- package/src/storage/implementation/MongoBucketBatch.ts +8 -6
- package/src/storage/implementation/MongoChecksums.ts +320 -0
- package/src/storage/implementation/MongoCompactor.ts +239 -48
- package/src/storage/implementation/MongoSyncBucketStorage.ts +33 -78
- package/src/storage/implementation/PersistedBatch.ts +13 -5
- package/src/storage/implementation/models.ts +15 -0
- package/src/storage/implementation/util.ts +2 -2
- package/test/src/__snapshots__/storage_sync.test.ts.snap +319 -11
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { logger, ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
-
import { utils } from '@powersync/service-core';
|
|
1
|
+
import { mongo, MONGO_OPERATION_TIMEOUT_MS } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { logger, ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
+
import { addChecksums, isPartialChecksum, utils } from '@powersync/service-core';
|
|
4
4
|
import { cacheKey } from './OperationBatch.js';
|
|
5
5
|
const DEFAULT_CLEAR_BATCH_LIMIT = 5000;
|
|
6
6
|
const DEFAULT_MOVE_BATCH_LIMIT = 2000;
|
|
@@ -8,24 +8,29 @@ const DEFAULT_MOVE_BATCH_QUERY_LIMIT = 10_000;
|
|
|
8
8
|
/** This default is primarily for tests. */
|
|
9
9
|
const DEFAULT_MEMORY_LIMIT_MB = 64;
|
|
10
10
|
export class MongoCompactor {
|
|
11
|
+
storage;
|
|
11
12
|
db;
|
|
12
|
-
group_id;
|
|
13
13
|
updates = [];
|
|
14
|
+
bucketStateUpdates = [];
|
|
14
15
|
idLimitBytes;
|
|
15
16
|
moveBatchLimit;
|
|
16
17
|
moveBatchQueryLimit;
|
|
17
18
|
clearBatchLimit;
|
|
18
19
|
maxOpId;
|
|
19
20
|
buckets;
|
|
20
|
-
|
|
21
|
+
signal;
|
|
22
|
+
group_id;
|
|
23
|
+
constructor(storage, db, options) {
|
|
24
|
+
this.storage = storage;
|
|
21
25
|
this.db = db;
|
|
22
|
-
this.group_id = group_id;
|
|
26
|
+
this.group_id = storage.group_id;
|
|
23
27
|
this.idLimitBytes = (options?.memoryLimitMB ?? DEFAULT_MEMORY_LIMIT_MB) * 1024 * 1024;
|
|
24
28
|
this.moveBatchLimit = options?.moveBatchLimit ?? DEFAULT_MOVE_BATCH_LIMIT;
|
|
25
29
|
this.moveBatchQueryLimit = options?.moveBatchQueryLimit ?? DEFAULT_MOVE_BATCH_QUERY_LIMIT;
|
|
26
30
|
this.clearBatchLimit = options?.clearBatchLimit ?? DEFAULT_CLEAR_BATCH_LIMIT;
|
|
27
|
-
this.maxOpId = options?.maxOpId;
|
|
31
|
+
this.maxOpId = options?.maxOpId ?? 0n;
|
|
28
32
|
this.buckets = options?.compactBuckets;
|
|
33
|
+
this.signal = options?.signal;
|
|
29
34
|
}
|
|
30
35
|
/**
|
|
31
36
|
* Compact buckets by converting operations into MOVE and/or CLEAR operations.
|
|
@@ -76,28 +81,50 @@ export class MongoCompactor {
|
|
|
76
81
|
b: bucketUpper,
|
|
77
82
|
o: new mongo.MaxKey()
|
|
78
83
|
};
|
|
79
|
-
|
|
84
|
+
const doneWithBucket = async () => {
|
|
85
|
+
if (currentState == null) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
// Free memory before clearing bucket
|
|
89
|
+
currentState.seen.clear();
|
|
90
|
+
if (currentState.lastNotPut != null && currentState.opsSincePut >= 1) {
|
|
91
|
+
logger.info(`Inserting CLEAR at ${this.group_id}:${currentState.bucket}:${currentState.lastNotPut} to remove ${currentState.opsSincePut} operations`);
|
|
92
|
+
// Need flush() before clear()
|
|
93
|
+
await this.flush();
|
|
94
|
+
await this.clearBucket(currentState);
|
|
95
|
+
}
|
|
96
|
+
// Do this _after_ clearBucket so that we have accurate counts.
|
|
97
|
+
this.updateBucketChecksums(currentState);
|
|
98
|
+
};
|
|
99
|
+
while (!this.signal?.aborted) {
|
|
80
100
|
// Query one batch at a time, to avoid cursor timeouts
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
_id: 1,
|
|
90
|
-
op: 1,
|
|
91
|
-
table: 1,
|
|
92
|
-
row_id: 1,
|
|
93
|
-
source_table: 1,
|
|
94
|
-
source_key: 1
|
|
101
|
+
const cursor = this.db.bucket_data.aggregate([
|
|
102
|
+
{
|
|
103
|
+
$match: {
|
|
104
|
+
_id: {
|
|
105
|
+
$gte: lowerBound,
|
|
106
|
+
$lt: upperBound
|
|
107
|
+
}
|
|
108
|
+
}
|
|
95
109
|
},
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
110
|
+
{ $sort: { _id: -1 } },
|
|
111
|
+
{ $limit: this.moveBatchQueryLimit },
|
|
112
|
+
{
|
|
113
|
+
$project: {
|
|
114
|
+
_id: 1,
|
|
115
|
+
op: 1,
|
|
116
|
+
table: 1,
|
|
117
|
+
row_id: 1,
|
|
118
|
+
source_table: 1,
|
|
119
|
+
source_key: 1,
|
|
120
|
+
checksum: 1,
|
|
121
|
+
size: { $bsonSize: '$$ROOT' }
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
], { batchSize: this.moveBatchQueryLimit });
|
|
125
|
+
// We don't limit to a single batch here, since that often causes MongoDB to scan through more than it returns.
|
|
126
|
+
// Instead, we load up to the limit.
|
|
127
|
+
const batch = await cursor.toArray();
|
|
101
128
|
if (batch.length == 0) {
|
|
102
129
|
// We've reached the end
|
|
103
130
|
break;
|
|
@@ -106,28 +133,25 @@ export class MongoCompactor {
|
|
|
106
133
|
upperBound = batch[batch.length - 1]._id;
|
|
107
134
|
for (let doc of batch) {
|
|
108
135
|
if (currentState == null || doc._id.b != currentState.bucket) {
|
|
109
|
-
|
|
110
|
-
// Important to flush before clearBucket()
|
|
111
|
-
await this.flush();
|
|
112
|
-
logger.info(`Inserting CLEAR at ${this.group_id}:${currentState.bucket}:${currentState.lastNotPut} to remove ${currentState.opsSincePut} operations`);
|
|
113
|
-
const bucket = currentState.bucket;
|
|
114
|
-
const clearOp = currentState.lastNotPut;
|
|
115
|
-
// Free memory before clearing bucket
|
|
116
|
-
currentState = null;
|
|
117
|
-
await this.clearBucket(bucket, clearOp);
|
|
118
|
-
}
|
|
136
|
+
await doneWithBucket();
|
|
119
137
|
currentState = {
|
|
120
138
|
bucket: doc._id.b,
|
|
121
139
|
seen: new Map(),
|
|
122
140
|
trackingSize: 0,
|
|
123
141
|
lastNotPut: null,
|
|
124
|
-
opsSincePut: 0
|
|
142
|
+
opsSincePut: 0,
|
|
143
|
+
checksum: 0,
|
|
144
|
+
opCount: 0,
|
|
145
|
+
opBytes: 0
|
|
125
146
|
};
|
|
126
147
|
}
|
|
127
|
-
if (
|
|
148
|
+
if (doc._id.o > this.maxOpId) {
|
|
128
149
|
continue;
|
|
129
150
|
}
|
|
151
|
+
currentState.checksum = addChecksums(currentState.checksum, Number(doc.checksum));
|
|
152
|
+
currentState.opCount += 1;
|
|
130
153
|
let isPersistentPut = doc.op == 'PUT';
|
|
154
|
+
currentState.opBytes += Number(doc.size);
|
|
131
155
|
if (doc.op == 'REMOVE' || doc.op == 'PUT') {
|
|
132
156
|
const key = `${doc.table}/${doc.row_id}/${cacheKey(doc.source_table, doc.source_key)}`;
|
|
133
157
|
const targetOp = currentState.seen.get(key);
|
|
@@ -154,6 +178,7 @@ export class MongoCompactor {
|
|
|
154
178
|
}
|
|
155
179
|
}
|
|
156
180
|
});
|
|
181
|
+
currentState.opBytes += 200 - Number(doc.size); // TODO: better estimate for this
|
|
157
182
|
}
|
|
158
183
|
else {
|
|
159
184
|
if (currentState.trackingSize >= idLimitBytes) {
|
|
@@ -181,21 +206,59 @@ export class MongoCompactor {
|
|
|
181
206
|
}
|
|
182
207
|
currentState.opsSincePut += 1;
|
|
183
208
|
}
|
|
184
|
-
if (this.updates.length >= this.moveBatchLimit) {
|
|
209
|
+
if (this.updates.length + this.bucketStateUpdates.length >= this.moveBatchLimit) {
|
|
185
210
|
await this.flush();
|
|
186
211
|
}
|
|
187
212
|
}
|
|
213
|
+
if (currentState != null) {
|
|
214
|
+
logger.info(`Processed batch of length ${batch.length} current bucket: ${currentState.bucket}`);
|
|
215
|
+
}
|
|
188
216
|
}
|
|
217
|
+
await doneWithBucket();
|
|
218
|
+
// Need another flush after updateBucketChecksums()
|
|
189
219
|
await this.flush();
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
await this.clearBucket(bucket, clearOp);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Call when done with a bucket.
|
|
223
|
+
*/
|
|
224
|
+
updateBucketChecksums(state) {
|
|
225
|
+
if (state.opCount < 0) {
|
|
226
|
+
throw new ServiceAssertionError(`Invalid opCount: ${state.opCount} checksum ${state.checksum} opsSincePut: ${state.opsSincePut} maxOpId: ${this.maxOpId}`);
|
|
198
227
|
}
|
|
228
|
+
this.bucketStateUpdates.push({
|
|
229
|
+
updateOne: {
|
|
230
|
+
filter: {
|
|
231
|
+
_id: {
|
|
232
|
+
g: this.group_id,
|
|
233
|
+
b: state.bucket
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
update: {
|
|
237
|
+
$set: {
|
|
238
|
+
compacted_state: {
|
|
239
|
+
op_id: this.maxOpId,
|
|
240
|
+
count: state.opCount,
|
|
241
|
+
checksum: BigInt(state.checksum),
|
|
242
|
+
bytes: state.opBytes
|
|
243
|
+
},
|
|
244
|
+
estimate_since_compact: {
|
|
245
|
+
// Note: There could have been a whole bunch of new operations added to the bucket _while_ compacting,
|
|
246
|
+
// which we don't currently cater for.
|
|
247
|
+
// We could potentially query for that, but that could add overhead.
|
|
248
|
+
count: 0,
|
|
249
|
+
bytes: 0
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
$setOnInsert: {
|
|
253
|
+
// Only set this if we're creating the document.
|
|
254
|
+
// In all other cases, the replication process will have a set a more accurate id.
|
|
255
|
+
last_op: this.maxOpId
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
// We generally expect this to have been created before, but do handle cases of old unchanged buckets
|
|
259
|
+
upsert: true
|
|
260
|
+
}
|
|
261
|
+
});
|
|
199
262
|
}
|
|
200
263
|
async flush() {
|
|
201
264
|
if (this.updates.length > 0) {
|
|
@@ -209,14 +272,24 @@ export class MongoCompactor {
|
|
|
209
272
|
});
|
|
210
273
|
this.updates = [];
|
|
211
274
|
}
|
|
275
|
+
if (this.bucketStateUpdates.length > 0) {
|
|
276
|
+
logger.info(`Updating ${this.bucketStateUpdates.length} bucket states`);
|
|
277
|
+
await this.db.bucket_state.bulkWrite(this.bucketStateUpdates, {
|
|
278
|
+
ordered: false
|
|
279
|
+
});
|
|
280
|
+
this.bucketStateUpdates = [];
|
|
281
|
+
}
|
|
212
282
|
}
|
|
213
283
|
/**
|
|
214
284
|
* Perform a CLEAR compact for a bucket.
|
|
215
285
|
*
|
|
286
|
+
*
|
|
216
287
|
* @param bucket bucket name
|
|
217
288
|
* @param op op_id of the last non-PUT operation, which will be converted to CLEAR.
|
|
218
289
|
*/
|
|
219
|
-
async clearBucket(
|
|
290
|
+
async clearBucket(currentState) {
|
|
291
|
+
const bucket = currentState.bucket;
|
|
292
|
+
const clearOp = currentState.lastNotPut;
|
|
220
293
|
const opFilter = {
|
|
221
294
|
_id: {
|
|
222
295
|
$gte: {
|
|
@@ -227,14 +300,15 @@ export class MongoCompactor {
|
|
|
227
300
|
$lte: {
|
|
228
301
|
g: this.group_id,
|
|
229
302
|
b: bucket,
|
|
230
|
-
o:
|
|
303
|
+
o: clearOp
|
|
231
304
|
}
|
|
232
305
|
}
|
|
233
306
|
};
|
|
234
307
|
const session = this.db.client.startSession();
|
|
235
308
|
try {
|
|
236
309
|
let done = false;
|
|
237
|
-
while (!done) {
|
|
310
|
+
while (!done && !this.signal?.aborted) {
|
|
311
|
+
let opCountDiff = 0;
|
|
238
312
|
// Do the CLEAR operation in batches, with each batch a separate transaction.
|
|
239
313
|
// The state after each batch is fully consistent.
|
|
240
314
|
// We need a transaction per batch to make sure checksums stay consistent.
|
|
@@ -295,15 +369,94 @@ export class MongoCompactor {
|
|
|
295
369
|
data: null,
|
|
296
370
|
target_op: targetOp
|
|
297
371
|
}, { session });
|
|
372
|
+
opCountDiff = -numberOfOpsToClear + 1;
|
|
298
373
|
}, {
|
|
299
374
|
writeConcern: { w: 'majority' },
|
|
300
375
|
readConcern: { level: 'snapshot' }
|
|
301
376
|
});
|
|
377
|
+
// Update _outside_ the transaction, since the transaction can be retried multiple times.
|
|
378
|
+
currentState.opCount += opCountDiff;
|
|
302
379
|
}
|
|
303
380
|
}
|
|
304
381
|
finally {
|
|
305
382
|
await session.endSession();
|
|
306
383
|
}
|
|
307
384
|
}
|
|
385
|
+
/**
|
|
386
|
+
* Subset of compact, only populating checksums where relevant.
|
|
387
|
+
*/
|
|
388
|
+
async populateChecksums() {
|
|
389
|
+
let lastId = null;
|
|
390
|
+
while (!this.signal?.aborted) {
|
|
391
|
+
// By filtering buckets, we effectively make this "resumeable".
|
|
392
|
+
let filter = {
|
|
393
|
+
compacted_state: { $exists: false }
|
|
394
|
+
};
|
|
395
|
+
if (lastId) {
|
|
396
|
+
filter._id = { $gt: lastId };
|
|
397
|
+
}
|
|
398
|
+
const bucketsWithoutChecksums = await this.db.bucket_state
|
|
399
|
+
.find(filter, {
|
|
400
|
+
projection: {
|
|
401
|
+
_id: 1
|
|
402
|
+
},
|
|
403
|
+
sort: {
|
|
404
|
+
_id: 1
|
|
405
|
+
},
|
|
406
|
+
limit: 5_000,
|
|
407
|
+
maxTimeMS: MONGO_OPERATION_TIMEOUT_MS
|
|
408
|
+
})
|
|
409
|
+
.toArray();
|
|
410
|
+
if (bucketsWithoutChecksums.length == 0) {
|
|
411
|
+
// All done
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
logger.info(`Calculating checksums for batch of ${bucketsWithoutChecksums.length} buckets`);
|
|
415
|
+
await this.updateChecksumsBatch(bucketsWithoutChecksums.map((b) => b._id.b));
|
|
416
|
+
lastId = bucketsWithoutChecksums[bucketsWithoutChecksums.length - 1]._id;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
async updateChecksumsBatch(buckets) {
|
|
420
|
+
const checksums = await this.storage.checksums.queryPartialChecksums(buckets.map((bucket) => {
|
|
421
|
+
return {
|
|
422
|
+
bucket,
|
|
423
|
+
end: this.maxOpId
|
|
424
|
+
};
|
|
425
|
+
}));
|
|
426
|
+
for (let bucketChecksum of checksums.values()) {
|
|
427
|
+
if (isPartialChecksum(bucketChecksum)) {
|
|
428
|
+
// Should never happen since we don't specify `start`
|
|
429
|
+
throw new ServiceAssertionError(`Full checksum expected, got ${JSON.stringify(bucketChecksum)}`);
|
|
430
|
+
}
|
|
431
|
+
this.bucketStateUpdates.push({
|
|
432
|
+
updateOne: {
|
|
433
|
+
filter: {
|
|
434
|
+
_id: {
|
|
435
|
+
g: this.group_id,
|
|
436
|
+
b: bucketChecksum.bucket
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
update: {
|
|
440
|
+
$set: {
|
|
441
|
+
compacted_state: {
|
|
442
|
+
op_id: this.maxOpId,
|
|
443
|
+
count: bucketChecksum.count,
|
|
444
|
+
checksum: BigInt(bucketChecksum.checksum),
|
|
445
|
+
bytes: null
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
$setOnInsert: {
|
|
449
|
+
// Only set this if we're creating the document.
|
|
450
|
+
// In all other cases, the replication process will have a set a more accurate id.
|
|
451
|
+
last_op: this.maxOpId
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
// We generally expect this to have been created before, but do handle cases of old unchanged buckets
|
|
455
|
+
upsert: true
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
await this.flush();
|
|
460
|
+
}
|
|
308
461
|
}
|
|
309
462
|
//# sourceMappingURL=MongoCompactor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoCompactor.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoCompactor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoCompactor.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoCompactor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
2
|
import { BaseObserver } from '@powersync/lib-services-framework';
|
|
3
|
-
import { CheckpointChanges, GetCheckpointChangesOptions, InternalOpId, ReplicationCheckpoint, storage, utils, WatchWriteCheckpointOptions } from '@powersync/service-core';
|
|
3
|
+
import { CheckpointChanges, CompactOptions, GetCheckpointChangesOptions, InternalOpId, ReplicationCheckpoint, storage, utils, WatchWriteCheckpointOptions } from '@powersync/service-core';
|
|
4
4
|
import { ParameterLookup, SqliteJsonRow, SqlSyncRules } from '@powersync/service-sync-rules';
|
|
5
5
|
import { MongoBucketStorage } from '../MongoBucketStorage.js';
|
|
6
|
+
import { MongoChecksums } from './MongoChecksums.js';
|
|
6
7
|
export declare class MongoSyncBucketStorage extends BaseObserver<storage.SyncRulesBucketStorageListener> implements storage.SyncRulesBucketStorage {
|
|
7
8
|
readonly factory: MongoBucketStorage;
|
|
8
9
|
readonly group_id: number;
|
|
9
10
|
private readonly sync_rules;
|
|
10
11
|
readonly slot_name: string;
|
|
11
12
|
private readonly db;
|
|
12
|
-
|
|
13
|
+
readonly checksums: MongoChecksums;
|
|
13
14
|
private parsedSyncRulesCache;
|
|
14
15
|
private writeCheckpointAPI;
|
|
15
16
|
constructor(factory: MongoBucketStorage, group_id: number, sync_rules: storage.PersistedSyncRulesContent, slot_name: string, writeCheckpointMode?: storage.WriteCheckpointMode);
|
|
@@ -25,13 +26,14 @@ export declare class MongoSyncBucketStorage extends BaseObserver<storage.SyncRul
|
|
|
25
26
|
getParameterSets(checkpoint: MongoReplicationCheckpoint, lookups: ParameterLookup[]): Promise<SqliteJsonRow[]>;
|
|
26
27
|
getBucketDataBatch(checkpoint: utils.InternalOpId, dataBuckets: Map<string, InternalOpId>, options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataChunk>;
|
|
27
28
|
getChecksums(checkpoint: utils.InternalOpId, buckets: string[]): Promise<utils.ChecksumMap>;
|
|
28
|
-
|
|
29
|
+
clearChecksumCache(): void;
|
|
29
30
|
terminate(options?: storage.TerminateOptions): Promise<void>;
|
|
30
31
|
getStatus(): Promise<storage.SyncRuleStatus>;
|
|
31
32
|
clear(options?: storage.ClearStorageOptions): Promise<void>;
|
|
32
33
|
private clearIteration;
|
|
33
34
|
reportError(e: any): Promise<void>;
|
|
34
35
|
compact(options?: storage.CompactOptions): Promise<void>;
|
|
36
|
+
populatePersistentChecksumCache(options: Required<Pick<CompactOptions, 'signal' | 'maxOpId'>>): Promise<void>;
|
|
35
37
|
/**
|
|
36
38
|
* Instance-wide watch on the latest available checkpoint (op_id + lsn).
|
|
37
39
|
*/
|
|
@@ -58,21 +58,18 @@ import * as bson from 'bson';
|
|
|
58
58
|
import { LRUCache } from 'lru-cache';
|
|
59
59
|
import * as timers from 'timers/promises';
|
|
60
60
|
import { MongoBucketBatch } from './MongoBucketBatch.js';
|
|
61
|
+
import { MongoChecksums } from './MongoChecksums.js';
|
|
61
62
|
import { MongoCompactor } from './MongoCompactor.js';
|
|
63
|
+
import { MongoParameterCompactor } from './MongoParameterCompactor.js';
|
|
62
64
|
import { MongoWriteCheckpointAPI } from './MongoWriteCheckpointAPI.js';
|
|
63
65
|
import { idPrefixFilter, mapOpEntry, readSingleBatch, setSessionSnapshotTime } from './util.js';
|
|
64
|
-
import { MongoParameterCompactor } from './MongoParameterCompactor.js';
|
|
65
66
|
export class MongoSyncBucketStorage extends BaseObserver {
|
|
66
67
|
factory;
|
|
67
68
|
group_id;
|
|
68
69
|
sync_rules;
|
|
69
70
|
slot_name;
|
|
70
71
|
db;
|
|
71
|
-
|
|
72
|
-
fetchChecksums: (batch) => {
|
|
73
|
-
return this.getChecksumsInternal(batch);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
72
|
+
checksums;
|
|
76
73
|
parsedSyncRulesCache;
|
|
77
74
|
writeCheckpointAPI;
|
|
78
75
|
constructor(factory, group_id, sync_rules, slot_name, writeCheckpointMode = storage.WriteCheckpointMode.MANAGED) {
|
|
@@ -82,6 +79,7 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
82
79
|
this.sync_rules = sync_rules;
|
|
83
80
|
this.slot_name = slot_name;
|
|
84
81
|
this.db = factory.db;
|
|
82
|
+
this.checksums = new MongoChecksums(this.db, this.group_id);
|
|
85
83
|
this.writeCheckpointAPI = new MongoWriteCheckpointAPI({
|
|
86
84
|
db: this.db,
|
|
87
85
|
mode: writeCheckpointMode,
|
|
@@ -457,67 +455,10 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
457
455
|
}
|
|
458
456
|
}
|
|
459
457
|
async getChecksums(checkpoint, buckets) {
|
|
460
|
-
return this.
|
|
458
|
+
return this.checksums.getChecksums(checkpoint, buckets);
|
|
461
459
|
}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
return new Map();
|
|
465
|
-
}
|
|
466
|
-
const filters = [];
|
|
467
|
-
for (let request of batch) {
|
|
468
|
-
filters.push({
|
|
469
|
-
_id: {
|
|
470
|
-
$gt: {
|
|
471
|
-
g: this.group_id,
|
|
472
|
-
b: request.bucket,
|
|
473
|
-
o: request.start ? BigInt(request.start) : new bson.MinKey()
|
|
474
|
-
},
|
|
475
|
-
$lte: {
|
|
476
|
-
g: this.group_id,
|
|
477
|
-
b: request.bucket,
|
|
478
|
-
o: BigInt(request.end)
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
const aggregate = await this.db.bucket_data
|
|
484
|
-
.aggregate([
|
|
485
|
-
{
|
|
486
|
-
$match: {
|
|
487
|
-
$or: filters
|
|
488
|
-
}
|
|
489
|
-
},
|
|
490
|
-
{
|
|
491
|
-
$group: {
|
|
492
|
-
_id: '$_id.b',
|
|
493
|
-
// Historically, checksum may be stored as 'int' or 'double'.
|
|
494
|
-
// More recently, this should be a 'long'.
|
|
495
|
-
// $toLong ensures that we always sum it as a long, avoiding inaccuracies in the calculations.
|
|
496
|
-
checksum_total: { $sum: { $toLong: '$checksum' } },
|
|
497
|
-
count: { $sum: 1 },
|
|
498
|
-
has_clear_op: {
|
|
499
|
-
$max: {
|
|
500
|
-
$cond: [{ $eq: ['$op', 'CLEAR'] }, 1, 0]
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
], { session: undefined, readConcern: 'snapshot', maxTimeMS: lib_mongo.db.MONGO_OPERATION_TIMEOUT_MS })
|
|
506
|
-
.toArray()
|
|
507
|
-
.catch((e) => {
|
|
508
|
-
throw lib_mongo.mapQueryError(e, 'while reading checksums');
|
|
509
|
-
});
|
|
510
|
-
return new Map(aggregate.map((doc) => {
|
|
511
|
-
return [
|
|
512
|
-
doc._id,
|
|
513
|
-
{
|
|
514
|
-
bucket: doc._id,
|
|
515
|
-
partialCount: doc.count,
|
|
516
|
-
partialChecksum: Number(BigInt(doc.checksum_total) & 0xffffffffn) & 0xffffffff,
|
|
517
|
-
isFullChecksum: doc.has_clear_op == 1
|
|
518
|
-
}
|
|
519
|
-
];
|
|
520
|
-
}));
|
|
460
|
+
clearChecksumCache() {
|
|
461
|
+
this.checksums.clearCache();
|
|
521
462
|
}
|
|
522
463
|
async terminate(options) {
|
|
523
464
|
// Default is to clear the storage except when explicitly requested not to.
|
|
@@ -622,11 +563,29 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
622
563
|
await this.db.notifyCheckpoint();
|
|
623
564
|
}
|
|
624
565
|
async compact(options) {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
566
|
+
let maxOpId = options?.maxOpId;
|
|
567
|
+
if (maxOpId == null) {
|
|
568
|
+
const checkpoint = await this.getCheckpointInternal();
|
|
569
|
+
maxOpId = checkpoint?.checkpoint ?? undefined;
|
|
629
570
|
}
|
|
571
|
+
await new MongoCompactor(this, this.db, { ...options, maxOpId }).compact();
|
|
572
|
+
if (maxOpId != null && options?.compactParameterData) {
|
|
573
|
+
await new MongoParameterCompactor(this.db, this.group_id, maxOpId, options).compact();
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
async populatePersistentChecksumCache(options) {
|
|
577
|
+
logger.info(`Populating persistent checksum cache...`);
|
|
578
|
+
const start = Date.now();
|
|
579
|
+
// We do a minimal compact here.
|
|
580
|
+
// We can optimize this in the future.
|
|
581
|
+
const compactor = new MongoCompactor(this, this.db, {
|
|
582
|
+
...options,
|
|
583
|
+
// Don't track updates for MOVE compacting
|
|
584
|
+
memoryLimitMB: 0
|
|
585
|
+
});
|
|
586
|
+
await compactor.populateChecksums();
|
|
587
|
+
const duration = Date.now() - start;
|
|
588
|
+
logger.info(`Populated persistent checksum cache in ${(duration / 1000).toFixed(1)}s`);
|
|
630
589
|
}
|
|
631
590
|
/**
|
|
632
591
|
* Instance-wide watch on the latest available checkpoint (op_id + lsn).
|