@powersync/service-core 0.2.0 → 0.2.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 +8 -0
- package/dist/storage/BucketStorage.d.ts +6 -1
- package/dist/storage/BucketStorage.js.map +1 -1
- package/dist/storage/ChecksumCache.d.ts +50 -0
- package/dist/storage/ChecksumCache.js +234 -0
- package/dist/storage/ChecksumCache.js.map +1 -0
- package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +3 -1
- package/dist/storage/mongo/MongoSyncBucketStorage.js +26 -14
- package/dist/storage/mongo/MongoSyncBucketStorage.js.map +1 -1
- package/dist/sync/sync.js +32 -21
- package/dist/sync/sync.js.map +1 -1
- package/dist/util/utils.d.ts +6 -3
- package/dist/util/utils.js +32 -15
- package/dist/util/utils.js.map +1 -1
- package/package.json +6 -5
- package/src/storage/BucketStorage.ts +6 -1
- package/src/storage/ChecksumCache.ts +294 -0
- package/src/storage/mongo/MongoSyncBucketStorage.ts +31 -15
- package/src/sync/sync.ts +44 -37
- package/src/util/utils.ts +36 -16
- package/test/src/__snapshots__/sync.test.ts.snap +14 -2
- package/test/src/checksum_cache.test.ts +436 -0
- package/test/src/data_storage.test.ts +3 -3
- package/test/src/large_batch.test.ts +4 -4
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @powersync/service-core
|
|
2
2
|
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4a57787:
|
|
8
|
+
- Use a LRU cache for checksum computations, improving performance and reducing MongoDB database load.
|
|
9
|
+
- Return zero checksums to the client instead of omitting, to help with debugging sync issues.
|
|
10
|
+
|
|
3
11
|
## 0.2.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
|
@@ -176,7 +176,12 @@ export interface SyncRulesBucketStorage {
|
|
|
176
176
|
* @param options batch size options
|
|
177
177
|
*/
|
|
178
178
|
getBucketDataBatch(checkpoint: util.OpId, dataBuckets: Map<string, string>, options?: BucketDataBatchOptions): AsyncIterable<util.SyncBucketData>;
|
|
179
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Compute checksums for a given list of buckets.
|
|
181
|
+
*
|
|
182
|
+
* Returns zero checksums for any buckets not found.
|
|
183
|
+
*/
|
|
184
|
+
getChecksums(checkpoint: util.OpId, buckets: string[]): Promise<util.ChecksumMap>;
|
|
180
185
|
/**
|
|
181
186
|
* Terminate the sync rules.
|
|
182
187
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"AA+JA,MAAM,OAAO,yBAAyB;IAGpC,YAA4B,EAAU,EAAkB,UAAwB,EAAE,cAA6B;QAAnF,OAAE,GAAF,EAAE,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAc;QAC9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC;CACF;AAYD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"BucketStorage.js","sourceRoot":"","sources":["../../src/storage/BucketStorage.ts"],"names":[],"mappings":"AA+JA,MAAM,OAAO,yBAAyB;IAGpC,YAA4B,EAAU,EAAkB,UAAwB,EAAE,cAA6B;QAAnF,OAAE,GAAF,EAAE,CAAQ;QAAkB,eAAU,GAAV,UAAU,CAAc;QAC9E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC;CACF;AAYD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AA2MlE,MAAM,UAAU,UAAU,CAAC,MAA0B,EAAE,SAA6B;IAClF,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { BucketChecksum, OpId } from '../util/protocol-types.js';
|
|
2
|
+
import { ChecksumMap } from '../util/utils.js';
|
|
3
|
+
export interface FetchPartialBucketChecksum {
|
|
4
|
+
bucket: string;
|
|
5
|
+
start?: OpId;
|
|
6
|
+
end: OpId;
|
|
7
|
+
}
|
|
8
|
+
export type FetchChecksums = (batch: FetchPartialBucketChecksum[]) => Promise<ChecksumMap>;
|
|
9
|
+
export interface ChecksumCacheOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Upstream checksum implementation.
|
|
12
|
+
*
|
|
13
|
+
* This fetches a batch of either entire bucket checksums, or a partial range.
|
|
14
|
+
*/
|
|
15
|
+
fetchChecksums: FetchChecksums;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum number of cached checksums.
|
|
18
|
+
*/
|
|
19
|
+
maxSize?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Implement a LRU cache for checksum requests. Each (bucket, checkpoint) request is cached separately,
|
|
23
|
+
* while the lookups occur in batches.
|
|
24
|
+
*
|
|
25
|
+
* For each bucket, we keep a separate OrderedSet of cached checkpoints.
|
|
26
|
+
* This allows us to do incrementally update checksums by using the last cached checksum for the same bucket.
|
|
27
|
+
*
|
|
28
|
+
* We use the LRUCache fetchMethod to deduplicate in-progress requests.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ChecksumCache {
|
|
31
|
+
/**
|
|
32
|
+
* The primary checksum cache, with key of `${checkpoint}/${bucket}`.
|
|
33
|
+
*/
|
|
34
|
+
private cache;
|
|
35
|
+
/**
|
|
36
|
+
* For each bucket, an ordered set of cached checkpoints.
|
|
37
|
+
*/
|
|
38
|
+
private bucketCheckpoints;
|
|
39
|
+
private fetchChecksums;
|
|
40
|
+
constructor(options: ChecksumCacheOptions);
|
|
41
|
+
getChecksums(checkpoint: OpId, buckets: string[]): Promise<BucketChecksum[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Get bucket checksums for a checkpoint.
|
|
44
|
+
*
|
|
45
|
+
* Any checksums not found upstream are returned as zero checksums.
|
|
46
|
+
*
|
|
47
|
+
* @returns a Map with exactly one entry for each bucket requested
|
|
48
|
+
*/
|
|
49
|
+
getChecksumMap(checkpoint: OpId, buckets: string[]): Promise<ChecksumMap>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { addBucketChecksums } from '../util/utils.js';
|
|
2
|
+
import { LRUCache } from 'lru-cache/min';
|
|
3
|
+
import { OrderedSet } from '@js-sdsl/ordered-set';
|
|
4
|
+
// Approximately 5MB of memory, if we assume 50 bytes per entry
|
|
5
|
+
const DEFAULT_MAX_SIZE = 100000;
|
|
6
|
+
/**
|
|
7
|
+
* Implement a LRU cache for checksum requests. Each (bucket, checkpoint) request is cached separately,
|
|
8
|
+
* while the lookups occur in batches.
|
|
9
|
+
*
|
|
10
|
+
* For each bucket, we keep a separate OrderedSet of cached checkpoints.
|
|
11
|
+
* This allows us to do incrementally update checksums by using the last cached checksum for the same bucket.
|
|
12
|
+
*
|
|
13
|
+
* We use the LRUCache fetchMethod to deduplicate in-progress requests.
|
|
14
|
+
*/
|
|
15
|
+
export class ChecksumCache {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
/**
|
|
18
|
+
* For each bucket, an ordered set of cached checkpoints.
|
|
19
|
+
*/
|
|
20
|
+
this.bucketCheckpoints = new Map();
|
|
21
|
+
this.fetchChecksums = options.fetchChecksums;
|
|
22
|
+
this.cache = new LRUCache({
|
|
23
|
+
max: options.maxSize ?? DEFAULT_MAX_SIZE,
|
|
24
|
+
fetchMethod: async (cacheKey, _staleValue, options) => {
|
|
25
|
+
// Called when this checksum hasn't been cached yet.
|
|
26
|
+
// Pass the call back to the request, which implements batch fetching.
|
|
27
|
+
const { bucket } = parseCacheKey(cacheKey);
|
|
28
|
+
const result = await options.context.fetch(bucket);
|
|
29
|
+
// Add to the set of cached checkpoints for the bucket.
|
|
30
|
+
let checkpointSet = this.bucketCheckpoints.get(bucket);
|
|
31
|
+
if (checkpointSet == null) {
|
|
32
|
+
checkpointSet = new OrderedSet();
|
|
33
|
+
this.bucketCheckpoints.set(bucket, checkpointSet);
|
|
34
|
+
}
|
|
35
|
+
checkpointSet.insert(options.context.checkpoint);
|
|
36
|
+
return result;
|
|
37
|
+
},
|
|
38
|
+
dispose: (value, key) => {
|
|
39
|
+
// Remove from the set of cached checkpoints for the bucket
|
|
40
|
+
const { checkpointString } = parseCacheKey(key);
|
|
41
|
+
const checkpoint = BigInt(checkpointString);
|
|
42
|
+
const checkpointSet = this.bucketCheckpoints.get(value.bucket);
|
|
43
|
+
if (checkpointSet == null) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
checkpointSet.eraseElementByKey(checkpoint);
|
|
47
|
+
if (checkpointSet.length == 0) {
|
|
48
|
+
this.bucketCheckpoints.delete(value.bucket);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
noDisposeOnSet: true,
|
|
52
|
+
// When we have more fetches than the cache size, complete the fetches instead
|
|
53
|
+
// of failing with Error('evicted').
|
|
54
|
+
ignoreFetchAbort: true
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
async getChecksums(checkpoint, buckets) {
|
|
58
|
+
const checksums = await this.getChecksumMap(checkpoint, buckets);
|
|
59
|
+
// Return results in the same order as the request
|
|
60
|
+
return buckets.map((bucket) => checksums.get(bucket));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get bucket checksums for a checkpoint.
|
|
64
|
+
*
|
|
65
|
+
* Any checksums not found upstream are returned as zero checksums.
|
|
66
|
+
*
|
|
67
|
+
* @returns a Map with exactly one entry for each bucket requested
|
|
68
|
+
*/
|
|
69
|
+
async getChecksumMap(checkpoint, buckets) {
|
|
70
|
+
// Buckets that don't have a cached checksum for this checkpoint yet
|
|
71
|
+
let toFetch = new Set();
|
|
72
|
+
// Newly fetched results
|
|
73
|
+
let fetchResults = new Map();
|
|
74
|
+
// Promise for the bactch new fetch requests
|
|
75
|
+
let resolveFetch;
|
|
76
|
+
let rejectFetch;
|
|
77
|
+
let fetchPromise = new Promise((resolve, reject) => {
|
|
78
|
+
resolveFetch = resolve;
|
|
79
|
+
rejectFetch = reject;
|
|
80
|
+
});
|
|
81
|
+
// Accumulated results - both from cached checksums, and fetched checksums
|
|
82
|
+
let finalResults = new Map();
|
|
83
|
+
const context = {
|
|
84
|
+
async fetch(bucket) {
|
|
85
|
+
await fetchPromise;
|
|
86
|
+
if (!toFetch.has(bucket)) {
|
|
87
|
+
// Should never happen
|
|
88
|
+
throw new Error(`Expected to fetch ${bucket}`);
|
|
89
|
+
}
|
|
90
|
+
const checksum = fetchResults.get(bucket);
|
|
91
|
+
if (checksum == null) {
|
|
92
|
+
// Should never happen
|
|
93
|
+
throw new Error(`Failed to fetch checksum for bucket ${bucket}`);
|
|
94
|
+
}
|
|
95
|
+
return checksum;
|
|
96
|
+
},
|
|
97
|
+
checkpoint: BigInt(checkpoint)
|
|
98
|
+
};
|
|
99
|
+
// One promise to await to ensure all fetch requests completed.
|
|
100
|
+
let settledPromise = null;
|
|
101
|
+
try {
|
|
102
|
+
// Individual cache fetch promises
|
|
103
|
+
let cacheFetchPromises = [];
|
|
104
|
+
for (let bucket of buckets) {
|
|
105
|
+
const cacheKey = makeCacheKey(checkpoint, bucket);
|
|
106
|
+
let status = {};
|
|
107
|
+
const p = this.cache.fetch(cacheKey, { context: context, status: status }).then((checksums) => {
|
|
108
|
+
if (checksums == null) {
|
|
109
|
+
// Should never happen
|
|
110
|
+
throw new Error(`Failed to get checksums for ${cacheKey}`);
|
|
111
|
+
}
|
|
112
|
+
finalResults.set(bucket, checksums);
|
|
113
|
+
});
|
|
114
|
+
cacheFetchPromises.push(p);
|
|
115
|
+
if (status.fetch == 'hit' || status.fetch == 'inflight') {
|
|
116
|
+
// The checksums is either cached already (hit), or another request is busy
|
|
117
|
+
// fetching (inflight).
|
|
118
|
+
// In either case, we don't need to fetch a new checksum.
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// We need a new request for this checksum.
|
|
122
|
+
toFetch.add(bucket);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// We do this directly after creating the promises, otherwise
|
|
126
|
+
// we could end up with weird uncaught rejection errors.
|
|
127
|
+
settledPromise = Promise.allSettled(cacheFetchPromises);
|
|
128
|
+
if (toFetch.size == 0) {
|
|
129
|
+
// Nothing to fetch, but resolve in case
|
|
130
|
+
resolveFetch();
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
let bucketRequests = [];
|
|
134
|
+
// Partial checksum (previously cached) to add to the partial fetch
|
|
135
|
+
let add = new Map();
|
|
136
|
+
for (let bucket of toFetch) {
|
|
137
|
+
let bucketRequest = null;
|
|
138
|
+
const checkpointSet = this.bucketCheckpoints.get(bucket);
|
|
139
|
+
if (checkpointSet != null) {
|
|
140
|
+
// Find smaller checkpoints, sorted in descending order
|
|
141
|
+
let iter = checkpointSet.reverseUpperBound(context.checkpoint);
|
|
142
|
+
const begin = checkpointSet.begin();
|
|
143
|
+
while (iter.isAccessible()) {
|
|
144
|
+
const cp = iter.pointer;
|
|
145
|
+
const cacheKey = makeCacheKey(cp, bucket);
|
|
146
|
+
// peek to avoid refreshing the key
|
|
147
|
+
const cached = this.cache.peek(cacheKey);
|
|
148
|
+
// As long as dispose() works correctly, the checkpointset should
|
|
149
|
+
// match up with the cache, and `cached` should also have a value here.
|
|
150
|
+
// However, we handle caces where it's not present either way.
|
|
151
|
+
// Test by disabling the `dispose()` callback.
|
|
152
|
+
if (cached != null) {
|
|
153
|
+
// Partial checksum found - make a partial checksum request
|
|
154
|
+
bucketRequest = {
|
|
155
|
+
bucket,
|
|
156
|
+
start: cp.toString(),
|
|
157
|
+
end: checkpoint
|
|
158
|
+
};
|
|
159
|
+
add.set(bucket, cached);
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
if (iter.equals(begin)) {
|
|
163
|
+
// Cannot iterate further
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
// Iterate backwards
|
|
167
|
+
iter = iter.pre();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (bucketRequest == null) {
|
|
171
|
+
// No partial checksum found - make a new full checksum request
|
|
172
|
+
bucketRequest = {
|
|
173
|
+
bucket,
|
|
174
|
+
end: checkpoint
|
|
175
|
+
};
|
|
176
|
+
add.set(bucket, {
|
|
177
|
+
bucket,
|
|
178
|
+
checksum: 0,
|
|
179
|
+
count: 0
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
bucketRequests.push(bucketRequest);
|
|
183
|
+
}
|
|
184
|
+
// Fetch partial checksums from upstream
|
|
185
|
+
const results = await this.fetchChecksums(bucketRequests);
|
|
186
|
+
for (let bucket of toFetch) {
|
|
187
|
+
const result = results.get(bucket);
|
|
188
|
+
const toAdd = add.get(bucket);
|
|
189
|
+
if (toAdd == null) {
|
|
190
|
+
// Should never happen
|
|
191
|
+
throw new Error(`toAdd null for ${bucket}`);
|
|
192
|
+
}
|
|
193
|
+
// Compute the full checksum from the two partials.
|
|
194
|
+
// No results returned are treated the same as a zero result.
|
|
195
|
+
const added = addBucketChecksums(toAdd, result ?? null);
|
|
196
|
+
fetchResults.set(bucket, added);
|
|
197
|
+
}
|
|
198
|
+
// fetchResults is fully populated, so we resolve the Promise
|
|
199
|
+
resolveFetch();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (e) {
|
|
203
|
+
// Failure when fetching checksums - reject the Promise.
|
|
204
|
+
// This will reject all individual cache fetch requests, and each will be retried
|
|
205
|
+
// on the next request.
|
|
206
|
+
rejectFetch(e);
|
|
207
|
+
// Wait for the above rejection to propagate, otherwise we end up with "uncaught" errors.
|
|
208
|
+
// This promise never throws.
|
|
209
|
+
await settledPromise;
|
|
210
|
+
throw e;
|
|
211
|
+
}
|
|
212
|
+
// Wait for all cache fetch reqeusts to complete
|
|
213
|
+
const settledResults = (await settledPromise) ?? [];
|
|
214
|
+
// Check if any of them failed
|
|
215
|
+
for (let result of settledResults) {
|
|
216
|
+
if (result.status == 'rejected') {
|
|
217
|
+
throw result.reason;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (finalResults.size != buckets.length) {
|
|
221
|
+
// Should not happen
|
|
222
|
+
throw new Error(`Bucket results mismatch: ${finalResults.size} != ${buckets.length}`);
|
|
223
|
+
}
|
|
224
|
+
return finalResults;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function makeCacheKey(checkpoint, bucket) {
|
|
228
|
+
return `${checkpoint}/${bucket}`;
|
|
229
|
+
}
|
|
230
|
+
function parseCacheKey(key) {
|
|
231
|
+
const index = key.indexOf('/');
|
|
232
|
+
return { checkpointString: key.substring(0, index), bucket: key.substring(index + 1) };
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=ChecksumCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChecksumCache.js","sourceRoot":"","sources":["../../src/storage/ChecksumCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export declare class MongoSyncBucketStorage implements SyncRulesBucketStorage {
|
|
|
8
8
|
readonly sync_rules: SqlSyncRules;
|
|
9
9
|
readonly slot_name: string;
|
|
10
10
|
private readonly db;
|
|
11
|
+
private checksumCache;
|
|
11
12
|
constructor(factory: MongoBucketStorage, group_id: number, sync_rules: SqlSyncRules, slot_name: string);
|
|
12
13
|
getCheckpoint(): Promise<{
|
|
13
14
|
checkpoint: string;
|
|
@@ -17,7 +18,8 @@ export declare class MongoSyncBucketStorage implements SyncRulesBucketStorage {
|
|
|
17
18
|
resolveTable(options: ResolveTableOptions): Promise<ResolveTableResult>;
|
|
18
19
|
getParameterSets(checkpoint: util.OpId, lookups: SqliteJsonValue[][]): Promise<SqliteJsonRow[]>;
|
|
19
20
|
getBucketDataBatch(checkpoint: util.OpId, dataBuckets: Map<string, string>, options?: BucketDataBatchOptions): AsyncIterable<util.SyncBucketData>;
|
|
20
|
-
getChecksums(checkpoint: util.OpId, buckets: string[]): Promise<util.
|
|
21
|
+
getChecksums(checkpoint: util.OpId, buckets: string[]): Promise<util.ChecksumMap>;
|
|
22
|
+
private getChecksumsInternal;
|
|
21
23
|
terminate(): Promise<void>;
|
|
22
24
|
getStatus(): Promise<SyncRuleStatus>;
|
|
23
25
|
clear(): Promise<void>;
|
|
@@ -7,12 +7,18 @@ import { SourceTable } from '../SourceTable.js';
|
|
|
7
7
|
import { SyncRuleState } from './models.js';
|
|
8
8
|
import { MongoBucketBatch } from './MongoBucketBatch.js';
|
|
9
9
|
import { BSON_DESERIALIZE_OPTIONS, idPrefixFilter, readSingleBatch, serializeLookup } from './util.js';
|
|
10
|
+
import { ChecksumCache } from '../ChecksumCache.js';
|
|
10
11
|
export class MongoSyncBucketStorage {
|
|
11
12
|
constructor(factory, group_id, sync_rules, slot_name) {
|
|
12
13
|
this.factory = factory;
|
|
13
14
|
this.group_id = group_id;
|
|
14
15
|
this.sync_rules = sync_rules;
|
|
15
16
|
this.slot_name = slot_name;
|
|
17
|
+
this.checksumCache = new ChecksumCache({
|
|
18
|
+
fetchChecksums: (batch) => {
|
|
19
|
+
return this.getChecksumsInternal(batch);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
16
22
|
this.db = factory.db;
|
|
17
23
|
}
|
|
18
24
|
async getCheckpoint() {
|
|
@@ -231,22 +237,25 @@ export class MongoSyncBucketStorage {
|
|
|
231
237
|
}
|
|
232
238
|
}
|
|
233
239
|
async getChecksums(checkpoint, buckets) {
|
|
234
|
-
|
|
235
|
-
|
|
240
|
+
return this.checksumCache.getChecksumMap(checkpoint, buckets);
|
|
241
|
+
}
|
|
242
|
+
async getChecksumsInternal(batch) {
|
|
243
|
+
if (batch.length == 0) {
|
|
244
|
+
return new Map();
|
|
236
245
|
}
|
|
237
246
|
const filters = [];
|
|
238
|
-
for (let
|
|
247
|
+
for (let request of batch) {
|
|
239
248
|
filters.push({
|
|
240
249
|
_id: {
|
|
241
250
|
$gt: {
|
|
242
251
|
g: this.group_id,
|
|
243
|
-
b:
|
|
244
|
-
o: new bson.MinKey()
|
|
252
|
+
b: request.bucket,
|
|
253
|
+
o: request.start ? BigInt(request.start) : new bson.MinKey()
|
|
245
254
|
},
|
|
246
255
|
$lte: {
|
|
247
256
|
g: this.group_id,
|
|
248
|
-
b:
|
|
249
|
-
o: BigInt(
|
|
257
|
+
b: request.bucket,
|
|
258
|
+
o: BigInt(request.end)
|
|
250
259
|
}
|
|
251
260
|
}
|
|
252
261
|
});
|
|
@@ -263,13 +272,16 @@ export class MongoSyncBucketStorage {
|
|
|
263
272
|
}
|
|
264
273
|
], { session: undefined })
|
|
265
274
|
.toArray();
|
|
266
|
-
return aggregate.map((doc) => {
|
|
267
|
-
return
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
275
|
+
return new Map(aggregate.map((doc) => {
|
|
276
|
+
return [
|
|
277
|
+
doc._id,
|
|
278
|
+
{
|
|
279
|
+
bucket: doc._id,
|
|
280
|
+
count: doc.count,
|
|
281
|
+
checksum: Number(BigInt(doc.checksum_total) & 0xffffffffn) & 0xffffffff
|
|
282
|
+
}
|
|
283
|
+
];
|
|
284
|
+
}));
|
|
273
285
|
}
|
|
274
286
|
async terminate() {
|
|
275
287
|
await this.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoSyncBucketStorage.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoSyncBucketStorage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoSyncBucketStorage.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoSyncBucketStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/sync/sync.js
CHANGED
|
@@ -48,8 +48,8 @@ async function* streamResponseInner(storage, params, syncParams, signal) {
|
|
|
48
48
|
// Bucket state of bucket id -> op_id.
|
|
49
49
|
// This starts with the state from the client. May contain buckets that the user do not have access to (anymore).
|
|
50
50
|
let dataBuckets = new Map();
|
|
51
|
-
let
|
|
52
|
-
let
|
|
51
|
+
let lastChecksums = null;
|
|
52
|
+
let lastWriteCheckpoint = null;
|
|
53
53
|
const { raw_data, binary_data } = params;
|
|
54
54
|
if (params.buckets) {
|
|
55
55
|
for (let { name, after: start } of params.buckets) {
|
|
@@ -76,31 +76,35 @@ async function* streamResponseInner(storage, params, syncParams, signal) {
|
|
|
76
76
|
// TODO: Limit number of buckets even before we get to this point
|
|
77
77
|
throw new Error(`Too many buckets: ${allBuckets.length}`);
|
|
78
78
|
}
|
|
79
|
-
let checksums = undefined;
|
|
80
79
|
let dataBucketsNew = new Map();
|
|
81
80
|
for (let bucket of allBuckets) {
|
|
82
81
|
dataBucketsNew.set(bucket, dataBuckets.get(bucket) ?? '0');
|
|
83
82
|
}
|
|
84
83
|
dataBuckets = dataBucketsNew;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
84
|
+
const bucketList = [...dataBuckets.keys()];
|
|
85
|
+
const checksumMap = await storage.getChecksums(checkpoint, bucketList);
|
|
86
|
+
// Subset of buckets for which there may be new data in this batch.
|
|
87
|
+
let bucketsToFetch;
|
|
88
|
+
if (lastChecksums) {
|
|
89
|
+
const diff = util.checksumsDiff(lastChecksums, checksumMap);
|
|
90
|
+
if (lastWriteCheckpoint == writeCheckpoint &&
|
|
91
|
+
diff.removedBuckets.length == 0 &&
|
|
92
|
+
diff.updatedBuckets.length == 0) {
|
|
91
93
|
// No changes - don't send anything to the client
|
|
92
94
|
continue;
|
|
93
95
|
}
|
|
96
|
+
bucketsToFetch = diff.updatedBuckets.map((c) => c.bucket);
|
|
94
97
|
let message = `Updated checkpoint: ${checkpoint} | write: ${writeCheckpoint} | `;
|
|
95
98
|
message += `buckets: ${allBuckets.length} | `;
|
|
96
|
-
message += `updated: ${limitedBuckets(diff.
|
|
97
|
-
message += `removed: ${limitedBuckets(diff.
|
|
99
|
+
message += `updated: ${limitedBuckets(diff.updatedBuckets, 20)} | `;
|
|
100
|
+
message += `removed: ${limitedBuckets(diff.removedBuckets, 20)} | `;
|
|
98
101
|
micro.logger.info(message);
|
|
99
102
|
const checksum_line = {
|
|
100
103
|
checkpoint_diff: {
|
|
101
104
|
last_op_id: checkpoint,
|
|
102
105
|
write_checkpoint: writeCheckpoint ? String(writeCheckpoint) : undefined,
|
|
103
|
-
|
|
106
|
+
removed_buckets: diff.removedBuckets,
|
|
107
|
+
updated_buckets: diff.updatedBuckets
|
|
104
108
|
}
|
|
105
109
|
};
|
|
106
110
|
yield checksum_line;
|
|
@@ -109,24 +113,27 @@ async function* streamResponseInner(storage, params, syncParams, signal) {
|
|
|
109
113
|
let message = `New checkpoint: ${checkpoint} | write: ${writeCheckpoint} | `;
|
|
110
114
|
message += `buckets: ${allBuckets.length} ${limitedBuckets(allBuckets, 20)}`;
|
|
111
115
|
micro.logger.info(message);
|
|
116
|
+
bucketsToFetch = allBuckets;
|
|
112
117
|
const checksum_line = {
|
|
113
118
|
checkpoint: {
|
|
114
119
|
last_op_id: checkpoint,
|
|
115
120
|
write_checkpoint: writeCheckpoint ? String(writeCheckpoint) : undefined,
|
|
116
|
-
buckets:
|
|
121
|
+
buckets: [...checksumMap.values()]
|
|
117
122
|
}
|
|
118
123
|
};
|
|
119
124
|
yield checksum_line;
|
|
120
125
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
126
|
+
lastChecksums = checksumMap;
|
|
127
|
+
lastWriteCheckpoint = writeCheckpoint;
|
|
128
|
+
// This incrementally updates dataBuckets with each individual bucket position.
|
|
129
|
+
// At the end of this, we can be sure that all buckets have data up to the checkpoint.
|
|
130
|
+
yield* bucketDataInBatches({ storage, checkpoint, bucketsToFetch, dataBuckets, raw_data, binary_data, signal });
|
|
124
131
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
125
132
|
}
|
|
126
133
|
}
|
|
127
|
-
async function* bucketDataInBatches(
|
|
134
|
+
async function* bucketDataInBatches(request) {
|
|
128
135
|
let isDone = false;
|
|
129
|
-
while (!signal.aborted && !isDone) {
|
|
136
|
+
while (!request.signal.aborted && !isDone) {
|
|
130
137
|
// The code below is functionally the same as this for-await loop below.
|
|
131
138
|
// However, the for-await loop appears to have a memory leak, so we avoid it.
|
|
132
139
|
// for await (const { done, data } of bucketDataBatch(storage, checkpoint, dataBuckets, raw_data, signal)) {
|
|
@@ -136,7 +143,7 @@ async function* bucketDataInBatches(storage, checkpoint, dataBuckets, raw_data,
|
|
|
136
143
|
// }
|
|
137
144
|
// break;
|
|
138
145
|
// }
|
|
139
|
-
const iter = bucketDataBatch(
|
|
146
|
+
const iter = bucketDataBatch(request);
|
|
140
147
|
try {
|
|
141
148
|
while (true) {
|
|
142
149
|
const { value, done: iterDone } = await iter.next();
|
|
@@ -160,10 +167,14 @@ async function* bucketDataInBatches(storage, checkpoint, dataBuckets, raw_data,
|
|
|
160
167
|
/**
|
|
161
168
|
* Extracted as a separate internal function just to avoid memory leaks.
|
|
162
169
|
*/
|
|
163
|
-
async function* bucketDataBatch(
|
|
170
|
+
async function* bucketDataBatch(request) {
|
|
171
|
+
const { storage, checkpoint, bucketsToFetch, dataBuckets, raw_data, binary_data, signal } = request;
|
|
164
172
|
const [_, release] = await syncSemaphore.acquire();
|
|
165
173
|
try {
|
|
166
|
-
|
|
174
|
+
// Optimization: Only fetch buckets for which the checksums have changed since the last checkpoint
|
|
175
|
+
// For the first batch, this will be all buckets.
|
|
176
|
+
const filteredBuckets = new Map(bucketsToFetch.map((bucket) => [bucket, dataBuckets.get(bucket)]));
|
|
177
|
+
const data = storage.getBucketDataBatch(checkpoint, filteredBuckets);
|
|
167
178
|
let has_more = false;
|
|
168
179
|
for await (let r of data) {
|
|
169
180
|
if (signal.aborted) {
|