@powersync/service-core 1.23.0 → 1.23.2

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.
Files changed (88) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/api/RouteAPI.d.ts +25 -11
  3. package/dist/replication/AbstractReplicator.d.ts +20 -1
  4. package/dist/replication/AbstractReplicator.js +106 -47
  5. package/dist/replication/AbstractReplicator.js.map +1 -1
  6. package/dist/routes/RouterEngine.d.ts +1 -0
  7. package/dist/routes/RouterEngine.js +6 -1
  8. package/dist/routes/RouterEngine.js.map +1 -1
  9. package/dist/routes/configure-fastify.d.ts +52 -44
  10. package/dist/routes/configure-fastify.js +15 -2
  11. package/dist/routes/configure-fastify.js.map +1 -1
  12. package/dist/routes/endpoints/admin.js +2 -1
  13. package/dist/routes/endpoints/admin.js.map +1 -1
  14. package/dist/routes/endpoints/checkpointing.js +1 -3
  15. package/dist/routes/endpoints/checkpointing.js.map +1 -1
  16. package/dist/storage/BucketStorageBatch.d.ts +60 -11
  17. package/dist/storage/BucketStorageBatch.js.map +1 -1
  18. package/dist/storage/ChecksumCache.d.ts +11 -6
  19. package/dist/storage/ChecksumCache.js +5 -4
  20. package/dist/storage/ChecksumCache.js.map +1 -1
  21. package/dist/storage/PersistedSyncConfigContent.d.ts +3 -0
  22. package/dist/storage/PersistedSyncConfigContent.js +2 -0
  23. package/dist/storage/PersistedSyncConfigContent.js.map +1 -1
  24. package/dist/storage/SyncRulesBucketStorage.d.ts +35 -5
  25. package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
  26. package/dist/storage/WriteCheckpointAPI.d.ts +1 -1
  27. package/dist/sync/BucketChecksumState.d.ts +5 -2
  28. package/dist/sync/BucketChecksumState.js +36 -8
  29. package/dist/sync/BucketChecksumState.js.map +1 -1
  30. package/dist/sync/RequestTracker.d.ts +7 -0
  31. package/dist/sync/RequestTracker.js +12 -0
  32. package/dist/sync/RequestTracker.js.map +1 -1
  33. package/dist/sync/sync.js +118 -38
  34. package/dist/sync/sync.js.map +1 -1
  35. package/dist/system/ServiceContext.d.ts +2 -0
  36. package/dist/system/ServiceContext.js +2 -0
  37. package/dist/system/ServiceContext.js.map +1 -1
  38. package/dist/tracing/PerformanceTracer.d.ts +7 -1
  39. package/dist/tracing/PerformanceTracer.js +8 -0
  40. package/dist/tracing/PerformanceTracer.js.map +1 -1
  41. package/dist/util/checkpointing.d.ts +3 -8
  42. package/dist/util/checkpointing.js +1 -16
  43. package/dist/util/checkpointing.js.map +1 -1
  44. package/dist/util/config/compound-config-collector.js +10 -2
  45. package/dist/util/config/compound-config-collector.js.map +1 -1
  46. package/dist/util/config/defaults.d.ts +1 -0
  47. package/dist/util/config/defaults.js +1 -0
  48. package/dist/util/config/defaults.js.map +1 -1
  49. package/dist/util/config/types.d.ts +1 -0
  50. package/dist/util/util-index.d.ts +1 -0
  51. package/dist/util/util-index.js +1 -0
  52. package/dist/util/util-index.js.map +1 -1
  53. package/dist/util/utils.d.ts +1 -1
  54. package/dist/util/utils.js +1 -1
  55. package/dist/util/write-checkpoint-batcher.d.ts +19 -0
  56. package/dist/util/write-checkpoint-batcher.js +90 -0
  57. package/dist/util/write-checkpoint-batcher.js.map +1 -0
  58. package/package.json +5 -5
  59. package/src/api/RouteAPI.ts +25 -11
  60. package/src/replication/AbstractReplicator.ts +134 -47
  61. package/src/routes/RouterEngine.ts +7 -1
  62. package/src/routes/configure-fastify.ts +25 -2
  63. package/src/routes/endpoints/admin.ts +2 -1
  64. package/src/routes/endpoints/checkpointing.ts +1 -4
  65. package/src/storage/BucketStorageBatch.ts +61 -11
  66. package/src/storage/ChecksumCache.ts +27 -14
  67. package/src/storage/PersistedSyncConfigContent.ts +4 -0
  68. package/src/storage/SyncRulesBucketStorage.ts +42 -5
  69. package/src/storage/WriteCheckpointAPI.ts +1 -1
  70. package/src/sync/BucketChecksumState.ts +65 -8
  71. package/src/sync/RequestTracker.ts +20 -0
  72. package/src/sync/sync.ts +148 -44
  73. package/src/system/ServiceContext.ts +7 -0
  74. package/src/tracing/PerformanceTracer.ts +18 -1
  75. package/src/util/checkpointing.ts +3 -22
  76. package/src/util/config/compound-config-collector.ts +13 -1
  77. package/src/util/config/defaults.ts +1 -0
  78. package/src/util/config/types.ts +1 -0
  79. package/src/util/util-index.ts +1 -0
  80. package/src/util/utils.ts +1 -1
  81. package/src/util/write-checkpoint-batcher.ts +122 -0
  82. package/test/src/checksum_cache.test.ts +22 -0
  83. package/test/src/config.test.ts +42 -0
  84. package/test/src/diagnostics.test.ts +13 -12
  85. package/test/src/routes/admin.test.ts +12 -10
  86. package/test/src/sync/BucketChecksumState.test.ts +41 -1
  87. package/test/src/util/checkpointing.test.ts +170 -0
  88. package/tsconfig.tsbuildinfo +1 -1
