@powersync/service-module-mongodb-storage 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/storage/MongoBucketStorage.d.ts +31 -3
  3. package/dist/storage/MongoBucketStorage.js +365 -206
  4. package/dist/storage/MongoBucketStorage.js.map +1 -1
  5. package/dist/storage/implementation/MongoBucketBatch.d.ts +15 -4
  6. package/dist/storage/implementation/MongoBucketBatch.js +35 -9
  7. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  8. package/dist/storage/implementation/MongoCompactor.d.ts +19 -79
  9. package/dist/storage/implementation/MongoCompactor.js +27 -238
  10. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  11. package/dist/storage/implementation/MongoParameterCompactor.d.ts +83 -10
  12. package/dist/storage/implementation/MongoParameterCompactor.js +309 -96
  13. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  14. package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +9 -1
  15. package/dist/storage/implementation/MongoParsedSyncConfigSet.js +29 -0
  16. package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -1
  17. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +4 -2
  18. package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -1
  19. package/dist/storage/implementation/MongoStorageProvider.js +3 -1
  20. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
  21. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +27 -11
  22. package/dist/storage/implementation/MongoSyncBucketStorage.js +78 -31
  23. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  24. package/dist/storage/implementation/MongoSyncRulesLock.js +21 -9
  25. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  26. package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +9 -7
  27. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +7 -28
  28. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  29. package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +11 -5
  30. package/dist/storage/implementation/SyncRuleStateUpdate.js +14 -6
  31. package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -1
  32. package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +22 -2
  33. package/dist/storage/implementation/common/PersistedBatch.d.ts +27 -0
  34. package/dist/storage/implementation/common/PersistedBatch.js +43 -2
  35. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
  36. package/dist/storage/implementation/db.d.ts +4 -1
  37. package/dist/storage/implementation/db.js +14 -1
  38. package/dist/storage/implementation/db.js.map +1 -1
  39. package/dist/storage/implementation/models.d.ts +35 -0
  40. package/dist/storage/implementation/models.js.map +1 -1
  41. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +6 -0
  42. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +80 -84
  43. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
  44. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +36 -5
  45. package/dist/storage/implementation/v1/MongoCompactorV1.js +229 -8
  46. package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -1
  47. package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +16 -2
  48. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -9
  49. package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -1
  50. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +18 -11
  51. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +65 -16
  52. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
  53. package/dist/storage/implementation/v1/models.js +1 -0
  54. package/dist/storage/implementation/v1/models.js.map +1 -1
  55. package/dist/storage/implementation/v3/CompactionLease.d.ts +50 -0
  56. package/dist/storage/implementation/v3/CompactionLease.js +131 -0
  57. package/dist/storage/implementation/v3/CompactionLease.js.map +1 -0
  58. package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +8 -1
  59. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +120 -39
  60. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
  61. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +77 -25
  62. package/dist/storage/implementation/v3/MongoCompactorV3.js +585 -141
  63. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
  64. package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +18 -0
  65. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +23 -0
  66. package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
  67. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +2 -15
  68. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +60 -92
  69. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -1
  70. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +19 -9
  71. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +91 -31
  72. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
  73. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.d.ts +26 -0
  74. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js +82 -0
  75. package/dist/storage/implementation/v3/MongoWriteCheckpointAPIV3.js.map +1 -0
  76. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -0
  77. package/dist/storage/implementation/v3/PersistedBatchV3.js +52 -11
  78. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
  79. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +12 -2
  80. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +42 -3
  81. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
  82. package/dist/storage/implementation/v3/bucket-format.js +2 -0
  83. package/dist/storage/implementation/v3/bucket-format.js.map +1 -1
  84. package/dist/storage/implementation/v3/compact-utils.d.ts +107 -0
  85. package/dist/storage/implementation/v3/compact-utils.js +216 -0
  86. package/dist/storage/implementation/v3/compact-utils.js.map +1 -0
  87. package/dist/storage/implementation/v3/compaction-constants.d.ts +5 -0
  88. package/dist/storage/implementation/v3/compaction-constants.js +6 -0
  89. package/dist/storage/implementation/v3/compaction-constants.js.map +1 -0
  90. package/dist/storage/implementation/v3/models.d.ts +89 -5
  91. package/dist/storage/implementation/v3/models.js.map +1 -1
  92. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.d.ts +7 -8
  93. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js +8 -4
  94. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js.map +1 -1
  95. package/dist/storage/implementation/v3/object-storage/ObjectStorage.d.ts +14 -11
  96. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.d.ts +3 -5
  97. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js +10 -2
  98. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js.map +1 -1
  99. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.d.ts +37 -0
  100. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js +167 -0
  101. package/dist/storage/implementation/v3/object-storage/ObjectStorageUsage.js.map +1 -0
  102. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.d.ts +37 -12
  103. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js +177 -23
  104. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js.map +1 -1
  105. package/dist/storage/implementation/v3/source-table-utils.d.ts +15 -7
  106. package/dist/storage/implementation/v3/source-table-utils.js +49 -57
  107. package/dist/storage/implementation/v3/source-table-utils.js.map +1 -1
  108. package/dist/storage/storage-index.d.ts +2 -1
  109. package/dist/storage/storage-index.js +1 -0
  110. package/dist/storage/storage-index.js.map +1 -1
  111. package/dist/types/types.d.ts +23 -1
  112. package/dist/types/types.js +16 -7
  113. package/dist/types/types.js.map +1 -1
  114. package/dist/utils/util.js +3 -1
  115. package/dist/utils/util.js.map +1 -1
  116. package/package.json +10 -9
  117. package/src/storage/MongoBucketStorage.ts +495 -268
  118. package/src/storage/implementation/MongoBucketBatch.ts +54 -14
  119. package/src/storage/implementation/MongoCompactor.ts +35 -346
  120. package/src/storage/implementation/MongoParameterCompactor.ts +388 -102
  121. package/src/storage/implementation/MongoParsedSyncConfigSet.ts +34 -0
  122. package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +4 -2
  123. package/src/storage/implementation/MongoStorageProvider.ts +3 -1
  124. package/src/storage/implementation/MongoSyncBucketStorage.ts +114 -40
  125. package/src/storage/implementation/MongoSyncRulesLock.ts +22 -9
  126. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +12 -44
  127. package/src/storage/implementation/SyncRuleStateUpdate.ts +13 -6
  128. package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +24 -2
  129. package/src/storage/implementation/common/PersistedBatch.ts +54 -2
  130. package/src/storage/implementation/db.ts +21 -2
  131. package/src/storage/implementation/models.ts +38 -0
  132. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +107 -96
  133. package/src/storage/implementation/v1/MongoCompactorV1.ts +303 -19
  134. package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +25 -9
  135. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +87 -27
  136. package/src/storage/implementation/v1/models.ts +1 -0
  137. package/src/storage/implementation/v3/CompactionLease.ts +152 -0
  138. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +159 -42
  139. package/src/storage/implementation/v3/MongoCompactorV3.ts +744 -190
  140. package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +34 -0
  141. package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +100 -109
  142. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +111 -41
  143. package/src/storage/implementation/v3/MongoWriteCheckpointAPIV3.ts +111 -0
  144. package/src/storage/implementation/v3/PersistedBatchV3.ts +57 -12
  145. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +55 -4
  146. package/src/storage/implementation/v3/bucket-format.ts +2 -0
  147. package/src/storage/implementation/v3/compact-utils.ts +320 -0
  148. package/src/storage/implementation/v3/compaction-constants.ts +5 -0
  149. package/src/storage/implementation/v3/models.ts +96 -3
  150. package/src/storage/implementation/v3/object-storage/BucketDataObjectStorage.ts +16 -8
  151. package/src/storage/implementation/v3/object-storage/ObjectStorage.ts +20 -5
  152. package/src/storage/implementation/v3/object-storage/ObjectStorageLifecycle.ts +15 -4
  153. package/src/storage/implementation/v3/object-storage/ObjectStorageUsage.ts +230 -0
  154. package/src/storage/implementation/v3/object-storage/S3ObjectStorage.ts +257 -27
  155. package/src/storage/implementation/v3/source-table-utils.ts +82 -76
  156. package/src/storage/storage-index.ts +2 -0
  157. package/src/types/types.ts +24 -7
  158. package/src/utils/util.ts +3 -1
  159. package/test/src/__snapshots__/storage.test.ts.snap +25 -0
  160. package/test/src/__snapshots__/storage_sync.test.ts.snap +605 -16
  161. package/test/src/cleanup-stopped-sync-configs.test.ts +40 -13
  162. package/test/src/compact-utils.test.ts +226 -0
  163. package/test/src/helpers/MemoryObjectStorage.ts +14 -6
  164. package/test/src/object_storage_usage.test.ts +255 -0
  165. package/test/src/parameter_compacting_v1.test.ts +120 -0
  166. package/test/src/parameter_compacting_v3.test.ts +192 -0
  167. package/test/src/parameter_compaction_fence.test.ts +276 -0
  168. package/test/src/storage.test.ts +273 -22
  169. package/test/src/storage_compacting.test.ts +714 -244
  170. package/test/src/storage_s3_checksums.test.ts +3 -4
  171. package/test/src/storage_s3_compaction_lifecycle.test.ts +138 -12
  172. package/test/src/storage_s3_reading.test.ts +243 -1
  173. package/test/src/storage_s3_writing.test.ts +1 -0
  174. package/test/src/storage_sync.test.ts +365 -41
  175. package/test/src/util.ts +1 -1
  176. package/tsconfig.tsbuildinfo +1 -1
