@powersync/service-module-mongodb-storage 0.18.3 → 0.20.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 (145) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/migrations/db/migrations/1782950400000-checkpoint-requested-at-index.d.ts +3 -0
  3. package/dist/migrations/db/migrations/1782950400000-checkpoint-requested-at-index.js +41 -0
  4. package/dist/migrations/db/migrations/1782950400000-checkpoint-requested-at-index.js.map +1 -0
  5. package/dist/storage/MongoBucketStorage.d.ts +5 -1
  6. package/dist/storage/MongoBucketStorage.js +5 -1
  7. package/dist/storage/MongoBucketStorage.js.map +1 -1
  8. package/dist/storage/implementation/MongoBucketBatch.d.ts +3 -0
  9. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  10. package/dist/storage/implementation/MongoCompactor.d.ts +15 -19
  11. package/dist/storage/implementation/MongoCompactor.js +68 -260
  12. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  13. package/dist/storage/implementation/MongoStorageProvider.js +26 -3
  14. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
  15. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +10 -4
  16. package/dist/storage/implementation/MongoSyncBucketStorage.js +13 -12
  17. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  18. package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +2 -1
  19. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +146 -34
  20. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  21. package/dist/storage/implementation/common/PersistedBatch.d.ts +6 -0
  22. package/dist/storage/implementation/common/PersistedBatch.js +15 -8
  23. package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
  24. package/dist/storage/implementation/models.d.ts +20 -0
  25. package/dist/storage/implementation/models.js.map +1 -1
  26. package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +4 -0
  27. package/dist/storage/implementation/v1/MongoBucketBatchV1.js +58 -84
  28. package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
  29. package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +11 -2
  30. package/dist/storage/implementation/v1/MongoCompactorV1.js +250 -1
  31. package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -1
  32. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +19 -11
  33. package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
  34. package/dist/storage/implementation/v1/SingleBucketStoreV1.d.ts +9 -10
  35. package/dist/storage/implementation/v1/SingleBucketStoreV1.js +2 -8
  36. package/dist/storage/implementation/v1/SingleBucketStoreV1.js.map +1 -1
  37. package/dist/storage/implementation/v3/BucketDataContextV3.d.ts +13 -0
  38. package/dist/storage/implementation/v3/BucketDataContextV3.js +23 -0
  39. package/dist/storage/implementation/v3/BucketDataContextV3.js.map +1 -0
  40. package/dist/storage/implementation/v3/MongoBucketBatchV3.js +35 -23
  41. package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
  42. package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +1 -0
  43. package/dist/storage/implementation/v3/MongoChecksumsV3.js +59 -103
  44. package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -1
  45. package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +23 -2
  46. package/dist/storage/implementation/v3/MongoCompactorV3.js +354 -219
  47. package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
  48. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +5 -0
  49. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +12 -11
  50. package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -1
  51. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +5 -3
  52. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +108 -106
  53. package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
  54. package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +5 -2
  55. package/dist/storage/implementation/v3/PersistedBatchV3.js +53 -15
  56. package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
  57. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +2 -1
  58. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +3 -0
  59. package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
  60. package/dist/storage/implementation/v3/bucket-format.d.ts +10 -1
  61. package/dist/storage/implementation/v3/bucket-format.js +28 -9
  62. package/dist/storage/implementation/v3/bucket-format.js.map +1 -1
  63. package/dist/storage/implementation/v3/chunking.js +3 -1
  64. package/dist/storage/implementation/v3/chunking.js.map +1 -1
  65. package/dist/storage/implementation/v3/models.d.ts +43 -2
  66. package/dist/storage/implementation/v3/models.js.map +1 -1
  67. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.d.ts +21 -0
  68. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js +44 -0
  69. package/dist/storage/implementation/v3/object-storage/BucketDataObjectStorage.js.map +1 -0
  70. package/dist/storage/implementation/v3/object-storage/ObjectStorage.d.ts +30 -0
  71. package/dist/storage/implementation/v3/object-storage/ObjectStorage.js +12 -0
  72. package/dist/storage/implementation/v3/object-storage/ObjectStorage.js.map +1 -0
  73. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.d.ts +70 -0
  74. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js +146 -0
  75. package/dist/storage/implementation/v3/object-storage/ObjectStorageLifecycle.js.map +1 -0
  76. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.d.ts +42 -0
  77. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js +285 -0
  78. package/dist/storage/implementation/v3/object-storage/S3ObjectStorage.js.map +1 -0
  79. package/dist/storage/implementation/v3/source-table-utils.d.ts +9 -1
  80. package/dist/storage/implementation/v3/source-table-utils.js +20 -21
  81. package/dist/storage/implementation/v3/source-table-utils.js.map +1 -1
  82. package/dist/types/types.d.ts +35 -0
  83. package/dist/types/types.js +35 -1
  84. package/dist/types/types.js.map +1 -1
  85. package/dist/utils/test-utils.js +3 -1
  86. package/dist/utils/test-utils.js.map +1 -1
  87. package/dist/utils/util.d.ts +8 -1
  88. package/dist/utils/util.js +125 -2
  89. package/dist/utils/util.js.map +1 -1
  90. package/package.json +10 -7
  91. package/src/migrations/db/migrations/1782950400000-checkpoint-requested-at-index.ts +55 -0
  92. package/src/storage/MongoBucketStorage.ts +10 -2
  93. package/src/storage/implementation/MongoBucketBatch.ts +4 -0
  94. package/src/storage/implementation/MongoCompactor.ts +90 -314
  95. package/src/storage/implementation/MongoStorageProvider.ts +32 -3
  96. package/src/storage/implementation/MongoSyncBucketStorage.ts +23 -22
  97. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +164 -37
  98. package/src/storage/implementation/common/PersistedBatch.ts +22 -10
  99. package/src/storage/implementation/models.ts +20 -0
  100. package/src/storage/implementation/v1/MongoBucketBatchV1.ts +76 -96
  101. package/src/storage/implementation/v1/MongoCompactorV1.ts +292 -8
  102. package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +53 -40
  103. package/src/storage/implementation/v1/SingleBucketStoreV1.ts +18 -27
  104. package/src/storage/implementation/v3/BucketDataContextV3.ts +32 -0
  105. package/src/storage/implementation/v3/MongoBucketBatchV3.ts +40 -23
  106. package/src/storage/implementation/v3/MongoChecksumsV3.ts +75 -105
  107. package/src/storage/implementation/v3/MongoCompactorV3.ts +456 -258
  108. package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +21 -19
  109. package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +122 -126
  110. package/src/storage/implementation/v3/PersistedBatchV3.ts +69 -16
  111. package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +5 -0
  112. package/src/storage/implementation/v3/bucket-format.ts +36 -9
  113. package/src/storage/implementation/v3/chunking.ts +3 -1
  114. package/src/storage/implementation/v3/models.ts +45 -1
  115. package/src/storage/implementation/v3/object-storage/BucketDataObjectStorage.ts +54 -0
  116. package/src/storage/implementation/v3/object-storage/ObjectStorage.ts +29 -0
  117. package/src/storage/implementation/v3/object-storage/ObjectStorageLifecycle.ts +171 -0
  118. package/src/storage/implementation/v3/object-storage/S3ObjectStorage.ts +343 -0
  119. package/src/storage/implementation/v3/source-table-utils.ts +43 -35
  120. package/src/types/types.ts +42 -1
  121. package/src/utils/test-utils.ts +3 -1
  122. package/src/utils/util.ts +182 -4
  123. package/test/src/__snapshots__/storage_sync.test.ts.snap +1 -583
  124. package/test/src/cleanup-stopped-sync-configs.test.ts +24 -1
  125. package/test/src/helpers/MemoryObjectStorage.ts +53 -0
  126. package/test/src/helpers/s3TestFactory.ts +69 -0
  127. package/test/src/object_storage_lifecycle.test.ts +59 -0
  128. package/test/src/setup.ts +6 -1
  129. package/test/src/storage.test.ts +216 -2
  130. package/test/src/storage_compacting.test.ts +176 -187
  131. package/test/src/storage_object_storage_inline_threshold.test.ts +116 -0
  132. package/test/src/storage_s3_checksums.test.ts +191 -0
  133. package/test/src/storage_s3_compaction_lifecycle.test.ts +417 -0
  134. package/test/src/storage_s3_reading.test.ts +526 -0
  135. package/test/src/storage_s3_writing.test.ts +135 -0
  136. package/test/src/storage_sync.test.ts +124 -5
  137. package/tsconfig.tsbuildinfo +1 -1
  138. package/dist/storage/implementation/common/SingleBucketStore.d.ts +0 -54
  139. package/dist/storage/implementation/common/SingleBucketStore.js +0 -3
  140. package/dist/storage/implementation/common/SingleBucketStore.js.map +0 -1
  141. package/dist/storage/implementation/v3/SingleBucketStoreV3.d.ts +0 -18
  142. package/dist/storage/implementation/v3/SingleBucketStoreV3.js +0 -84
  143. package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +0 -1
  144. package/src/storage/implementation/common/SingleBucketStore.ts +0 -63
  145. package/src/storage/implementation/v3/SingleBucketStoreV3.ts +0 -108
