@powersync/service-module-mongodb-storage 0.0.0-dev-20260225160713 → 0.0.0-dev-20260511080634
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 +119 -6
- package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +1 -1
- package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +1 -1
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +3 -3
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +1 -1
- package/dist/migrations/db/migrations/1770213298299-storage-version.js.map +1 -1
- package/dist/storage/MongoBucketStorage.d.ts +5 -3
- package/dist/storage/MongoBucketStorage.js +53 -26
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/MongoReportStorage.js.map +1 -1
- package/dist/storage/implementation/BucketDefinitionMapping.d.ts +17 -0
- package/dist/storage/implementation/BucketDefinitionMapping.js +58 -0
- package/dist/storage/implementation/BucketDefinitionMapping.js.map +1 -0
- package/dist/storage/implementation/MongoBucketBatch.d.ts +25 -21
- package/dist/storage/implementation/MongoBucketBatch.js +256 -210
- package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
- package/dist/storage/implementation/MongoBucketBatchShared.d.ts +5 -0
- package/dist/storage/implementation/MongoBucketBatchShared.js +8 -0
- package/dist/storage/implementation/MongoBucketBatchShared.js.map +1 -0
- package/dist/storage/implementation/MongoChecksums.d.ts +30 -19
- package/dist/storage/implementation/MongoChecksums.js +13 -71
- package/dist/storage/implementation/MongoChecksums.js.map +1 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +99 -53
- package/dist/storage/implementation/MongoCompactor.js +265 -303
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoParameterCompactor.d.ts +12 -7
- package/dist/storage/implementation/MongoParameterCompactor.js +24 -9
- package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +14 -0
- package/dist/storage/implementation/MongoPersistedSyncRules.js +64 -0
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +1 -0
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +3 -0
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +11 -7
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
- package/dist/storage/implementation/MongoStorageProvider.js +1 -1
- package/dist/storage/implementation/MongoStorageProvider.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +54 -30
- package/dist/storage/implementation/MongoSyncBucketStorage.js +118 -472
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/MongoSyncRulesLock.d.ts +7 -5
- package/dist/storage/implementation/MongoSyncRulesLock.js +12 -10
- package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +4 -4
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js +1 -1
- package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
- package/dist/storage/implementation/OperationBatch.js +3 -2
- package/dist/storage/implementation/OperationBatch.js.map +1 -1
- package/dist/storage/implementation/common/BucketDataDoc.d.ts +35 -0
- package/dist/storage/implementation/common/BucketDataDoc.js +2 -0
- package/dist/storage/implementation/common/BucketDataDoc.js.map +1 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.d.ts +13 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js +2 -0
- package/dist/storage/implementation/common/MongoSyncBucketStorageContext.js.map +1 -0
- package/dist/storage/implementation/common/PersistedBatch.d.ts +108 -0
- package/dist/storage/implementation/common/PersistedBatch.js +237 -0
- package/dist/storage/implementation/common/PersistedBatch.js.map +1 -0
- package/dist/storage/implementation/common/SingleBucketStore.d.ts +54 -0
- package/dist/storage/implementation/common/SingleBucketStore.js +3 -0
- package/dist/storage/implementation/common/SingleBucketStore.js.map +1 -0
- package/dist/storage/implementation/common/SourceRecordStore.d.ts +36 -0
- package/dist/storage/implementation/common/SourceRecordStore.js +2 -0
- package/dist/storage/implementation/common/SourceRecordStore.js.map +1 -0
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.d.ts +27 -0
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js +57 -0
- package/dist/storage/implementation/common/VersionedPowerSyncMongoBase.js.map +1 -0
- package/dist/storage/implementation/createMongoSyncBucketStorage.d.ts +7 -0
- package/dist/storage/implementation/createMongoSyncBucketStorage.js +9 -0
- package/dist/storage/implementation/createMongoSyncBucketStorage.js.map +1 -0
- package/dist/storage/implementation/db.d.ts +38 -4
- package/dist/storage/implementation/db.js +80 -1
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +66 -25
- package/dist/storage/implementation/models.js +22 -2
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/implementation/v1/MongoBucketBatchV1.d.ts +13 -0
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js +22 -0
- package/dist/storage/implementation/v1/MongoBucketBatchV1.js.map +1 -0
- package/dist/storage/implementation/v1/MongoChecksumsV1.d.ts +12 -0
- package/dist/storage/implementation/v1/MongoChecksumsV1.js +56 -0
- package/dist/storage/implementation/v1/MongoChecksumsV1.js.map +1 -0
- package/dist/storage/implementation/v1/MongoCompactorV1.d.ts +23 -0
- package/dist/storage/implementation/v1/MongoCompactorV1.js +52 -0
- package/dist/storage/implementation/v1/MongoCompactorV1.js.map +1 -0
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.d.ts +9 -0
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.js +20 -0
- package/dist/storage/implementation/v1/MongoParameterCompactorV1.js.map +1 -0
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.d.ts +41 -0
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js +269 -0
- package/dist/storage/implementation/v1/MongoSyncBucketStorageV1.js.map +1 -0
- package/dist/storage/implementation/v1/PersistedBatchV1.d.ts +26 -0
- package/dist/storage/implementation/v1/PersistedBatchV1.js +183 -0
- package/dist/storage/implementation/v1/PersistedBatchV1.js.map +1 -0
- package/dist/storage/implementation/v1/SingleBucketStoreV1.d.ts +18 -0
- package/dist/storage/implementation/v1/SingleBucketStoreV1.js +57 -0
- package/dist/storage/implementation/v1/SingleBucketStoreV1.js.map +1 -0
- package/dist/storage/implementation/v1/SourceRecordStoreV1.d.ts +19 -0
- package/dist/storage/implementation/v1/SourceRecordStoreV1.js +105 -0
- package/dist/storage/implementation/v1/SourceRecordStoreV1.js.map +1 -0
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.d.ts +12 -0
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js +20 -0
- package/dist/storage/implementation/v1/VersionedPowerSyncMongoV1.js.map +1 -0
- package/dist/storage/implementation/v1/models.d.ts +34 -0
- package/dist/storage/implementation/v1/models.js +37 -0
- package/dist/storage/implementation/v1/models.js.map +1 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.d.ts +13 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js +34 -0
- package/dist/storage/implementation/v3/MongoBucketBatchV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoChecksumsV3.d.ts +15 -0
- package/dist/storage/implementation/v3/MongoChecksumsV3.js +84 -0
- package/dist/storage/implementation/v3/MongoChecksumsV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoCompactorV3.d.ts +23 -0
- package/dist/storage/implementation/v3/MongoCompactorV3.js +68 -0
- package/dist/storage/implementation/v3/MongoCompactorV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.d.ts +9 -0
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js +18 -0
- package/dist/storage/implementation/v3/MongoParameterCompactorV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoParameterLookupV3.d.ts +5 -0
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js +9 -0
- package/dist/storage/implementation/v3/MongoParameterLookupV3.js.map +1 -0
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.d.ts +41 -0
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js +404 -0
- package/dist/storage/implementation/v3/MongoSyncBucketStorageV3.js.map +1 -0
- package/dist/storage/implementation/v3/PersistedBatchV3.d.ts +29 -0
- package/dist/storage/implementation/v3/PersistedBatchV3.js +259 -0
- package/dist/storage/implementation/v3/PersistedBatchV3.js.map +1 -0
- package/dist/storage/implementation/v3/SingleBucketStoreV3.d.ts +18 -0
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js +48 -0
- package/dist/storage/implementation/v3/SingleBucketStoreV3.js.map +1 -0
- package/dist/storage/implementation/v3/SourceRecordStoreV3.d.ts +22 -0
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js +164 -0
- package/dist/storage/implementation/v3/SourceRecordStoreV3.js.map +1 -0
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.d.ts +21 -0
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js +71 -0
- package/dist/storage/implementation/v3/VersionedPowerSyncMongoV3.js.map +1 -0
- package/dist/storage/implementation/v3/models.d.ts +43 -0
- package/dist/storage/implementation/v3/models.js +34 -0
- package/dist/storage/implementation/v3/models.js.map +1 -0
- package/dist/storage/storage-index.d.ts +8 -5
- package/dist/storage/storage-index.js +8 -5
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/utils/test-utils.d.ts +4 -1
- package/dist/utils/test-utils.js +15 -12
- package/dist/utils/test-utils.js.map +1 -1
- package/dist/utils/util.d.ts +13 -5
- package/dist/utils/util.js +40 -5
- package/dist/utils/util.js.map +1 -1
- package/package.json +9 -9
- package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +1 -1
- package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +7 -7
- package/src/migrations/db/migrations/1770213298299-storage-version.ts +1 -1
- package/src/storage/MongoBucketStorage.ts +111 -55
- package/src/storage/MongoReportStorage.ts +2 -2
- package/src/storage/implementation/BucketDefinitionMapping.ts +72 -0
- package/src/storage/implementation/MongoBucketBatch.ts +322 -270
- package/src/storage/implementation/MongoBucketBatchShared.ts +11 -0
- package/src/storage/implementation/MongoChecksums.ts +54 -75
- package/src/storage/implementation/MongoCompactor.ts +411 -412
- package/src/storage/implementation/MongoParameterCompactor.ts +52 -26
- package/src/storage/implementation/MongoPersistedSyncRules.ts +76 -0
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +19 -10
- package/src/storage/implementation/MongoStorageProvider.ts +1 -1
- package/src/storage/implementation/MongoSyncBucketStorage.ts +206 -466
- package/src/storage/implementation/MongoSyncRulesLock.ts +14 -16
- package/src/storage/implementation/MongoWriteCheckpointAPI.ts +7 -5
- package/src/storage/implementation/OperationBatch.ts +3 -2
- package/src/storage/implementation/common/BucketDataDoc.ts +37 -0
- package/src/storage/implementation/common/MongoSyncBucketStorageContext.ts +15 -0
- package/src/storage/implementation/common/PersistedBatch.ts +364 -0
- package/src/storage/implementation/common/SingleBucketStore.ts +63 -0
- package/src/storage/implementation/common/SourceRecordStore.ts +49 -0
- package/src/storage/implementation/common/VersionedPowerSyncMongoBase.ts +80 -0
- package/src/storage/implementation/createMongoSyncBucketStorage.ts +25 -0
- package/src/storage/implementation/db.ts +115 -8
- package/src/storage/implementation/models.ts +88 -28
- package/src/storage/implementation/v1/MongoBucketBatchV1.ts +32 -0
- package/src/storage/implementation/v1/MongoChecksumsV1.ts +75 -0
- package/src/storage/implementation/v1/MongoCompactorV1.ts +93 -0
- package/src/storage/implementation/v1/MongoParameterCompactorV1.ts +26 -0
- package/src/storage/implementation/v1/MongoSyncBucketStorageV1.ts +432 -0
- package/src/storage/implementation/v1/PersistedBatchV1.ts +230 -0
- package/src/storage/implementation/v1/SingleBucketStoreV1.ts +74 -0
- package/src/storage/implementation/v1/SourceRecordStoreV1.ts +156 -0
- package/src/storage/implementation/v1/VersionedPowerSyncMongoV1.ts +28 -0
- package/src/storage/implementation/v1/models.ts +84 -0
- package/src/storage/implementation/v3/MongoBucketBatchV3.ts +44 -0
- package/src/storage/implementation/v3/MongoChecksumsV3.ts +120 -0
- package/src/storage/implementation/v3/MongoCompactorV3.ts +107 -0
- package/src/storage/implementation/v3/MongoParameterCompactorV3.ts +24 -0
- package/src/storage/implementation/v3/MongoParameterLookupV3.ts +12 -0
- package/src/storage/implementation/v3/MongoSyncBucketStorageV3.ts +545 -0
- package/src/storage/implementation/v3/PersistedBatchV3.ts +318 -0
- package/src/storage/implementation/v3/SingleBucketStoreV3.ts +68 -0
- package/src/storage/implementation/v3/SourceRecordStoreV3.ts +226 -0
- package/src/storage/implementation/v3/VersionedPowerSyncMongoV3.ts +112 -0
- package/src/storage/implementation/v3/models.ts +96 -0
- package/src/storage/storage-index.ts +8 -5
- package/src/utils/test-utils.ts +15 -12
- package/src/utils/util.ts +53 -9
- package/test/src/__snapshots__/storage.test.ts.snap +201 -0
- package/test/src/__snapshots__/storage_compacting.test.ts.snap +17 -0
- package/test/src/__snapshots__/storage_sync.test.ts.snap +1393 -16
- package/test/src/connection-report-storage.test.ts +3 -3
- package/test/src/setup.ts +1 -1
- package/test/src/storage.test.ts +10 -8
- package/test/src/storage_compacting.test.ts +146 -46
- package/test/src/storage_sync.test.ts +404 -56
- package/test/src/util.ts +3 -3
- package/test/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/storage/implementation/PersistedBatch.d.ts +0 -64
- package/dist/storage/implementation/PersistedBatch.js +0 -323
- package/dist/storage/implementation/PersistedBatch.js.map +0 -1
- package/src/storage/implementation/PersistedBatch.ts +0 -401
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
2
2
|
import { POWERSYNC_VERSION, storage } from '@powersync/service-core';
|
|
3
|
+
import { DO_NOT_LOG } from '@powersync/lib-services-framework';
|
|
4
|
+
import { VersionedPowerSyncMongoV1 } from './v1/VersionedPowerSyncMongoV1.js';
|
|
5
|
+
import { VersionedPowerSyncMongoV3 } from './v3/VersionedPowerSyncMongoV3.js';
|
|
3
6
|
export class PowerSyncMongo {
|
|
7
|
+
[DO_NOT_LOG] = true;
|
|
4
8
|
current_data;
|
|
5
9
|
bucket_data;
|
|
6
10
|
bucket_parameters;
|
|
@@ -36,15 +40,90 @@ export class PowerSyncMongo {
|
|
|
36
40
|
this.checkpoint_events = this.db.collection('checkpoint_events');
|
|
37
41
|
this.connection_report_events = this.db.collection('connection_report_events');
|
|
38
42
|
}
|
|
43
|
+
versioned(storageConfig) {
|
|
44
|
+
if (storageConfig.incrementalReprocessing) {
|
|
45
|
+
return new VersionedPowerSyncMongoV3(this, storageConfig);
|
|
46
|
+
}
|
|
47
|
+
return new VersionedPowerSyncMongoV1(this, storageConfig);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Not safe for user-provided prefix - only for hardcoded values.
|
|
51
|
+
*/
|
|
52
|
+
async listBucketDataCollectionsV3(groupId) {
|
|
53
|
+
const prefix = groupId == null ? 'bucket_data_' : `bucket_data_${groupId}_`;
|
|
54
|
+
const collections = await this.db.listCollections({ name: new RegExp(`^${prefix}`) }, { nameOnly: true }).toArray();
|
|
55
|
+
return collections
|
|
56
|
+
.filter((collection) => collection.name.startsWith(prefix))
|
|
57
|
+
.map((collection) => this.db.collection(collection.name));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Not safe for user-provided prefix - only for hardcoded values.
|
|
61
|
+
*/
|
|
62
|
+
async collectionsByPrefix(prefix) {
|
|
63
|
+
const collections = await this.db.listCollections({ name: new RegExp(`^${prefix}`) }, { nameOnly: true }).toArray();
|
|
64
|
+
return collections
|
|
65
|
+
.filter((collection) => collection.name.startsWith(prefix))
|
|
66
|
+
.map((collection) => this.db.collection(collection.name));
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* List all parameter index collections across all replication streams.
|
|
70
|
+
*
|
|
71
|
+
* Primarily used to clear the db.
|
|
72
|
+
*/
|
|
73
|
+
async listAllParameterIndexCollectionsV3() {
|
|
74
|
+
return this.collectionsByPrefix(`parameter_index_`);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* List all parameter index collections across all replication streams.
|
|
78
|
+
*
|
|
79
|
+
* Primarily used to clear the db.
|
|
80
|
+
*/
|
|
81
|
+
async listAllSourceRecordCollectionsV3() {
|
|
82
|
+
return this.collectionsByPrefix(`source_records_`);
|
|
83
|
+
}
|
|
84
|
+
async listAllBucketStateCollectionsV3() {
|
|
85
|
+
return this.collectionsByPrefix(`bucket_state_`);
|
|
86
|
+
}
|
|
87
|
+
sourceRecordsCollectionName(replicationStreamId, sourceTableId) {
|
|
88
|
+
return `source_records_${replicationStreamId}_${sourceTableId.toHexString()}`;
|
|
89
|
+
}
|
|
90
|
+
sourceTableCollectionName(replicationStreamId) {
|
|
91
|
+
return `source_table_${replicationStreamId}`;
|
|
92
|
+
}
|
|
93
|
+
async listSourceTableCollections(replicationStreamId) {
|
|
94
|
+
const filter = replicationStreamId == null
|
|
95
|
+
? { name: new RegExp('^source_table_') }
|
|
96
|
+
: { name: this.sourceTableCollectionName(replicationStreamId) };
|
|
97
|
+
const prefix = replicationStreamId == null ? 'source_table_' : this.sourceTableCollectionName(replicationStreamId);
|
|
98
|
+
const collections = await this.db.listCollections(filter, { nameOnly: true }).toArray();
|
|
99
|
+
return collections
|
|
100
|
+
.filter((collection) => collection.name.startsWith(prefix))
|
|
101
|
+
.map((collection) => this.db.collection(collection.name));
|
|
102
|
+
}
|
|
39
103
|
/**
|
|
40
104
|
* Clear all collections.
|
|
41
105
|
*/
|
|
42
106
|
async clear() {
|
|
43
107
|
await this.current_data.deleteMany({});
|
|
108
|
+
for (const collection of await this.listAllSourceRecordCollectionsV3()) {
|
|
109
|
+
await collection.drop();
|
|
110
|
+
}
|
|
44
111
|
await this.bucket_data.deleteMany({});
|
|
112
|
+
for (const collection of await this.listBucketDataCollectionsV3()) {
|
|
113
|
+
await collection.drop();
|
|
114
|
+
}
|
|
45
115
|
await this.bucket_parameters.deleteMany({});
|
|
116
|
+
for (const collection of await this.listAllParameterIndexCollectionsV3()) {
|
|
117
|
+
await collection.drop();
|
|
118
|
+
}
|
|
119
|
+
for (const collection of await this.listAllBucketStateCollectionsV3()) {
|
|
120
|
+
await collection.drop();
|
|
121
|
+
}
|
|
46
122
|
await this.op_id_sequence.deleteMany({});
|
|
47
123
|
await this.sync_rules.deleteMany({});
|
|
124
|
+
for (const collection of await this.listSourceTableCollections()) {
|
|
125
|
+
await collection.drop();
|
|
126
|
+
}
|
|
48
127
|
await this.source_tables.deleteMany({});
|
|
49
128
|
await this.write_checkpoints.deleteMany({});
|
|
50
129
|
await this.instance.deleteOne({});
|
|
@@ -61,7 +140,7 @@ export class PowerSyncMongo {
|
|
|
61
140
|
await this.db.dropDatabase();
|
|
62
141
|
}
|
|
63
142
|
/**
|
|
64
|
-
* Call this after every checkpoint or
|
|
143
|
+
* Call this after every checkpoint or replication stream status update. Rather call too often than too rarely.
|
|
65
144
|
*
|
|
66
145
|
* This is used in a similar way to the Postgres NOTIFY functionality.
|
|
67
146
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { InternalOpId, SerializedSyncPlan, storage } from '@powersync/service-core';
|
|
2
2
|
import { SqliteJsonValue } from '@powersync/service-sync-rules';
|
|
3
|
-
import * as bson from 'bson';
|
|
4
3
|
import { event_types } from '@powersync/service-types';
|
|
4
|
+
import * as bson from 'bson';
|
|
5
|
+
import { ParameterIndexId } from './BucketDefinitionMapping.js';
|
|
6
|
+
import type { CurrentDataDocument, SourceTableDocumentV1 } from './v1/models.js';
|
|
7
|
+
import type { CurrentBucketV3, CurrentDataDocumentV3, RecordedLookupV3, SourceTableDocumentV3 } from './v3/models.js';
|
|
5
8
|
/**
|
|
6
9
|
* Replica id uniquely identifying a row on the source database.
|
|
7
10
|
*
|
|
@@ -18,33 +21,38 @@ export interface SourceKey {
|
|
|
18
21
|
/** source key */
|
|
19
22
|
k: ReplicaId;
|
|
20
23
|
}
|
|
24
|
+
export interface SourceTableKey {
|
|
25
|
+
/** source table id */
|
|
26
|
+
t: bson.ObjectId;
|
|
27
|
+
/** source key */
|
|
28
|
+
k: ReplicaId;
|
|
29
|
+
}
|
|
21
30
|
export interface BucketDataKey {
|
|
22
|
-
/** group_id */
|
|
23
|
-
g: number;
|
|
24
31
|
/** bucket name */
|
|
25
32
|
b: string;
|
|
26
33
|
/** op_id */
|
|
27
34
|
o: bigint;
|
|
28
35
|
}
|
|
29
|
-
export interface CurrentDataDocument {
|
|
30
|
-
_id: SourceKey;
|
|
31
|
-
data: bson.Binary;
|
|
32
|
-
buckets: CurrentBucket[];
|
|
33
|
-
lookups: bson.Binary[];
|
|
34
|
-
}
|
|
35
36
|
export interface CurrentBucket {
|
|
36
37
|
bucket: string;
|
|
37
38
|
table: string;
|
|
38
39
|
id: string;
|
|
39
40
|
}
|
|
40
|
-
export interface
|
|
41
|
+
export interface BucketParameterDocumentBase<TKey> {
|
|
41
42
|
_id: bigint;
|
|
42
|
-
key:
|
|
43
|
+
key: TKey;
|
|
43
44
|
lookup: bson.Binary;
|
|
44
45
|
bucket_parameters: Record<string, SqliteJsonValue>[];
|
|
45
46
|
}
|
|
46
|
-
export interface
|
|
47
|
-
|
|
47
|
+
export interface TaggedBucketParameterDocument extends BucketParameterDocumentBase<SourceKey | SourceTableKey> {
|
|
48
|
+
index: ParameterIndexId;
|
|
49
|
+
}
|
|
50
|
+
export declare function bucketParameterDocumentToTagged<TKey extends SourceKey | SourceTableKey>(document: BucketParameterDocumentBase<TKey>, index: ParameterIndexId): TaggedBucketParameterDocument;
|
|
51
|
+
export type OpType = 'PUT' | 'REMOVE' | 'MOVE' | 'CLEAR';
|
|
52
|
+
/**
|
|
53
|
+
* Common properties for storage V1, storage V3 and in-memory BucketDataDoc.
|
|
54
|
+
*/
|
|
55
|
+
export interface BucketDataProperties {
|
|
48
56
|
op: OpType;
|
|
49
57
|
source_table?: bson.ObjectId;
|
|
50
58
|
source_key?: ReplicaId;
|
|
@@ -54,10 +62,21 @@ export interface BucketDataDocument {
|
|
|
54
62
|
data: string | null;
|
|
55
63
|
target_op?: bigint | null;
|
|
56
64
|
}
|
|
57
|
-
export
|
|
65
|
+
export interface BucketDataDocumentBase extends BucketDataProperties {
|
|
66
|
+
_id: {
|
|
67
|
+
b: string;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Internal-only tag used for v1 bucket_data rows before they are converted to the v1 on-disk shape.
|
|
72
|
+
*/
|
|
73
|
+
export declare const LEGACY_BUCKET_DATA_DEFINITION_ID = "0";
|
|
74
|
+
/**
|
|
75
|
+
* Internal-only tag used for v1 bucket_parameters rows before they are converted to the v1 on-disk shape.
|
|
76
|
+
*/
|
|
77
|
+
export declare const LEGACY_BUCKET_PARAMETER_INDEX_ID = "0";
|
|
58
78
|
export interface SourceTableDocument {
|
|
59
79
|
_id: bson.ObjectId;
|
|
60
|
-
group_id: number;
|
|
61
80
|
connection_id: number;
|
|
62
81
|
relation_id: number | string | undefined;
|
|
63
82
|
schema_name: string;
|
|
@@ -79,20 +98,21 @@ export interface SourceTableDocumentSnapshotStatus {
|
|
|
79
98
|
/**
|
|
80
99
|
* Record the state of each bucket.
|
|
81
100
|
*
|
|
82
|
-
*
|
|
83
|
-
* In the future, this could be used to track operation counts, both for diagnostic purposes, and for
|
|
84
|
-
* determining when a compact and/or defragment could be beneficial.
|
|
101
|
+
* The primary use case is to track when buckets are updated, for efficient incremental sync.
|
|
85
102
|
*
|
|
86
|
-
*
|
|
103
|
+
* The secondary use case is to track operation counts to determine whether or not a bucket should be compacted.
|
|
104
|
+
*
|
|
105
|
+
* Note: For storage V1, there is no migration to populate this collection from existing data - it is only
|
|
87
106
|
* populated by new updates.
|
|
107
|
+
*
|
|
108
|
+
* For storage V3, these will always be present.
|
|
88
109
|
*/
|
|
89
|
-
export interface
|
|
110
|
+
export interface BucketStateDocumentBase {
|
|
90
111
|
_id: {
|
|
91
|
-
g: number;
|
|
92
112
|
b: string;
|
|
93
113
|
};
|
|
94
114
|
/**
|
|
95
|
-
* Important: There is an unique index on
|
|
115
|
+
* Important: There is an unique index on last_op per logical stream.
|
|
96
116
|
* That means the last_op must match an actual op in the bucket, and not the commit checkpoint.
|
|
97
117
|
*/
|
|
98
118
|
last_op: bigint;
|
|
@@ -104,11 +124,11 @@ export interface BucketStateDocument {
|
|
|
104
124
|
op_id: InternalOpId;
|
|
105
125
|
count: number;
|
|
106
126
|
checksum: bigint;
|
|
107
|
-
bytes: number | null;
|
|
127
|
+
bytes: number | bigint | null;
|
|
108
128
|
};
|
|
109
129
|
estimate_since_compact?: {
|
|
110
130
|
count: number;
|
|
111
|
-
bytes: number;
|
|
131
|
+
bytes: number | bigint;
|
|
112
132
|
};
|
|
113
133
|
}
|
|
114
134
|
export interface IdSequenceDocument {
|
|
@@ -177,6 +197,19 @@ export interface SyncRuleDocument {
|
|
|
177
197
|
last_fatal_error_ts: Date | null;
|
|
178
198
|
content: string;
|
|
179
199
|
serialized_plan?: SerializedSyncPlan | null;
|
|
200
|
+
/**
|
|
201
|
+
* Required for V3+ storage.
|
|
202
|
+
*/
|
|
203
|
+
rule_mapping?: {
|
|
204
|
+
/**
|
|
205
|
+
* Map of uniqueName -> id, unique per replication stream.
|
|
206
|
+
*/
|
|
207
|
+
definitions: Record<string, string>;
|
|
208
|
+
/**
|
|
209
|
+
* Map of (lookupName, queryId) -> id, unique per replication stream.
|
|
210
|
+
*/
|
|
211
|
+
parameter_indexes: Record<string, string>;
|
|
212
|
+
};
|
|
180
213
|
lock?: {
|
|
181
214
|
id: string;
|
|
182
215
|
expires_at: Date;
|
|
@@ -191,8 +224,12 @@ export interface StorageConfig extends storage.StorageVersionConfig {
|
|
|
191
224
|
* a Long before summing.
|
|
192
225
|
*/
|
|
193
226
|
longChecksums: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Enables v3 MongoDB storage behavior used for incremental reprocessing.
|
|
229
|
+
*/
|
|
230
|
+
incrementalReprocessing: boolean;
|
|
194
231
|
}
|
|
195
|
-
export declare function getMongoStorageConfig(storageVersion: number): StorageConfig
|
|
232
|
+
export declare function getMongoStorageConfig(storageVersion: number): StorageConfig;
|
|
196
233
|
export interface CheckpointEventDocument {
|
|
197
234
|
_id: bson.ObjectId;
|
|
198
235
|
}
|
|
@@ -227,3 +264,7 @@ export interface InstanceDocument {
|
|
|
227
264
|
}
|
|
228
265
|
export interface ClientConnectionDocument extends event_types.ClientConnection {
|
|
229
266
|
}
|
|
267
|
+
export type CurrentDataDocumentId = CurrentDataDocument['_id'] | CurrentDataDocumentV3['_id'];
|
|
268
|
+
export type CommonCurrentBucket = CurrentBucket | CurrentBucketV3;
|
|
269
|
+
export type CommonCurrentLookup = bson.Binary | RecordedLookupV3;
|
|
270
|
+
export type CommonSourceTableDocument = SourceTableDocumentV1 | SourceTableDocumentV3;
|
|
@@ -1,10 +1,30 @@
|
|
|
1
|
+
import { ErrorCode, ServiceError } from '@powersync/lib-services-framework';
|
|
1
2
|
import { storage } from '@powersync/service-core';
|
|
3
|
+
export function bucketParameterDocumentToTagged(document, index) {
|
|
4
|
+
return {
|
|
5
|
+
...document,
|
|
6
|
+
index
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Internal-only tag used for v1 bucket_data rows before they are converted to the v1 on-disk shape.
|
|
11
|
+
*/
|
|
12
|
+
export const LEGACY_BUCKET_DATA_DEFINITION_ID = '0';
|
|
13
|
+
/**
|
|
14
|
+
* Internal-only tag used for v1 bucket_parameters rows before they are converted to the v1 on-disk shape.
|
|
15
|
+
*/
|
|
16
|
+
export const LEGACY_BUCKET_PARAMETER_INDEX_ID = '0';
|
|
2
17
|
const LONG_CHECKSUMS_STORAGE_VERSION = 2;
|
|
18
|
+
const INCREMENTAL_REPROCESSING_STORAGE_VERSION = storage.STORAGE_VERSION_3;
|
|
3
19
|
export function getMongoStorageConfig(storageVersion) {
|
|
4
20
|
const baseConfig = storage.STORAGE_VERSION_CONFIG[storageVersion];
|
|
5
21
|
if (baseConfig == null) {
|
|
6
|
-
|
|
22
|
+
throw new ServiceError(ErrorCode.PSYNC_S1005, `Unsupported storage version ${storageVersion}`);
|
|
7
23
|
}
|
|
8
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
...baseConfig,
|
|
26
|
+
longChecksums: storageVersion >= LONG_CHECKSUMS_STORAGE_VERSION,
|
|
27
|
+
incrementalReprocessing: storageVersion >= INCREMENTAL_REPROCESSING_STORAGE_VERSION
|
|
28
|
+
};
|
|
9
29
|
}
|
|
10
30
|
//# sourceMappingURL=models.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,OAAO,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAoC,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAyDpF,MAAM,UAAU,+BAA+B,CAC7C,QAA2C,EAC3C,KAAuB;IAEvB,OAAO;QACL,GAAG,QAAQ;QACX,KAAK;KACN,CAAC;AACJ,CAAC;AAsBD;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,CAAC;AA+KpD,MAAM,8BAA8B,GAAG,CAAC,CAAC;AACzC,MAAM,wCAAwC,GAAG,OAAO,CAAC,iBAAiB,CAAC;AAE3E,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,+BAA+B,cAAc,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,OAAO;QACL,GAAG,UAAU;QACb,aAAa,EAAE,cAAc,IAAI,8BAA8B;QAC/D,uBAAuB,EAAE,cAAc,IAAI,wCAAwC;KACpF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SourceTable } from '@powersync/service-core';
|
|
2
|
+
import { MongoBucketBatch, MongoBucketBatchOptions } from '../MongoBucketBatch.js';
|
|
3
|
+
import { PersistedBatch } from '../common/PersistedBatch.js';
|
|
4
|
+
import { SourceRecordStore } from '../common/SourceRecordStore.js';
|
|
5
|
+
import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
|
|
6
|
+
export declare class MongoBucketBatchV1 extends MongoBucketBatch {
|
|
7
|
+
readonly db: VersionedPowerSyncMongoV1;
|
|
8
|
+
private readonly store;
|
|
9
|
+
constructor(options: MongoBucketBatchOptions);
|
|
10
|
+
protected createPersistedBatch(writtenSize: number): PersistedBatch;
|
|
11
|
+
protected get sourceRecordStore(): SourceRecordStore;
|
|
12
|
+
protected cleanupDroppedSourceTables(_tables: SourceTable[]): Promise<void>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MongoBucketBatch } from '../MongoBucketBatch.js';
|
|
2
|
+
import { PersistedBatchV1 } from './PersistedBatchV1.js';
|
|
3
|
+
import { SourceRecordStoreV1 } from './SourceRecordStoreV1.js';
|
|
4
|
+
export class MongoBucketBatchV1 extends MongoBucketBatch {
|
|
5
|
+
store;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
super(options);
|
|
8
|
+
this.store = new SourceRecordStoreV1(this.db, this.group_id);
|
|
9
|
+
}
|
|
10
|
+
createPersistedBatch(writtenSize) {
|
|
11
|
+
return new PersistedBatchV1(this.db, this.group_id, this.mapping, writtenSize, {
|
|
12
|
+
logger: this.logger
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
get sourceRecordStore() {
|
|
16
|
+
return this.store;
|
|
17
|
+
}
|
|
18
|
+
async cleanupDroppedSourceTables(_tables) {
|
|
19
|
+
// No-op for V1: source records live in a shared collection.
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=MongoBucketBatchV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoBucketBatchV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoBucketBatchV1.ts"],"names":[],"mappings":"AACA,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,CAAC,CAAC;IAC/D,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,OAAsB;QAC/D,4DAA4D;IAC9D,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BucketChecksum, FetchPartialBucketChecksum, InternalOpId, PartialChecksumMap } from '@powersync/service-core';
|
|
2
|
+
import { FetchPartialBucketChecksumByBucket, MongoChecksums } from '../MongoChecksums.js';
|
|
3
|
+
import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
|
|
4
|
+
export declare class MongoChecksumsV1 extends MongoChecksums {
|
|
5
|
+
protected readonly db: VersionedPowerSyncMongoV1;
|
|
6
|
+
computePartialChecksumsDirectByBucket(batch: FetchPartialBucketChecksumByBucket[]): Promise<PartialChecksumMap>;
|
|
7
|
+
protected fetchPreStates(batch: FetchPartialBucketChecksum[]): Promise<Map<string, {
|
|
8
|
+
opId: InternalOpId;
|
|
9
|
+
checksum: BucketChecksum;
|
|
10
|
+
}>>;
|
|
11
|
+
protected computePartialChecksumsInternal(batch: FetchPartialBucketChecksum[]): Promise<PartialChecksumMap>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { bson } from '@powersync/service-core';
|
|
2
|
+
import { MongoChecksums } from '../MongoChecksums.js';
|
|
3
|
+
export class MongoChecksumsV1 extends MongoChecksums {
|
|
4
|
+
async computePartialChecksumsDirectByBucket(batch) {
|
|
5
|
+
return this.computePartialChecksumsForCollection(batch, this.db.bucketDataV1, (request) => ({
|
|
6
|
+
_id: {
|
|
7
|
+
$gt: {
|
|
8
|
+
g: this.group_id,
|
|
9
|
+
b: request.bucket,
|
|
10
|
+
o: request.start ?? new bson.MinKey()
|
|
11
|
+
},
|
|
12
|
+
$lte: {
|
|
13
|
+
g: this.group_id,
|
|
14
|
+
b: request.bucket,
|
|
15
|
+
o: request.end
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
async fetchPreStates(batch) {
|
|
21
|
+
const preFilters = batch
|
|
22
|
+
.filter((request) => request.start == null)
|
|
23
|
+
.map((request) => ({
|
|
24
|
+
_id: {
|
|
25
|
+
g: this.group_id,
|
|
26
|
+
b: request.bucket
|
|
27
|
+
},
|
|
28
|
+
'compacted_state.op_id': { $exists: true, $lte: request.end }
|
|
29
|
+
}));
|
|
30
|
+
const preStates = new Map();
|
|
31
|
+
if (preFilters.length == 0) {
|
|
32
|
+
return preStates;
|
|
33
|
+
}
|
|
34
|
+
const states = await this.db.bucketStateV1
|
|
35
|
+
.find({
|
|
36
|
+
$or: preFilters
|
|
37
|
+
})
|
|
38
|
+
.toArray();
|
|
39
|
+
for (const state of states) {
|
|
40
|
+
const compactedState = state.compacted_state;
|
|
41
|
+
preStates.set(state._id.b, {
|
|
42
|
+
opId: compactedState.op_id,
|
|
43
|
+
checksum: {
|
|
44
|
+
bucket: state._id.b,
|
|
45
|
+
checksum: Number(compactedState.checksum),
|
|
46
|
+
count: compactedState.count
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
return preStates;
|
|
51
|
+
}
|
|
52
|
+
async computePartialChecksumsInternal(batch) {
|
|
53
|
+
return this.computePartialChecksumsDirectByBucket(batch);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=MongoChecksumsV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoChecksumsV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoChecksumsV1.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EAKL,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAsC,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG1F,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAGlD,KAAK,CAAC,qCAAqC,CACzC,KAA2C;QAE3C,OAAO,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC1F,GAAG,EAAE;gBACH,GAAG,EAAE;oBACH,CAAC,EAAE,IAAI,CAAC,QAAQ;oBAChB,CAAC,EAAE,OAAO,CAAC,MAAM;oBACjB,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;iBACtC;gBACD,IAAI,EAAE;oBACJ,CAAC,EAAE,IAAI,CAAC,QAAQ;oBAChB,CAAC,EAAE,OAAO,CAAC,MAAM;oBACjB,CAAC,EAAE,OAAO,CAAC,GAAG;iBACf;aACF;SACF,CAAC,CAAC,CAAC;IACN,CAAC;IAES,KAAK,CAAC,cAAc,CAC5B,KAAmC;QAEnC,MAAM,UAAU,GAAG,KAAK;aACrB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;aAC1C,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACjB,GAAG,EAAE;gBACH,CAAC,EAAE,IAAI,CAAC,QAAQ;gBAChB,CAAC,EAAE,OAAO,CAAC,MAAM;aAClB;YACD,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE;SAC9D,CAAC,CAAC,CAAC;QAEN,MAAM,SAAS,GAAG,IAAI,GAAG,EAA4D,CAAC;QACtF,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa;aACvC,IAAI,CAAC;YACJ,GAAG,EAAE,UAAU;SAChB,CAAC;aACD,OAAO,EAAE,CAAC;QAEb,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,KAAK,CAAC,eAAgB,CAAC;YAC9C,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzB,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,QAAQ,EAAE;oBACR,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;oBACzC,KAAK,EAAE,cAAc,CAAC,KAAK;iBAC5B;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAES,KAAK,CAAC,+BAA+B,CAAC,KAAmC;QACjF,OAAO,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { storage } from '@powersync/service-core';
|
|
3
|
+
import { BucketDefinitionId } from '../BucketDefinitionMapping.js';
|
|
4
|
+
import { SingleBucketStore } from '../common/SingleBucketStore.js';
|
|
5
|
+
import { BucketStateDocumentBase } from '../models.js';
|
|
6
|
+
import { DirtyBucket, MongoCompactor } from '../MongoCompactor.js';
|
|
7
|
+
import type { MongoSyncBucketStorageV1 } from './MongoSyncBucketStorageV1.js';
|
|
8
|
+
import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
|
|
9
|
+
export declare class MongoCompactorV1 extends MongoCompactor {
|
|
10
|
+
protected readonly db: VersionedPowerSyncMongoV1;
|
|
11
|
+
protected readonly storage: MongoSyncBucketStorageV1;
|
|
12
|
+
dirtyBucketBatches(options: {
|
|
13
|
+
minBucketChanges: number;
|
|
14
|
+
minChangeRatio: number;
|
|
15
|
+
}): AsyncGenerator<DirtyBucket[]>;
|
|
16
|
+
dirtyBucketBatchForChecksums(options: {
|
|
17
|
+
minBucketChanges: number;
|
|
18
|
+
}): Promise<DirtyBucket[]>;
|
|
19
|
+
protected writeBucketStateUpdates(): Promise<void>;
|
|
20
|
+
protected computeChecksumsForBuckets(buckets: Pick<DirtyBucket, 'bucket' | 'definitionId'>[]): Promise<storage.PartialChecksumMap>;
|
|
21
|
+
protected bucketStateFilter(bucket: string, _definitionId: BucketDefinitionId | null): mongo.Filter<BucketStateDocumentBase>;
|
|
22
|
+
protected getBucketDataContext(bucket: string, _definitionId: BucketDefinitionId | null): Promise<SingleBucketStore | null>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
3
|
+
import { LEGACY_BUCKET_DATA_DEFINITION_ID } from '../models.js';
|
|
4
|
+
import { MongoCompactor } from '../MongoCompactor.js';
|
|
5
|
+
import { SingleBucketStoreV1 } from './SingleBucketStoreV1.js';
|
|
6
|
+
export class MongoCompactorV1 extends MongoCompactor {
|
|
7
|
+
async *dirtyBucketBatches(options) {
|
|
8
|
+
if (options.minBucketChanges <= 0) {
|
|
9
|
+
throw new ReplicationAssertionError('minBucketChanges must be >= 1');
|
|
10
|
+
}
|
|
11
|
+
// Previously, we used an index on {_id.g: 1, estimate_since_compact.count: 1} to only scan buckets with changes.
|
|
12
|
+
// That works well if there are only a small number of dirty buckets, but it causes repeated rescans while data is
|
|
13
|
+
// still changing. We now iterate through all V1 bucket_state rows for the group and filter after projecting.
|
|
14
|
+
yield* this.dirtyBucketBatchesForCollection(this.db.bucketStateV1, { g: this.group_id, b: new mongo.MinKey() }, { g: this.group_id, b: new mongo.MaxKey() }, options, () => null);
|
|
15
|
+
}
|
|
16
|
+
async dirtyBucketBatchForChecksums(options) {
|
|
17
|
+
if (options.minBucketChanges <= 0) {
|
|
18
|
+
throw new ReplicationAssertionError('minBucketChanges must be >= 1');
|
|
19
|
+
}
|
|
20
|
+
// Unlike dirtyBucketBatches, this path is resumable after restart because populateChecksums resets
|
|
21
|
+
// estimate_since_compact as it progresses.
|
|
22
|
+
return this.dirtyBucketBatchForChecksumsForCollection(this.db.bucketStateV1, {
|
|
23
|
+
'_id.g': this.group_id,
|
|
24
|
+
'estimate_since_compact.count': { $gte: options.minBucketChanges }
|
|
25
|
+
}, () => null);
|
|
26
|
+
}
|
|
27
|
+
async writeBucketStateUpdates() {
|
|
28
|
+
await this.db.bucketStateV1.bulkWrite(this.bucketStateUpdates, { ordered: false });
|
|
29
|
+
}
|
|
30
|
+
async computeChecksumsForBuckets(buckets) {
|
|
31
|
+
return this.storage.checksums.computePartialChecksumsDirectByBucket(buckets.map(({ bucket }) => ({
|
|
32
|
+
bucket,
|
|
33
|
+
end: this.maxOpId
|
|
34
|
+
})));
|
|
35
|
+
}
|
|
36
|
+
bucketStateFilter(bucket, _definitionId) {
|
|
37
|
+
return {
|
|
38
|
+
_id: {
|
|
39
|
+
g: this.group_id,
|
|
40
|
+
b: bucket
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async getBucketDataContext(bucket, _definitionId) {
|
|
45
|
+
return new SingleBucketStoreV1(this.db, {
|
|
46
|
+
replicationStreamId: this.group_id,
|
|
47
|
+
definitionId: LEGACY_BUCKET_DATA_DEFINITION_ID,
|
|
48
|
+
bucket
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=MongoCompactorV1.js.map
|
|
@@ -0,0 +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,CACJ,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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
|
|
3
|
+
import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
|
|
4
|
+
export declare class MongoParameterCompactorV1 extends MongoParameterCompactor {
|
|
5
|
+
protected readonly db: VersionedPowerSyncMongoV1;
|
|
6
|
+
protected getCollections(): Promise<mongo.Collection<mongo.Document>[]>;
|
|
7
|
+
protected collectionFilter(): mongo.Document;
|
|
8
|
+
protected deleteFilter(doc: mongo.Document): mongo.Document;
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
|
|
2
|
+
export class MongoParameterCompactorV1 extends MongoParameterCompactor {
|
|
3
|
+
async getCollections() {
|
|
4
|
+
return [this.db.parameterIndexV1];
|
|
5
|
+
}
|
|
6
|
+
collectionFilter() {
|
|
7
|
+
return {
|
|
8
|
+
'key.g': this.group_id
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
deleteFilter(doc) {
|
|
12
|
+
return {
|
|
13
|
+
'key.g': doc.key.g,
|
|
14
|
+
lookup: doc.lookup,
|
|
15
|
+
_id: { $lte: doc._id },
|
|
16
|
+
key: doc.key
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=MongoParameterCompactorV1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoParameterCompactorV1.js","sourceRoot":"","sources":["../../../../src/storage/implementation/v1/MongoParameterCompactorV1.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,MAAM,OAAO,yBAA0B,SAAQ,uBAAuB;IAG1D,KAAK,CAAC,cAAc;QAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,gBAA+D,CAAC,CAAC;IACnF,CAAC;IAES,gBAAgB;QACxB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC;IACJ,CAAC;IAES,YAAY,CAAC,GAAmB;QACxC,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE;YACtB,GAAG,EAAE,GAAG,CAAC,GAAG;SACb,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { CheckpointChanges, GetCheckpointChangesOptions, InternalOpId, storage, utils } from '@powersync/service-core';
|
|
2
|
+
import { ScopedParameterLookup, SqliteJsonRow } from '@powersync/service-sync-rules';
|
|
3
|
+
import * as bson from 'bson';
|
|
4
|
+
import { MongoBucketStorage } from '../../MongoBucketStorage.js';
|
|
5
|
+
import { MongoSyncBucketStorageCheckpoint, MongoSyncBucketStorageContext } from '../common/MongoSyncBucketStorageContext.js';
|
|
6
|
+
import { CommonSourceTableDocument } from '../models.js';
|
|
7
|
+
import { MongoBucketBatchOptions } from '../MongoBucketBatch.js';
|
|
8
|
+
import { MongoChecksums } from '../MongoChecksums.js';
|
|
9
|
+
import { MongoCompactOptions, MongoCompactor } from '../MongoCompactor.js';
|
|
10
|
+
import { MongoParameterCompactor } from '../MongoParameterCompactor.js';
|
|
11
|
+
import { MongoPersistedSyncRulesContent } from '../MongoPersistedSyncRulesContent.js';
|
|
12
|
+
import { MongoSyncBucketStorage, MongoSyncBucketStorageOptions } from '../MongoSyncBucketStorage.js';
|
|
13
|
+
import { MongoChecksumsV1 } from './MongoChecksumsV1.js';
|
|
14
|
+
import { VersionedPowerSyncMongoV1 } from './VersionedPowerSyncMongoV1.js';
|
|
15
|
+
export declare class MongoSyncBucketStorageV1 extends MongoSyncBucketStorage {
|
|
16
|
+
readonly db: VersionedPowerSyncMongoV1;
|
|
17
|
+
readonly checksums: MongoChecksumsV1;
|
|
18
|
+
constructor(factory: MongoBucketStorage, group_id: number, sync_rules: MongoPersistedSyncRulesContent, slot_name: string, writeCheckpointMode: storage.WriteCheckpointMode | undefined, options: MongoSyncBucketStorageOptions);
|
|
19
|
+
protected initializeVersionStorage(): Promise<void>;
|
|
20
|
+
protected createWriterImpl(batchOptions: MongoBucketBatchOptions): storage.BucketStorageBatch;
|
|
21
|
+
protected createMongoChecksums(options: MongoSyncBucketStorageOptions): MongoChecksums;
|
|
22
|
+
createMongoCompactor(options: MongoCompactOptions): MongoCompactor;
|
|
23
|
+
protected createMongoParameterCompactor(checkpoint: InternalOpId, options: storage.CompactOptions): MongoParameterCompactor;
|
|
24
|
+
protected sourceTableBaseId(): Partial<CommonSourceTableDocument>;
|
|
25
|
+
protected augmentCreatedSourceTableDocument(_createDoc: CommonSourceTableDocument, _options: storage.ResolveTableOptions, _candidateSourceTable: storage.SourceTable): void;
|
|
26
|
+
protected initializeResolvedSourceRecords(_sourceTableId: bson.ObjectId): Promise<void>;
|
|
27
|
+
protected get versionContext(): MongoSyncBucketStorageContext<VersionedPowerSyncMongoV1>;
|
|
28
|
+
protected getParameterSetsImpl(checkpoint: MongoSyncBucketStorageCheckpoint, lookups: ScopedParameterLookup[], limit: number): Promise<SqliteJsonRow[]>;
|
|
29
|
+
protected getBucketDataBatchImpl(checkpoint: utils.InternalOpId, dataBuckets: storage.BucketDataRequest[], options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataChunk>;
|
|
30
|
+
protected clearBucketData(signal?: AbortSignal): Promise<void>;
|
|
31
|
+
protected clearParameterIndexes(signal?: AbortSignal): Promise<void>;
|
|
32
|
+
protected clearSourceRecords(signal?: AbortSignal): Promise<void>;
|
|
33
|
+
protected clearBucketState(signal?: AbortSignal): Promise<void>;
|
|
34
|
+
protected clearSourceTables(signal?: AbortSignal): Promise<void>;
|
|
35
|
+
protected getDataBucketChangesImpl(options: GetCheckpointChangesOptions): Promise<Pick<CheckpointChanges, 'updatedDataBuckets' | 'invalidateDataBuckets'>>;
|
|
36
|
+
protected getParameterBucketChangesImpl(options: GetCheckpointChangesOptions): Promise<Pick<CheckpointChanges, 'updatedParameterLookups' | 'invalidateParameterBuckets'>>;
|
|
37
|
+
}
|
|
38
|
+
export declare function getParameterSetsV1(ctx: MongoSyncBucketStorageContext<VersionedPowerSyncMongoV1>, checkpoint: MongoSyncBucketStorageCheckpoint, lookups: ScopedParameterLookup[], limit: number): Promise<SqliteJsonRow[]>;
|
|
39
|
+
export declare function getBucketDataBatchV1(ctx: MongoSyncBucketStorageContext<VersionedPowerSyncMongoV1>, checkpoint: utils.InternalOpId, dataBuckets: storage.BucketDataRequest[], options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataChunk>;
|
|
40
|
+
export declare function getDataBucketChangesV1(ctx: MongoSyncBucketStorageContext<VersionedPowerSyncMongoV1>, options: GetCheckpointChangesOptions): Promise<Pick<CheckpointChanges, 'updatedDataBuckets' | 'invalidateDataBuckets'>>;
|
|
41
|
+
export declare function getParameterBucketChangesV1(ctx: MongoSyncBucketStorageContext<VersionedPowerSyncMongoV1>, options: GetCheckpointChangesOptions): Promise<Pick<CheckpointChanges, 'updatedParameterLookups' | 'invalidateParameterBuckets'>>;
|