@@ -4,16 +4,20 @@ import { mongoTableId } from '../../../utils/util.js';
4
4
  import { PersistedBatch } from '../common/PersistedBatch.js';
5
5
  import { serializeBucketData } from './bucket-format.js';
6
6
  import { chunkBucketData } from './chunking.js';
7
+ import { DEFAULT_MIN_COMPACT_CHUNK_INTERVAL_MS } from './compaction-constants.js';
7
8
  import { serializeParameterLookup, taggedBucketParameterDocumentToTagged } from './models.js';
8
9
  import { ObjectStorageLifecycle } from './object-storage/ObjectStorageLifecycle.js';
10
+ import { ObjectStorageUsage } from './object-storage/ObjectStorageUsage.js';
9
11
  export class PersistedBatchV3 extends PersistedBatch {
10
12
  currentData = [];
11
13
  sourceTablePendingDeletes = new Map();
12
14
  objectStorageLifecycle;
15
+ objectStorageUsage;
13
16
  constructor(db, group_id, mapping, writtenSize, options) {
14
17
  super(db, group_id, mapping, writtenSize, options);
15
18
  if (this.objectStorage) {
16
19
  this.objectStorageLifecycle = new ObjectStorageLifecycle(this.db, this.group_id, this.objectStorage);
20
+ this.objectStorageUsage = new ObjectStorageUsage(this.db, this.group_id, this.objectStorageUsageWriterId);
17
21
  }
18
22
  }
19
23
  // Abstract override from PersistedBatch (V3-specific error message)
@@ -172,14 +176,15 @@ export class PersistedBatchV3 extends PersistedBatch {
172
176
  existing.push(document);
173
177
  operationsByDefinition.set(document.bucketKey.definitionId, existing);
174
178
  }
175
- let uploadCount = 0;
176
179
  const plans = Array.from(operationsByDefinition, ([definitionId, documents]) => {
177
180
  const operationsByBucket = Map.groupBy(documents, (document) => document.bucketKey.bucket);
178
181
  const lifecycle = this.objectStorageLifecycle;
179
182
  const createInserts = [];
180
183
  for (const [bucket, ops] of operationsByBucket) {
184
+ this.resetBucketPersistedBytes(definitionId, bucket);
181
185
  for (const chunk of chunkBucketData(ops)) {
182
186
  const serialized = serializeBucketData(bucket, chunk);
187
+ this.incrementBucketPersistedChunk(definitionId, bucket, serialized.size);
183
188
  if (lifecycle == null || serialized.size <= this.inlineThresholdBytes) {
184
189
  createInserts.push(async () => ({
185
190
  insertOne: {
@@ -188,13 +193,12 @@ export class PersistedBatchV3 extends PersistedBatch {
188
193
  }));
189
194
  continue;
190
195
  }
191
- uploadCount += 1;
192
196
  createInserts.push(async () => {
193
197
  const minOp = chunk[0].o;
194
198
  const maxOp = chunk[chunk.length - 1].o;
195
199
  const { ops: bucketOps, ...metadata } = serialized;
196
200
  const path = lifecycle.allocatePath(definitionId, bucket, minOp, maxOp);
197
- const { fileSize } = await lifecycle.bucketData.store(path, bucketOps);
201
+ const { fileSize } = await lifecycle.bucketData.store(path, bucketOps, { signal: this.signal });
198
202
  return {
199
203
  insertOne: {
200
204
  document: {
@@ -219,7 +223,14 @@ export class PersistedBatchV3 extends PersistedBatch {
219
223
  // so replication can schedule its uploads together without creating a
220
224
  // separate limiter here.
221
225
  const writes = await createAllInserts();
226
+ const usageDeltas = this.objectStorageUsage == null ? undefined : new Map();
222
227
  for (const { definitionId, inserts } of writes) {
228
+ if (usageDeltas != null) {
229
+ const delta = inserts.reduce((sum, operation) => sum + ObjectStorageUsage.bytes(operation.insertOne.document), 0n);
230
+ if (delta !== 0n) {
231
+ usageDeltas.set(definitionId, delta);
232
+ }
233
+ }
223
234
  if (inserts.length > 0) {
224
235
  await this.db.bucketData(this.group_id, definitionId).bulkWrite(inserts, {
225
236
  session,
@@ -227,6 +238,9 @@ export class PersistedBatchV3 extends PersistedBatch {
227
238
  });
228
239
  }
229
240
  }
241
+ if (usageDeltas != null) {
242
+ await this.objectStorageUsage.applyDeltas(usageDeltas, session);
243
+ }
230
244
  }
231
245
  async flushBucketParameters(session) {
232
246
  const operationsByIndex = new Map();
@@ -302,15 +316,42 @@ export class PersistedBatchV3 extends PersistedBatch {
302
316
  b: state.bucket
303
317
  }
304
318
  },
305
- update: {
306
- $set: {
307
- last_op: state.lastOp
308
- },
309
- $inc: {
310
- 'estimate_since_compact.count': state.incrementCount,
311
- 'estimate_since_compact.bytes': state.incrementBytes
319
+ // A pipeline update makes initialisation and scheduling one atomic
320
+ // writer operation. In particular, a later write cannot move an
321
+ // already-due compact check into the future.
322
+ update: [
323
+ {
324
+ $set: {
325
+ last_op: state.lastOp,
326
+ bucket_stats: {
327
+ count: { $add: [{ $ifNull: ['$bucket_stats.count', 0] }, state.incrementCount] },
328
+ bytes: { $add: [{ $ifNull: ['$bucket_stats.bytes', 0n] }, BigInt(state.incrementBytes)] },
329
+ chunks: { $add: [{ $ifNull: ['$bucket_stats.chunks', 0] }, state.incrementChunks] }
330
+ },
331
+ first_uncompacted_write: { $ifNull: ['$first_uncompacted_write', '$$NOW'] },
332
+ next_compact_check: {
333
+ $let: {
334
+ vars: {
335
+ requested: {
336
+ $dateAdd: {
337
+ startDate: '$$NOW',
338
+ unit: 'millisecond',
339
+ amount: DEFAULT_MIN_COMPACT_CHUNK_INTERVAL_MS
340
+ }
341
+ }
342
+ },
343
+ in: {
344
+ $cond: [
345
+ { $lt: [{ $ifNull: ['$next_compact_check', '$$requested'] }, '$$requested'] },
346
+ '$next_compact_check',
347
+ '$$requested'
348
+ ]
349
+ }
350
+ }
351
+ }
352
+ }
312
353
  }
313
- },
354
+ ],
314
355
  upsert: true
315
356
  }
316
357
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PersistedBatchV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/PersistedBatchV3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersistedBatchV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/PersistedBatchV3.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,13 @@
1
1
  import { mongo } from '@powersync/lib-service-mongodb';
2
- import { BucketDefinitionId, ParameterIndexId } from '@powersync/service-sync-rules';
2
+ import { BucketDefinitionId, EventDefinitionId, ParameterIndexId } from '@powersync/service-sync-rules';
3
3
  import { BaseVersionedPowerSyncMongo } from '../common/VersionedPowerSyncMongoBase.js';
4
4
  import { CommonSourceTableDocument } from '../models.js';
5
- import { BucketDataDocumentV3, BucketParameterDocumentV3, BucketStateDocumentV3, CurrentDataDocumentV3, ObjectStorageDeletionMarker, SourceTableDocumentV3, SyncConfigDefinition } from './models.js';
5
+ import { BucketDataDocumentV3, BucketParameterDocumentV3, BucketStateDocumentV3, CurrentDataDocumentV3, CustomCheckpointRequestDocumentV3, ObjectStorageDeletionMarker, ObjectStorageUsageDocument, SourceTableDocumentV3, SyncConfigDefinition } from './models.js';
6
+ export declare const OBJECT_STORAGE_USAGE_COLLECTION = "object_storage_usage";
7
+ export type CustomCheckpointRequestCollectionSpecifier = {
8
+ replicationStreamId: number;
9
+ eventId: EventDefinitionId;
10
+ };
6
11
  export declare class VersionedPowerSyncMongoV3 extends BaseVersionedPowerSyncMongo {
7
12
  constructor(upstream: ConstructorParameters<typeof BaseVersionedPowerSyncMongo>[0], storageConfig: ConstructorParameters<typeof BaseVersionedPowerSyncMongo>[1]);
8
13
  get syncConfigDefinitions(): mongo.Collection<SyncConfigDefinition>;
@@ -15,10 +20,15 @@ export declare class VersionedPowerSyncMongoV3 extends BaseVersionedPowerSyncMon
15
20
  sourceTables(replicationStreamId: number): mongo.Collection<SourceTableDocumentV3>;
16
21
  bucketData(replicationStreamId: number, definitionId: BucketDefinitionId): mongo.Collection<BucketDataDocumentV3>;
17
22
  pendingObjectStorageDeletes(replicationStreamId: number): mongo.Collection<ObjectStorageDeletionMarker>;
23
+ get objectStorageUsage(): mongo.Collection<ObjectStorageUsageDocument>;
24
+ customCheckpointRequests(options: CustomCheckpointRequestCollectionSpecifier): mongo.Collection<CustomCheckpointRequestDocumentV3>;
25
+ initializeCustomCheckpointRequestsCollection(options: CustomCheckpointRequestCollectionSpecifier): Promise<void>;
26
+ listCustomCheckpointRequestCollections(replicationStreamId: number): Promise<mongo.Collection<CustomCheckpointRequestDocumentV3>[]>;
18
27
  listBucketDataCollections(replicationStreamId: number): Promise<mongo.Collection<mongo.BSON.Document>[]>;
19
28
  listParameterIndexCollections(replicationStreamId: number): Promise<{
20
29
  collection: mongo.Collection<mongo.BSON.Document>;
21
30
  indexId: string;
22
31
  }[]>;
23
32
  initializeStreamStorage(replicationStreamId: number): Promise<void>;
33
+ customCheckpointRequestCollectionName(options: CustomCheckpointRequestCollectionSpecifier): string;
24
34
  }
@@ -1,4 +1,5 @@
1
1
  import { BaseVersionedPowerSyncMongo } from '../common/VersionedPowerSyncMongoBase.js';
2
+ export const OBJECT_STORAGE_USAGE_COLLECTION = 'object_storage_usage';
2
3
  export class VersionedPowerSyncMongoV3 extends BaseVersionedPowerSyncMongo {
3
4
  constructor(upstream, storageConfig) {
4
5
  super(upstream, storageConfig);
@@ -40,6 +41,38 @@ export class VersionedPowerSyncMongoV3 extends BaseVersionedPowerSyncMongo {
40
41
  pendingObjectStorageDeletes(replicationStreamId) {
41
42
  return this.db.collection(`pending_object_storage_deletes_${replicationStreamId}`);
42
43
  }
44
+ get objectStorageUsage() {
45
+ return this.db.collection(OBJECT_STORAGE_USAGE_COLLECTION);
46
+ }
47
+ customCheckpointRequests(options) {
48
+ const collectionName = this.customCheckpointRequestCollectionName(options);
49
+ return this.db.collection(collectionName);
50
+ }
51
+ async initializeCustomCheckpointRequestsCollection(options) {
52
+ // createIndexes also creates the collection on first use. Callers invoke
53
+ // this lazily before the transaction which writes the first checkpoint.
54
+ await this.customCheckpointRequests(options).createIndexes([
55
+ {
56
+ key: { user_id: 1 },
57
+ name: 'user_unique',
58
+ unique: true
59
+ },
60
+ {
61
+ // Find checkpoint changes over an operation-id range.
62
+ key: { op_id: 1 },
63
+ name: 'op_id'
64
+ },
65
+ {
66
+ // Limit retention scans to temporary client-requested checkpoints.
67
+ key: { checkpoint_requested_at: 1 },
68
+ name: 'checkpoint_requested_at',
69
+ partialFilterExpression: { checkpoint_requested_at: { $exists: true } }
70
+ }
71
+ ]);
72
+ }
73
+ listCustomCheckpointRequestCollections(replicationStreamId) {
74
+ return this.upstream.listCustomCheckpointRequestCollections(replicationStreamId);
75
+ }
43
76
  listBucketDataCollections(replicationStreamId) {
44
77
  return this.listCollectionsByPrefix(`bucket_data_${replicationStreamId}_`);
45
78
  }
@@ -71,9 +104,15 @@ export class VersionedPowerSyncMongoV3 extends BaseVersionedPowerSyncMongo {
71
104
  await bucketState.createIndex({
72
105
  last_op: 1
73
106
  }, { name: 'bucket_updates', unique: true });
74
- await bucketState.createIndex({
75
- 'estimate_since_compact.count': -1
76
- }, { name: 'dirty_count' });
107
+ // V3 workers claim only buckets that have reached their scheduled check
108
+ // time, keeping scheduled scans proportional to pending work.
109
+ await bucketState.createIndex({ next_compact_check: 1 }, {
110
+ name: 'next_compact_check',
111
+ partialFilterExpression: { next_compact_check: { $exists: true } }
112
+ });
113
+ }
114
+ customCheckpointRequestCollectionName(options) {
115
+ return this.upstream.customCheckpointRequestCollectionName(options);
77
116
  }
78
117
  }
79
118
  //# sourceMappingURL=VersionedPowerSyncMongoV3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VersionedPowerSyncMongoV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VersionedPowerSyncMongoV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export function serializeBucketData(bucket, operations, options) {
21
21
  op: op.op,
22
22
  source_table: op.source_table,
23
23
  source_key: op.source_key,
24
+ subkey: op.subkey,
24
25
  table: op.table,
25
26
  row_id: op.row_id,
26
27
  checksum: op.checksum,
@@ -58,6 +59,7 @@ export function* loadBucketDataDocument(context, doc) {
58
59
  op: op.op,
59
60
  source_table: op.source_table,
60
61
  source_key: op.source_key,
62
+ subkey: op.subkey,
61
63
  table: op.table,
62
64
  row_id: op.row_id,
63
65
  checksum: op.checksum,
@@ -1 +1 @@
1
- {"version":3,"file":"bucket-format.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/bucket-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bucket-format.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/bucket-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAI7D;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,UAA2B,EAC3B,OAA4C;IAE5C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,WAAW,GAAwB,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;IACjE,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,MAAM,GAAG,GAAsB,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACnD,aAAa,IAAI,EAAE,CAAC,QAAQ,CAAC;QAE7B,IAAI,EAAE,CAAC,EAAE,IAAI,OAAO,EAAE,CAAC;YACrB,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,OAAO;YACL,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAE3C,OAAO;QACL,GAAG,EAAE;YACH,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,KAAK;SACT;QACD,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,aAAa;QACvB,KAAK,EAAE,UAAU,CAAC,MAAM;QACxB,IAAI;QACJ,SAAS,EAAE,WAAW;QACtB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,GAAG;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,sBAAsB,CACrC,OAAgE,EAChE,GAAyB;IAEzB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,qBAAqB,CAC7B,sDAAsD,GAAG,CAAC,CAAC,oEAAoE,CAChI,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,GAAG,OAAO;QACV,MAAM,EAAE,GAAG,CAAC,CAAC;KACd,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM;YACJ,SAAS;YACT,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,YAAY,EAAE,EAAE,CAAC,YAAY;YAC7B,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ;YACrB,IAAI,EAAE,EAAE,CAAC,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,CAAkC,EAAE,CAAkC;IAC5F,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { mongo } from '@powersync/lib-service-mongodb';
2
+ import { InternalOpId } from '@powersync/service-core';
3
+ import { BucketDataDoc } from '../common/BucketDataDoc.js';
4
+ import { CompactionLease } from './CompactionLease.js';
5
+ import { BucketDataDocumentV3, BucketStateDocumentV3 } from './models.js';
6
+ export declare const FULL_COMPACT_RESCHEDULE_MARGIN_MS: number;
7
+ export interface PendingCompactionGroup {
8
+ /**
9
+ * Input documents are ordered from oldest to newest, matching `ops`.
10
+ * Keeping the inputs intact lets unchanged singletons retain their object.
11
+ */
12
+ inputs: BucketDataDocumentV3[];
13
+ ops: BucketDataDoc[];
14
+ changed: boolean;
15
+ targetOp: InternalOpId | null;
16
+ }
17
+ export interface CompactIntervalConfig {
18
+ readonly minCompactChunkIntervalMs: number;
19
+ readonly minCompactFullIntervalMs: number;
20
+ readonly maxCompactFullIntervalMs: number;
21
+ }
22
+ export interface CompactTargetConfig {
23
+ readonly maxOpIdCap: InternalOpId | undefined;
24
+ }
25
+ export declare enum CompactionKind {
26
+ Full = "full",
27
+ Chunks = "chunks"
28
+ }
29
+ export interface CompactionDecision {
30
+ kind: CompactionKind | null;
31
+ nextCompactCheck: mongo.Document;
32
+ }
33
+ export interface ScheduledCompactionOptions {
34
+ /** Process checks scheduled this far after the captured job start. */
35
+ dueAheadMs?: number;
36
+ /** Used by initial replication, which must not run a full compact. */
37
+ forceKind?: CompactionKind;
38
+ }
39
+ export declare class CompactionContext {
40
+ readonly lease: CompactionLease;
41
+ readonly kind: CompactionKind;
42
+ readonly decision: CompactionDecision;
43
+ readonly rescheduleNotBefore: Date | undefined;
44
+ readonly targetOp: InternalOpId;
45
+ constructor(lease: CompactionLease, kind: CompactionKind, decision: CompactionDecision, rescheduleNotBefore: Date | undefined, targetOp: InternalOpId);
46
+ get state(): BucketStateDocumentV3;
47
+ get startedAt(): Date;
48
+ get lastOp(): bigint;
49
+ }
50
+ export interface BucketStats {
51
+ count: number;
52
+ bytes: bigint;
53
+ chunks: number;
54
+ }
55
+ /** Bucket stats read from bucket-data documents, including their checksum. */
56
+ export interface BucketStatsWithChecksum extends BucketStats {
57
+ checksum: number;
58
+ }
59
+ export interface CompactionResult {
60
+ /** Metadata cached at compacted_state.op_id. */
61
+ compactedState: BucketStatsWithChecksum;
62
+ /** Complete bucket metadata through the op head captured at claim time. */
63
+ bucketStats: BucketStats;
64
+ }
65
+ export declare function bucketStats(state: BucketStateDocumentV3): BucketStats;
66
+ export declare function emptyBucketStats(): BucketStatsWithChecksum;
67
+ export declare function statsForDocument(document: Pick<BucketDataDocumentV3, 'count' | 'size' | 'checksum'>): BucketStatsWithChecksum;
68
+ export declare function statsForDocuments(documents: Iterable<Pick<BucketDataDocumentV3, 'count' | 'size' | 'checksum'>>): BucketStatsWithChecksum;
69
+ /** A scheduled bucket always has writes awaiting a full compact. */
70
+ export declare function firstUncompactedWrite(state: BucketStateDocumentV3): Date;
71
+ export declare function combineChunkStats(previous: NonNullable<BucketStateDocumentV3['compacted_state']>, compactedTail: BucketStatsWithChecksum, overlappingCompactedChunk: BucketStatsWithChecksum): BucketStatsWithChecksum;
72
+ export declare function combineAdjacentStats(first: BucketStatsWithChecksum, second: BucketStatsWithChecksum): BucketStatsWithChecksum;
73
+ export declare function applyCompactionDelta(total: BucketStats, before: BucketStatsWithChecksum, after: BucketStatsWithChecksum): BucketStats;
74
+ /** Replace one stored range in an accumulated statistics snapshot. */
75
+ export declare function applyStatsReplacement(total: BucketStatsWithChecksum, before: BucketStatsWithChecksum, after: BucketStatsWithChecksum): BucketStatsWithChecksum;
76
+ /**
77
+ * This checks that the bucket state hasn't changed by a concurrent write since we checked.
78
+ *
79
+ * If it has changed, we'll re-check in the next batch.
80
+ */
81
+ export declare function unclaimedSnapshotFilter(state: BucketStateDocumentV3): mongo.Filter<BucketStateDocumentV3>;
82
+ /**
83
+ * Calculate the earliest full compaction time from the first uncompacted
84
+ * write, bounded by the maximum retention interval.
85
+ */
86
+ export declare function fullCompactionCheckAt(state: BucketStateDocumentV3, config: CompactIntervalConfig): Date;
87
+ export declare function chooseCompactionKind(state: BucketStateDocumentV3, now: Date, config: CompactIntervalConfig): CompactionDecision;
88
+ export declare function forcedCompactionKind(state: BucketStateDocumentV3, forceKind: CompactionKind | undefined, config: CompactTargetConfig): CompactionKind | null;
89
+ /**
90
+ * Read one bounded prefix from a compaction cursor.
91
+ *
92
+ * The document that would cross the byte limit is deliberately not returned:
93
+ * pagination resumes past the last returned `_id`, so that document remains
94
+ * eligible for the next query. The first document is always accepted to
95
+ * ensure progress when a single document exceeds the configured byte limit.
96
+ *
97
+ * `hasMore` is conservative when the document limit is reached. An extra empty
98
+ * query is preferable to exhausting the cursor just to determine whether the
99
+ * limited MongoDB query contained another document.
100
+ */
101
+ export declare function readCompactionBatch(cursor: mongo.AggregationCursor<BucketDataDocumentV3>, options: {
102
+ byteLimit: number;
103
+ documentLimit: number;
104
+ }): Promise<{
105
+ documents: BucketDataDocumentV3[];
106
+ hasMore: boolean;
107
+ }>;
@@ -0,0 +1,216 @@
1
+ import { ReplicationAssertionError } from '@powersync/lib-services-framework';
2
+ import { addChecksums } from '@powersync/service-core';
3
+ import { AVAILABLE_LEASE_EXPR } from './CompactionLease.js';
4
+ /**
5
+ * Perform chunk compaction if at least this many chunks have been added since
6
+ * the latest compaction.
7
+ *
8
+ * A lower value increases compaction frequency and can increase chunk rewrites
9
+ * and object-storage operations. A higher value leaves more small chunks for
10
+ * longer, which can hurt sync performance.
11
+ */
12
+ const MERGE_CHUNKS_THRESHOLD = 8;
13
+ export const FULL_COMPACT_RESCHEDULE_MARGIN_MS = 60 * 1000;
14
+ export var CompactionKind;
15
+ (function (CompactionKind) {
16
+ CompactionKind["Full"] = "full";
17
+ CompactionKind["Chunks"] = "chunks";
18
+ })(CompactionKind || (CompactionKind = {}));
19
+ export class CompactionContext {
20
+ lease;
21
+ kind;
22
+ decision;
23
+ rescheduleNotBefore;
24
+ targetOp;
25
+ constructor(lease, kind, decision, rescheduleNotBefore, targetOp) {
26
+ this.lease = lease;
27
+ this.kind = kind;
28
+ this.decision = decision;
29
+ this.rescheduleNotBefore = rescheduleNotBefore;
30
+ this.targetOp = targetOp;
31
+ }
32
+ get state() {
33
+ return this.lease.state;
34
+ }
35
+ get startedAt() {
36
+ return this.lease.startedAt;
37
+ }
38
+ get lastOp() {
39
+ return this.lease.lastOp;
40
+ }
41
+ }
42
+ export function bucketStats(state) {
43
+ return {
44
+ count: state.bucket_stats.count,
45
+ bytes: state.bucket_stats.bytes,
46
+ chunks: state.bucket_stats.chunks
47
+ };
48
+ }
49
+ export function emptyBucketStats() {
50
+ return { count: 0, bytes: 0n, chunks: 0, checksum: 0 };
51
+ }
52
+ export function statsForDocument(document) {
53
+ return {
54
+ count: document.count,
55
+ bytes: BigInt(document.size),
56
+ chunks: 1,
57
+ checksum: addChecksums(0, Number(document.checksum))
58
+ };
59
+ }
60
+ export function statsForDocuments(documents) {
61
+ let result = emptyBucketStats();
62
+ for (const document of documents) {
63
+ result = combineAdjacentStats(result, statsForDocument(document));
64
+ }
65
+ return result;
66
+ }
67
+ /** A scheduled bucket always has writes awaiting a full compact. */
68
+ export function firstUncompactedWrite(state) {
69
+ if (state.first_uncompacted_write == null) {
70
+ throw new ReplicationAssertionError(`Scheduled V3 bucket ${state._id.b} has no first uncompacted write`);
71
+ }
72
+ return state.first_uncompacted_write;
73
+ }
74
+ export function combineChunkStats(previous, compactedTail, overlappingCompactedChunk) {
75
+ return {
76
+ count: previous.count - overlappingCompactedChunk.count + compactedTail.count,
77
+ bytes: previous.bytes - overlappingCompactedChunk.bytes + compactedTail.bytes,
78
+ chunks: previous.chunks - 1 + compactedTail.chunks,
79
+ checksum: addChecksums(addChecksums(Number(previous.checksum), -overlappingCompactedChunk.checksum), compactedTail.checksum)
80
+ };
81
+ }
82
+ export function combineAdjacentStats(first, second) {
83
+ return {
84
+ count: first.count + second.count,
85
+ bytes: first.bytes + second.bytes,
86
+ chunks: first.chunks + second.chunks,
87
+ checksum: addChecksums(first.checksum, second.checksum)
88
+ };
89
+ }
90
+ export function applyCompactionDelta(total, before, after) {
91
+ return {
92
+ count: total.count - before.count + after.count,
93
+ bytes: total.bytes - before.bytes + after.bytes,
94
+ chunks: total.chunks - before.chunks + after.chunks
95
+ };
96
+ }
97
+ /** Replace one stored range in an accumulated statistics snapshot. */
98
+ export function applyStatsReplacement(total, before, after) {
99
+ return {
100
+ ...applyCompactionDelta(total, before, after),
101
+ checksum: addChecksums(addChecksums(total.checksum, -before.checksum), after.checksum)
102
+ };
103
+ }
104
+ /**
105
+ * This checks that the bucket state hasn't changed by a concurrent write since we checked.
106
+ *
107
+ * If it has changed, we'll re-check in the next batch.
108
+ */
109
+ export function unclaimedSnapshotFilter(state) {
110
+ return {
111
+ _id: state._id,
112
+ last_op: state.last_op,
113
+ next_compact_check: state.next_compact_check,
114
+ first_uncompacted_write: state.first_uncompacted_write ?? { $exists: false },
115
+ bucket_stats: state.bucket_stats,
116
+ compacted_state: state.compacted_state ?? { $exists: false },
117
+ last_full_compact: state.last_full_compact ?? { $exists: false },
118
+ ...AVAILABLE_LEASE_EXPR
119
+ };
120
+ }
121
+ /**
122
+ * Calculate the earliest full compaction time from the first uncompacted
123
+ * write, bounded by the maximum retention interval.
124
+ */
125
+ export function fullCompactionCheckAt(state, config) {
126
+ const firstWrite = firstUncompactedWrite(state);
127
+ const stats = bucketStats(state);
128
+ const lastFull = state.last_full_compact;
129
+ // The number of operations since the last full compact.
130
+ // We may make this more specific in the future, to track new updates and deletes only, ignoring
131
+ // full new inserts, but that requires more granular tracking when replicating.
132
+ const uncompactedCount = lastFull == null ? stats.count : Math.max(0, stats.count - lastFull.count);
133
+ const compactedRows = lastFull?.puts ?? 0;
134
+ // If no full compact has ever been performed: ratio = 1, compact after minCompactFullIntervalMs.
135
+ // If every row has been updated or deleted exactly once since the last full compact: ratio = 0.5, compact after minCompactFullIntervalMs * 2.
136
+ // If 10% of rows has been updated since the last full compact, compact after minCompactFullIntervalMs * 11.
137
+ // If every row has been updated multiple times, the ratio tends closer to 1 again.
138
+ const ratio = uncompactedCount == 0 ? 0 : uncompactedCount / (compactedRows + uncompactedCount);
139
+ const fullIntervalMs = ratio == 0 ? config.maxCompactFullIntervalMs : config.minCompactFullIntervalMs / ratio;
140
+ return new Date(firstWrite.getTime() + Math.min(fullIntervalMs, config.maxCompactFullIntervalMs));
141
+ }
142
+ export function chooseCompactionKind(state, now, config) {
143
+ // For chunk compaction, we consider the number of chunks added.
144
+ // Right now, we trigger a compact if the interval has passed and at least a threshold of chunks were added.
145
+ // A future policy could also use bytes per chunk or records per chunk to
146
+ // decide when to compact.
147
+ const fullCheckAt = fullCompactionCheckAt(state, config);
148
+ // Schedule a little late so a worker using a slightly earlier clock does
149
+ // not wake before the exact full-compaction condition is true.
150
+ const fullCheckWithMargin = new Date(fullCheckAt.getTime() + FULL_COMPACT_RESCHEDULE_MARGIN_MS);
151
+ const compacted = state.compacted_state;
152
+ const chunksSinceCompact = Math.max(0, state.bucket_stats.chunks - (compacted?.chunks ?? 0));
153
+ const shouldCompactChunks = chunksSinceCompact >= MERGE_CHUNKS_THRESHOLD;
154
+ const canCheckChunks = compacted == null || now.getTime() - compacted.at.getTime() >= config.minCompactChunkIntervalMs;
155
+ // Too few new chunks cannot make chunk compaction eligible. Do not poll this
156
+ // bucket at the chunk-compaction interval; only wake it for its full-compact check.
157
+ const nextCompactCheck = !shouldCompactChunks
158
+ ? fullCheckWithMargin
159
+ : {
160
+ $min: [
161
+ fullCheckWithMargin,
162
+ { $dateAdd: { startDate: '$$NOW', unit: 'millisecond', amount: config.minCompactChunkIntervalMs } }
163
+ ]
164
+ };
165
+ let kind = null;
166
+ if (now >= fullCheckAt) {
167
+ kind = CompactionKind.Full;
168
+ }
169
+ else if (canCheckChunks && shouldCompactChunks) {
170
+ kind = CompactionKind.Chunks;
171
+ }
172
+ return {
173
+ kind,
174
+ nextCompactCheck
175
+ };
176
+ }
177
+ export function forcedCompactionKind(state, forceKind, config) {
178
+ if (forceKind == null) {
179
+ return null;
180
+ }
181
+ const maxOpId = config.maxOpIdCap == null || state.last_op < config.maxOpIdCap ? state.last_op : config.maxOpIdCap;
182
+ return state.compacted_state == null || state.compacted_state.op_id < maxOpId ? forceKind : null;
183
+ }
184
+ /**
185
+ * Read one bounded prefix from a compaction cursor.
186
+ *
187
+ * The document that would cross the byte limit is deliberately not returned:
188
+ * pagination resumes past the last returned `_id`, so that document remains
189
+ * eligible for the next query. The first document is always accepted to
190
+ * ensure progress when a single document exceeds the configured byte limit.
191
+ *
192
+ * `hasMore` is conservative when the document limit is reached. An extra empty
193
+ * query is preferable to exhausting the cursor just to determine whether the
194
+ * limited MongoDB query contained another document.
195
+ */
196
+ export async function readCompactionBatch(cursor, options) {
197
+ const documents = [];
198
+ let cumulativeBytes = 0;
199
+ try {
200
+ for await (const document of cursor) {
201
+ if (documents.length > 0 && cumulativeBytes + document.size > options.byteLimit) {
202
+ return { documents, hasMore: true };
203
+ }
204
+ documents.push(document);
205
+ cumulativeBytes += document.size;
206
+ if (documents.length >= options.documentLimit) {
207
+ return { documents, hasMore: true };
208
+ }
209
+ }
210
+ return { documents, hasMore: false };
211
+ }
212
+ finally {
213
+ await cursor.close();
214
+ }
215
+ }
216
+ //# sourceMappingURL=compact-utils.js.map