@@ -38,6 +38,7 @@ export class MongoBucketBatchV1 extends MongoBucketBatch {
38
38
  }
39
39
  async resolveTables(options) {
40
40
  const syncRules = options.parsedSyncConfig?.hydratedSyncConfig ?? this.sync_rules;
41
+ const reconcile = options.reconcileSourceTables ?? storage.defaultSourceTableReconciler;
41
42
  const { connection_id, source } = options;
42
43
  const { schema, name, objectId, replicaIdColumns, connectionTag, sendsCompleteRows } = source;
43
44
  const normalizedReplicaIdColumns = replicaIdColumns.map((column) => ({
@@ -48,19 +49,31 @@ export class MongoBucketBatchV1 extends MongoBucketBatch {
48
49
  let result = null;
49
50
  await this.db.client.withSession(async (session) => {
50
51
  const col = this.db.sourceTablesV1(this.replicationStreamId);
51
- const filter = {
52
- group_id: this.replicationStreamId,
53
- connection_id,
54
- schema_name: schema,
55
- table_name: name,
56
- replica_id_columns2: normalizedReplicaIdColumns
57
- };
52
+ // Find records that overlap by name or relation id.
53
+ const orClauses = [{ schema_name: schema, table_name: name }];
58
54
  if (objectId != null) {
59
- filter.relation_id = objectId;
55
+ orClauses.push({ relation_id: objectId });
56
+ }
57
+ const candidateDocs = await col
58
+ .find({ group_id: this.replicationStreamId, connection_id, $or: orClauses }, { session })
59
+ .toArray();
60
+ const candidateTables = candidateDocs.map((doc) => this.hydrateSourceTable(doc, connectionTag, syncRules, sendsCompleteRows));
61
+ const candidates = candidateTables.map((table) => table.clone());
62
+ const resolution = await reconcile({ source, candidates });
63
+ storage.validateSourceTableCandidateResolution(candidates, resolution);
64
+ for (const { id, sourceMetadata } of storage.diffSourceTableUpdates(candidateTables, resolution)) {
65
+ await col.updateOne({ _id: mongoTableId(id) }, { $set: { source_metadata: sourceMetadata } }, { session });
66
+ }
67
+ const materializedResolution = storage.materializeSourceTableResolution(candidateTables, resolution);
68
+ const compatibleTables = materializedResolution.compatibleTables;
69
+ // V1 keeps one record, preferring one that has already been snapshotted.
70
+ const reuse = compatibleTables.find((table) => table.snapshotComplete) ?? compatibleTables[0] ?? null;
71
+ let sourceTable;
72
+ if (reuse != null) {
73
+ sourceTable = reuse;
60
74
  }
61
- let doc = await col.findOne(filter, { session });
62
- if (doc == null) {
63
- doc = {
75
+ else {
76
+ const doc = {
64
77
  _id: options.idGenerator ? options.idGenerator() : new bson.ObjectId(),
65
78
  group_id: this.replicationStreamId,
66
79
  connection_id,
@@ -70,90 +83,40 @@ export class MongoBucketBatchV1 extends MongoBucketBatch {
70
83
  replica_id_columns: null,
71
84
  replica_id_columns2: normalizedReplicaIdColumns,
72
85
  snapshot_done: false,
73
- snapshot_status: undefined
86
+ snapshot_status: undefined,
87
+ source_metadata: resolution.newTableValues.sourceMetadata
74
88
  };
75
89
  await col.insertOne(doc, { session });
90
+ sourceTable = this.hydrateSourceTable(doc, connectionTag, syncRules, sendsCompleteRows);
76
91
  }
77
- const sourceTable = new storage.SourceTable({
78
- id: doc._id,
79
- ref: source,
80
- objectId,
81
- replicaIdColumns,
82
- snapshotComplete: doc.snapshot_done ?? true,
83
- ...syncRules.getMatchingSources(source)
84
- });
85
- sourceTable.syncEvent = syncRules.tableTriggersEvent(source);
86
- sourceTable.syncData = sourceTable.bucketDataSources.length > 0;
87
- sourceTable.syncParameters = sourceTable.parameterLookupSources.length > 0;
88
- sourceTable.storeCurrentData = sendsCompleteRows !== true;
89
- sourceTable.snapshotStatus =
90
- doc.snapshot_status == null
91
- ? undefined
92
- : {
93
- lastKey: doc.snapshot_status.last_key?.buffer ?? null,
94
- totalEstimatedCount: doc.snapshot_status.total_estimated_count,
95
- replicatedCount: doc.snapshot_status.replicated_count
96
- };
97
- const truncateFilter = [{ schema_name: schema, table_name: name }];
98
- if (objectId != null) {
99
- truncateFilter.push({ relation_id: objectId });
100
- }
101
- const truncate = await col
102
- .find({
103
- group_id: this.replicationStreamId,
104
- connection_id,
105
- _id: { $ne: doc._id },
106
- $or: truncateFilter
107
- }, { session })
108
- .toArray();
109
- const dropTables = truncate.map((dropDoc) => {
110
- const ref = {
111
- connectionTag,
112
- schema: dropDoc.schema_name,
113
- name: dropDoc.table_name
114
- };
115
- const table = new storage.SourceTable({
116
- id: dropDoc._id,
117
- ref,
118
- objectId: dropDoc.relation_id,
119
- replicaIdColumns: dropDoc.replica_id_columns2?.map((c) => ({ name: c.name, typeId: c.type_oid, type: c.type })) ?? [],
120
- snapshotComplete: dropDoc.snapshot_done ?? true,
121
- ...syncRules.getMatchingSources(ref)
122
- });
123
- table.syncEvent = syncRules.tableTriggersEvent(ref);
124
- table.syncData = table.bucketDataSources.length > 0;
125
- table.syncParameters = table.parameterLookupSources.length > 0;
126
- return table;
127
- });
92
+ const dropTables = [
93
+ ...materializedResolution.incompatibleTables,
94
+ // V1 only keeps one SourceTable per physical table.
95
+ ...compatibleTables.filter((table) => !storage.sourceTableIdEquals(table.id, sourceTable.id))
96
+ ];
128
97
  result = { tables: [sourceTable], dropTables };
129
98
  });
130
99
  return result;
131
100
  }
132
- async getSourceTableStatus(table) {
133
- const doc = await this.db.sourceTablesV1(this.replicationStreamId).findOne({
134
- group_id: this.replicationStreamId,
135
- _id: mongoTableId(table.id)
136
- }, { session: this.session });
137
- if (doc == null) {
138
- return null;
139
- }
140
- const ref = {
141
- connectionTag: table.ref.connectionTag,
142
- schema: doc.schema_name,
143
- name: doc.table_name
144
- };
145
- const sourceTable = new storage.SourceTable({
101
+ /**
102
+ * Build a SourceTable from its persisted v1 record.
103
+ */
104
+ hydrateSourceTable(doc, connectionTag, syncRules, sendsCompleteRows) {
105
+ const ref = { connectionTag, schema: doc.schema_name, name: doc.table_name };
106
+ const table = new storage.SourceTable({
146
107
  id: doc._id,
147
108
  ref,
148
109
  objectId: doc.relation_id,
149
- replicaIdColumns: doc.replica_id_columns2?.map((c) => ({ name: c.name, typeId: c.type_oid, type: c.type })) ?? [],
110
+ replicaIdColumns: doc.replica_id_columns2?.map((column) => ({ name: column.name, typeId: column.type_oid, type: column.type })) ?? [],
150
111
  snapshotComplete: doc.snapshot_done ?? true,
151
- ...this.sync_rules.getMatchingSources(ref)
112
+ sourceMetadata: doc.source_metadata ?? null,
113
+ ...syncRules.getMatchingSources(ref)
152
114
  });
153
- sourceTable.syncEvent = this.sync_rules.tableTriggersEvent(ref);
154
- sourceTable.syncData = sourceTable.bucketDataSources.length > 0;
155
- sourceTable.syncParameters = sourceTable.parameterLookupSources.length > 0;
156
- sourceTable.snapshotStatus =
115
+ table.syncEvent = syncRules.tableTriggersEvent(ref);
116
+ table.syncData = table.bucketDataSources.length > 0;
117
+ table.syncParameters = table.parameterLookupSources.length > 0;
118
+ table.storeCurrentData = sendsCompleteRows !== true;
119
+ table.snapshotStatus =
157
120
  doc.snapshot_status == null
158
121
  ? undefined
159
122
  : {
@@ -161,7 +124,18 @@ export class MongoBucketBatchV1 extends MongoBucketBatch {
161
124
  totalEstimatedCount: doc.snapshot_status.total_estimated_count,
162
125
  replicatedCount: doc.snapshot_status.replicated_count
163
126
  };
164
- return sourceTable;
127
+ return table;
128
+ }
129
+ async getSourceTableStatus(table) {
130
+ const doc = await this.db.sourceTablesV1(this.replicationStreamId).findOne({
131
+ group_id: this.replicationStreamId,
132
+ _id: mongoTableId(table.id)
133
+ }, { session: this.session });
134
+ if (doc == null) {
135
+ return null;
136
+ }
137
+ // Use the default storeCurrentData value when reading outside resolution.
138
+ return this.hydrateSourceTable(doc, table.ref.connectionTag, this.sync_rules, undefined);
165
139
  }
166
140
  async commit(lsn, options) {
167
141
  const { createEmptyCheckpoints } = { ...storage.DEFAULT_BUCKET_BATCH_COMMIT_OPTIONS, ...options };
@@ -1 +1 @@
1
- {"version":3,"file":"MongoBucketBatchV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoBucketBatchV1.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoBucketBatchV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoBucketBatchV1.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { mongo } from '@powersync/lib-service-mongodb';
2
2
  import { storage } from '@powersync/service-core';
3
3
  import { BucketDefinitionId } from '@powersync/service-sync-rules';
4
- import { SingleBucketStore } from '../common/SingleBucketStore.js';
5
4
  import { BucketStateDocumentBase } from '../models.js';
6
5
  import { DirtyBucket, MongoCompactor } from '../MongoCompactor.js';
7
6
  import type { MongoSyncBucketStorageV1 } from './MongoSyncBucketStorageV1.js';
@@ -9,6 +8,7 @@ import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
9
8
  export declare class MongoCompactorV1 extends MongoCompactor {
10
9
  protected readonly db: VersionedPowerSyncMongoV1;
11
10
  protected readonly storage: MongoSyncBucketStorageV1;
11
+ private updates;
12
12
  dirtyBucketBatches(options: {
13
13
  minBucketChanges: number;
14
14
  minChangeRatio: number;
@@ -19,5 +19,14 @@ export declare class MongoCompactorV1 extends MongoCompactor {
19
19
  protected writeBucketStateUpdates(): Promise<void>;
20
20
  protected computeChecksumsForBuckets(buckets: Pick<DirtyBucket, 'bucket' | 'definitionId'>[]): Promise<storage.PartialChecksumMap>;
21
21
  protected bucketStateFilter(bucket: string, _definitionId: BucketDefinitionId | null): mongo.Filter<BucketStateDocumentBase>;
22
- protected getBucketDataContext(bucket: string, _definitionId: BucketDefinitionId | null): Promise<SingleBucketStore | null>;
22
+ private getBucketDataContext;
23
+ protected compactSingleBucket(bucket: string): Promise<void>;
24
+ private flush;
25
+ /**
26
+ * Perform a CLEAR compact for a bucket.
27
+ *
28
+ * @param currentState tracks the last non-PUT op, which will be converted to CLEAR.
29
+ */
30
+ private clearBucket;
31
+ private formatBucketDataKey;
23
32
  }
@@ -1,9 +1,12 @@
1
1
  import { mongo } from '@powersync/lib-service-mongodb';
2
2
  import { ReplicationAssertionError } from '@powersync/lib-services-framework';
3
+ import { addChecksums, utils } from '@powersync/service-core';
3
4
  import { LEGACY_BUCKET_DATA_DEFINITION_ID } from '../models.js';
4
5
  import { MongoCompactor } from '../MongoCompactor.js';
6
+ import { cacheKey } from '../OperationBatch.js';
5
7
  import { SingleBucketStoreV1 } from './SingleBucketStoreV1.js';
6
8
  export class MongoCompactorV1 extends MongoCompactor {
9
+ updates = [];
7
10
  async *dirtyBucketBatches(options) {
8
11
  if (options.minBucketChanges <= 0) {
9
12
  throw new ReplicationAssertionError('minBucketChanges must be >= 1');
@@ -41,12 +44,258 @@ export class MongoCompactorV1 extends MongoCompactor {
41
44
  }
42
45
  };
43
46
  }
44
- async getBucketDataContext(bucket, _definitionId) {
47
+ getBucketDataContext(bucket) {
45
48
  return new SingleBucketStoreV1(this.db, {
46
49
  replicationStreamId: this.group_id,
47
50
  definitionId: LEGACY_BUCKET_DATA_DEFINITION_ID,
48
51
  bucket
49
52
  });
50
53
  }
54
+ async compactSingleBucket(bucket) {
55
+ // Do not carry queued writes from a failed attempt into the rescan
56
+ this.updates = [];
57
+ const idLimitBytes = this.idLimitBytes;
58
+ const bucketContext = this.getBucketDataContext(bucket);
59
+ const currentState = {
60
+ bucket,
61
+ definitionId: bucketContext.key.definitionId,
62
+ seen: new Map(),
63
+ trackingSize: 0,
64
+ lastNotPut: null,
65
+ opsSincePut: 0,
66
+ checksum: 0,
67
+ opCount: 0,
68
+ opBytes: 0
69
+ };
70
+ // Constant lower bound.
71
+ const lowerBound = bucketContext.minId;
72
+ // Upper bound is adjusted for each batch.
73
+ let upperBound = bucketContext.maxId;
74
+ // Paginate through bucket data in batches to avoid cursor timeouts.
75
+ while (true) {
76
+ this.signal?.throwIfAborted();
77
+ // Query one batch at a time, to avoid cursor timeouts.
78
+ const pipeline = [
79
+ {
80
+ $match: {
81
+ _id: {
82
+ $gte: lowerBound,
83
+ $lt: upperBound
84
+ }
85
+ }
86
+ },
87
+ { $sort: { _id: -1 } },
88
+ { $limit: this.moveBatchQueryLimit },
89
+ {
90
+ $project: {
91
+ _id: 1,
92
+ op: 1,
93
+ table: 1,
94
+ row_id: 1,
95
+ source_table: 1,
96
+ source_key: 1,
97
+ checksum: 1,
98
+ size: { $bsonSize: '$$ROOT' }
99
+ }
100
+ }
101
+ ];
102
+ const cursor = bucketContext.collection.aggregate(pipeline, {
103
+ // batchSize is 1 more than limit to auto-close the cursor.
104
+ // See https://github.com/mongodb/node-mongodb-native/pull/4580
105
+ batchSize: this.moveBatchQueryLimit + 1
106
+ });
107
+ // We don't limit to a single batch here, since that often causes MongoDB to scan through more than it returns.
108
+ // Instead, we load up to the limit.
109
+ const rawBatch = await cursor.toArray();
110
+ const batch = rawBatch.map((document) => {
111
+ const { size, ...rest } = document;
112
+ return {
113
+ doc: bucketContext.fromPersistedDocument(rest),
114
+ size
115
+ };
116
+ });
117
+ if (batch.length == 0) {
118
+ // We've reached the end.
119
+ break;
120
+ }
121
+ // Reuse the exact collection _id value from Mongo for the next bound.
122
+ upperBound = rawBatch[rawBatch.length - 1]._id;
123
+ for (const { doc, size } of batch) {
124
+ if (doc.o > this.maxOpId) {
125
+ continue;
126
+ }
127
+ currentState.checksum = addChecksums(currentState.checksum, Number(doc.checksum));
128
+ currentState.opCount += 1;
129
+ let isPersistentPut = doc.op == 'PUT';
130
+ currentState.opBytes += Number(size);
131
+ if (doc.op == 'REMOVE' || doc.op == 'PUT') {
132
+ const key = `${doc.table}/${doc.row_id}/${cacheKey(doc.source_table, doc.source_key)}`;
133
+ const targetOp = currentState.seen.get(key);
134
+ if (targetOp) {
135
+ // Will convert to MOVE, so don't count as PUT.
136
+ isPersistentPut = false;
137
+ this.updates.push({
138
+ updateOne: {
139
+ filter: { _id: bucketContext.docId(doc.o) },
140
+ update: {
141
+ $set: {
142
+ op: 'MOVE',
143
+ target_op: targetOp
144
+ },
145
+ $unset: {
146
+ source_table: 1,
147
+ source_key: 1,
148
+ table: 1,
149
+ row_id: 1,
150
+ data: 1
151
+ }
152
+ }
153
+ }
154
+ });
155
+ // TODO: better estimate for this.
156
+ currentState.opBytes += 200 - Number(size);
157
+ }
158
+ else if (currentState.trackingSize < idLimitBytes) {
159
+ // flatstr reduces the memory usage by flattening the string.
160
+ currentState.seen.set(utils.flatstr(key), doc.o);
161
+ // length + 16 for the string
162
+ // 24 for the bigint
163
+ // 50 for map overhead
164
+ // 50 for additional overhead
165
+ currentState.trackingSize += key.length + 140;
166
+ }
167
+ }
168
+ if (isPersistentPut) {
169
+ currentState.lastNotPut = null;
170
+ currentState.opsSincePut = 0;
171
+ }
172
+ else if (doc.op != 'CLEAR') {
173
+ if (currentState.lastNotPut == null) {
174
+ currentState.lastNotPut = doc.o;
175
+ }
176
+ currentState.opsSincePut += 1;
177
+ }
178
+ if (this.updates.length + this.bucketStateUpdates.length >= this.moveBatchLimit) {
179
+ await this.flush(bucketContext);
180
+ }
181
+ }
182
+ this.logger.info(`Processed batch of length ${batch.length} current bucket: ${bucket}`);
183
+ }
184
+ // Free memory before clearing the bucket.
185
+ currentState.seen.clear();
186
+ if (currentState.lastNotPut != null && currentState.opsSincePut >= 1) {
187
+ this.logger.info(`Inserting CLEAR at ${this.group_id}:${bucket}:${currentState.lastNotPut} to remove ${currentState.opsSincePut} operations`);
188
+ // Need flush() before clear().
189
+ await this.flush(bucketContext);
190
+ await this.clearBucket(currentState, bucketContext);
191
+ }
192
+ // Do this after clearBucket so we have accurate counts.
193
+ this.updateBucketChecksums(currentState, this.maxOpId);
194
+ // Need another flush after updateBucketChecksums().
195
+ await this.flush(bucketContext);
196
+ }
197
+ async flush(bucketContext) {
198
+ if (this.updates.length > 0) {
199
+ this.logger.info(`Compacting ${this.updates.length} ops`);
200
+ await bucketContext.collection.bulkWrite(this.updates, {
201
+ // Order is not important. Since checksums are not affected, these operations can happen in any order,
202
+ // and it's fine if the operations are partially applied. Each individual operation is atomic.
203
+ ordered: false
204
+ });
205
+ this.updates = [];
206
+ }
207
+ await this.flushBucketStateUpdates();
208
+ }
209
+ /**
210
+ * Perform a CLEAR compact for a bucket.
211
+ *
212
+ * @param currentState tracks the last non-PUT op, which will be converted to CLEAR.
213
+ */
214
+ async clearBucket(currentState, bucketContext) {
215
+ const clearOp = currentState.lastNotPut;
216
+ const opFilter = {
217
+ _id: {
218
+ $gte: bucketContext.minId,
219
+ $lte: bucketContext.docId(clearOp)
220
+ }
221
+ };
222
+ const session = this.db.client.startSession();
223
+ try {
224
+ let done = false;
225
+ while (!done) {
226
+ this.signal?.throwIfAborted();
227
+ let opCountDiff = 0;
228
+ // Do the CLEAR operation in batches, with each batch a separate transaction.
229
+ // The state after each batch is fully consistent.
230
+ // We need a transaction per batch to make sure checksums stay consistent.
231
+ await session.withTransaction(async () => {
232
+ const query = bucketContext.collection.find(opFilter, {
233
+ session,
234
+ sort: { _id: 1 },
235
+ projection: {
236
+ _id: 1,
237
+ op: 1,
238
+ checksum: 1,
239
+ target_op: 1
240
+ },
241
+ limit: this.clearBatchLimit
242
+ });
243
+ let checksum = 0;
244
+ let lastOp = null;
245
+ let targetOp = null;
246
+ let gotAnOp = false;
247
+ let numberOfOpsToClear = 0;
248
+ for await (const rawOp of query.stream()) {
249
+ const op = bucketContext.fromPartialPersistedDocument(rawOp);
250
+ if (op.op == 'MOVE' || op.op == 'REMOVE' || op.op == 'CLEAR') {
251
+ checksum = utils.addChecksums(checksum, Number(op.checksum));
252
+ lastOp = op;
253
+ numberOfOpsToClear += 1;
254
+ if (op.op != 'CLEAR') {
255
+ gotAnOp = true;
256
+ }
257
+ if (op.target_op != null && (targetOp == null || op.target_op > targetOp)) {
258
+ targetOp = op.target_op;
259
+ }
260
+ }
261
+ else {
262
+ throw new ReplicationAssertionError(`Unexpected ${op.op} operation at ${this.formatBucketDataKey(op)}`);
263
+ }
264
+ }
265
+ if (!gotAnOp) {
266
+ done = true;
267
+ return;
268
+ }
269
+ this.logger.info(`Flushing CLEAR for ${numberOfOpsToClear} ops at ${lastOp?.o}`);
270
+ await bucketContext.collection.deleteMany({
271
+ _id: {
272
+ $gte: bucketContext.minId,
273
+ $lte: bucketContext.docId(lastOp.o)
274
+ }
275
+ }, { session });
276
+ const op = bucketContext.toPersistedDocument({
277
+ o: lastOp.o,
278
+ op: 'CLEAR',
279
+ checksum: BigInt(checksum),
280
+ data: null,
281
+ target_op: targetOp
282
+ });
283
+ await bucketContext.collection.insertOne(op, { session });
284
+ opCountDiff = -numberOfOpsToClear + 1;
285
+ }, {
286
+ writeConcern: { w: 'majority' },
287
+ readConcern: { level: 'snapshot' }
288
+ });
289
+ // Update outside the transaction, since the transaction can be retried multiple times.
290
+ currentState.opCount += opCountDiff;
291
+ }
292
+ }
293
+ finally {
294
+ await session.endSession();
295
+ }
296
+ }
297
+ formatBucketDataKey(doc) {
298
+ return `${doc.bucketKey.replicationStreamId}:${doc.bucketKey.bucket}:${doc.o}`;
299
+ }
51
300
  }
52
301
  //# sourceMappingURL=MongoCompactorV1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MongoCompactorV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoCompactorV1.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAI9E,OAAO,EAA2B,gCAAgC,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAe,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAK3C,KAAK,CAAC,CAAC,kBAAkB,CAAC,OAGhC;QACC,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,yBAAyB,CAAC,+BAA+B,CAAC,CAAC;QACvE,CAAC;QACD,iHAAiH;QACjH,kHAAkH;QAClH,6GAA6G;QAC7G,KAAK,CAAC,CAAC,IAAI,CAAC,+BAA+B,CACzC,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAS,EAAE,EAClD,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,EAAS,EAAE,EAClD,OAAO,EACP,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,4BAA4B,CAAC,OAAqC;QAC7E,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,yBAAyB,CAAC,+BAA+B,CAAC,CAAC;QACvE,CAAC;QACD,mGAAmG;QACnG,2CAA2C;QAC3C,OAAO,IAAI,CAAC,yCAAyC,CACnD,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB;YACE,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,8BAA8B,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE;SACnE,EACD,GAAG,EAAE,CAAC,IAAI,CACX,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,uBAAuB;QACrC,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CACnC,IAAI,CAAC,kBAA0E,EAC/E,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,0BAA0B,CACxC,OAAuD;QAEvD,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,qCAAqC,CACjE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,MAAM;YACN,GAAG,EAAE,IAAI,CAAC,OAAO;SAClB,CAAC,CAAC,EACH,EAAE,WAAW,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAC7C,CAAC;IACJ,CAAC;IAES,iBAAiB,CACzB,MAAc,EACd,aAAwC;QAExC,OAAO;YACL,GAAG,EAAE;gBACH,CAAC,EAAE,IAAI,CAAC,QAAQ;gBAChB,CAAC,EAAE,MAAM;aACV;SACF,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,oBAAoB,CAClC,MAAc,EACd,aAAwC;QAExC,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE;YACtC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;YAClC,YAAY,EAAE,gCAAgC;YAC9C,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"MongoCompactorV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoCompactorV1.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { ServiceAssertionError } from '@powersync/lib-services-framework';
3
3
  import { deserializeParameterLookup, internalToExternalOpId, maxLsn, ParameterSetLimitExceededError, storage } from '@powersync/service-core';
4
4
  import { JSONBig } from '@powersync/service-jsonbig';
5
5
  import * as bson from 'bson';
6
- import { idPrefixFilter, mapOpEntry, readSingleBatch, setSessionSnapshotTime } from '../../../utils/util.js';
6
+ import { clearCollectionInIdBatches, clearCollectionInIdRanges, idPrefixFilter, mapOpEntry, readSingleBatch, retryOnMongoMaxTimeMSExpired, setSessionSnapshotTime } from '../../../utils/util.js';
7
7
  import { MongoSyncBucketStorage } from '../MongoSyncBucketStorage.js';
8
8
  import { loadBucketDataDocumentV1 } from './models.js';
9
9
  import { MongoBucketBatchV1 } from './MongoBucketBatchV1.js';
@@ -122,29 +122,37 @@ export class MongoSyncBucketStorageV1 extends MongoSyncBucketStorage {
122
122
  return getBucketDataBatchV1(this.versionContext, checkpoint, dataBuckets, options);
123
123
  }
124
124
  async clearBucketData(signal) {
125
- await this.clearDeleteMany('bucket data', () => this.db.bucket_data.deleteMany({
125
+ await clearCollectionInIdRanges(this.logger, 'bucket data', this.db.bucket_data, {
126
126
  _id: idPrefixFilter({ g: this.replicationStreamId }, ['b', 'o'])
127
- }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), signal);
127
+ }, signal, this.clearBatchThrottleRate);
128
128
  }
129
129
  async clearParameterIndexes(signal) {
130
- await this.clearDeleteMany('parameter index', () => this.db.parameterIndexV1.deleteMany({
130
+ await clearCollectionInIdBatches(this.logger, 'parameter index', this.db.parameterIndexV1, {
131
131
  'key.g': this.replicationStreamId
132
- }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), signal);
132
+ }, signal, this.clearBatchThrottleRate);
133
133
  }
134
134
  async clearSourceRecords(signal) {
135
- await this.clearDeleteMany('source records', () => this.db.sourceRecordsV1.deleteMany({
135
+ await clearCollectionInIdRanges(this.logger, 'source records', this.db.sourceRecordsV1, {
136
136
  _id: idPrefixFilter({ g: this.replicationStreamId }, ['t', 'k'])
137
- }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), signal);
137
+ }, signal, this.clearBatchThrottleRate);
138
138
  }
139
139
  async clearBucketState(signal) {
140
- await this.clearDeleteMany('bucket state', () => this.db.bucketStateV1.deleteMany({
140
+ await clearCollectionInIdRanges(this.logger, 'bucket state', this.db.bucketStateV1, {
141
141
  _id: idPrefixFilter({ g: this.replicationStreamId }, ['b'])
142
- }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), signal);
142
+ }, signal, this.clearBatchThrottleRate);
143
143
  }
144
144
  async clearSourceTables(signal) {
145
- await this.clearDeleteMany('source tables', () => this.db.sourceTablesV1(this.replicationStreamId).deleteMany({
145
+ await retryOnMongoMaxTimeMSExpired(() => this.db.sourceTablesV1(this.replicationStreamId).deleteMany({
146
146
  group_id: this.replicationStreamId
147
- }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), signal);
147
+ }, { maxTimeMS: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS }), {
148
+ signal,
149
+ abortMessage: 'Aborted clearing data',
150
+ // This is a fairly long delay - only expected to hit this when the storage database is under high load.
151
+ retryDelayMs: lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS,
152
+ onRetry: () => {
153
+ this.logger.info(`Clearing batch of source tables timed out after ${lib_mongo.db.MONGO_CLEAR_OPERATION_TIMEOUT_MS}ms, retrying...`);
154
+ }
155
+ });
148
156
  }
149
157
  getDataBucketChangesImpl(options) {
150
158
  return getDataBucketChangesV1(this.versionContext, options);