@powersync/service-module-mongodb-storage 0.0.0-dev-20250828090417 → 0.0.0-dev-20250828134335
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 +18 -9
- package/dist/storage/implementation/MongoCompactor.d.ts +9 -2
- package/dist/storage/implementation/MongoCompactor.js +83 -5
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +10 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.js +134 -52
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/util.d.ts +28 -1
- package/dist/storage/implementation/util.js +39 -0
- package/dist/storage/implementation/util.js.map +1 -1
- package/package.json +8 -8
- package/src/storage/implementation/MongoCompactor.ts +93 -3
- package/src/storage/implementation/MongoSyncBucketStorage.ts +165 -52
- package/src/storage/implementation/util.ts +42 -1
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
# @powersync/service-module-mongodb-storage
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250828134335
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- d74d874: Fix pre-computing of checksums after intial replication causing replication timeouts
|
|
8
|
+
- Updated dependencies [d74d874]
|
|
9
|
+
- @powersync/service-core@0.0.0-dev-20250828134335
|
|
10
|
+
- @powersync/lib-service-mongodb@0.0.0-dev-20250828134335
|
|
11
|
+
|
|
12
|
+
## 0.12.0
|
|
4
13
|
|
|
5
14
|
### Minor Changes
|
|
6
15
|
|
|
7
|
-
-
|
|
16
|
+
- 6d4a4d1: Create a persisted checksum cache when compacting buckets.
|
|
8
17
|
|
|
9
18
|
### Patch Changes
|
|
10
19
|
|
|
@@ -12,7 +21,7 @@
|
|
|
12
21
|
- 060b829: Update license abbreviation to FSL-1.1-ALv2.
|
|
13
22
|
- d49bebe: - Hooked up the MySQL binlog heartbeat events with the bucket batch keepalive mechanism.
|
|
14
23
|
Heartbeat events will now update the latest keepalive timestamp in the sync rules.
|
|
15
|
-
- Updated dependencies [
|
|
24
|
+
- Updated dependencies [6d4a4d1]
|
|
16
25
|
- Updated dependencies [b0b8ae9]
|
|
17
26
|
- Updated dependencies [d2be184]
|
|
18
27
|
- Updated dependencies [29a368e]
|
|
@@ -26,12 +35,12 @@
|
|
|
26
35
|
- Updated dependencies [86807d0]
|
|
27
36
|
- Updated dependencies [060b829]
|
|
28
37
|
- Updated dependencies [d49bebe]
|
|
29
|
-
- @powersync/service-core@
|
|
30
|
-
- @powersync/service-sync-rules@0.
|
|
31
|
-
- @powersync/service-types@0.
|
|
32
|
-
- @powersync/lib-service-mongodb@0.
|
|
33
|
-
- @powersync/lib-services-framework@0.
|
|
34
|
-
- @powersync/service-jsonbig@0.
|
|
38
|
+
- @powersync/service-core@1.15.0
|
|
39
|
+
- @powersync/service-sync-rules@0.29.0
|
|
40
|
+
- @powersync/service-types@0.13.0
|
|
41
|
+
- @powersync/lib-service-mongodb@0.6.4
|
|
42
|
+
- @powersync/lib-services-framework@0.7.3
|
|
43
|
+
- @powersync/service-jsonbig@0.17.11
|
|
35
44
|
|
|
36
45
|
## 0.11.0
|
|
37
46
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { storage } from '@powersync/service-core';
|
|
2
2
|
import { PowerSyncMongo } from './db.js';
|
|
3
|
+
import { MongoSyncBucketStorage } from './MongoSyncBucketStorage.js';
|
|
3
4
|
/**
|
|
4
5
|
* Additional options, primarily for testing.
|
|
5
6
|
*/
|
|
6
7
|
export interface MongoCompactOptions extends storage.CompactOptions {
|
|
7
8
|
}
|
|
8
9
|
export declare class MongoCompactor {
|
|
10
|
+
private storage;
|
|
9
11
|
private db;
|
|
10
|
-
private group_id;
|
|
11
12
|
private updates;
|
|
12
13
|
private bucketStateUpdates;
|
|
13
14
|
private idLimitBytes;
|
|
@@ -17,7 +18,8 @@ export declare class MongoCompactor {
|
|
|
17
18
|
private maxOpId;
|
|
18
19
|
private buckets;
|
|
19
20
|
private signal?;
|
|
20
|
-
|
|
21
|
+
private group_id;
|
|
22
|
+
constructor(storage: MongoSyncBucketStorage, db: PowerSyncMongo, options?: MongoCompactOptions);
|
|
21
23
|
/**
|
|
22
24
|
* Compact buckets by converting operations into MOVE and/or CLEAR operations.
|
|
23
25
|
*
|
|
@@ -38,4 +40,9 @@ export declare class MongoCompactor {
|
|
|
38
40
|
* @param op op_id of the last non-PUT operation, which will be converted to CLEAR.
|
|
39
41
|
*/
|
|
40
42
|
private clearBucket;
|
|
43
|
+
/**
|
|
44
|
+
* Subset of compact, only populating checksums where relevant.
|
|
45
|
+
*/
|
|
46
|
+
populateChecksums(): Promise<void>;
|
|
47
|
+
private updateChecksumsBatch;
|
|
41
48
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { mongo } from '@powersync/lib-service-mongodb';
|
|
1
|
+
import { mongo, MONGO_OPERATION_TIMEOUT_MS } from '@powersync/lib-service-mongodb';
|
|
2
2
|
import { logger, ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
-
import { addChecksums, utils } from '@powersync/service-core';
|
|
3
|
+
import { addChecksums, isPartialChecksum, utils } from '@powersync/service-core';
|
|
4
4
|
import { cacheKey } from './OperationBatch.js';
|
|
5
5
|
import { readSingleBatch } from './util.js';
|
|
6
6
|
const DEFAULT_CLEAR_BATCH_LIMIT = 5000;
|
|
@@ -9,8 +9,8 @@ const DEFAULT_MOVE_BATCH_QUERY_LIMIT = 10_000;
|
|
|
9
9
|
/** This default is primarily for tests. */
|
|
10
10
|
const DEFAULT_MEMORY_LIMIT_MB = 64;
|
|
11
11
|
export class MongoCompactor {
|
|
12
|
+
storage;
|
|
12
13
|
db;
|
|
13
|
-
group_id;
|
|
14
14
|
updates = [];
|
|
15
15
|
bucketStateUpdates = [];
|
|
16
16
|
idLimitBytes;
|
|
@@ -20,9 +20,11 @@ export class MongoCompactor {
|
|
|
20
20
|
maxOpId;
|
|
21
21
|
buckets;
|
|
22
22
|
signal;
|
|
23
|
-
|
|
23
|
+
group_id;
|
|
24
|
+
constructor(storage, db, options) {
|
|
25
|
+
this.storage = storage;
|
|
24
26
|
this.db = db;
|
|
25
|
-
this.group_id = group_id;
|
|
27
|
+
this.group_id = storage.group_id;
|
|
26
28
|
this.idLimitBytes = (options?.memoryLimitMB ?? DEFAULT_MEMORY_LIMIT_MB) * 1024 * 1024;
|
|
27
29
|
this.moveBatchLimit = options?.moveBatchLimit ?? DEFAULT_MOVE_BATCH_LIMIT;
|
|
28
30
|
this.moveBatchQueryLimit = options?.moveBatchQueryLimit ?? DEFAULT_MOVE_BATCH_QUERY_LIMIT;
|
|
@@ -383,5 +385,81 @@ export class MongoCompactor {
|
|
|
383
385
|
await session.endSession();
|
|
384
386
|
}
|
|
385
387
|
}
|
|
388
|
+
/**
|
|
389
|
+
* Subset of compact, only populating checksums where relevant.
|
|
390
|
+
*/
|
|
391
|
+
async populateChecksums() {
|
|
392
|
+
let lastId = null;
|
|
393
|
+
while (!this.signal?.aborted) {
|
|
394
|
+
// By filtering buckets, we effectively make this "resumeable".
|
|
395
|
+
let filter = {
|
|
396
|
+
compacted_state: { $exists: false }
|
|
397
|
+
};
|
|
398
|
+
if (lastId) {
|
|
399
|
+
filter._id = { $gt: lastId };
|
|
400
|
+
}
|
|
401
|
+
const bucketsWithoutChecksums = await this.db.bucket_state
|
|
402
|
+
.find(filter, {
|
|
403
|
+
projection: {
|
|
404
|
+
_id: 1
|
|
405
|
+
},
|
|
406
|
+
sort: {
|
|
407
|
+
_id: 1
|
|
408
|
+
},
|
|
409
|
+
limit: 5_000,
|
|
410
|
+
maxTimeMS: MONGO_OPERATION_TIMEOUT_MS
|
|
411
|
+
})
|
|
412
|
+
.toArray();
|
|
413
|
+
if (bucketsWithoutChecksums.length == 0) {
|
|
414
|
+
// All done
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
logger.info(`Calculating checksums for batch of ${bucketsWithoutChecksums.length} buckets`);
|
|
418
|
+
await this.updateChecksumsBatch(bucketsWithoutChecksums.map((b) => b._id.b));
|
|
419
|
+
lastId = bucketsWithoutChecksums[bucketsWithoutChecksums.length - 1]._id;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
async updateChecksumsBatch(buckets) {
|
|
423
|
+
const checksums = await this.storage.queryPartialChecksums(buckets.map((bucket) => {
|
|
424
|
+
return {
|
|
425
|
+
bucket,
|
|
426
|
+
end: this.maxOpId
|
|
427
|
+
};
|
|
428
|
+
}));
|
|
429
|
+
for (let bucketChecksum of checksums.values()) {
|
|
430
|
+
if (isPartialChecksum(bucketChecksum)) {
|
|
431
|
+
// Should never happen since we don't specify `start`
|
|
432
|
+
throw new ServiceAssertionError(`Full checksum expected, got ${JSON.stringify(bucketChecksum)}`);
|
|
433
|
+
}
|
|
434
|
+
this.bucketStateUpdates.push({
|
|
435
|
+
updateOne: {
|
|
436
|
+
filter: {
|
|
437
|
+
_id: {
|
|
438
|
+
g: this.group_id,
|
|
439
|
+
b: bucketChecksum.bucket
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
update: {
|
|
443
|
+
$set: {
|
|
444
|
+
compacted_state: {
|
|
445
|
+
op_id: this.maxOpId,
|
|
446
|
+
count: bucketChecksum.count,
|
|
447
|
+
checksum: BigInt(bucketChecksum.checksum),
|
|
448
|
+
bytes: 0 // We don't calculate that here
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
$setOnInsert: {
|
|
452
|
+
// Only set this if we're creating the document.
|
|
453
|
+
// In all other cases, the replication process will have a set a more accurate id.
|
|
454
|
+
last_op: this.maxOpId
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
// We generally expect this to have been created before, but do handle cases of old unchanged buckets
|
|
458
|
+
upsert: true
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
await this.flush();
|
|
463
|
+
}
|
|
386
464
|
}
|
|
387
465
|
//# 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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"}
|
|
@@ -27,13 +27,22 @@ export declare class MongoSyncBucketStorage extends BaseObserver<storage.SyncRul
|
|
|
27
27
|
getChecksums(checkpoint: utils.InternalOpId, buckets: string[]): Promise<utils.ChecksumMap>;
|
|
28
28
|
clearChecksumCache(): void;
|
|
29
29
|
private getChecksumsInternal;
|
|
30
|
+
queryPartialChecksums(batch: storage.FetchPartialBucketChecksum[]): Promise<storage.PartialChecksumMap>;
|
|
31
|
+
private queryPartialChecksumsInternal;
|
|
32
|
+
/**
|
|
33
|
+
* Checksums for large buckets can run over the query timeout.
|
|
34
|
+
* To avoid this, we query in batches.
|
|
35
|
+
* This version can handle larger amounts of data, but is slower, especially for many buckets.
|
|
36
|
+
*/
|
|
37
|
+
queryPartialChecksumsFallback(batch: storage.FetchPartialBucketChecksum[]): Promise<storage.PartialChecksumMap>;
|
|
38
|
+
private slowChecksum;
|
|
30
39
|
terminate(options?: storage.TerminateOptions): Promise<void>;
|
|
31
40
|
getStatus(): Promise<storage.SyncRuleStatus>;
|
|
32
41
|
clear(options?: storage.ClearStorageOptions): Promise<void>;
|
|
33
42
|
private clearIteration;
|
|
34
43
|
reportError(e: any): Promise<void>;
|
|
35
44
|
compact(options?: storage.CompactOptions): Promise<void>;
|
|
36
|
-
populatePersistentChecksumCache(options: Pick<CompactOptions, 'signal' | 'maxOpId'
|
|
45
|
+
populatePersistentChecksumCache(options: Required<Pick<CompactOptions, 'signal' | 'maxOpId'>>): Promise<void>;
|
|
37
46
|
/**
|
|
38
47
|
* Instance-wide watch on the latest available checkpoint (op_id + lsn).
|
|
39
48
|
*/
|
|
@@ -52,7 +52,7 @@ var __disposeResources = (this && this.__disposeResources) || (function (Suppres
|
|
|
52
52
|
});
|
|
53
53
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
54
54
|
import { BaseObserver, logger, ReplicationAbortedError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
55
|
-
import { addPartialChecksums, BroadcastIterable, CHECKPOINT_INVALIDATE_ALL, deserializeParameterLookup, internalToExternalOpId, maxLsn, storage } from '@powersync/service-core';
|
|
55
|
+
import { addPartialChecksums, BroadcastIterable, CHECKPOINT_INVALIDATE_ALL, deserializeParameterLookup, internalToExternalOpId, isPartialChecksum, maxLsn, storage } from '@powersync/service-core';
|
|
56
56
|
import { JSONBig } from '@powersync/service-jsonbig';
|
|
57
57
|
import * as bson from 'bson';
|
|
58
58
|
import { LRUCache } from 'lru-cache';
|
|
@@ -61,7 +61,7 @@ import { MongoBucketBatch } from './MongoBucketBatch.js';
|
|
|
61
61
|
import { MongoCompactor } from './MongoCompactor.js';
|
|
62
62
|
import { MongoParameterCompactor } from './MongoParameterCompactor.js';
|
|
63
63
|
import { MongoWriteCheckpointAPI } from './MongoWriteCheckpointAPI.js';
|
|
64
|
-
import { idPrefixFilter, mapOpEntry, readSingleBatch, setSessionSnapshotTime } from './util.js';
|
|
64
|
+
import { CHECKSUM_QUERY_GROUP_STAGE, checksumFromAggregate, idPrefixFilter, mapOpEntry, readSingleBatch, setSessionSnapshotTime } from './util.js';
|
|
65
65
|
export class MongoSyncBucketStorage extends BaseObserver {
|
|
66
66
|
factory;
|
|
67
67
|
group_id;
|
|
@@ -498,8 +498,7 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
498
498
|
});
|
|
499
499
|
}
|
|
500
500
|
}
|
|
501
|
-
const
|
|
502
|
-
for (let request of batch) {
|
|
501
|
+
const mappedRequests = batch.map((request) => {
|
|
503
502
|
let start = request.start;
|
|
504
503
|
if (start == null) {
|
|
505
504
|
const preState = preStates.get(request.bucket);
|
|
@@ -507,12 +506,44 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
507
506
|
start = preState.opId;
|
|
508
507
|
}
|
|
509
508
|
}
|
|
509
|
+
return {
|
|
510
|
+
...request,
|
|
511
|
+
start
|
|
512
|
+
};
|
|
513
|
+
});
|
|
514
|
+
const queriedChecksums = await this.queryPartialChecksums(mappedRequests);
|
|
515
|
+
return new Map(batch.map((request) => {
|
|
516
|
+
const bucket = request.bucket;
|
|
517
|
+
// Could be null if this is either (1) a partial request, or (2) no compacted checksum was available
|
|
518
|
+
const preState = preStates.get(bucket);
|
|
519
|
+
// Could be null if we got no data
|
|
520
|
+
const partialChecksum = queriedChecksums.get(bucket);
|
|
521
|
+
const merged = addPartialChecksums(bucket, preState?.checksum ?? null, partialChecksum ?? null);
|
|
522
|
+
return [bucket, merged];
|
|
523
|
+
}));
|
|
524
|
+
}
|
|
525
|
+
async queryPartialChecksums(batch) {
|
|
526
|
+
try {
|
|
527
|
+
return await this.queryPartialChecksumsInternal(batch);
|
|
528
|
+
}
|
|
529
|
+
catch (e) {
|
|
530
|
+
if (e.codeName == 'MaxTimeMSExpired') {
|
|
531
|
+
logger.warn(`Checksum query timed out; falling back to slower version`, e);
|
|
532
|
+
// Timeout - try the slower but more robust version
|
|
533
|
+
return await this.queryPartialChecksumsFallback(batch);
|
|
534
|
+
}
|
|
535
|
+
throw lib_mongo.mapQueryError(e, 'while reading checksums');
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
async queryPartialChecksumsInternal(batch) {
|
|
539
|
+
const filters = [];
|
|
540
|
+
for (let request of batch) {
|
|
510
541
|
filters.push({
|
|
511
542
|
_id: {
|
|
512
543
|
$gt: {
|
|
513
544
|
g: this.group_id,
|
|
514
545
|
b: request.bucket,
|
|
515
|
-
o: start ?? new bson.MinKey()
|
|
546
|
+
o: request.start ?? new bson.MinKey()
|
|
516
547
|
},
|
|
517
548
|
$lte: {
|
|
518
549
|
g: this.group_id,
|
|
@@ -529,56 +560,106 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
529
560
|
$or: filters
|
|
530
561
|
}
|
|
531
562
|
},
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
// More recently, this should be a 'long'.
|
|
537
|
-
// $toLong ensures that we always sum it as a long, avoiding inaccuracies in the calculations.
|
|
538
|
-
checksum_total: { $sum: { $toLong: '$checksum' } },
|
|
539
|
-
count: { $sum: 1 },
|
|
540
|
-
has_clear_op: {
|
|
541
|
-
$max: {
|
|
542
|
-
$cond: [{ $eq: ['$op', 'CLEAR'] }, 1, 0]
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
], { session: undefined, readConcern: 'snapshot', maxTimeMS: lib_mongo.db.MONGO_CHECKSUM_TIMEOUT_MS })
|
|
548
|
-
.toArray()
|
|
549
|
-
.catch((e) => {
|
|
550
|
-
throw lib_mongo.mapQueryError(e, 'while reading checksums');
|
|
551
|
-
});
|
|
563
|
+
CHECKSUM_QUERY_GROUP_STAGE
|
|
564
|
+
], { session: undefined, readConcern: 'snapshot', maxTimeMS: lib_mongo.MONGO_CHECKSUM_TIMEOUT_MS })
|
|
565
|
+
// Don't map the error here - we want to keep timeout errors as-is
|
|
566
|
+
.toArray();
|
|
552
567
|
const partialChecksums = new Map(aggregate.map((doc) => {
|
|
553
|
-
const partialChecksum = Number(BigInt(doc.checksum_total) & 0xffffffffn) & 0xffffffff;
|
|
554
568
|
const bucket = doc._id;
|
|
555
|
-
return [
|
|
556
|
-
bucket,
|
|
557
|
-
doc.has_clear_op == 1
|
|
558
|
-
? {
|
|
559
|
-
// full checksum - replaces any previous one
|
|
560
|
-
bucket,
|
|
561
|
-
checksum: partialChecksum,
|
|
562
|
-
count: doc.count
|
|
563
|
-
}
|
|
564
|
-
: {
|
|
565
|
-
// partial checksum - is added to a previous one
|
|
566
|
-
bucket,
|
|
567
|
-
partialCount: doc.count,
|
|
568
|
-
partialChecksum
|
|
569
|
-
}
|
|
570
|
-
];
|
|
569
|
+
return [bucket, checksumFromAggregate(doc)];
|
|
571
570
|
}));
|
|
572
571
|
return new Map(batch.map((request) => {
|
|
573
572
|
const bucket = request.bucket;
|
|
574
|
-
// Could be null if this is either (1) a partial request, or (2) no compacted checksum was available
|
|
575
|
-
const preState = preStates.get(bucket);
|
|
576
573
|
// Could be null if we got no data
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
574
|
+
let partialChecksum = partialChecksums.get(bucket);
|
|
575
|
+
if (partialChecksum == null) {
|
|
576
|
+
partialChecksum = {
|
|
577
|
+
bucket,
|
|
578
|
+
partialCount: 0,
|
|
579
|
+
partialChecksum: 0
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
if (request.start == null && isPartialChecksum(partialChecksum)) {
|
|
583
|
+
partialChecksum = {
|
|
584
|
+
bucket,
|
|
585
|
+
count: partialChecksum.partialCount,
|
|
586
|
+
checksum: partialChecksum.partialChecksum
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
return [bucket, partialChecksum];
|
|
580
590
|
}));
|
|
581
591
|
}
|
|
592
|
+
/**
|
|
593
|
+
* Checksums for large buckets can run over the query timeout.
|
|
594
|
+
* To avoid this, we query in batches.
|
|
595
|
+
* This version can handle larger amounts of data, but is slower, especially for many buckets.
|
|
596
|
+
*/
|
|
597
|
+
async queryPartialChecksumsFallback(batch) {
|
|
598
|
+
const partialChecksums = new Map();
|
|
599
|
+
for (let request of batch) {
|
|
600
|
+
const checksum = await this.slowChecksum(request);
|
|
601
|
+
partialChecksums.set(request.bucket, checksum);
|
|
602
|
+
}
|
|
603
|
+
return partialChecksums;
|
|
604
|
+
}
|
|
605
|
+
async slowChecksum(request) {
|
|
606
|
+
const batchLimit = 50_000;
|
|
607
|
+
let lowerBound = 0n;
|
|
608
|
+
const bucket = request.bucket;
|
|
609
|
+
let runningChecksum = {
|
|
610
|
+
bucket,
|
|
611
|
+
partialCount: 0,
|
|
612
|
+
partialChecksum: 0
|
|
613
|
+
};
|
|
614
|
+
if (request.start == null) {
|
|
615
|
+
runningChecksum = {
|
|
616
|
+
bucket,
|
|
617
|
+
count: 0,
|
|
618
|
+
checksum: 0
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
while (true) {
|
|
622
|
+
const filter = {
|
|
623
|
+
_id: {
|
|
624
|
+
$gt: {
|
|
625
|
+
g: this.group_id,
|
|
626
|
+
b: bucket,
|
|
627
|
+
o: lowerBound
|
|
628
|
+
},
|
|
629
|
+
$lte: {
|
|
630
|
+
g: this.group_id,
|
|
631
|
+
b: bucket,
|
|
632
|
+
o: request.end
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
};
|
|
636
|
+
const docs = await this.db.bucket_data
|
|
637
|
+
.aggregate([
|
|
638
|
+
{
|
|
639
|
+
$match: filter
|
|
640
|
+
},
|
|
641
|
+
// sort and limit _before_ grouping
|
|
642
|
+
{ $sort: { _id: 1 } },
|
|
643
|
+
{ $limit: batchLimit },
|
|
644
|
+
CHECKSUM_QUERY_GROUP_STAGE
|
|
645
|
+
], { session: undefined, readConcern: 'snapshot', maxTimeMS: lib_mongo.MONGO_CHECKSUM_TIMEOUT_MS })
|
|
646
|
+
.toArray();
|
|
647
|
+
const doc = docs[0];
|
|
648
|
+
if (doc == null) {
|
|
649
|
+
return runningChecksum;
|
|
650
|
+
}
|
|
651
|
+
const partial = checksumFromAggregate(doc);
|
|
652
|
+
runningChecksum = addPartialChecksums(bucket, runningChecksum, partial);
|
|
653
|
+
const isFinal = doc.count != batchLimit;
|
|
654
|
+
if (isFinal) {
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
else {
|
|
658
|
+
lowerBound = doc.last_op;
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
return runningChecksum;
|
|
662
|
+
}
|
|
582
663
|
async terminate(options) {
|
|
583
664
|
// Default is to clear the storage except when explicitly requested not to.
|
|
584
665
|
if (!options || options?.clearStorage) {
|
|
@@ -687,21 +768,22 @@ export class MongoSyncBucketStorage extends BaseObserver {
|
|
|
687
768
|
const checkpoint = await this.getCheckpointInternal();
|
|
688
769
|
maxOpId = checkpoint?.checkpoint ?? undefined;
|
|
689
770
|
}
|
|
690
|
-
await new MongoCompactor(this
|
|
771
|
+
await new MongoCompactor(this, this.db, { ...options, maxOpId }).compact();
|
|
691
772
|
if (maxOpId != null && options?.compactParameterData) {
|
|
692
773
|
await new MongoParameterCompactor(this.db, this.group_id, maxOpId, options).compact();
|
|
693
774
|
}
|
|
694
775
|
}
|
|
695
776
|
async populatePersistentChecksumCache(options) {
|
|
777
|
+
logger.info(`Populating persistent checksum cache...`);
|
|
696
778
|
const start = Date.now();
|
|
697
|
-
// We do a minimal compact
|
|
698
|
-
|
|
779
|
+
// We do a minimal compact here.
|
|
780
|
+
// We can optimize this in the future.
|
|
781
|
+
const compactor = new MongoCompactor(this, this.db, {
|
|
699
782
|
...options,
|
|
700
|
-
// Skip parameter data
|
|
701
|
-
compactParameterData: false,
|
|
702
783
|
// Don't track updates for MOVE compacting
|
|
703
784
|
memoryLimitMB: 0
|
|
704
785
|
});
|
|
786
|
+
await compactor.populateChecksums();
|
|
705
787
|
const duration = Date.now() - start;
|
|
706
788
|
logger.info(`Populated persistent checksum cache in ${(duration / 1000).toFixed(1)}s`);
|
|
707
789
|
}
|