@powersync/service-module-mongodb-storage 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/storage/MongoBucketStorage.d.ts +34 -16
- package/dist/storage/MongoBucketStorage.js +219 -70
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoBucketBatch.d.ts +42 -23
- package/dist/storage/implementation/MongoBucketBatch.js +61 -44
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoChecksums.d.ts +10 -9
- package/dist/storage/implementation/MongoChecksums.js +3 -111
- package/dist/storage/implementation/MongoChecksums.js.map +1 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +2 -0
- package/dist/storage/implementation/MongoCompactor.js +18 -9
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoHydrationState.d.ts +11 -0
- package/dist/storage/implementation/MongoHydrationState.js +49 -0
- package/dist/storage/implementation/MongoHydrationState.js.map +1 -0
- package/dist/storage/implementation/MongoParameterCompactor.d.ts +6 -5
- package/dist/storage/implementation/MongoParameterCompactor.js +24 -1
- package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoParsedSyncConfigSet.d.ts +13 -0
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js +64 -0
- package/dist/storage/implementation/MongoParsedSyncConfigSet.js.map +1 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.d.ts +36 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.js +90 -0
- package/dist/storage/implementation/MongoPersistedReplicationStream.js.map +1 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.d.ts +25 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js +123 -0
- package/dist/storage/implementation/MongoPersistedSyncConfigContent.js.map +1 -0
- package/dist/storage/implementation/MongoStorageProvider.js +5 -2
- package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +41 -23
- package/dist/storage/implementation/MongoSyncBucketStorage.js +51 -43
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.d.ts +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.js +3 -3
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.d.ts +6 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js +2 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageCheckpoint.js.map +1 -0
- package/dist/storage/implementation/common/PersistedBatch.d.ts +1 -2
- package/dist/storage/implementation/common/PersistedBatch.js +5 -0
- package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +1 -1
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -1
- package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +2 -2
- package/dist/storage/implementation/createMongoSyncBucketStorage.js +4 -4
- package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/db.js +9 -14
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +4 -13
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +9 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js +42 -26
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoChecksumsV1.js +114 -3
- package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -1
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +15 -17
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +47 -45
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +2 -1
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +3 -0
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -1
- package/dist/storage/implementation/v1/models.d.ts +10 -1
- package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +8 -4
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js +286 -259
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +27 -7
- package/dist/storage/implementation/v3/MongoChecksumsV3.js +202 -18
- package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +19 -2
- package/dist/storage/implementation/v3/MongoCompactorV3.js +511 -22
- package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -1
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.d.ts +62 -0
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js +350 -0
- package/dist/storage/implementation/v3/MongoStoppedSyncConfigCleanup.js.map +1 -0
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +40 -28
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +232 -116
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
- package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +1 -1
- package/dist/storage/implementation/v3/PersistedBatchV3.js +43 -20
- package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -1
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js +52 -16
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -1
- package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +3 -3
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js +13 -11
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -1
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +13 -12
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +29 -27
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -1
- package/dist/storage/implementation/v3/bucket-format.d.ts +4 -0
- package/dist/storage/implementation/v3/bucket-format.js +58 -0
- package/dist/storage/implementation/v3/bucket-format.js.map +1 -0
- package/dist/storage/implementation/v3/chunking.d.ts +10 -0
- package/dist/storage/implementation/v3/chunking.js +28 -0
- package/dist/storage/implementation/v3/chunking.js.map +1 -0
- package/dist/storage/implementation/v3/models.d.ts +64 -21
- package/dist/storage/implementation/v3/models.js +11 -28
- package/dist/storage/implementation/v3/models.js.map +1 -1
- package/dist/storage/implementation/v3/source-table-utils.d.ts +55 -0
- package/dist/storage/implementation/v3/source-table-utils.js +214 -0
- package/dist/storage/implementation/v3/source-table-utils.js.map +1 -0
- package/dist/storage/storage-index.d.ts +4 -4
- package/dist/storage/storage-index.js +4 -4
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/types/types.d.ts +2 -2
- package/dist/utils/test-utils.d.ts +1 -2
- package/dist/utils/test-utils.js +5 -1
- package/dist/utils/test-utils.js.map +1 -1
- package/dist/utils/util.d.ts +1 -1
- package/dist/utils/util.js +3 -2
- package/dist/utils/util.js.map +1 -1
- package/package.json +9 -19
- package/src/storage/MongoBucketStorage.ts +334 -87
- package/src/storage/implementation/MongoBucketBatch.ts +86 -58
- package/src/storage/implementation/MongoChecksums.ts +6 -138
- package/src/storage/implementation/MongoCompactor.ts +19 -9
- package/src/storage/implementation/MongoHydrationState.ts +61 -0
- package/src/storage/implementation/MongoParameterCompactor.ts +24 -5
- package/src/storage/implementation/MongoParsedSyncConfigSet.ts +88 -0
- package/src/storage/implementation/MongoPersistedReplicationStream.ts +118 -0
- package/src/storage/implementation/MongoPersistedSyncConfigContent.ts +154 -0
- package/src/storage/implementation/MongoStorageProvider.ts +5 -2
- package/src/storage/implementation/MongoSyncBucketStorage.ts +70 -56
- package/src/storage/implementation/MongoSyncRulesLock.ts +7 -4
- package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +7 -0
- package/src/storage/implementation/common/PersistedBatch.ts +7 -3
- package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +1 -1
- package/src/storage/implementation/createMongoSyncBucketStorage.ts +21 -7
- package/src/storage/implementation/db.ts +11 -19
- package/src/storage/implementation/models.ts +4 -14
- package/src/storage/implementation/v1/MongoBucketBatchV1.ts +55 -34
- package/src/storage/implementation/v1/MongoChecksumsV1.ts +137 -4
- package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +70 -64
- package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +11 -1
- package/src/storage/implementation/v1/models.ts +11 -1
- package/src/storage/implementation/v3/MongoBucketBatchV3.ts +358 -314
- package/src/storage/implementation/v3/MongoChecksumsV3.ts +262 -26
- package/src/storage/implementation/v3/MongoCompactorV3.ts +646 -29
- package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +480 -0
- package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +315 -157
- package/src/storage/implementation/v3/PersistedBatchV3.ts +62 -36
- package/src/storage/implementation/v3/SingleBucketStoreV3.ts +59 -19
- package/src/storage/implementation/v3/SourceRecordStoreV3.ts +12 -12
- package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +41 -36
- package/src/storage/implementation/v3/bucket-format.ts +70 -0
- package/src/storage/implementation/v3/chunking.ts +38 -0
- package/src/storage/implementation/v3/models.ts +93 -55
- package/src/storage/implementation/v3/source-table-utils.ts +392 -0
- package/src/storage/storage-index.ts +12 -4
- package/src/utils/test-utils.ts +6 -3
- package/src/utils/util.ts +3 -2
- package/test/src/__snapshots__/storage.test.ts.snap +0 -75
- package/test/src/__snapshots__/storage_sync.test.ts.snap +48 -48
- package/test/src/cleanup-stopped-sync-configs.test.ts +648 -0
- package/test/src/storage.test.ts +11 -11
- package/test/src/storage_compacting.test.ts +1956 -6
- package/test/src/storage_sync.test.ts +1077 -68
- package/test/src/storeCurrentData.test.ts +17 -7
- package/test/src/util.ts +2 -1
- package/tsconfig.json +1 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/storage/implementation/BucketDefinitionMapping.d.ts +0 -15
- package/dist/storage/implementation/BucketDefinitionMapping.js +0 -58
- package/dist/storage/implementation/BucketDefinitionMapping.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +0 -14
- package/dist/storage/implementation/MongoPersistedSyncRules.js +0 -67
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +0 -29
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +0 -76
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +0 -1
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +0 -13
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +0 -2
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +0 -1
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +0 -9
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +0 -18
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +0 -1
- package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +0 -4
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js +0 -9
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +0 -1
- package/src/storage/implementation/BucketDefinitionMapping.ts +0 -75
- package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -82
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +0 -101
- package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +0 -15
- package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +0 -24
- package/src/storage/implementation/v3/MongoParameterLookupV3.ts +0 -11
|
@@ -1,32 +1,45 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
+
import { logger, ReplicationAssertionError, ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
+
import { addChecksums, utils } from '@powersync/service-core';
|
|
3
4
|
import { MongoCompactor } from '../MongoCompactor.js';
|
|
5
|
+
import { cacheKey } from '../OperationBatch.js';
|
|
6
|
+
import { loadBucketDataDocument, serializeBucketData } from './bucket-format.js';
|
|
7
|
+
import { chunkBucketData } from './chunking.js';
|
|
4
8
|
import { SingleBucketStoreV3 } from './SingleBucketStoreV3.js';
|
|
5
9
|
export class MongoCompactorV3 extends MongoCompactor {
|
|
6
10
|
async *dirtyBucketBatches(options) {
|
|
7
11
|
if (options.minBucketChanges <= 0) {
|
|
8
12
|
throw new ReplicationAssertionError('minBucketChanges must be >= 1');
|
|
9
13
|
}
|
|
10
|
-
|
|
11
|
-
yield* this.dirtyBucketBatchesForCollection(
|
|
14
|
+
const collection = this.db.bucketState(this.group_id);
|
|
15
|
+
yield* this.dirtyBucketBatchesForCollection(collection, { d: new mongo.MinKey(), b: new mongo.MinKey() }, { d: new mongo.MaxKey(), b: new mongo.MaxKey() }, options, (bucketState) => bucketState._id.d);
|
|
12
16
|
}
|
|
13
17
|
async dirtyBucketBatchForChecksums(options) {
|
|
14
18
|
if (options.minBucketChanges <= 0) {
|
|
15
19
|
throw new ReplicationAssertionError('minBucketChanges must be >= 1');
|
|
16
20
|
}
|
|
17
|
-
return this.dirtyBucketBatchForChecksumsForCollection(this.db.
|
|
21
|
+
return this.dirtyBucketBatchForChecksumsForCollection(this.db.bucketState(this.group_id), {
|
|
18
22
|
'estimate_since_compact.count': { $gte: options.minBucketChanges }
|
|
19
23
|
}, (bucketState) => bucketState._id.d);
|
|
20
24
|
}
|
|
21
25
|
async writeBucketStateUpdates() {
|
|
22
26
|
await this.db
|
|
23
|
-
.
|
|
24
|
-
.bulkWrite(this.bucketStateUpdates, {
|
|
27
|
+
.bucketState(this.group_id)
|
|
28
|
+
.bulkWrite(this.bucketStateUpdates, {
|
|
29
|
+
ordered: false
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The compactor operates on persisted definition ids only - never on parsed sources.
|
|
34
|
+
* This narrowed view makes the source-resolving checksum methods unreachable here.
|
|
35
|
+
*/
|
|
36
|
+
get definitionChecksums() {
|
|
37
|
+
return this.storage.checksums;
|
|
25
38
|
}
|
|
26
39
|
async computeChecksumsForBuckets(buckets) {
|
|
27
|
-
return this.
|
|
40
|
+
return this.definitionChecksums.computePartialChecksumsDirectByDefinition(buckets.map(({ bucket, definitionId }) => {
|
|
28
41
|
if (definitionId == null) {
|
|
29
|
-
throw new ServiceAssertionError(`Missing definitionId for
|
|
42
|
+
throw new ServiceAssertionError(`Missing definitionId for bucket checksum update on bucket ${bucket}`);
|
|
30
43
|
}
|
|
31
44
|
return {
|
|
32
45
|
bucket,
|
|
@@ -47,22 +60,498 @@ export class MongoCompactorV3 extends MongoCompactor {
|
|
|
47
60
|
};
|
|
48
61
|
}
|
|
49
62
|
async getBucketDataContext(bucket, definitionId) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const allDefinitionIds = this.storage.
|
|
53
|
-
if (allDefinitionIds.length
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
63
|
+
let resolvedDefinitionId = definitionId;
|
|
64
|
+
if (resolvedDefinitionId == null) {
|
|
65
|
+
const allDefinitionIds = this.storage.storageIds.bucketDefinitionIds;
|
|
66
|
+
if (allDefinitionIds.length > 0) {
|
|
67
|
+
const potentialIds = allDefinitionIds.map((id) => ({ d: id, b: bucket }));
|
|
68
|
+
const bucketState = await this.db.bucketState(this.group_id).findOne({
|
|
69
|
+
_id: { $in: potentialIds }
|
|
70
|
+
});
|
|
71
|
+
if (bucketState != null) {
|
|
72
|
+
resolvedDefinitionId = bucketState._id.d;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (resolvedDefinitionId == null) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return new SingleBucketStoreV3(this.db, {
|
|
80
|
+
bucket,
|
|
81
|
+
definitionId: resolvedDefinitionId,
|
|
82
|
+
replicationStreamId: this.group_id
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async compactSingleBucket(bucket, definitionId = null) {
|
|
86
|
+
const bucketContext = await this.getBucketDataContext(bucket, definitionId);
|
|
87
|
+
if (bucketContext == null) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const resolvedDefinitionId = bucketContext.key.definitionId;
|
|
91
|
+
const collection = this.db.bucketData(this.group_id, resolvedDefinitionId);
|
|
92
|
+
const context = { replicationStreamId: this.group_id, definitionId: resolvedDefinitionId };
|
|
93
|
+
const lowerBound = bucketContext.minId;
|
|
94
|
+
let upperBound = bucketContext.maxId;
|
|
95
|
+
let totalChecksum = 0;
|
|
96
|
+
let totalOpCount = 0;
|
|
97
|
+
let totalOpBytes = 0;
|
|
98
|
+
let lastNotPut = null;
|
|
99
|
+
let opsSincePut = 0;
|
|
100
|
+
let clearBoundaryDocId = null;
|
|
101
|
+
const seen = new Map();
|
|
102
|
+
let trackingSize = 0;
|
|
103
|
+
// --- Read batch from MongoDB ---
|
|
104
|
+
while (true) {
|
|
105
|
+
this.signal?.throwIfAborted();
|
|
106
|
+
const pipeline = [
|
|
107
|
+
{
|
|
108
|
+
$match: {
|
|
109
|
+
'_id.b': bucket,
|
|
110
|
+
_id: {
|
|
111
|
+
$gte: lowerBound,
|
|
112
|
+
$lt: upperBound
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
{ $sort: { _id: -1 } },
|
|
117
|
+
{ $limit: this.moveBatchQueryLimit },
|
|
118
|
+
{
|
|
119
|
+
$project: {
|
|
120
|
+
_id: 1,
|
|
121
|
+
min_op: 1,
|
|
122
|
+
checksum: 1,
|
|
123
|
+
count: 1,
|
|
124
|
+
size: 1,
|
|
125
|
+
target_op: 1,
|
|
126
|
+
ops: 1,
|
|
127
|
+
bsonSize: { $bsonSize: '$$ROOT' }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
];
|
|
131
|
+
const rawBatch = await collection
|
|
132
|
+
.aggregate(pipeline, {
|
|
133
|
+
batchSize: this.moveBatchQueryLimit + 1
|
|
134
|
+
})
|
|
135
|
+
.toArray();
|
|
136
|
+
if (rawBatch.length == 0) {
|
|
137
|
+
// No more documents in this bucket — compaction complete.
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
// --- Cut batch to byte limit ---
|
|
141
|
+
let cumulativeBytes = 0;
|
|
142
|
+
let batchCutIndex = rawBatch.length;
|
|
143
|
+
for (let i = 0; i < rawBatch.length; i++) {
|
|
144
|
+
cumulativeBytes += Number(rawBatch[i].bsonSize);
|
|
145
|
+
if (cumulativeBytes > this.moveBatchByteLimit && i > 0) {
|
|
146
|
+
// Byte limit exceeded; cut batch at current index. Always include
|
|
147
|
+
// at least one document (i > 0 guard) to guarantee forward progress.
|
|
148
|
+
batchCutIndex = i;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const batchDocs = rawBatch.slice(0, batchCutIndex);
|
|
153
|
+
// --- Decode documents into individual ops ---
|
|
154
|
+
// Processable: document has at least one op <= maxOpId.
|
|
155
|
+
// Only processable docs are deleted and recreated; the rest survive untouched.
|
|
156
|
+
const batchOps = [];
|
|
157
|
+
const processableDocs = [];
|
|
158
|
+
for (const doc of batchDocs) {
|
|
159
|
+
let hasRelevantOp = false;
|
|
160
|
+
const candidateOps = [];
|
|
161
|
+
for (const op of loadBucketDataDocument(context, doc)) {
|
|
162
|
+
candidateOps.push(op);
|
|
163
|
+
if (op.o <= this.maxOpId) {
|
|
164
|
+
hasRelevantOp = true;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (hasRelevantOp) {
|
|
168
|
+
processableDocs.push(doc);
|
|
169
|
+
batchOps.push(...candidateOps);
|
|
170
|
+
} // else: candidateOps discarded — document has no ops <= maxOpId
|
|
171
|
+
}
|
|
172
|
+
if (processableDocs.length == 0) {
|
|
173
|
+
// No documents with relevant ops in this batch; paginate to next batch
|
|
174
|
+
// without performing any writes. This handles batches where all documents
|
|
175
|
+
// contain only ops above maxOpId.
|
|
176
|
+
upperBound = batchDocs[batchDocs.length - 1]._id;
|
|
177
|
+
if (batchCutIndex >= rawBatch.length && rawBatch.length < this.moveBatchQueryLimit) {
|
|
178
|
+
// Entire remaining bucket is non-processable — compaction complete.
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
// Skip dedup, rechunking, and transaction for this batch.
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
// Scoped replace in a bounded transaction.
|
|
185
|
+
// Delete by individual _id values instead of a continuous range.
|
|
186
|
+
// A continuous range could catch non-processable documents (all ops > maxOpId)
|
|
187
|
+
// that happen to fall between processable documents in _id.o sort order.
|
|
188
|
+
const idsToDelete = processableDocs.map((d) => d._id);
|
|
189
|
+
const expectedDocCount = processableDocs.length;
|
|
190
|
+
const expectedChecksum = processableDocs.reduce((sum, doc) => sum + doc.checksum, 0n);
|
|
191
|
+
const expectedOpCount = processableDocs.reduce((sum, doc) => sum + doc.count, 0);
|
|
192
|
+
// Sort ops by o descending for newest-first dedup
|
|
193
|
+
batchOps.sort((a, b) => (b.o > a.o ? 1 : b.o < a.o ? -1 : 0));
|
|
194
|
+
// --- Dedup: newest-first, superseded → MOVE ---
|
|
195
|
+
const surviving = [];
|
|
196
|
+
for (const op of batchOps) {
|
|
197
|
+
if (op.op == 'PUT' || op.op == 'REMOVE') {
|
|
198
|
+
if (op.o > this.maxOpId) {
|
|
199
|
+
surviving.push(op);
|
|
200
|
+
continue; // Do not dedup ops above compaction horizon
|
|
201
|
+
}
|
|
202
|
+
const key = `${op.table}/${op.row_id}/${cacheKey(op.source_table, op.source_key)}`;
|
|
203
|
+
const targetOp = seen.get(key);
|
|
204
|
+
if (targetOp != null) {
|
|
205
|
+
surviving.push({
|
|
206
|
+
...op,
|
|
207
|
+
op: 'MOVE',
|
|
208
|
+
target_op: targetOp,
|
|
209
|
+
table: undefined,
|
|
210
|
+
row_id: undefined,
|
|
211
|
+
source_table: undefined,
|
|
212
|
+
source_key: undefined,
|
|
213
|
+
data: null
|
|
214
|
+
});
|
|
215
|
+
if (lastNotPut == null) {
|
|
216
|
+
lastNotPut = op.o;
|
|
217
|
+
}
|
|
218
|
+
opsSincePut += 1;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
if (trackingSize < this.idLimitBytes) {
|
|
222
|
+
seen.set(utils.flatstr(key), op.o);
|
|
223
|
+
trackingSize += key.length + 140;
|
|
224
|
+
}
|
|
225
|
+
surviving.push(op);
|
|
226
|
+
if (op.op == 'PUT') {
|
|
227
|
+
lastNotPut = null;
|
|
228
|
+
opsSincePut = 0;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
if (lastNotPut == null) {
|
|
232
|
+
lastNotPut = op.o;
|
|
233
|
+
}
|
|
234
|
+
opsSincePut += 1;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
surviving.push(op);
|
|
240
|
+
if (op.op != 'CLEAR') {
|
|
241
|
+
if (lastNotPut == null) {
|
|
242
|
+
lastNotPut = op.o;
|
|
243
|
+
}
|
|
244
|
+
opsSincePut += 1;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Reverse back to ascending order for rechunking
|
|
249
|
+
surviving.reverse();
|
|
250
|
+
// --- Rechunk survivors into new V3 documents ---
|
|
251
|
+
const chunks = chunkBucketData(surviving);
|
|
252
|
+
const newDocs = chunks.map((chunk) => serializeBucketData(bucket, chunk));
|
|
253
|
+
if (lastNotPut == null) {
|
|
254
|
+
clearBoundaryDocId = null;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
const boundaryOp = lastNotPut;
|
|
258
|
+
const boundaryDoc = newDocs.find((doc) => doc.min_op <= boundaryOp && doc._id.o >= boundaryOp);
|
|
259
|
+
if (boundaryDoc != null) {
|
|
260
|
+
clearBoundaryDocId = boundaryDoc._id;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// --- Commit: scoped delete + insert in transaction ---
|
|
264
|
+
const session = this.db.client.startSession();
|
|
265
|
+
try {
|
|
266
|
+
await session.withTransaction(async () => {
|
|
267
|
+
// Verify documents haven't been modified since we read them.
|
|
268
|
+
// This aggregate anchors the transaction snapshot and catches
|
|
269
|
+
// concurrent compaction jobs that modified the same documents.
|
|
270
|
+
const verification = await bucketContext.collection
|
|
271
|
+
.aggregate([
|
|
272
|
+
{ $match: { _id: { $in: idsToDelete } } },
|
|
273
|
+
{
|
|
274
|
+
$group: {
|
|
275
|
+
_id: null,
|
|
276
|
+
docCount: { $sum: 1 },
|
|
277
|
+
checksumSum: { $sum: '$checksum' },
|
|
278
|
+
opCountSum: { $sum: '$count' }
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
], { session })
|
|
282
|
+
.next();
|
|
283
|
+
if (verification == null || // all docs deleted
|
|
284
|
+
verification.docCount !== expectedDocCount || // some docs deleted
|
|
285
|
+
verification.checksumSum !== expectedChecksum || // docs modified in-place
|
|
286
|
+
verification.opCountSum !== expectedOpCount // ops added/removed within docs
|
|
287
|
+
) {
|
|
288
|
+
throw new Error(`Concurrent modification detected in bucket ${bucket}. Aborting compaction for this batch.`);
|
|
289
|
+
}
|
|
290
|
+
await bucketContext.collection.deleteMany({
|
|
291
|
+
_id: { $in: idsToDelete }
|
|
292
|
+
}, { session });
|
|
293
|
+
if (newDocs.length > 0) {
|
|
294
|
+
await bucketContext.collection.insertMany(newDocs, { session });
|
|
295
|
+
}
|
|
296
|
+
}, {
|
|
297
|
+
writeConcern: { w: 'majority' },
|
|
298
|
+
readConcern: { level: 'snapshot' }
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
finally {
|
|
302
|
+
await session.endSession();
|
|
303
|
+
}
|
|
304
|
+
// --- Accumulate bucket state ---
|
|
305
|
+
for (const chunk of chunks) {
|
|
306
|
+
for (const op of chunk) {
|
|
307
|
+
if (op.o <= this.maxOpId) {
|
|
308
|
+
totalChecksum = addChecksums(totalChecksum, Number(op.checksum));
|
|
309
|
+
totalOpBytes += op.data?.length ?? 0;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
totalOpCount += surviving.filter((op) => op.o <= this.maxOpId).length;
|
|
314
|
+
// --- Advance to next batch ---
|
|
315
|
+
upperBound = (newDocs.length > 0 ? newDocs[0]._id : rawBatch[batchCutIndex - 1]._id);
|
|
316
|
+
if (batchCutIndex < rawBatch.length) {
|
|
317
|
+
// We cut the batch short due to byte limit — don't advance past cut point
|
|
318
|
+
// The upperBound is already set to the last doc we processed
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
// Processed all docs in the raw batch. If we got fewer than the query
|
|
322
|
+
// limit, there are no more documents in this bucket — compaction complete.
|
|
323
|
+
if (rawBatch.length < this.moveBatchQueryLimit) {
|
|
324
|
+
break;
|
|
325
|
+
}
|
|
62
326
|
}
|
|
63
|
-
|
|
327
|
+
this.logger.info(`Compacted batch of ${batchDocs.length} documents for bucket ${bucket}`);
|
|
64
328
|
}
|
|
65
|
-
|
|
329
|
+
// --- Clear: collapse leading MOVE/REMOVE/CLEAR sequence ---
|
|
330
|
+
if (lastNotPut != null && opsSincePut >= 2) {
|
|
331
|
+
if (clearBoundaryDocId == null) {
|
|
332
|
+
throw new ReplicationAssertionError(`Missing CLEAR boundary document for bucket ${bucket}`);
|
|
333
|
+
}
|
|
334
|
+
totalOpCount += await this.clearBucketLeading(lastNotPut, clearBoundaryDocId, bucketContext, collection, context);
|
|
335
|
+
}
|
|
336
|
+
// --- Finalize: update bucket checksums and state ---
|
|
337
|
+
this.updateBucketChecksums({
|
|
338
|
+
bucket,
|
|
339
|
+
definitionId: resolvedDefinitionId,
|
|
340
|
+
seen: new Map(),
|
|
341
|
+
trackingSize: 0,
|
|
342
|
+
lastNotPut: lastNotPut,
|
|
343
|
+
opsSincePut: opsSincePut,
|
|
344
|
+
checksum: totalChecksum,
|
|
345
|
+
opCount: totalOpCount,
|
|
346
|
+
opBytes: totalOpBytes
|
|
347
|
+
});
|
|
348
|
+
if (this.bucketStateUpdates.length > 0) {
|
|
349
|
+
await this.writeBucketStateUpdates();
|
|
350
|
+
this.bucketStateUpdates = [];
|
|
351
|
+
}
|
|
352
|
+
logger.info(`Compacted bucket ${bucket}: ${totalOpCount} surviving ops`);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Collapse the leading sequence of MOVE/REMOVE/CLEAR ops at the start
|
|
356
|
+
* of the bucket into a single CLEAR op. Reads whole clearable documents
|
|
357
|
+
* before the known boundary document, then splits that boundary document
|
|
358
|
+
* if it contains ops on both sides of lastNotPut.
|
|
359
|
+
*
|
|
360
|
+
* Returns the op count diff after replacing cleared ops with CLEAR ops.
|
|
361
|
+
*/
|
|
362
|
+
async clearBucketLeading(lastNotPut, boundaryDocId, bucketContext, collection, context) {
|
|
363
|
+
let opCountDiff = 0;
|
|
364
|
+
const session = this.db.client.startSession();
|
|
365
|
+
try {
|
|
366
|
+
let done = false;
|
|
367
|
+
// First step is to clear full chunks that contain only CLEAR/MOVE/REMOVE operations.
|
|
368
|
+
// There can be many of them, so we do one batch at a time.
|
|
369
|
+
while (!done) {
|
|
370
|
+
const batch = await this.clearLeadingFullDocuments(session, lastNotPut, boundaryDocId, bucketContext, collection, context);
|
|
371
|
+
done = batch.done;
|
|
372
|
+
opCountDiff += batch.opCountDiff;
|
|
373
|
+
}
|
|
374
|
+
// The final step is to process the "boundary" document: It may contain some CLEAR/MOVE/REMOVE operations,
|
|
375
|
+
// potentially followed by PUT operations. This is only a single document, so no need for batching.
|
|
376
|
+
opCountDiff += await this.clearBoundaryDocument(session, lastNotPut, boundaryDocId, bucketContext, collection, context);
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
await session.endSession();
|
|
380
|
+
}
|
|
381
|
+
return opCountDiff;
|
|
382
|
+
}
|
|
383
|
+
async clearLeadingFullDocuments(session, lastNotPut, boundaryDocId, bucketContext, collection, context) {
|
|
384
|
+
const bucket = bucketContext.key.bucket;
|
|
385
|
+
let done = false;
|
|
386
|
+
let opCountDiff = 0;
|
|
387
|
+
this.signal?.throwIfAborted();
|
|
388
|
+
await session.withTransaction(async () => {
|
|
389
|
+
const query = collection.find({
|
|
390
|
+
_id: {
|
|
391
|
+
$gte: bucketContext.minId,
|
|
392
|
+
$lt: boundaryDocId
|
|
393
|
+
}
|
|
394
|
+
}, {
|
|
395
|
+
session,
|
|
396
|
+
sort: { _id: 1 },
|
|
397
|
+
projection: {
|
|
398
|
+
_id: 1,
|
|
399
|
+
min_op: 1,
|
|
400
|
+
checksum: 1,
|
|
401
|
+
count: 1,
|
|
402
|
+
target_op: 1,
|
|
403
|
+
ops: 1
|
|
404
|
+
},
|
|
405
|
+
limit: this.clearBatchLimit
|
|
406
|
+
});
|
|
407
|
+
let combinedChecksum = 0;
|
|
408
|
+
let clearedOpCount = 0;
|
|
409
|
+
let maxTargetOp = null;
|
|
410
|
+
let lastDocId = null;
|
|
411
|
+
let clearOpCount = 0;
|
|
412
|
+
let gotNonClearOp = false;
|
|
413
|
+
for await (const doc of query.stream()) {
|
|
414
|
+
if (doc.min_op > lastNotPut) {
|
|
415
|
+
throw new ReplicationAssertionError(`Unexpected document before CLEAR boundary with min_op ${doc.min_op} > ${lastNotPut} in bucket ${bucket}`);
|
|
416
|
+
}
|
|
417
|
+
lastDocId = doc._id;
|
|
418
|
+
for (const op of loadBucketDataDocument(context, doc)) {
|
|
419
|
+
if (op.o > lastNotPut) {
|
|
420
|
+
throw new ReplicationAssertionError(`Unexpected op ${op.o} after CLEAR boundary ${lastNotPut} in bucket ${bucket}`);
|
|
421
|
+
}
|
|
422
|
+
if (op.op == 'PUT') {
|
|
423
|
+
throw new ReplicationAssertionError(`Unexpected PUT at op ${op.o} in CLEAR region for bucket ${bucket}`);
|
|
424
|
+
}
|
|
425
|
+
if (op.op == 'CLEAR') {
|
|
426
|
+
clearOpCount++;
|
|
427
|
+
if (clearOpCount > 1) {
|
|
428
|
+
throw new ReplicationAssertionError(`Unexpected multiple CLEAR operations in bucket ${bucket}`);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
gotNonClearOp = true;
|
|
433
|
+
}
|
|
434
|
+
combinedChecksum = addChecksums(combinedChecksum, Number(op.checksum));
|
|
435
|
+
clearedOpCount++;
|
|
436
|
+
if (op.target_op != null && (maxTargetOp == null || op.target_op > maxTargetOp)) {
|
|
437
|
+
maxTargetOp = op.target_op;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (!gotNonClearOp) {
|
|
442
|
+
done = true;
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
this.logger.info(`Flushing CLEAR for ${clearedOpCount} ops at ${lastDocId?.o}`);
|
|
446
|
+
await collection.deleteMany({
|
|
447
|
+
_id: {
|
|
448
|
+
$gte: bucketContext.minId,
|
|
449
|
+
$lte: lastDocId
|
|
450
|
+
}
|
|
451
|
+
}, { session });
|
|
452
|
+
const clearOp = {
|
|
453
|
+
bucketKey: { ...context, bucket },
|
|
454
|
+
o: lastDocId.o,
|
|
455
|
+
op: 'CLEAR',
|
|
456
|
+
checksum: BigInt(combinedChecksum),
|
|
457
|
+
data: null,
|
|
458
|
+
target_op: maxTargetOp
|
|
459
|
+
};
|
|
460
|
+
await collection.insertOne(serializeBucketData(bucket, [clearOp]), { session });
|
|
461
|
+
opCountDiff = -clearedOpCount + 1;
|
|
462
|
+
}, {
|
|
463
|
+
writeConcern: { w: 'majority' },
|
|
464
|
+
readConcern: { level: 'snapshot' }
|
|
465
|
+
});
|
|
466
|
+
return { done, opCountDiff };
|
|
467
|
+
}
|
|
468
|
+
async clearBoundaryDocument(session, lastNotPut, boundaryDocId, bucketContext, collection, context) {
|
|
469
|
+
const bucket = bucketContext.key.bucket;
|
|
470
|
+
let opCountDiff = 0;
|
|
471
|
+
await session.withTransaction(async () => {
|
|
472
|
+
const query = collection.find({
|
|
473
|
+
// This is a range query, but should only ever return two documents:
|
|
474
|
+
// 1. The CLEAR op from the previous clearLeadingFullDocuments.
|
|
475
|
+
// 2. The boundary document.
|
|
476
|
+
_id: {
|
|
477
|
+
$gte: bucketContext.minId,
|
|
478
|
+
$lte: boundaryDocId
|
|
479
|
+
}
|
|
480
|
+
}, {
|
|
481
|
+
session,
|
|
482
|
+
sort: { _id: 1 },
|
|
483
|
+
projection: {
|
|
484
|
+
_id: 1,
|
|
485
|
+
min_op: 1,
|
|
486
|
+
checksum: 1,
|
|
487
|
+
count: 1,
|
|
488
|
+
target_op: 1,
|
|
489
|
+
ops: 1
|
|
490
|
+
},
|
|
491
|
+
limit: 3
|
|
492
|
+
});
|
|
493
|
+
let docsRead = 0;
|
|
494
|
+
let combinedChecksum = 0;
|
|
495
|
+
let clearedOpCount = 0;
|
|
496
|
+
let maxTargetOp = null;
|
|
497
|
+
const boundarySurvivors = [];
|
|
498
|
+
for await (const doc of query.stream()) {
|
|
499
|
+
docsRead++;
|
|
500
|
+
if (docsRead > 2) {
|
|
501
|
+
throw new ReplicationAssertionError(`Unexpected extra document before CLEAR boundary in bucket ${bucket}`);
|
|
502
|
+
}
|
|
503
|
+
const isBoundaryDoc = doc._id.o == boundaryDocId.o;
|
|
504
|
+
for (const op of loadBucketDataDocument(context, doc)) {
|
|
505
|
+
if (!isBoundaryDoc && op.op != 'CLEAR') {
|
|
506
|
+
throw new ReplicationAssertionError(`Unexpected ${op.op} operation before CLEAR boundary in bucket ${bucket}`);
|
|
507
|
+
}
|
|
508
|
+
if (op.o <= lastNotPut) {
|
|
509
|
+
if (op.op == 'PUT') {
|
|
510
|
+
throw new ReplicationAssertionError(`Unexpected PUT at op ${op.o} in CLEAR region for bucket ${bucket}`);
|
|
511
|
+
}
|
|
512
|
+
combinedChecksum = addChecksums(combinedChecksum, Number(op.checksum));
|
|
513
|
+
clearedOpCount++;
|
|
514
|
+
if (op.target_op != null && (maxTargetOp == null || op.target_op > maxTargetOp)) {
|
|
515
|
+
maxTargetOp = op.target_op;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
else if (isBoundaryDoc) {
|
|
519
|
+
boundarySurvivors.push(op);
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
throw new ReplicationAssertionError(`Unexpected op ${op.o} after CLEAR boundary ${lastNotPut} in bucket ${bucket}`);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
if (clearedOpCount == 0) {
|
|
527
|
+
throw new Error(`CLEAR boundary document not found for bucket ${bucket}`);
|
|
528
|
+
}
|
|
529
|
+
this.logger.info(`Flushing CLEAR for ${clearedOpCount} ops at ${lastNotPut}`);
|
|
530
|
+
await collection.deleteMany({
|
|
531
|
+
_id: {
|
|
532
|
+
$gte: bucketContext.minId,
|
|
533
|
+
$lte: boundaryDocId
|
|
534
|
+
}
|
|
535
|
+
}, { session });
|
|
536
|
+
const clearOp = {
|
|
537
|
+
bucketKey: { ...context, bucket },
|
|
538
|
+
o: lastNotPut,
|
|
539
|
+
op: 'CLEAR',
|
|
540
|
+
checksum: BigInt(combinedChecksum),
|
|
541
|
+
data: null,
|
|
542
|
+
target_op: maxTargetOp
|
|
543
|
+
};
|
|
544
|
+
await collection.insertOne(serializeBucketData(bucket, [clearOp]), { session });
|
|
545
|
+
if (boundarySurvivors.length > 0) {
|
|
546
|
+
const survivingDocs = chunkBucketData(boundarySurvivors).map((chunk) => serializeBucketData(bucket, chunk));
|
|
547
|
+
await collection.insertMany(survivingDocs, { session });
|
|
548
|
+
}
|
|
549
|
+
opCountDiff = -clearedOpCount + 1;
|
|
550
|
+
}, {
|
|
551
|
+
writeConcern: { w: 'majority' },
|
|
552
|
+
readConcern: { level: 'snapshot' }
|
|
553
|
+
});
|
|
554
|
+
return opCountDiff;
|
|
66
555
|
}
|
|
67
556
|
}
|
|
68
557
|
//# sourceMappingURL=MongoCompactorV3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoCompactorV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoCompactorV3.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoCompactorV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoCompactorV3.ts"],"names":[],"mappings":"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"}
|