@powersync/service-module-mongodb-storage 0.16.0 → 0.18.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.
- package/CHANGELOG.md +53 -0
- package/dist/storage/MongoBucketStorage.d.ts +35 -15
- package/dist/storage/MongoBucketStorage.js +309 -86
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/implementation/CheckpointState.d.ts +20 -0
- package/dist/storage/implementation/CheckpointState.js +31 -0
- package/dist/storage/implementation/CheckpointState.js.map +1 -0
- package/dist/storage/implementation/MongoBucketBatch.d.ts +69 -39
- package/dist/storage/implementation/MongoBucketBatch.js +104 -313
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoChecksums.d.ts +11 -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 +3 -1
- 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 +121 -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 +50 -21
- package/dist/storage/implementation/MongoSyncBucketStorage.js +62 -199
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.d.ts +5 -1
- package/dist/storage/implementation/MongoSyncRulesLock.js +9 -5
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/implementation/SyncRuleStateUpdate.d.ts +14 -0
- package/dist/storage/implementation/SyncRuleStateUpdate.js +36 -0
- package/dist/storage/implementation/SyncRuleStateUpdate.js.map +1 -0
- package/dist/storage/implementation/common/BucketDataDoc.d.ts +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 +2 -3
- package/dist/storage/implementation/common/PersistedBatch.js +5 -0
- package/dist/storage/implementation/common/PersistedBatch.js.map +1 -1
- package/dist/storage/implementation/common/SourceRecordStore.d.ts +1 -2
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +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.d.ts +10 -2
- package/dist/storage/implementation/db.js +9 -14
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +25 -50
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +23 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js +403 -2
- 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/MongoCompactorV1.d.ts +1 -1
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +22 -15
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +100 -27
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -1
- package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +1 -2
- package/dist/storage/implementation/v1/PersistedBatchV1.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 +21 -1
- package/dist/storage/implementation/v1/models.js.map +1 -1
- package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +21 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js +459 -3
- 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 +20 -3
- 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 +50 -16
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +292 -75
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -1
- package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +2 -3
- 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 +16 -14
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +32 -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 +111 -10
- 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/migrations/db/migrations/1702295701188-sync-rule-state.ts +1 -1
- package/src/storage/MongoBucketStorage.ts +464 -95
- package/src/storage/implementation/CheckpointState.ts +59 -0
- package/src/storage/implementation/MongoBucketBatch.ts +159 -405
- package/src/storage/implementation/MongoChecksums.ts +7 -138
- package/src/storage/implementation/MongoCompactor.ts +20 -10
- 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 +152 -0
- package/src/storage/implementation/MongoStorageProvider.ts +5 -2
- package/src/storage/implementation/MongoSyncBucketStorage.ts +89 -250
- package/src/storage/implementation/MongoSyncRulesLock.ts +14 -5
- package/src/storage/implementation/SyncRuleStateUpdate.ts +38 -0
- package/src/storage/implementation/common/BucketDataDoc.ts +1 -1
- package/src/storage/implementation/common/MongoSyncBucketStorageCheckpoint.ts +7 -0
- package/src/storage/implementation/common/PersistedBatch.ts +8 -4
- package/src/storage/implementation/common/SourceRecordStore.ts +1 -2
- package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +1 -1
- package/src/storage/implementation/createMongoSyncBucketStorage.ts +21 -7
- package/src/storage/implementation/db.ts +16 -21
- package/src/storage/implementation/models.ts +28 -61
- package/src/storage/implementation/v1/MongoBucketBatchV1.ts +503 -5
- package/src/storage/implementation/v1/MongoChecksumsV1.ts +137 -4
- package/src/storage/implementation/v1/MongoCompactorV1.ts +1 -1
- package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +150 -49
- package/src/storage/implementation/v1/PersistedBatchV1.ts +1 -2
- package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +11 -1
- package/src/storage/implementation/v1/models.ts +25 -0
- package/src/storage/implementation/v3/MongoBucketBatchV3.ts +611 -4
- package/src/storage/implementation/v3/MongoChecksumsV3.ts +262 -26
- package/src/storage/implementation/v3/MongoCompactorV3.ts +647 -30
- package/src/storage/implementation/v3/MongoStoppedSyncConfigCleanup.ts +480 -0
- package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +397 -111
- package/src/storage/implementation/v3/PersistedBatchV3.ts +63 -38
- 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 +48 -38
- 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 +150 -44
- 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 +1429 -42
- package/test/src/storeCurrentData.test.ts +221 -0
- 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 -17
- 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 -64
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +0 -15
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +0 -42
- 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 -5
- 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 -72
- package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -76
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +0 -56
- 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 -12
|
@@ -1,26 +1,88 @@
|
|
|
1
1
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
+
import { storage } from '@powersync/service-core';
|
|
4
|
+
import * as bson from 'bson';
|
|
2
5
|
import { mongoTableId } from '../../../utils/util.js';
|
|
6
|
+
import { canCheckpointState } from '../CheckpointState.js';
|
|
3
7
|
import { MongoBucketBatch } from '../MongoBucketBatch.js';
|
|
8
|
+
import { syncRuleStateUpdatePipeline } from '../SyncRuleStateUpdate.js';
|
|
4
9
|
import { PersistedBatchV3 } from './PersistedBatchV3.js';
|
|
5
10
|
import { SourceRecordStoreV3 } from './SourceRecordStoreV3.js';
|
|
11
|
+
import { createNewSourceTable, designateEventCarrier, overlappingSourceTableFilter, planSourceTableReconciliation, sourceTableDesiredResolution, sourceTableFromDocument } from './source-table-utils.js';
|
|
6
12
|
export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
7
13
|
store;
|
|
14
|
+
syncConfigIds;
|
|
15
|
+
needsActivationV3 = true;
|
|
16
|
+
lastWaitingLogThrottledV3 = 0;
|
|
8
17
|
constructor(options) {
|
|
9
18
|
super(options);
|
|
10
|
-
|
|
19
|
+
const syncConfigIds = options.syncConfigIds ?? [];
|
|
20
|
+
if (syncConfigIds.length == 0) {
|
|
21
|
+
throw new ReplicationAssertionError('Missing sync config id for v3 batch');
|
|
22
|
+
}
|
|
23
|
+
this.syncConfigIds = syncConfigIds;
|
|
24
|
+
this.store = new SourceRecordStoreV3(this.db, this.replicationStreamId, this.mapping);
|
|
11
25
|
}
|
|
12
26
|
createPersistedBatch(writtenSize) {
|
|
13
|
-
return new PersistedBatchV3(this.db, this.
|
|
27
|
+
return new PersistedBatchV3(this.db, this.replicationStreamId, this.mapping, writtenSize, {
|
|
14
28
|
logger: this.logger
|
|
15
29
|
});
|
|
16
30
|
}
|
|
17
31
|
get sourceRecordStore() {
|
|
18
32
|
return this.store;
|
|
19
33
|
}
|
|
34
|
+
async onReplicationTransactionFlush(session, lastOp) {
|
|
35
|
+
// Durably advance the stream-level head of persisted ops within the flush transaction.
|
|
36
|
+
// This ensures a checkpoint created later (even by an empty commit, or by a freshly-appended
|
|
37
|
+
// config that replicates nothing) covers all ops persisted before a potential crash.
|
|
38
|
+
await this.db.sync_rules.updateOne({
|
|
39
|
+
_id: this.replicationStreamId
|
|
40
|
+
}, {
|
|
41
|
+
$max: {
|
|
42
|
+
last_persisted_op: lastOp
|
|
43
|
+
}
|
|
44
|
+
}, { session });
|
|
45
|
+
}
|
|
46
|
+
selectedSyncConfigObjectIds(syncConfigIds) {
|
|
47
|
+
const selectedIds = new Set(this.syncConfigIds.map((id) => id.toHexString()));
|
|
48
|
+
return syncConfigIds
|
|
49
|
+
.filter((id) => selectedIds.has(id) && bson.ObjectId.isValid(id))
|
|
50
|
+
.map((id) => new bson.ObjectId(id));
|
|
51
|
+
}
|
|
52
|
+
relevantSyncConfigIds(table) {
|
|
53
|
+
const bucketDataSourceIds = table.bucketDataSources.map((source) => this.mapping.bucketSourceId(source));
|
|
54
|
+
const parameterLookupSourceIds = table.parameterLookupSources.map((source) => this.mapping.parameterLookupId(source));
|
|
55
|
+
return this.selectedSyncConfigObjectIds(this.mapping.syncConfigIdsForSourceTable(this.syncConfigIds.map((id) => id.toHexString()), table.ref, bucketDataSourceIds, parameterLookupSourceIds));
|
|
56
|
+
}
|
|
57
|
+
relevantSyncConfigIdsForTables(tables) {
|
|
58
|
+
const ids = new Map();
|
|
59
|
+
for (const table of tables) {
|
|
60
|
+
for (const id of this.relevantSyncConfigIds(table)) {
|
|
61
|
+
ids.set(id.toHexString(), id);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return [...ids.values()];
|
|
65
|
+
}
|
|
66
|
+
snapshotBlockingSourceTablesFilter() {
|
|
67
|
+
const clauses = this.syncConfigIds.flatMap((syncConfigId) => {
|
|
68
|
+
const filter = this.mapping.snapshotBlockingSourceTablesFilter(syncConfigId.toHexString());
|
|
69
|
+
return filter.$or ?? [];
|
|
70
|
+
});
|
|
71
|
+
if (clauses.length == 0) {
|
|
72
|
+
return {
|
|
73
|
+
snapshot_done: false,
|
|
74
|
+
_id: { $exists: false }
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
snapshot_done: false,
|
|
79
|
+
$or: clauses
|
|
80
|
+
};
|
|
81
|
+
}
|
|
20
82
|
async cleanupDroppedSourceTables(sourceTables) {
|
|
21
83
|
for (const table of sourceTables) {
|
|
22
84
|
await this.db
|
|
23
|
-
.
|
|
85
|
+
.sourceRecords(this.replicationStreamId, mongoTableId(table.id))
|
|
24
86
|
.drop()
|
|
25
87
|
.catch((error) => {
|
|
26
88
|
if (lib_mongo.isMongoServerError(error) && error.codeName === 'NamespaceNotFound') {
|
|
@@ -30,5 +92,399 @@ export class MongoBucketBatchV3 extends MongoBucketBatch {
|
|
|
30
92
|
});
|
|
31
93
|
}
|
|
32
94
|
}
|
|
95
|
+
async resolveTables(options) {
|
|
96
|
+
// The test-only override is a whole parsed set, so the sync rules and the mapping
|
|
97
|
+
// used below always come from the same parse.
|
|
98
|
+
const parsedOverride = options.parsedSyncConfig;
|
|
99
|
+
const syncConfig = parsedOverride?.hydratedSyncConfig ?? this.sync_rules;
|
|
100
|
+
const mapping = parsedOverride?.mapping ?? this.mapping;
|
|
101
|
+
const { connection_id, source } = options;
|
|
102
|
+
const context = {
|
|
103
|
+
connectionId: connection_id,
|
|
104
|
+
connectionTag: source.connectionTag,
|
|
105
|
+
identity: {
|
|
106
|
+
schema: source.schema,
|
|
107
|
+
name: source.name,
|
|
108
|
+
objectId: source.objectId,
|
|
109
|
+
replicaIdColumns: source.replicaIdColumns.map((column) => ({
|
|
110
|
+
name: column.name,
|
|
111
|
+
type: column.type,
|
|
112
|
+
type_oid: column.typeId
|
|
113
|
+
}))
|
|
114
|
+
},
|
|
115
|
+
storeCurrentData: source.sendsCompleteRows !== true,
|
|
116
|
+
syncConfig,
|
|
117
|
+
mapping,
|
|
118
|
+
desired: sourceTableDesiredResolution(syncConfig, source, mapping)
|
|
119
|
+
};
|
|
120
|
+
let result = null;
|
|
121
|
+
const session = this.db.client.startSession();
|
|
122
|
+
await using _ = { [Symbol.asyncDispose]: () => session.endSession() };
|
|
123
|
+
await session.withTransaction(async () => {
|
|
124
|
+
const col = this.db.sourceTables(this.replicationStreamId);
|
|
125
|
+
// Fetch every persisted source-table doc that can overlap this physical table.
|
|
126
|
+
// Exact-identity docs are candidates for reuse; non-exact overlaps are possible drops.
|
|
127
|
+
const candidateDocs = await col
|
|
128
|
+
.find(overlappingSourceTableFilter(connection_id, context.identity), { session })
|
|
129
|
+
.toArray();
|
|
130
|
+
// Pure planning: which docs to retain (and narrow), whether a new doc is needed for
|
|
131
|
+
// uncovered memberships, and which docs conflict with the current identity.
|
|
132
|
+
const plan = planSourceTableReconciliation(candidateDocs, context);
|
|
133
|
+
// Persist narrowing for incomplete snapshots only. Snapshot-complete docs keep stale
|
|
134
|
+
// coverage ids so compatible future configs can reuse already-snapshotted data.
|
|
135
|
+
// Narrowing occurs after removing a sync config, meaning we don't process those
|
|
136
|
+
// definitions anymore.
|
|
137
|
+
for (const update of plan.narrowingUpdates) {
|
|
138
|
+
await col.updateOne({ _id: update.id }, {
|
|
139
|
+
$set: {
|
|
140
|
+
bucket_data_source_ids: update.memberships.bucketDataSourceIds,
|
|
141
|
+
parameter_lookup_source_ids: update.memberships.parameterLookupSourceIds
|
|
142
|
+
}
|
|
143
|
+
}, { session });
|
|
144
|
+
}
|
|
145
|
+
// Any desired membership not covered by an existing doc gets a new source table.
|
|
146
|
+
// That table snapshots only the uncovered memberships.
|
|
147
|
+
if (plan.newTableMemberships != null) {
|
|
148
|
+
const id = options.idGenerator ? options.idGenerator() : new bson.ObjectId();
|
|
149
|
+
const { doc, table } = createNewSourceTable(id, plan.newTableMemberships, context);
|
|
150
|
+
await col.insertOne(doc, { session });
|
|
151
|
+
await this.db.initializeSourceRecordsCollection(this.replicationStreamId, doc._id, session);
|
|
152
|
+
plan.tables.push(table);
|
|
153
|
+
}
|
|
154
|
+
// If memberships are split across multiple source tables, only one may fire events.
|
|
155
|
+
designateEventCarrier(plan.tables, context.desired.triggersEvent);
|
|
156
|
+
result = {
|
|
157
|
+
tables: plan.tables,
|
|
158
|
+
dropTables: plan.dropDocs.map((doc) => sourceTableFromDocument(doc, context.connectionTag, syncConfig, mapping))
|
|
159
|
+
};
|
|
160
|
+
});
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
async getSourceTableStatus(table) {
|
|
164
|
+
const doc = (await this.db
|
|
165
|
+
.sourceTables(this.replicationStreamId)
|
|
166
|
+
.findOne({ _id: mongoTableId(table.id) }, { session: this.session }));
|
|
167
|
+
if (doc == null) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
const refreshed = sourceTableFromDocument(doc, table.ref.connectionTag, this.sync_rules, this.mapping);
|
|
171
|
+
// The event-carrier designation is decided per resolveTables result and not persisted -
|
|
172
|
+
// preserve the caller's designation instead of recomputing it from the ref, so that
|
|
173
|
+
// refreshing a non-carrier table does not make it fire events.
|
|
174
|
+
refreshed.syncEvent = table.syncEvent;
|
|
175
|
+
return refreshed;
|
|
176
|
+
}
|
|
177
|
+
async commit(lsn, options) {
|
|
178
|
+
const { createEmptyCheckpoints } = { ...storage.DEFAULT_BUCKET_BATCH_COMMIT_OPTIONS, ...options };
|
|
179
|
+
await this.flush(options);
|
|
180
|
+
const now = new Date();
|
|
181
|
+
await this.db.write_checkpoints.updateMany({
|
|
182
|
+
processed_at_lsn: null,
|
|
183
|
+
'lsns.1': { $lte: lsn }
|
|
184
|
+
}, {
|
|
185
|
+
$set: {
|
|
186
|
+
processed_at_lsn: lsn
|
|
187
|
+
}
|
|
188
|
+
}, {
|
|
189
|
+
session: this.session
|
|
190
|
+
});
|
|
191
|
+
const preUpdateDocument = (await this.db.sync_rules.findOne({
|
|
192
|
+
_id: this.replicationStreamId,
|
|
193
|
+
'sync_configs._id': { $in: this.syncConfigIds }
|
|
194
|
+
}, {
|
|
195
|
+
session: this.session,
|
|
196
|
+
projection: {
|
|
197
|
+
sync_configs: 1,
|
|
198
|
+
last_persisted_op: 1
|
|
199
|
+
}
|
|
200
|
+
}));
|
|
201
|
+
const states = preUpdateDocument?.sync_configs?.filter((config) => this.syncConfigIds.some((id) => id.equals(config._id))) ?? [];
|
|
202
|
+
if (states.length == 0) {
|
|
203
|
+
throw new ReplicationAssertionError(`Failed to update checkpoint - no matching sync_config for _id: ${this.replicationStreamId}/${this.syncConfigIds
|
|
204
|
+
.map((id) => id.toHexString())
|
|
205
|
+
.join(',')}`);
|
|
206
|
+
}
|
|
207
|
+
// The replication job / MongoBucketBatch must be constructed with all replicating (PROCESSING / ACTIVE)
|
|
208
|
+
// sync configs in the stream, otherwise we'll get inconsistencies. Configs in other states (e.g. STOP)
|
|
209
|
+
// remain embedded in the document and are ignored here.
|
|
210
|
+
const missingSyncConfig = preUpdateDocument.sync_configs.find((config) => [storage.SyncRuleState.PROCESSING, storage.SyncRuleState.ACTIVE].includes(config.state) &&
|
|
211
|
+
!this.syncConfigIds.some((id) => id.equals(config._id)));
|
|
212
|
+
if (missingSyncConfig != null) {
|
|
213
|
+
throw new ReplicationAssertionError(`Replication job not configured for sync config ${missingSyncConfig._id}`);
|
|
214
|
+
}
|
|
215
|
+
// Effective head of the stream's op sequence.
|
|
216
|
+
// last_persisted_op is $max-advanced durably in the same transaction as every flush, and this
|
|
217
|
+
// read uses the same session, so it covers all ops persisted by this batch.
|
|
218
|
+
const newCheckpoint = preUpdateDocument?.last_persisted_op == null ? 0n : BigInt(preUpdateDocument.last_persisted_op);
|
|
219
|
+
let checkpointBlocked = false;
|
|
220
|
+
let checkpointCreated = false;
|
|
221
|
+
let checkpointLogState = null;
|
|
222
|
+
const unblockedConfigIds = [];
|
|
223
|
+
for (const state of states) {
|
|
224
|
+
if (state.last_checkpoint != null && state.last_checkpoint > newCheckpoint) {
|
|
225
|
+
// last_persisted_op is $max-advanced durably in the same transaction as every flush, and
|
|
226
|
+
// checkpoints are only ever created at that head, so a checkpoint past the head means the
|
|
227
|
+
// op sequence or the stored state is corrupt.
|
|
228
|
+
throw new ReplicationAssertionError(`Invariant violation: sync config ${state._id} has last_checkpoint ${state.last_checkpoint} > stream head ${newCheckpoint}`);
|
|
229
|
+
}
|
|
230
|
+
const canCheckpoint = canCheckpointState(lsn, {
|
|
231
|
+
snapshotDone: state.snapshot_done === true,
|
|
232
|
+
lastCheckpointLsn: state.last_checkpoint_lsn,
|
|
233
|
+
noCheckpointBefore: state.no_checkpoint_before
|
|
234
|
+
});
|
|
235
|
+
if (!canCheckpoint) {
|
|
236
|
+
checkpointBlocked = true;
|
|
237
|
+
// Log the first blocked config's state.
|
|
238
|
+
checkpointLogState ??= {
|
|
239
|
+
snapshot_done: state.snapshot_done,
|
|
240
|
+
last_checkpoint_lsn: state.last_checkpoint_lsn,
|
|
241
|
+
no_checkpoint_before: state.no_checkpoint_before
|
|
242
|
+
};
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
checkpointCreated ||= createEmptyCheckpoints || state.last_checkpoint !== newCheckpoint;
|
|
246
|
+
unblockedConfigIds.push(state._id);
|
|
247
|
+
}
|
|
248
|
+
// Every commit advances the stream's resume position: commit() flushes first, so all
|
|
249
|
+
// source changes up to this lsn have been persisted, even when checkpoints are blocked.
|
|
250
|
+
// In the future we could also advance this on flush, when the connector provides the
|
|
251
|
+
// current position (see setResumeLsn, which connectors may already call after flushing).
|
|
252
|
+
const resumeLsnUpdate = { resume_lsn: lsn };
|
|
253
|
+
if (unblockedConfigIds.length > 0) {
|
|
254
|
+
// All unblocked configs get the SAME new value, so we apply it with a single updateOne
|
|
255
|
+
// (single-document atomicity).
|
|
256
|
+
const updateSet = {
|
|
257
|
+
last_keepalive_ts: now,
|
|
258
|
+
last_fatal_error: null,
|
|
259
|
+
last_fatal_error_ts: null
|
|
260
|
+
};
|
|
261
|
+
// Only advance checkpoint fields when an actual (non-empty) checkpoint is created, matching
|
|
262
|
+
// the previous per-config / v1 behaviour.
|
|
263
|
+
if (checkpointCreated) {
|
|
264
|
+
updateSet['sync_configs.$[config].last_checkpoint'] = newCheckpoint;
|
|
265
|
+
updateSet['sync_configs.$[config].last_checkpoint_lsn'] = lsn;
|
|
266
|
+
updateSet['last_checkpoint_ts'] = now;
|
|
267
|
+
}
|
|
268
|
+
await this.db.sync_rules.updateOne({
|
|
269
|
+
_id: this.replicationStreamId,
|
|
270
|
+
'sync_configs._id': { $in: unblockedConfigIds }
|
|
271
|
+
}, { $set: updateSet, $max: resumeLsnUpdate }, {
|
|
272
|
+
session: this.session,
|
|
273
|
+
arrayFilters: checkpointCreated ? [{ 'config._id': { $in: unblockedConfigIds } }] : undefined
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// All selected configs are blocked - only update keepalive/error tracking and the
|
|
278
|
+
// resume position.
|
|
279
|
+
await this.db.sync_rules.updateOne({
|
|
280
|
+
_id: this.replicationStreamId
|
|
281
|
+
}, {
|
|
282
|
+
$set: {
|
|
283
|
+
last_keepalive_ts: now,
|
|
284
|
+
last_fatal_error: null,
|
|
285
|
+
last_fatal_error_ts: null
|
|
286
|
+
},
|
|
287
|
+
$max: resumeLsnUpdate
|
|
288
|
+
}, { session: this.session });
|
|
289
|
+
}
|
|
290
|
+
if (checkpointBlocked) {
|
|
291
|
+
if (Date.now() - this.lastWaitingLogThrottledV3 > 5_000) {
|
|
292
|
+
this.logger.info(`Waiting before creating checkpoint, currently at ${lsn}. Current state: ${JSON.stringify(checkpointLogState)}`);
|
|
293
|
+
this.lastWaitingLogThrottledV3 = Date.now();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
if (checkpointCreated) {
|
|
298
|
+
this.logger.debug(`Created checkpoint at ${lsn}`);
|
|
299
|
+
}
|
|
300
|
+
await this.autoActivateV3(lsn);
|
|
301
|
+
// All configs are now checkpointed at newCheckpoint (the stream head).
|
|
302
|
+
await this.sourceRecordStore.postCommitCleanup(newCheckpoint, this.logger);
|
|
303
|
+
}
|
|
304
|
+
if (checkpointCreated) {
|
|
305
|
+
await this.db.notifyCheckpoint();
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
checkpointBlocked,
|
|
309
|
+
checkpointCreated
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
async keepalive(lsn) {
|
|
313
|
+
return await this.commit(lsn, { createEmptyCheckpoints: true });
|
|
314
|
+
}
|
|
315
|
+
async setResumeLsn(lsn) {
|
|
316
|
+
await this.db.sync_rules.updateOne({
|
|
317
|
+
_id: this.replicationStreamId
|
|
318
|
+
}, {
|
|
319
|
+
$set: {
|
|
320
|
+
resume_lsn: lsn
|
|
321
|
+
}
|
|
322
|
+
}, { session: this.session });
|
|
323
|
+
}
|
|
324
|
+
async autoActivateV3(lsn) {
|
|
325
|
+
if (!this.needsActivationV3) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const session = this.session;
|
|
329
|
+
let activated = false;
|
|
330
|
+
await session.withTransaction(async () => {
|
|
331
|
+
const doc = await this.db.sync_rules.findOne({
|
|
332
|
+
_id: this.replicationStreamId,
|
|
333
|
+
'sync_configs._id': { $in: this.syncConfigIds }
|
|
334
|
+
}, {
|
|
335
|
+
session,
|
|
336
|
+
projection: {
|
|
337
|
+
state: 1,
|
|
338
|
+
sync_configs: 1
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
const states = doc?.sync_configs?.filter((config) => this.syncConfigIds.some((id) => id.equals(config._id))) ?? [];
|
|
342
|
+
if (doc == null || states.length == 0) {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
const processingStates = states.filter((state) => state.state == storage.SyncRuleState.PROCESSING);
|
|
346
|
+
if (doc.state == storage.SyncRuleState.PROCESSING &&
|
|
347
|
+
processingStates.length == states.length &&
|
|
348
|
+
states.every((state) => state.snapshot_done && state.last_checkpoint != null)) {
|
|
349
|
+
await this.db.sync_rules.updateOne({
|
|
350
|
+
_id: this.replicationStreamId,
|
|
351
|
+
'sync_configs._id': { $in: this.syncConfigIds }
|
|
352
|
+
}, {
|
|
353
|
+
$set: {
|
|
354
|
+
state: storage.SyncRuleState.ACTIVE,
|
|
355
|
+
'sync_configs.$[config].state': storage.SyncRuleState.ACTIVE
|
|
356
|
+
}
|
|
357
|
+
}, {
|
|
358
|
+
session,
|
|
359
|
+
arrayFilters: [{ 'config._id': { $in: this.syncConfigIds } }]
|
|
360
|
+
});
|
|
361
|
+
await this.db.sync_rules.updateMany({
|
|
362
|
+
_id: { $ne: this.replicationStreamId },
|
|
363
|
+
state: { $in: [storage.SyncRuleState.ACTIVE, storage.SyncRuleState.ERRORED] }
|
|
364
|
+
}, syncRuleStateUpdatePipeline(storage.SyncRuleState.STOP), { session });
|
|
365
|
+
activated = true;
|
|
366
|
+
}
|
|
367
|
+
else if (doc.state == storage.SyncRuleState.ACTIVE &&
|
|
368
|
+
processingStates.length > 0 &&
|
|
369
|
+
processingStates.every((state) => state.snapshot_done && state.last_checkpoint != null)) {
|
|
370
|
+
await this.db.sync_rules.updateOne({
|
|
371
|
+
_id: this.replicationStreamId,
|
|
372
|
+
'sync_configs._id': { $in: processingStates.map((state) => state._id) }
|
|
373
|
+
}, {
|
|
374
|
+
$set: {
|
|
375
|
+
'sync_configs.$[activeConfig].state': storage.SyncRuleState.STOP,
|
|
376
|
+
'sync_configs.$[processingConfig].state': storage.SyncRuleState.ACTIVE
|
|
377
|
+
}
|
|
378
|
+
}, {
|
|
379
|
+
session,
|
|
380
|
+
arrayFilters: [
|
|
381
|
+
{ 'activeConfig.state': storage.SyncRuleState.ACTIVE },
|
|
382
|
+
{ 'processingConfig._id': { $in: processingStates.map((state) => state._id) } }
|
|
383
|
+
]
|
|
384
|
+
});
|
|
385
|
+
activated = true;
|
|
386
|
+
}
|
|
387
|
+
else if (doc.state != storage.SyncRuleState.PROCESSING && doc.state != storage.SyncRuleState.ACTIVE) {
|
|
388
|
+
this.needsActivationV3 = false;
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
if (activated) {
|
|
392
|
+
this.logger.info(`Activated new replication stream at ${lsn}`);
|
|
393
|
+
await this.db.notifyCheckpoint();
|
|
394
|
+
this.needsActivationV3 = false;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
async markAllSnapshotDone(no_checkpoint_before_lsn) {
|
|
398
|
+
await this.db.sync_rules.updateOne({
|
|
399
|
+
_id: this.replicationStreamId,
|
|
400
|
+
'sync_configs._id': { $in: this.syncConfigIds }
|
|
401
|
+
}, {
|
|
402
|
+
$set: {
|
|
403
|
+
'sync_configs.$[config].snapshot_done': true,
|
|
404
|
+
last_keepalive_ts: new Date()
|
|
405
|
+
},
|
|
406
|
+
$max: {
|
|
407
|
+
'sync_configs.$[config].no_checkpoint_before': no_checkpoint_before_lsn
|
|
408
|
+
}
|
|
409
|
+
}, {
|
|
410
|
+
session: this.session,
|
|
411
|
+
arrayFilters: [{ 'config._id': { $in: this.syncConfigIds } }]
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
async markSnapshotDone(no_checkpoint_before_lsn, options) {
|
|
415
|
+
await this.withTransaction(async () => {
|
|
416
|
+
// Protect against race conditions
|
|
417
|
+
const blockingTables = await this.db
|
|
418
|
+
.sourceTables(this.replicationStreamId)
|
|
419
|
+
.find(this.snapshotBlockingSourceTablesFilter(), {
|
|
420
|
+
session: this.session,
|
|
421
|
+
projection: { schema_name: 1, table_name: 1 }
|
|
422
|
+
})
|
|
423
|
+
.toArray();
|
|
424
|
+
if (blockingTables.length > 0) {
|
|
425
|
+
if (options?.throwOnConflict ?? true) {
|
|
426
|
+
throw new ReplicationAssertionError(`Cannot mark snapshot done while source tables still require snapshotting. Tables: ${blockingTables.map((t) => `${t.schema_name}.${t.table_name}`).join(', ')}`);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
await this.markAllSnapshotDone(no_checkpoint_before_lsn);
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
async markTableSnapshotRequired(table) {
|
|
436
|
+
const syncConfigIds = this.relevantSyncConfigIds(table);
|
|
437
|
+
if (syncConfigIds.length == 0) {
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
await this.db.sync_rules.updateOne({
|
|
441
|
+
_id: this.replicationStreamId,
|
|
442
|
+
'sync_configs._id': { $in: syncConfigIds }
|
|
443
|
+
}, {
|
|
444
|
+
$set: {
|
|
445
|
+
'sync_configs.$[config].snapshot_done': false
|
|
446
|
+
}
|
|
447
|
+
}, {
|
|
448
|
+
session: this.session,
|
|
449
|
+
arrayFilters: [{ 'config._id': { $in: syncConfigIds } }]
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
async markTableSnapshotDone(tables, no_checkpoint_before_lsn) {
|
|
453
|
+
const session = this.session;
|
|
454
|
+
const ids = tables.map((table) => mongoTableId(table.id));
|
|
455
|
+
const syncConfigIds = this.relevantSyncConfigIdsForTables(tables);
|
|
456
|
+
await this.withTransaction(async () => {
|
|
457
|
+
await this.db.sourceTables(this.replicationStreamId).updateMany({ _id: { $in: ids } }, {
|
|
458
|
+
$set: {
|
|
459
|
+
snapshot_done: true
|
|
460
|
+
},
|
|
461
|
+
$unset: {
|
|
462
|
+
snapshot_status: 1
|
|
463
|
+
}
|
|
464
|
+
}, { session });
|
|
465
|
+
if (no_checkpoint_before_lsn != null && syncConfigIds.length > 0) {
|
|
466
|
+
await this.db.sync_rules.updateOne({
|
|
467
|
+
_id: this.replicationStreamId,
|
|
468
|
+
'sync_configs._id': { $in: syncConfigIds }
|
|
469
|
+
}, {
|
|
470
|
+
$set: {
|
|
471
|
+
last_keepalive_ts: new Date()
|
|
472
|
+
},
|
|
473
|
+
$max: {
|
|
474
|
+
'sync_configs.$[config].no_checkpoint_before': no_checkpoint_before_lsn
|
|
475
|
+
}
|
|
476
|
+
}, {
|
|
477
|
+
session: this.session,
|
|
478
|
+
// Only set for sync configs that use this table
|
|
479
|
+
arrayFilters: [{ 'config._id': { $in: syncConfigIds } }]
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
});
|
|
483
|
+
return tables.map((table) => {
|
|
484
|
+
const copy = table.clone();
|
|
485
|
+
copy.snapshotComplete = true;
|
|
486
|
+
return copy;
|
|
487
|
+
});
|
|
488
|
+
}
|
|
33
489
|
}
|
|
34
490
|
//# sourceMappingURL=MongoBucketBatchV3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoBucketBatchV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoBucketBatchV3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAA2B,MAAM,wBAAwB,CAAC;AAGnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAG/D,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IAGrC,KAAK,CAAoB;IAE1C,YAAY,OAAgC;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAES,oBAAoB,CAAC,WAAmB;QAChD,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;YAC7E,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,IAAc,iBAAiB;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAES,KAAK,CAAC,0BAA0B,CAAC,YAAmC;QAC5E,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,EAAE;iBACV,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACtD,IAAI,EAAE;iBACN,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;oBAClF,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"MongoBucketBatchV3.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v3/MongoBucketBatchV3.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,35 @@
|
|
|
1
|
-
import { BucketChecksum, FetchPartialBucketChecksum, InternalOpId, PartialChecksumMap } from '@powersync/service-core';
|
|
2
|
-
import {
|
|
1
|
+
import { BucketChecksum, FetchPartialBucketChecksum, InternalOpId, PartialChecksumMap, SingleSyncConfigBucketDefinitionMapping } from '@powersync/service-core';
|
|
2
|
+
import { FetchPartialBucketChecksumByDefinition, MongoChecksumOptions, MongoChecksums } from '../MongoChecksums.js';
|
|
3
3
|
import { VersionedPowerSyncMongoV3 } from './VersionedPowerSyncMongoV3.js';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Checksum operations addressed by persisted definition id.
|
|
6
|
+
*
|
|
7
|
+
* Safe on any storage instance, including multi-config replication-side instances - no
|
|
8
|
+
* source resolution is involved. This is the only checksum surface the compactor may use.
|
|
9
|
+
*/
|
|
10
|
+
export interface DefinitionChecksumOperations {
|
|
11
|
+
computePartialChecksumsDirectByDefinition(batch: FetchPartialBucketChecksumByDefinition[]): Promise<PartialChecksumMap>;
|
|
12
|
+
}
|
|
13
|
+
export interface MongoChecksumOptionsV3 extends MongoChecksumOptions {
|
|
14
|
+
/**
|
|
15
|
+
* The persisted mapping of the single sync config that reads are served from.
|
|
16
|
+
*
|
|
17
|
+
* A thunk rather than a plain value: checksums are constructed eagerly with the storage
|
|
18
|
+
* instance, but the single-config requirement may only be asserted when a read happens.
|
|
19
|
+
*/
|
|
20
|
+
syncConfigMapping: () => SingleSyncConfigBucketDefinitionMapping;
|
|
21
|
+
}
|
|
22
|
+
export declare class MongoChecksumsV3 extends MongoChecksums implements DefinitionChecksumOperations {
|
|
5
23
|
protected readonly db: VersionedPowerSyncMongoV3;
|
|
6
|
-
private readonly
|
|
7
|
-
constructor(db: VersionedPowerSyncMongoV3, group_id: number, options:
|
|
8
|
-
|
|
9
|
-
computePartialChecksumsDirectByDefinition(batch: FetchPartialBucketChecksumV3[]): Promise<PartialChecksumMap>;
|
|
24
|
+
private readonly syncConfigMapping;
|
|
25
|
+
constructor(db: VersionedPowerSyncMongoV3, group_id: number, options: MongoChecksumOptionsV3);
|
|
26
|
+
computePartialChecksumsDirectByDefinition(batch: FetchPartialBucketChecksumByDefinition[]): Promise<PartialChecksumMap>;
|
|
10
27
|
protected fetchPreStates(batch: FetchPartialBucketChecksum[]): Promise<Map<string, {
|
|
11
28
|
opId: InternalOpId;
|
|
12
29
|
checksum: BucketChecksum;
|
|
13
30
|
}>>;
|
|
14
31
|
protected computePartialChecksumsInternal(batch: FetchPartialBucketChecksum[]): Promise<PartialChecksumMap>;
|
|
32
|
+
private computeChecksumsByDefinition;
|
|
33
|
+
private buildPartialChecksumPipeline;
|
|
34
|
+
private normalizePartialChecksumResults;
|
|
15
35
|
}
|