@@ -2,6 +2,7 @@ import { mergeBuckets, RequestParameters } from '@powersync/service-sync-rules';
2
2
  import * as util from '../util/util-index.js';
3
3
  import { logger as defaultLogger, ErrorCode, ServiceAssertionError, ServiceError } from '@powersync/lib-services-framework';
4
4
  import { ParameterSetLimitExceededError } from '../storage/storage-index.js';
5
+ import { PerformanceTracer } from '../tracing/PerformanceTracer.js';
5
6
  import { getIntersection, hasIntersection } from './util.js';
6
7
  /**
7
8
  * Represents the state of the checksums and data for a specific connection.
@@ -62,11 +63,12 @@ export class BucketChecksumState {
62
63
  * @param next The updated checkpoint
63
64
  * @returns A {@link CheckpointLine} if any of the buckets watched by this connected was updated, or otherwise `null`.
64
65
  */
65
- async buildNextCheckpointLine(next) {
66
+ async buildNextCheckpointLine(next, tracer) {
67
+ tracer ??= new PerformanceTracer(`sync checkpoint ${next.base.checkpoint}`);
66
68
  const { writeCheckpoint, base } = next;
67
69
  const userIdForLogs = this.parameterState.syncParams.userId;
68
70
  const storage = this.bucketStorage;
69
- const update = await this.parameterState.getCheckpointUpdate(next);
71
+ const update = await this.parameterState.getCheckpointUpdate(next, tracer);
70
72
  const { buckets: allBuckets, updatedBuckets, usedParameterResults } = update;
71
73
  /** Set of all buckets in this checkpoint. */
72
74
  const bucketDescriptionMap = new Map(allBuckets.map((b) => [b.bucket, b]));
@@ -98,6 +100,7 @@ export class BucketChecksumState {
98
100
  }
99
101
  // Re-check updated buckets only
100
102
  let checksumLookups = [];
103
+ let hasNewBucket = false;
101
104
  let newChecksums = new Map();
102
105
  for (let desc of bucketDescriptionMap.values()) {
103
106
  if (!updatedBuckets.has(desc.bucket)) {
@@ -111,10 +114,14 @@ export class BucketChecksumState {
111
114
  }
112
115
  else {
113
116
  checksumLookups.push({ bucket: desc.bucket, source: desc.source });
117
+ hasNewBucket ||= !this.lastChecksums.has(desc.bucket);
114
118
  }
115
119
  }
116
120
  if (checksumLookups.length > 0) {
117
- let updatedChecksums = await storage.getChecksums(base.checkpoint, checksumLookups);
121
+ const requestHint = hasNewBucket ? 'bulk' : 'incremental';
122
+ let updatedChecksums;
123
+ using _ = tracer.span('checksum');
124
+ updatedChecksums = await storage.getChecksums(base, checksumLookups, { requestHint });
118
125
  for (let [bucket, value] of updatedChecksums.entries()) {
119
126
  newChecksums.set(bucket, value);
120
127
  }
@@ -123,11 +130,20 @@ export class BucketChecksumState {
123
130
  }
124
131
  else {
125
132
  // Re-check all buckets
126
- const bucketList = [...bucketDescriptionMap.values()].map((b) => ({ bucket: b.bucket, source: b.source }));
127
- checksumMap = await storage.getChecksums(base.checkpoint, bucketList);
133
+ const hasNewBucket = this.lastChecksums == null ||
134
+ [...bucketDescriptionMap.values()].some((b) => !this.lastChecksums.has(b.bucket));
135
+ const requestHint = hasNewBucket ? 'bulk' : 'incremental';
136
+ const bucketList = [...bucketDescriptionMap.values()].map((b) => ({
137
+ bucket: b.bucket,
138
+ source: b.source
139
+ }));
140
+ using _ = tracer.span('checksum');
141
+ checksumMap = await storage.getChecksums(base, bucketList, { requestHint });
128
142
  }
129
143
  // Subset of buckets for which there may be new data in this batch.
130
144
  let bucketsToFetch;
145
+ let bucketDataRequestHint;
146
+ const newBucketDownloads = new Set();
131
147
  let checkpointLine;
132
148
  // Log function that is deferred until the checkpoint line is sent to the client.
133
149
  let deferredLog;
@@ -160,6 +176,12 @@ export class BucketChecksumState {
160
176
  bucketsToFetch = [...generateBucketsToFetch].map((b) => {
161
177
  return bucketDescriptionMap.get(b);
162
178
  });
179
+ for (const bucket of diff.updatedBuckets) {
180
+ if (!this.lastChecksums.has(bucket.bucket)) {
181
+ newBucketDownloads.add(bucket.bucket);
182
+ }
183
+ }
184
+ bucketDataRequestHint = newBucketDownloads.size > 0 ? 'bulk' : 'incremental';
163
185
  deferredLog = () => {
164
186
  let message = `Updated checkpoint: ${base.checkpoint} | `;
165
187
  message += `write: ${writeCheckpoint} | `;
@@ -197,6 +219,10 @@ export class BucketChecksumState {
197
219
  }, usedParameterResults);
198
220
  };
199
221
  bucketsToFetch = allBuckets;
222
+ for (const bucket of bucketsToFetch) {
223
+ newBucketDownloads.add(bucket.bucket);
224
+ }
225
+ bucketDataRequestHint = 'bulk';
200
226
  const subscriptions = [];
201
227
  const streamNameToIndex = new Map();
202
228
  this.streamNameToIndex = streamNameToIndex;
@@ -230,6 +256,7 @@ export class BucketChecksumState {
230
256
  return {
231
257
  checkpointLine,
232
258
  bucketsToFetch,
259
+ bucketDataRequestHint,
233
260
  advance: () => {
234
261
  hasAdvanced = true;
235
262
  // bucketDataPositions must be updated in-place - it represents the current state of
@@ -383,12 +410,12 @@ export class BucketParameterState {
383
410
  isSubscribedToStream(desc) {
384
411
  return (desc.subscribedToByDefault && this.includeDefaultStreams) || this.subscribedStreamNames.has(desc.name);
385
412
  }
386
- async getCheckpointUpdate(checkpoint) {
413
+ async getCheckpointUpdate(checkpoint, tracer) {
387
414
  const querier = this.querier;
388
415
  let update;
389
416
  if (querier.hasDynamicBuckets) {
390
417
  try {
391
- update = await this.getCheckpointUpdateDynamic(checkpoint);
418
+ update = await this.getCheckpointUpdateDynamic(checkpoint, tracer);
392
419
  }
393
420
  catch (e) {
394
421
  if (e instanceof ParameterSetLimitExceededError) {
@@ -441,7 +468,7 @@ export class BucketParameterState {
441
468
  /**
442
469
  * For dynamic buckets, we need to re-query the list of buckets every time.
443
470
  */
444
- async getCheckpointUpdateDynamic(checkpoint) {
471
+ async getCheckpointUpdateDynamic(checkpoint, tracer) {
445
472
  const querier = this.querier;
446
473
  const staticBuckets = this.staticBuckets.values();
447
474
  const update = checkpoint.update;
@@ -490,6 +517,7 @@ export class BucketParameterState {
490
517
  recordedLookups.add(lookup.serializedRepresentation);
491
518
  }
492
519
  try {
520
+ using _ = tracer.span('parameters', definition);
493
521
  const results = await checkpoint.base.getParameterSets(lookups, remainingBudget);
494
522
  const numRows = results.reduce((a, b) => a + b.rows.length, 0);
495
523
  lookupLog.push({ definition, resultsOrLimit: numRows, didExceedLimit: false });
@@ -1 +1 @@
1
- {"version":3,"file":"BucketChecksumState.js","sourceRoot":"","sources":["../../src/sync/BucketChecksumState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BucketChecksumState.js","sourceRoot":"","sources":["../../src/sync/BucketChecksumState.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ export declare class RequestTracker {
11
11
  operationCounts: OperationCounts;
12
12
  largeBuckets: Record<string, number>;
13
13
  private encoding;
14
+ private lastCheckpointLogOperationsSynced;
15
+ private lastCheckpointLogDataSyncedBytes;
14
16
  constructor(metrics: MetricsEngine);
15
17
  addOperationsSynced(operations: OperationsSentStats): void;
16
18
  setCompressed(encoding: string): void;
@@ -24,6 +26,7 @@ export declare class RequestTracker {
24
26
  large_buckets: Record<string, number>;
25
27
  encoding: string | undefined;
26
28
  };
29
+ getIncrementalCheckpointStats(): CheckpointLogStats;
27
30
  }
28
31
  export interface OperationCounts {
29
32
  put: number;
@@ -36,4 +39,8 @@ export interface OperationsSentStats {
36
39
  operations: OperationCounts;
37
40
  total: number;
38
41
  }
42
+ export interface CheckpointLogStats {
43
+ operations_synced: number;
44
+ data_synced_bytes: number;
45
+ }
39
46
  export declare function statsForBatch(batch: SyncBucketData): OperationsSentStats;
@@ -11,6 +11,8 @@ export class RequestTracker {
11
11
  operationCounts = { put: 0, remove: 0, move: 0, clear: 0 };
12
12
  largeBuckets = {};
13
13
  encoding = undefined;
14
+ lastCheckpointLogOperationsSynced = 0;
15
+ lastCheckpointLogDataSyncedBytes = 0;
14
16
  constructor(metrics) {
15
17
  this.metrics = metrics;
16
18
  this.metrics = metrics;
@@ -55,6 +57,16 @@ export class RequestTracker {
55
57
  encoding: this.encoding
56
58
  };
57
59
  }
60
+ getIncrementalCheckpointStats() {
61
+ const operationsSynced = this.operationsSynced - this.lastCheckpointLogOperationsSynced;
62
+ const dataSyncedBytes = this.dataSyncedBytes - this.lastCheckpointLogDataSyncedBytes;
63
+ this.lastCheckpointLogOperationsSynced = this.operationsSynced;
64
+ this.lastCheckpointLogDataSyncedBytes = this.dataSyncedBytes;
65
+ return {
66
+ operations_synced: operationsSynced,
67
+ data_synced_bytes: dataSyncedBytes
68
+ };
69
+ }
58
70
  }
59
71
  export function statsForBatch(batch) {
60
72
  let put = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"RequestTracker.js","sourceRoot":"","sources":["../../src/sync/RequestTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequestTracker.js","sourceRoot":"","sources":["../../src/sync/RequestTracker.ts"],"names":[],"mappings":"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"}
package/dist/sync/sync.js CHANGED
@@ -3,6 +3,7 @@ import { AbortError } from 'ix/aborterror.js';
3
3
  import * as util from '../util/util-index.js';
4
4
  import { logger as defaultLogger } from '@powersync/lib-services-framework';
5
5
  import { mergeAsyncIterables } from '../streams/streams-index.js';
6
+ import { PerformanceTracer } from '../tracing/PerformanceTracer.js';
6
7
  import { BucketChecksumState } from './BucketChecksumState.js';
7
8
  import { statsForBatch } from './RequestTracker.js';
8
9
  import { acquireSemaphoreAbortable, settledPromise, tokenStream } from './util.js';
@@ -60,8 +61,21 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
60
61
  if (next.done) {
61
62
  return { done: true, value: undefined };
62
63
  }
63
- const line = await checksumState.buildNextCheckpointLine(next.value);
64
- return { done: false, value: { checkpoint: next.value.base.checkpoint, line } };
64
+ const cp = next.value.base;
65
+ const tracer = new PerformanceTracer(`sync checkpoint ${cp.checkpoint}`);
66
+ const trace = {
67
+ tracer,
68
+ span: tracer.span('checkpoint')
69
+ };
70
+ try {
71
+ const line = await checksumState.buildNextCheckpointLine(next.value, trace.tracer);
72
+ return { done: false, value: { checkpoint: cp, line, trace: line == null ? null : trace } };
73
+ }
74
+ catch (e) {
75
+ // Only end the span if we error. If we return normally, we pass ownership on to the caller.
76
+ trace.span.end();
77
+ throw e;
78
+ }
65
79
  }
66
80
  try {
67
81
  let nextCheckpointPromise;
@@ -84,16 +98,23 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
84
98
  // No update to sync
85
99
  continue;
86
100
  }
87
- const { checkpointLine, bucketsToFetch } = line;
101
+ const trace = next.value.value.trace;
102
+ const checkpoint = next.value.value.checkpoint;
103
+ const tracer = trace.tracer;
104
+ const { checkpointLine, bucketsToFetch, bucketDataRequestHint } = line;
88
105
  // Since yielding can block, we update the state just before yielding the line.
89
106
  line.advance();
90
- yield checkpointLine;
107
+ {
108
+ using _ = tracer.span('sending', 'checkpoint');
109
+ yield checkpointLine;
110
+ }
91
111
  // Start syncing data for buckets up to the checkpoint. As soon as we have completed at least one priority and
92
112
  // at least 1000 operations, we also start listening for new checkpoints concurrently. When a new checkpoint comes
93
113
  // in while we're still busy syncing data for lower priorities, interrupt the current operation and start syncing
94
114
  // the new checkpoint.
95
115
  const abortCheckpointController = new AbortController();
96
116
  let syncedOperations = 0;
117
+ let checkpointResult = null;
97
118
  const abortCheckpointSignal = AbortSignal.any([abortCheckpointController.signal, signal]);
98
119
  const bucketsByPriority = [...Map.groupBy(bucketsToFetch, (bucket) => bucket.priority).entries()];
99
120
  bucketsByPriority.sort((a, b) => a[0] - b[0]); // Sort from high to lower priorities
@@ -112,6 +133,12 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
112
133
  while (true) {
113
134
  const next = await settledPromise(waitForNewCheckpointLine());
114
135
  if (next.status == 'rejected') {
136
+ if (next.reason instanceof AbortError) {
137
+ checkpointResult = { result: 'invalidated', invalidationReason: 'checkpoint_cancelled' };
138
+ }
139
+ else {
140
+ checkpointResult = { result: 'invalidated', invalidationReason: 'checkpoint_error' };
141
+ }
115
142
  abortCheckpointController.abort();
116
143
  }
117
144
  else if (!next.value.done) {
@@ -122,6 +149,7 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
122
149
  }
123
150
  // A new sync line can be emitted. Stop running the bucketDataInBatches() iterations, making the
124
151
  // main flow reach the new checkpoint.
152
+ checkpointResult = { result: 'invalidated', invalidationReason: 'checkpoint_superseded' };
125
153
  abortCheckpointController.abort();
126
154
  }
127
155
  return next;
@@ -134,6 +162,13 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
134
162
  tracker.addOperationsSynced(stats);
135
163
  maybeRaceForNewCheckpoint();
136
164
  }
165
+ function checkpointLogDetails(cp) {
166
+ return {
167
+ checkpoint: cp.checkpoint,
168
+ user_id: tokenPayload.userIdJson,
169
+ ...tracker.getIncrementalCheckpointStats()
170
+ };
171
+ }
137
172
  // This incrementally updates dataBuckets with each individual bucket position.
138
173
  // At the end of this, we can be sure that all buckets have data up to the checkpoint.
139
174
  for (const [priority, buckets] of priorityBatches) {
@@ -141,11 +176,12 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
141
176
  if (abortCheckpointSignal.aborted) {
142
177
  break;
143
178
  }
144
- yield* bucketDataInBatches({
179
+ const batchResult = yield* bucketDataInBatches({
145
180
  syncContext: syncContext,
146
181
  bucketStorage: bucketStorage,
147
- checkpoint: next.value.value.checkpoint,
182
+ checkpoint,
148
183
  bucketsToFetch: buckets,
184
+ requestHint: bucketDataRequestHint,
149
185
  checkpointLine: line,
150
186
  legacyDataLines: !isEncodingAsBson && params.raw_data != true,
151
187
  onRowsSent: markOperationsSent,
@@ -155,7 +191,36 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
155
191
  // Passing null here will emit a full sync complete message at the end. If we pass a priority, we'll emit a partial
156
192
  // sync complete message instead.
157
193
  forPriority: !isLast ? priority : null,
158
- logger
194
+ logger,
195
+ tracer
196
+ });
197
+ if (batchResult?.result == 'partial_checkpoint_complete') {
198
+ // We don't specifically include timing details here, since that would end the span.
199
+ // Timings are included in the checkpoint_complete following this.
200
+ logger.info(`partial_checkpoint_complete: ${checkpoint.checkpoint}`, {
201
+ priority,
202
+ ...checkpointLogDetails(checkpoint)
203
+ });
204
+ }
205
+ else if (batchResult?.result != null) {
206
+ checkpointResult = batchResult;
207
+ break;
208
+ }
209
+ }
210
+ if (checkpointResult?.result == 'checkpoint_complete') {
211
+ logger.info(`checkpoint_complete: ${checkpoint.checkpoint}`, {
212
+ // Incremental stats since the last checkpoint_complete, partial_checkpoint_complete or checkpoint_invalidated
213
+ ...checkpointLogDetails(checkpoint),
214
+ // Timings since the last checkpoint or checkpoint_diff
215
+ ms: getCheckpointTraceTimings(trace.span)
216
+ });
217
+ }
218
+ else if (checkpointResult?.result == 'invalidated') {
219
+ // A new checkpoint and checkpoint_complete should follow soon, but we log the stats already
220
+ logger.info(`checkpoint_invalidated: ${checkpoint.checkpoint}`, {
221
+ reason: checkpointResult.invalidationReason,
222
+ ...checkpointLogDetails(checkpoint),
223
+ ms: getCheckpointTraceTimings(trace.span)
159
224
  });
160
225
  }
161
226
  if (!abortCheckpointSignal.aborted) {
@@ -184,10 +249,14 @@ async function* bucketDataInBatches(request) {
184
249
  while (true) {
185
250
  const { value, done: iterDone } = await iter.next();
186
251
  if (iterDone) {
252
+ if (value != null) {
253
+ return value;
254
+ }
187
255
  break;
188
256
  }
189
257
  else {
190
258
  const { done, data } = value;
259
+ using _ = request.tracer.span('sending', 'data');
191
260
  yield data;
192
261
  if (done) {
193
262
  isDone = true;
@@ -196,47 +265,41 @@ async function* bucketDataInBatches(request) {
196
265
  }
197
266
  }
198
267
  finally {
199
- await iter.return();
268
+ await iter.return(null);
200
269
  }
201
270
  }
271
+ return null;
202
272
  }
203
273
  /**
204
274
  * Extracted as a separate internal function just to avoid memory leaks.
205
275
  */
206
276
  async function* bucketDataBatch(request) {
207
- const { syncContext, bucketStorage: storage, checkpoint, bucketsToFetch, checkpointLine, legacyDataLines, abort_connection, abort_batch, onRowsSent, logger } = request;
277
+ const { syncContext, bucketStorage: storage, checkpoint, requestHint, bucketsToFetch, checkpointLine, legacyDataLines, abort_connection, abort_batch, onRowsSent, logger } = request;
278
+ const tracer = request.tracer;
208
279
  let checkpointInvalidated = false;
209
- if (syncContext.syncSemaphore.isLocked()) {
210
- logger.info('Sync concurrency limit reached, waiting for lock', { user_id: request.userIdForLogs });
211
- }
212
- const acquired = await acquireSemaphoreAbortable(syncContext.syncSemaphore, AbortSignal.any([abort_batch]));
280
+ const acquired = await tracer.span('acquiring_lock').with(async () => {
281
+ return acquireSemaphoreAbortable(syncContext.syncSemaphore, AbortSignal.any([abort_batch]));
282
+ });
213
283
  if (acquired === 'aborted') {
214
- return;
284
+ return null;
215
285
  }
216
- const [value, release] = acquired;
286
+ const [, release] = acquired;
217
287
  try {
218
- if (value <= 3) {
219
- // This can be noisy, so we only log when we get close to the
220
- // concurrency limit.
221
- logger.info(`Got sync lock. Slots available: ${value - 1}`, {
222
- user_id: request.userIdForLogs,
223
- sync_data_slots: value - 1
224
- });
225
- }
288
+ using _ = tracer.span('bucket_data');
289
+ let has_more = false;
226
290
  // Optimization: Only fetch buckets for which the checksums have changed since the last checkpoint
227
291
  // For the first batch, this will be all buckets.
228
292
  const filteredBuckets = checkpointLine.getFilteredBucketPositions(bucketsToFetch);
229
- const dataBatches = storage.getBucketDataBatch(checkpoint, filteredBuckets);
230
- let has_more = false;
293
+ const dataBatches = storage.getBucketDataBatch(checkpoint, filteredBuckets, { requestHint });
231
294
  for await (let { chunkData: r, targetOp } of dataBatches) {
232
295
  // Abort in current batch if the connection is closed
233
296
  if (abort_connection.aborted) {
234
- return;
297
+ return null;
235
298
  }
236
299
  if (r.has_more) {
237
300
  has_more = true;
238
301
  }
239
- if (targetOp != null && targetOp > checkpoint) {
302
+ if (targetOp != null && targetOp > checkpoint.checkpoint) {
240
303
  checkpointInvalidated = true;
241
304
  }
242
305
  if (r.data.length == 0) {
@@ -244,7 +307,11 @@ async function* bucketDataBatch(request) {
244
307
  // storage can emit an empty chunk for a bucket that has no operations in the
245
308
  // requested range, and its position must advance so the bucket is not
246
309
  // re-requested indefinitely.
247
- checkpointLine.updateBucketPosition({ bucket: r.bucket, nextAfter: BigInt(r.next_after), hasMore: r.has_more });
310
+ checkpointLine.updateBucketPosition({
311
+ bucket: r.bucket,
312
+ nextAfter: BigInt(r.next_after),
313
+ hasMore: r.has_more
314
+ });
248
315
  continue;
249
316
  }
250
317
  logger.debug(`Sending data for ${r.bucket}`);
@@ -265,7 +332,7 @@ async function* bucketDataBatch(request) {
265
332
  // Check if syncing bucket data is supposed to stop before fetching more data
266
333
  // from storage.
267
334
  if (abort_batch.aborted) {
268
- return;
335
+ return null;
269
336
  }
270
337
  }
271
338
  if (!has_more) {
@@ -274,38 +341,51 @@ async function* bucketDataBatch(request) {
274
341
  // Don't send the checkpoint_complete line in this case.
275
342
  // More data should be available immediately for a new checkpoint.
276
343
  yield { data: null, done: true };
344
+ return { result: 'invalidated', invalidationReason: 'compacted' };
277
345
  }
278
346
  else {
279
347
  if (request.forPriority != null) {
280
348
  const line = {
281
349
  partial_checkpoint_complete: {
282
- last_op_id: util.internalToExternalOpId(checkpoint),
350
+ last_op_id: util.internalToExternalOpId(checkpoint.checkpoint),
283
351
  priority: request.forPriority
284
352
  }
285
353
  };
286
354
  yield { data: line, done: true };
355
+ return { result: 'partial_checkpoint_complete' };
287
356
  }
288
357
  else {
289
358
  const line = {
290
359
  checkpoint_complete: {
291
- last_op_id: util.internalToExternalOpId(checkpoint)
360
+ last_op_id: util.internalToExternalOpId(checkpoint.checkpoint)
292
361
  }
293
362
  };
294
363
  yield { data: line, done: true };
364
+ return { result: 'checkpoint_complete' };
295
365
  }
296
366
  }
297
367
  }
298
368
  }
299
369
  finally {
300
- if (value <= 3) {
301
- // This can be noisy, so we only log when we get close to the
302
- // concurrency limit.
303
- logger.info(`Releasing sync lock`, {
304
- user_id: request.userIdForLogs
305
- });
306
- }
307
370
  release();
308
371
  }
372
+ return null;
373
+ }
374
+ function getCheckpointTraceTimings(span) {
375
+ const timings = span.end();
376
+ const result = {};
377
+ for (let key in timings) {
378
+ addTiming(result, key, timings[key]);
379
+ }
380
+ addTiming(result, 'other', span.selfDuration);
381
+ addTiming(result, 'total', span.endAt - span.startAt);
382
+ return result;
383
+ }
384
+ function addTiming(timings, key, durationMicros) {
385
+ const ms = Math.round(durationMicros / 1000);
386
+ if (ms > 0) {
387
+ timings[key] = (timings[key] ?? 0) + ms;
388
+ }
309
389
  }
310
390
  function transformLegacyResponse(bucketData) {
311
391
  return {