@powersync/service-module-mongodb-storage 0.0.0-dev-20260203155513 → 0.0.0-dev-20260223080959
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 +56 -10
- package/dist/migrations/db/migrations/1770213298299-storage-version.js +29 -0
- package/dist/migrations/db/migrations/1770213298299-storage-version.js.map +1 -0
- package/dist/storage/MongoBucketStorage.d.ts +7 -15
- package/dist/storage/MongoBucketStorage.js +12 -51
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/MongoReportStorage.d.ts +1 -11
- package/dist/storage/MongoReportStorage.js +1 -321
- package/dist/storage/MongoReportStorage.js.map +1 -1
- package/dist/storage/implementation/MongoChecksums.d.ts +5 -2
- package/dist/storage/implementation/MongoChecksums.js +7 -4
- package/dist/storage/implementation/MongoChecksums.js.map +1 -1
- package/dist/storage/implementation/MongoCompactor.d.ts +16 -1
- package/dist/storage/implementation/MongoCompactor.js +80 -23
- package/dist/storage/implementation/MongoCompactor.js.map +1 -1
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +2 -12
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +23 -24
- package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
- package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +5 -2
- package/dist/storage/implementation/MongoSyncBucketStorage.js +42 -40
- package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/implementation/db.d.ts +0 -10
- package/dist/storage/implementation/db.js +0 -30
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +11 -0
- package/dist/storage/implementation/models.js +9 -1
- package/dist/storage/implementation/models.js.map +1 -1
- package/dist/storage/storage-index.d.ts +0 -1
- package/dist/storage/storage-index.js +0 -1
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/utils/test-utils.d.ts +3 -4
- package/dist/utils/test-utils.js +2 -2
- package/dist/utils/test-utils.js.map +1 -1
- package/dist/utils/util.d.ts +0 -7
- package/dist/utils/util.js +3 -27
- package/dist/utils/util.js.map +1 -1
- package/package.json +7 -7
- package/src/migrations/db/migrations/1770213298299-storage-version.ts +44 -0
- package/src/storage/MongoBucketStorage.ts +20 -59
- package/src/storage/MongoReportStorage.ts +4 -369
- package/src/storage/implementation/MongoChecksums.ts +14 -6
- package/src/storage/implementation/MongoCompactor.ts +94 -25
- package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +25 -32
- package/src/storage/implementation/MongoSyncBucketStorage.ts +60 -44
- package/src/storage/implementation/db.ts +0 -32
- package/src/storage/implementation/models.ts +23 -0
- package/src/storage/storage-index.ts +0 -1
- package/src/utils/test-utils.ts +3 -4
- package/src/utils/util.ts +3 -36
- package/test/src/__snapshots__/storage_sync.test.ts.snap +1116 -21
- package/test/src/compression.test.ts +17 -0
- package/test/src/connection-report-storage.test.ts +6 -2
- package/test/src/storage_compacting.test.ts +29 -22
- package/test/src/storage_sync.test.ts +27 -14
- package/test/src/util.ts +3 -0
- package/test/tsconfig.json +3 -7
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/migrations/db/migrations/1770037239303-sync-reporting.js +0 -44
- package/dist/migrations/db/migrations/1770037239303-sync-reporting.js.map +0 -1
- package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +0 -10
- package/dist/storage/implementation/MongoPersistedSyncRules.js +0 -17
- package/dist/storage/implementation/MongoPersistedSyncRules.js.map +0 -1
- package/src/migrations/db/migrations/1770037239303-sync-reporting.ts +0 -74
- package/src/storage/implementation/MongoPersistedSyncRules.ts +0 -20
- package/test/src/__snapshots__/storage.test.ts.snap +0 -25
- /package/dist/migrations/db/migrations/{1770037239303-sync-reporting.d.ts → 1770213298299-storage-version.d.ts} +0 -0
|
@@ -14,8 +14,6 @@ export class PowerSyncMongo {
|
|
|
14
14
|
bucket_state;
|
|
15
15
|
checkpoint_events;
|
|
16
16
|
connection_report_events;
|
|
17
|
-
sync_report_events;
|
|
18
|
-
bucket_report_events;
|
|
19
17
|
client;
|
|
20
18
|
db;
|
|
21
19
|
constructor(client, options) {
|
|
@@ -37,8 +35,6 @@ export class PowerSyncMongo {
|
|
|
37
35
|
this.bucket_state = this.db.collection('bucket_state');
|
|
38
36
|
this.checkpoint_events = this.db.collection('checkpoint_events');
|
|
39
37
|
this.connection_report_events = this.db.collection('connection_report_events');
|
|
40
|
-
this.sync_report_events = this.db.collection('sync_report_events');
|
|
41
|
-
this.bucket_report_events = this.db.collection('bucket_report_events');
|
|
42
38
|
}
|
|
43
39
|
/**
|
|
44
40
|
* Clear all collections.
|
|
@@ -114,32 +110,6 @@ export class PowerSyncMongo {
|
|
|
114
110
|
}
|
|
115
111
|
await this.db.createCollection('connection_report_events');
|
|
116
112
|
}
|
|
117
|
-
/**
|
|
118
|
-
* Only use in migrations and tests.
|
|
119
|
-
*/
|
|
120
|
-
async createSyncReportingCollection() {
|
|
121
|
-
const existingCollections = await this.db
|
|
122
|
-
.listCollections({ name: 'sync_report_events' }, { nameOnly: false })
|
|
123
|
-
.toArray();
|
|
124
|
-
const collection = existingCollections[0];
|
|
125
|
-
if (collection != null) {
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
await this.db.createCollection('sync_report_events');
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Only use in migrations and tests.
|
|
132
|
-
*/
|
|
133
|
-
async createBucketReportingCollection() {
|
|
134
|
-
const existingCollections = await this.db
|
|
135
|
-
.listCollections({ name: 'bucket_report_events' }, { nameOnly: false })
|
|
136
|
-
.toArray();
|
|
137
|
-
const collection = existingCollections[0];
|
|
138
|
-
if (collection != null) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
await this.db.createCollection('bucket_report_events');
|
|
142
|
-
}
|
|
143
113
|
/**
|
|
144
114
|
* Only use in migrations and tests.
|
|
145
115
|
*/
|
|
@@ -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;AAyBrE,MAAM,OAAO,cAAc;IAChB,YAAY,CAAwC;IACpD,WAAW,CAAuC;IAClD,iBAAiB,CAA4C;IAC7D,cAAc,CAAuC;IACrD,UAAU,CAAqC;IAC/C,aAAa,CAAwC;IACrD,wBAAwB,CAAkD;IAC1E,iBAAiB,CAA4C;IAC7D,QAAQ,CAAqC;IAC7C,KAAK,CAAyC;IAC9C,YAAY,CAAwC;IACpD,iBAAiB,CAA4C;IAC7D,wBAAwB,CAA6C;
|
|
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;AAyBrE,MAAM,OAAO,cAAc;IAChB,YAAY,CAAwC;IACpD,WAAW,CAAuC;IAClD,iBAAiB,CAA4C;IAC7D,cAAc,CAAuC;IACrD,UAAU,CAAqC;IAC/C,aAAa,CAAwC;IACrD,wBAAwB,CAAkD;IAC1E,iBAAiB,CAA4C;IAC7D,QAAQ,CAAqC;IAC7C,KAAK,CAAyC;IAC9C,YAAY,CAAwC;IACpD,iBAAiB,CAA4C;IAC7D,wBAAwB,CAA6C;IAErE,MAAM,CAAoB;IAC1B,EAAE,CAAW;IAEtB,YAAY,MAAyB,EAAE,OAA+B;QACpE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE;YACtC,GAAG,OAAO,CAAC,iCAAiC;SAC7C,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,UAAU,CAAsB,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QACpD,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;QAC1E,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACjE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB;QACpB,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAS,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gCAAgC;QACpC,6FAA6F;QAC7F,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,EAAE;aACtC,eAAe,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;aACnE,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAChC,oEAAoE;gBACpE,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;YAClD,MAAM,EAAE,IAAI;YACZ,sFAAsF;YACtF,mFAAmF;YACnF,iFAAiF;YACjF,4BAA4B;YAC5B,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,gBAAgB;YACjC,GAAG,EAAE,EAAE,CAAC,0BAA0B;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mCAAmC;QACvC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,EAAE;aACtC,eAAe,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;aAC1E,OAAO,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,sBAAsB;QAC1B,gEAAgE;QAChE,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CACjC;YACE,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;SACX,EACD,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,CACzC,CAAC;IACJ,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,uBAAuB;QAC3B,gEAAgE;QAChE,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CACjC;YACE,OAAO,EAAE,CAAC;YACV,8BAA8B,EAAE,CAAC,CAAC;SACnC,EACD,EAAE,IAAI,EAAE,aAAa,EAAE,CACxB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,MAA0B,EAAE,OAA0C;IACzG,OAAO,IAAI,cAAc,CACvB,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE;QAClC,gBAAgB,EAAE,iBAAiB;QACnC,GAAG,OAAO;KACX,CAAC,EACF,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -180,7 +180,18 @@ export interface SyncRuleDocument {
|
|
|
180
180
|
id: string;
|
|
181
181
|
expires_at: Date;
|
|
182
182
|
} | null;
|
|
183
|
+
storage_version?: number;
|
|
183
184
|
}
|
|
185
|
+
export interface StorageConfig extends storage.StorageVersionConfig {
|
|
186
|
+
/**
|
|
187
|
+
* When true, bucket_data.checksum is guaranteed to be persisted as a Long.
|
|
188
|
+
*
|
|
189
|
+
* When false, it could also have been persisted as an Int32 or Double, in which case it must be converted to
|
|
190
|
+
* a Long before summing.
|
|
191
|
+
*/
|
|
192
|
+
longChecksums: boolean;
|
|
193
|
+
}
|
|
194
|
+
export declare function getMongoStorageConfig(storageVersion: number): StorageConfig | undefined;
|
|
184
195
|
export interface CheckpointEventDocument {
|
|
185
196
|
_id: bson.ObjectId;
|
|
186
197
|
}
|
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { storage } from '@powersync/service-core';
|
|
2
|
+
const LONG_CHECKSUMS_STORAGE_VERSION = 2;
|
|
3
|
+
export function getMongoStorageConfig(storageVersion) {
|
|
4
|
+
const baseConfig = storage.STORAGE_VERSION_CONFIG[storageVersion];
|
|
5
|
+
if (baseConfig == null) {
|
|
6
|
+
return undefined;
|
|
7
|
+
}
|
|
8
|
+
return { ...baseConfig, longChecksums: storageVersion >= LONG_CHECKSUMS_STORAGE_VERSION };
|
|
9
|
+
}
|
|
2
10
|
//# sourceMappingURL=models.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,OAAO,EAAE,MAAM,yBAAyB,CAAC;AA4NhE,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,GAAG,UAAU,EAAE,aAAa,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC;AAC5F,CAAC"}
|
|
@@ -2,7 +2,6 @@ export * from './implementation/db.js';
|
|
|
2
2
|
export * from './implementation/models.js';
|
|
3
3
|
export * from './implementation/MongoBucketBatch.js';
|
|
4
4
|
export * from './implementation/MongoIdSequence.js';
|
|
5
|
-
export * from './implementation/MongoPersistedSyncRules.js';
|
|
6
5
|
export * from './implementation/MongoPersistedSyncRulesContent.js';
|
|
7
6
|
export * from './implementation/MongoStorageProvider.js';
|
|
8
7
|
export * from './implementation/MongoSyncBucketStorage.js';
|
|
@@ -2,7 +2,6 @@ export * from './implementation/db.js';
|
|
|
2
2
|
export * from './implementation/models.js';
|
|
3
3
|
export * from './implementation/MongoBucketBatch.js';
|
|
4
4
|
export * from './implementation/MongoIdSequence.js';
|
|
5
|
-
export * from './implementation/MongoPersistedSyncRules.js';
|
|
6
5
|
export * from './implementation/MongoPersistedSyncRulesContent.js';
|
|
7
6
|
export * from './implementation/MongoStorageProvider.js';
|
|
8
7
|
export * from './implementation/MongoSyncBucketStorage.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,
|
|
1
|
+
{"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oDAAoD,CAAC;AACnE,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { PowerSyncMongo } from '../storage/implementation/db.js';
|
|
2
1
|
import { TestStorageOptions } from '@powersync/service-core';
|
|
2
|
+
import { MongoBucketStorage, MongoBucketStorageOptions } from '../storage/MongoBucketStorage.js';
|
|
3
3
|
import { MongoReportStorage } from '../storage/MongoReportStorage.js';
|
|
4
|
-
import {
|
|
5
|
-
import { MongoSyncBucketStorageOptions } from '../storage/implementation/MongoSyncBucketStorage.js';
|
|
4
|
+
import { PowerSyncMongo } from '../storage/implementation/db.js';
|
|
6
5
|
export type MongoTestStorageOptions = {
|
|
7
6
|
url: string;
|
|
8
7
|
isCI: boolean;
|
|
9
|
-
internalOptions?:
|
|
8
|
+
internalOptions?: MongoBucketStorageOptions;
|
|
10
9
|
};
|
|
11
10
|
export declare function mongoTestStorageFactoryGenerator(factoryOptions: MongoTestStorageOptions): (options?: TestStorageOptions) => Promise<MongoBucketStorage>;
|
|
12
11
|
export declare function mongoTestReportStorageFactoryGenerator(factoryOptions: MongoTestStorageOptions): (options?: TestStorageOptions) => Promise<MongoReportStorage>;
|
package/dist/utils/test-utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { PowerSyncMongo } from '../storage/implementation/db.js';
|
|
3
|
-
import { MongoReportStorage } from '../storage/MongoReportStorage.js';
|
|
4
2
|
import { MongoBucketStorage } from '../storage/MongoBucketStorage.js';
|
|
3
|
+
import { MongoReportStorage } from '../storage/MongoReportStorage.js';
|
|
4
|
+
import { PowerSyncMongo } from '../storage/implementation/db.js';
|
|
5
5
|
export function mongoTestStorageFactoryGenerator(factoryOptions) {
|
|
6
6
|
return async (options) => {
|
|
7
7
|
const db = connectMongoForTests(factoryOptions.url, factoryOptions.isCI);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAA6B,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQjE,MAAM,UAAU,gCAAgC,CAAC,cAAuC;IACtF,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzE,8EAA8E;QAC9E,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC5F,MAAM,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QACpD,CAAC;QAED,8EAA8E;QAC9E,MAAM,EAAE,CAAC,gCAAgC,EAAE,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACnG,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,cAAuC;IAC5F,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,EAAE,CAAC,mCAAmC,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,EAAE;IACjE,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACxC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACvC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACtC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;KAChD,CAAC,CAAC;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
|
package/dist/utils/util.d.ts
CHANGED
|
@@ -29,10 +29,3 @@ export declare const createPaginatedConnectionQuery: <T extends mongo.Document>(
|
|
|
29
29
|
cursor: any;
|
|
30
30
|
more: boolean;
|
|
31
31
|
}>;
|
|
32
|
-
export declare const createPaginatedSyncCheckpointQuery: <T extends mongo.Document>(query: mongo.Filter<T>, collection: mongo.Collection<T>, limit: number, cursor?: string) => Promise<{
|
|
33
|
-
items: mongo.WithId<T>[];
|
|
34
|
-
count: number;
|
|
35
|
-
/** Setting the cursor to the connected at date of the last item in the list */
|
|
36
|
-
cursor: any;
|
|
37
|
-
more: boolean;
|
|
38
|
-
}>;
|
package/dist/utils/util.js
CHANGED
|
@@ -127,6 +127,9 @@ export const createPaginatedConnectionQuery = async (query, collection, limit, c
|
|
|
127
127
|
});
|
|
128
128
|
const items = await findCursor.limit(limit).toArray();
|
|
129
129
|
const count = items.length;
|
|
130
|
+
/** The returned total has been defaulted to 0 due to the overhead using documentCount from the mogo driver.
|
|
131
|
+
* cursor.count has been deprecated.
|
|
132
|
+
* */
|
|
130
133
|
return {
|
|
131
134
|
items,
|
|
132
135
|
count,
|
|
@@ -135,31 +138,4 @@ export const createPaginatedConnectionQuery = async (query, collection, limit, c
|
|
|
135
138
|
more: !(count !== limit)
|
|
136
139
|
};
|
|
137
140
|
};
|
|
138
|
-
export const createPaginatedSyncCheckpointQuery = async (query, collection, limit, cursor) => {
|
|
139
|
-
const createQuery = (cursor) => {
|
|
140
|
-
if (!cursor) {
|
|
141
|
-
return query;
|
|
142
|
-
}
|
|
143
|
-
const date = { $lt: new Date(cursor), $gte: query.date.$gte };
|
|
144
|
-
return {
|
|
145
|
-
...query,
|
|
146
|
-
...date
|
|
147
|
-
};
|
|
148
|
-
};
|
|
149
|
-
const findCursor = collection.find(createQuery(cursor), {
|
|
150
|
-
sort: {
|
|
151
|
-
/** We are sorting by date at date descending to match cursor Postgres implementation */
|
|
152
|
-
date: -1
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
const items = await findCursor.limit(limit).toArray();
|
|
156
|
-
const count = items.length;
|
|
157
|
-
return {
|
|
158
|
-
items,
|
|
159
|
-
count,
|
|
160
|
-
/** Setting the cursor to the connected at date of the last item in the list */
|
|
161
|
-
cursor: count === limit ? items[items.length - 1].date.toISOString() : undefined,
|
|
162
|
-
more: !(count !== limit)
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
141
|
//# sourceMappingURL=util.js.map
|
package/dist/utils/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,MAAM,UAAU,cAAc,CAAI,MAAkB,EAAE,IAAiB;IACrE,IAAI,MAAM,GAAG;QACX,IAAI,EAAE;YACJ,GAAG,MAAM;SACH;QACR,GAAG,EAAE;YACH,GAAG,MAAM;SACH;KACT,CAAC;IAEF,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,aAAqB;IACpE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,GAAG,MAAM,GAAG,aAAa,IAAI,WAAW,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAI,MAA+B;IACtE,IAAI,CAAC;QACH,IAAI,IAAS,CAAC;QACd,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,2CAA2C;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACtC,yCAAyC;QACzC,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;YACnC,0CAA0C;YAC1C,wEAAwE;YACxE,uEAAuE;YACvE,oCAAoC;YACpC,EAAE;YACF,4EAA4E;YAC5E,2DAA2D;YAC3D,gCAAgC;YAChC,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,iDAAiD;QACjD,uIAAuI;QACvI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAuB;IAChD,IAAI,GAAG,CAAC,EAAE,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1C,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,WAAW,EAAE,GAAG,CAAC,KAAK;YACtB,SAAS,EAAE,GAAG,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,YAAa,EAAE,GAAG,CAAC,UAAW,CAAC;YAC7D,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,cAAc;QAEd,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;SAC/B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAoB,EAAE,EAAqB;IAC3E,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QACvB,mDAAmD;QACnD,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAA4B,EAAE,IAAoB;IACvF,gGAAgG;IAChG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,CAAC,CAAC;IACxE,CAAC;IACD,IAAK,OAAe,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACzC,OAAe,CAAC,YAAY,GAAG,IAAI,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,EACjD,KAAsB,EACtB,UAA+B,EAC/B,KAAa,EACb,MAAe,EACf,EAAE;IACF,MAAM,WAAW,GAAG,CAAC,MAAe,EAAE,EAAE;QACtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY;YACrC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE;YAC1D,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,KAAK;YACR,YAAY;SACM,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;QACtD,IAAI,EAAE;YACJ,6FAA6F;YAC7F,YAAY,EAAE,CAAC,CAAC;SACjB;KACF,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B;;SAEK;IACL,OAAO;QACL,KAAK;QACL,KAAK;QACL,+EAA+E;QAC/E,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QACxF,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;KACzB,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@powersync/service-module-mongodb-storage",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
4
|
"types": "dist/index.d.ts",
|
|
5
|
-
"version": "0.0.0-dev-
|
|
5
|
+
"version": "0.0.0-dev-20260223080959",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"license": "FSL-1.1-ALv2",
|
|
8
8
|
"type": "module",
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
"lru-cache": "^10.2.2",
|
|
28
28
|
"ts-codec": "^1.3.0",
|
|
29
29
|
"uuid": "^11.1.0",
|
|
30
|
-
"@powersync/lib-service-mongodb": "0.0.0-dev-
|
|
31
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
32
|
-
"@powersync/service-core": "0.0.0-dev-
|
|
30
|
+
"@powersync/lib-service-mongodb": "0.0.0-dev-20260223080959",
|
|
31
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20260223080959",
|
|
32
|
+
"@powersync/service-core": "0.0.0-dev-20260223080959",
|
|
33
33
|
"@powersync/service-jsonbig": "0.17.12",
|
|
34
|
-
"@powersync/service-sync-rules": "0.0.0-dev-
|
|
35
|
-
"@powersync/service-types": "0.0.0-dev-
|
|
34
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20260223080959",
|
|
35
|
+
"@powersync/service-types": "0.0.0-dev-20260223080959"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
38
|
+
"@powersync/service-core-tests": "0.0.0-dev-20260223080959"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsc -b",
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { migrations, storage as core_storage } from '@powersync/service-core';
|
|
2
|
+
import * as mongo_storage from '../../../storage/storage-index.js';
|
|
3
|
+
import { MongoStorageConfig } from '../../../types/types.js';
|
|
4
|
+
|
|
5
|
+
export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
6
|
+
const {
|
|
7
|
+
service_context: { configuration }
|
|
8
|
+
} = context;
|
|
9
|
+
const db = mongo_storage.createPowerSyncMongo(configuration.storage as MongoStorageConfig);
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
await db.sync_rules.updateMany(
|
|
13
|
+
{ storage_version: { $exists: false } },
|
|
14
|
+
{ $set: { storage_version: core_storage.LEGACY_STORAGE_VERSION } }
|
|
15
|
+
);
|
|
16
|
+
} finally {
|
|
17
|
+
await db.client.close();
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const down: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
22
|
+
const {
|
|
23
|
+
service_context: { configuration }
|
|
24
|
+
} = context;
|
|
25
|
+
|
|
26
|
+
const db = mongo_storage.createPowerSyncMongo(configuration.storage as MongoStorageConfig);
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const newRules = await db.sync_rules
|
|
30
|
+
.find({ storage_version: { $gt: core_storage.LEGACY_STORAGE_VERSION } })
|
|
31
|
+
.toArray();
|
|
32
|
+
if (newRules.length > 0) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Cannot revert migration due to newer storage versions in use: ${newRules.map((r) => `${r._id}: v${r.storage_version}`).join(', ')}`
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
await db.sync_rules.updateMany(
|
|
38
|
+
{ storage_version: core_storage.LEGACY_STORAGE_VERSION },
|
|
39
|
+
{ $unset: { storage_version: 1 } }
|
|
40
|
+
);
|
|
41
|
+
} finally {
|
|
42
|
+
await db.client.close();
|
|
43
|
+
}
|
|
44
|
+
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { SqlSyncRules } from '@powersync/service-sync-rules';
|
|
2
|
-
|
|
3
1
|
import { GetIntanceOptions, storage } from '@powersync/service-core';
|
|
4
2
|
|
|
5
|
-
import {
|
|
3
|
+
import { ErrorCode, ServiceError } from '@powersync/lib-services-framework';
|
|
6
4
|
import { v4 as uuid } from 'uuid';
|
|
7
5
|
|
|
8
6
|
import * as lib_mongo from '@powersync/lib-service-mongodb';
|
|
@@ -11,13 +9,15 @@ import { mongo } from '@powersync/lib-service-mongodb';
|
|
|
11
9
|
import { PowerSyncMongo } from './implementation/db.js';
|
|
12
10
|
import { SyncRuleDocument } from './implementation/models.js';
|
|
13
11
|
import { MongoPersistedSyncRulesContent } from './implementation/MongoPersistedSyncRulesContent.js';
|
|
14
|
-
import { MongoSyncBucketStorage
|
|
12
|
+
import { MongoSyncBucketStorage } from './implementation/MongoSyncBucketStorage.js';
|
|
15
13
|
import { generateSlotName } from '../utils/util.js';
|
|
14
|
+
import { MongoChecksumOptions } from './implementation/MongoChecksums.js';
|
|
15
|
+
|
|
16
|
+
export interface MongoBucketStorageOptions {
|
|
17
|
+
checksumOptions?: Omit<MongoChecksumOptions, 'storageConfig'>;
|
|
18
|
+
}
|
|
16
19
|
|
|
17
|
-
export class MongoBucketStorage
|
|
18
|
-
extends BaseObserver<storage.BucketStorageFactoryListener>
|
|
19
|
-
implements storage.BucketStorageFactory
|
|
20
|
-
{
|
|
20
|
+
export class MongoBucketStorage extends storage.BucketStorageFactory {
|
|
21
21
|
private readonly client: mongo.MongoClient;
|
|
22
22
|
private readonly session: mongo.ClientSession;
|
|
23
23
|
// TODO: This is still Postgres specific and needs to be reworked
|
|
@@ -32,7 +32,7 @@ export class MongoBucketStorage
|
|
|
32
32
|
options: {
|
|
33
33
|
slot_name_prefix: string;
|
|
34
34
|
},
|
|
35
|
-
private internalOptions?:
|
|
35
|
+
private internalOptions?: MongoBucketStorageOptions
|
|
36
36
|
) {
|
|
37
37
|
super();
|
|
38
38
|
this.client = db.client;
|
|
@@ -50,10 +50,15 @@ export class MongoBucketStorage
|
|
|
50
50
|
if ((typeof id as any) == 'bigint') {
|
|
51
51
|
id = Number(id);
|
|
52
52
|
}
|
|
53
|
-
const
|
|
53
|
+
const storageConfig = (syncRules as MongoPersistedSyncRulesContent).getStorageConfig();
|
|
54
|
+
const storage = new MongoSyncBucketStorage(this, id, syncRules, slot_name, undefined, {
|
|
55
|
+
...this.internalOptions,
|
|
56
|
+
storageConfig
|
|
57
|
+
});
|
|
54
58
|
if (!options?.skipLifecycleHooks) {
|
|
55
59
|
this.iterateListeners((cb) => cb.syncStorageCreated?.(storage));
|
|
56
60
|
}
|
|
61
|
+
|
|
57
62
|
storage.registerListener({
|
|
58
63
|
batchStarted: (batch) => {
|
|
59
64
|
batch.registerListener({
|
|
@@ -81,33 +86,13 @@ export class MongoBucketStorage
|
|
|
81
86
|
};
|
|
82
87
|
}
|
|
83
88
|
|
|
84
|
-
async configureSyncRules(options: storage.UpdateSyncRulesOptions) {
|
|
85
|
-
const next = await this.getNextSyncRulesContent();
|
|
86
|
-
const active = await this.getActiveSyncRulesContent();
|
|
87
|
-
|
|
88
|
-
if (next?.sync_rules_content == options.content) {
|
|
89
|
-
logger.info('Sync rules from configuration unchanged');
|
|
90
|
-
return { updated: false };
|
|
91
|
-
} else if (next == null && active?.sync_rules_content == options.content) {
|
|
92
|
-
logger.info('Sync rules from configuration unchanged');
|
|
93
|
-
return { updated: false };
|
|
94
|
-
} else {
|
|
95
|
-
logger.info('Sync rules updated from configuration');
|
|
96
|
-
const persisted_sync_rules = await this.updateSyncRules(options);
|
|
97
|
-
return { updated: true, persisted_sync_rules, lock: persisted_sync_rules.current_lock ?? undefined };
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
89
|
async restartReplication(sync_rules_group_id: number) {
|
|
102
90
|
const next = await this.getNextSyncRulesContent();
|
|
103
91
|
const active = await this.getActiveSyncRulesContent();
|
|
104
92
|
|
|
105
93
|
if (next != null && next.id == sync_rules_group_id) {
|
|
106
94
|
// We need to redo the "next" sync rules
|
|
107
|
-
await this.updateSyncRules(
|
|
108
|
-
content: next.sync_rules_content,
|
|
109
|
-
validate: false
|
|
110
|
-
});
|
|
95
|
+
await this.updateSyncRules(next.asUpdateOptions());
|
|
111
96
|
// Pro-actively stop replicating
|
|
112
97
|
await this.db.sync_rules.updateOne(
|
|
113
98
|
{
|
|
@@ -123,10 +108,7 @@ export class MongoBucketStorage
|
|
|
123
108
|
await this.db.notifyCheckpoint();
|
|
124
109
|
} else if (next == null && active?.id == sync_rules_group_id) {
|
|
125
110
|
// Slot removed for "active" sync rules, while there is no "next" one.
|
|
126
|
-
await this.updateSyncRules(
|
|
127
|
-
content: active.sync_rules_content,
|
|
128
|
-
validate: false
|
|
129
|
-
});
|
|
111
|
+
await this.updateSyncRules(active.asUpdateOptions());
|
|
130
112
|
|
|
131
113
|
// In this case we keep the old one as active for clients, so that that existing clients
|
|
132
114
|
// can still get the latest data while we replicate the new ones.
|
|
@@ -163,19 +145,6 @@ export class MongoBucketStorage
|
|
|
163
145
|
}
|
|
164
146
|
|
|
165
147
|
async updateSyncRules(options: storage.UpdateSyncRulesOptions): Promise<MongoPersistedSyncRulesContent> {
|
|
166
|
-
if (options.validate) {
|
|
167
|
-
// Parse and validate before applying any changes
|
|
168
|
-
SqlSyncRules.fromYaml(options.content, {
|
|
169
|
-
// No schema-based validation at this point
|
|
170
|
-
schema: undefined,
|
|
171
|
-
defaultSchema: 'not_applicable', // Not needed for validation
|
|
172
|
-
throwOnError: true
|
|
173
|
-
});
|
|
174
|
-
} else {
|
|
175
|
-
// We do not validate sync rules at this point.
|
|
176
|
-
// That is done when using the sync rules, so that the diagnostics API can report the errors.
|
|
177
|
-
}
|
|
178
|
-
|
|
179
148
|
let rules: MongoPersistedSyncRulesContent | undefined = undefined;
|
|
180
149
|
|
|
181
150
|
await this.session.withTransaction(async () => {
|
|
@@ -205,9 +174,11 @@ export class MongoBucketStorage
|
|
|
205
174
|
const id = Number(id_doc!.op_id);
|
|
206
175
|
const slot_name = generateSlotName(this.slot_name_prefix, id);
|
|
207
176
|
|
|
177
|
+
const storageVersion = options.storageVersion ?? storage.CURRENT_STORAGE_VERSION;
|
|
208
178
|
const doc: SyncRuleDocument = {
|
|
209
179
|
_id: id,
|
|
210
|
-
|
|
180
|
+
storage_version: storageVersion,
|
|
181
|
+
content: options.config.yaml,
|
|
211
182
|
last_checkpoint: null,
|
|
212
183
|
last_checkpoint_lsn: null,
|
|
213
184
|
no_checkpoint_before: null,
|
|
@@ -246,11 +217,6 @@ export class MongoBucketStorage
|
|
|
246
217
|
return new MongoPersistedSyncRulesContent(this.db, doc);
|
|
247
218
|
}
|
|
248
219
|
|
|
249
|
-
async getActiveSyncRules(options: storage.ParseSyncRulesOptions): Promise<storage.PersistedSyncRules | null> {
|
|
250
|
-
const content = await this.getActiveSyncRulesContent();
|
|
251
|
-
return content?.parsed(options) ?? null;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
220
|
async getNextSyncRulesContent(): Promise<MongoPersistedSyncRulesContent | null> {
|
|
255
221
|
const doc = await this.db.sync_rules.findOne(
|
|
256
222
|
{
|
|
@@ -265,11 +231,6 @@ export class MongoBucketStorage
|
|
|
265
231
|
return new MongoPersistedSyncRulesContent(this.db, doc);
|
|
266
232
|
}
|
|
267
233
|
|
|
268
|
-
async getNextSyncRules(options: storage.ParseSyncRulesOptions): Promise<storage.PersistedSyncRules | null> {
|
|
269
|
-
const content = await this.getNextSyncRulesContent();
|
|
270
|
-
return content?.parsed(options) ?? null;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
234
|
async getReplicatingSyncRules(): Promise<storage.PersistedSyncRulesContent[]> {
|
|
274
235
|
const docs = await this.db.sync_rules
|
|
275
236
|
.find({
|