@powersync/service-module-mongodb 0.0.0-dev-20250117095455 → 0.0.0-dev-20250214100224
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 +57 -9
- package/dist/api/MongoRouteAPIAdapter.d.ts +2 -1
- package/dist/api/MongoRouteAPIAdapter.js +39 -0
- package/dist/api/MongoRouteAPIAdapter.js.map +1 -1
- package/dist/common/MongoLSN.d.ts +31 -0
- package/dist/common/MongoLSN.js +47 -0
- package/dist/common/MongoLSN.js.map +1 -0
- package/dist/module/MongoModule.d.ts +3 -2
- package/dist/module/MongoModule.js +15 -6
- package/dist/module/MongoModule.js.map +1 -1
- package/dist/replication/ChangeStream.d.ts +3 -3
- package/dist/replication/ChangeStream.js +74 -30
- package/dist/replication/ChangeStream.js.map +1 -1
- package/dist/replication/ChangeStreamReplicationJob.js +5 -4
- package/dist/replication/ChangeStreamReplicationJob.js.map +1 -1
- package/dist/replication/ChangeStreamReplicator.d.ts +1 -0
- package/dist/replication/ChangeStreamReplicator.js +5 -0
- package/dist/replication/ChangeStreamReplicator.js.map +1 -1
- package/dist/replication/ConnectionManagerFactory.d.ts +1 -1
- package/dist/replication/ConnectionManagerFactory.js +2 -0
- package/dist/replication/ConnectionManagerFactory.js.map +1 -1
- package/dist/replication/MongoErrorRateLimiter.js +5 -7
- package/dist/replication/MongoErrorRateLimiter.js.map +1 -1
- package/dist/replication/MongoManager.js +10 -4
- package/dist/replication/MongoManager.js.map +1 -1
- package/dist/replication/MongoRelation.d.ts +0 -2
- package/dist/replication/MongoRelation.js +4 -15
- package/dist/replication/MongoRelation.js.map +1 -1
- package/dist/replication/replication-utils.js +49 -2
- package/dist/replication/replication-utils.js.map +1 -1
- package/package.json +9 -9
- package/src/api/MongoRouteAPIAdapter.ts +41 -1
- package/src/common/MongoLSN.ts +74 -0
- package/src/module/MongoModule.ts +24 -8
- package/src/replication/ChangeStream.ts +87 -37
- package/src/replication/ChangeStreamReplicationJob.ts +4 -4
- package/src/replication/ChangeStreamReplicator.ts +5 -0
- package/src/replication/ConnectionManagerFactory.ts +1 -1
- package/src/replication/MongoRelation.ts +4 -17
- package/src/replication/replication-utils.ts +77 -2
- package/test/src/change_stream_utils.ts +2 -2
- package/test/src/resume.test.ts +152 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,68 @@
|
|
|
1
1
|
# @powersync/service-module-mongodb
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250214100224
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 84d03b8: Fix write checkpoint race condition
|
|
8
|
+
- Updated dependencies [84d03b8]
|
|
9
|
+
- @powersync/service-core@0.0.0-dev-20250214100224
|
|
10
|
+
|
|
11
|
+
## 0.5.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- a4e387c: Added progress logs to initial snapshot
|
|
16
|
+
- d053e84: Added support for MongoDB resume tokens. This should help detect Change Stream error edge cases such as changing the replication connection details after replication has begun.
|
|
17
|
+
- 4b43cdb: Exit replication process when sync rules are not valid; configurable with a new `sync_rules.exit_on_error` option.
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [e26e434]
|
|
22
|
+
- Updated dependencies [4b43cdb]
|
|
23
|
+
- Updated dependencies [9a9e668]
|
|
24
|
+
- @powersync/service-sync-rules@0.23.4
|
|
25
|
+
- @powersync/service-core@0.18.0
|
|
26
|
+
- @powersync/service-types@0.8.0
|
|
27
|
+
- @powersync/lib-services-framework@0.5.1
|
|
28
|
+
- @powersync/lib-service-mongodb@0.4.1
|
|
29
|
+
|
|
30
|
+
## 0.4.2
|
|
31
|
+
|
|
32
|
+
### Patch Changes
|
|
33
|
+
|
|
34
|
+
- Updated dependencies [23fb49f]
|
|
35
|
+
- @powersync/service-core@0.17.0
|
|
36
|
+
|
|
37
|
+
## 0.4.1
|
|
38
|
+
|
|
39
|
+
### Patch Changes
|
|
40
|
+
|
|
41
|
+
- Updated dependencies [5043a82]
|
|
42
|
+
- @powersync/service-sync-rules@0.23.3
|
|
43
|
+
- @powersync/service-core@0.16.1
|
|
44
|
+
|
|
45
|
+
## 0.4.0
|
|
4
46
|
|
|
5
47
|
### Minor Changes
|
|
6
48
|
|
|
7
|
-
-
|
|
49
|
+
- 8675236: Allow limiting IP ranges of outgoing connections
|
|
8
50
|
|
|
9
51
|
### Patch Changes
|
|
10
52
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- Updated dependencies [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
53
|
+
- f049aa9: Improved error messages for "Test Connection".
|
|
54
|
+
- f049aa9: Introduce standard error codes
|
|
55
|
+
- Updated dependencies [f049aa9]
|
|
56
|
+
- Updated dependencies [8675236]
|
|
57
|
+
- Updated dependencies [f049aa9]
|
|
58
|
+
- Updated dependencies [8675236]
|
|
59
|
+
- Updated dependencies [8675236]
|
|
60
|
+
- Updated dependencies [f049aa9]
|
|
61
|
+
- @powersync/service-core@0.16.0
|
|
62
|
+
- @powersync/service-sync-rules@0.23.2
|
|
63
|
+
- @powersync/service-types@0.7.1
|
|
64
|
+
- @powersync/lib-services-framework@0.5.0
|
|
65
|
+
- @powersync/lib-service-mongodb@0.4.0
|
|
18
66
|
|
|
19
67
|
## 0.3.1
|
|
20
68
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { api, ParseSyncRulesOptions } from '@powersync/service-core';
|
|
2
|
+
import { api, ParseSyncRulesOptions, ReplicationHeadCallback } from '@powersync/service-core';
|
|
3
3
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
4
4
|
import * as service_types from '@powersync/service-types';
|
|
5
5
|
import * as types from '../types/types.js';
|
|
@@ -19,6 +19,7 @@ export declare class MongoRouteAPIAdapter implements api.RouteAPI {
|
|
|
19
19
|
getDebugTablesInfo(tablePatterns: sync_rules.TablePattern[], sqlSyncRules: sync_rules.SqlSyncRules): Promise<api.PatternResult[]>;
|
|
20
20
|
getReplicationLag(options: api.ReplicationLagOptions): Promise<number | undefined>;
|
|
21
21
|
getReplicationHead(): Promise<string>;
|
|
22
|
+
createReplicationHead<T>(callback: ReplicationHeadCallback<T>): Promise<T>;
|
|
22
23
|
getConnectionSchema(): Promise<service_types.DatabaseSchema[]>;
|
|
23
24
|
private getColumnsFromDocuments;
|
|
24
25
|
private getBsonType;
|
|
@@ -8,7 +8,14 @@ import { constructAfterRecord, createCheckpoint } from '../replication/MongoRela
|
|
|
8
8
|
import { CHECKPOINTS_COLLECTION } from '../replication/replication-utils.js';
|
|
9
9
|
import * as types from '../types/types.js';
|
|
10
10
|
import { escapeRegExp } from '../utils.js';
|
|
11
|
+
import { ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
12
|
+
import { MongoLSN } from '../common/MongoLSN.js';
|
|
11
13
|
export class MongoRouteAPIAdapter {
|
|
14
|
+
config;
|
|
15
|
+
client;
|
|
16
|
+
db;
|
|
17
|
+
connectionTag;
|
|
18
|
+
defaultSchema;
|
|
12
19
|
constructor(config) {
|
|
13
20
|
this.config = config;
|
|
14
21
|
const manager = new MongoManager(config);
|
|
@@ -168,6 +175,38 @@ export class MongoRouteAPIAdapter {
|
|
|
168
175
|
async getReplicationHead() {
|
|
169
176
|
return createCheckpoint(this.client, this.db);
|
|
170
177
|
}
|
|
178
|
+
async createReplicationHead(callback) {
|
|
179
|
+
const session = this.client.startSession();
|
|
180
|
+
try {
|
|
181
|
+
await this.db.command({ hello: 1 }, { session });
|
|
182
|
+
const head = session.clusterTime?.clusterTime;
|
|
183
|
+
if (head == null) {
|
|
184
|
+
throw new ServiceAssertionError(`clusterTime not available for write checkpoint`);
|
|
185
|
+
}
|
|
186
|
+
const r = await callback(new MongoLSN({ timestamp: head }).comparable);
|
|
187
|
+
// Trigger a change on the changestream.
|
|
188
|
+
await this.db.collection(CHECKPOINTS_COLLECTION).findOneAndUpdate({
|
|
189
|
+
_id: 'checkpoint'
|
|
190
|
+
}, {
|
|
191
|
+
$inc: { i: 1 }
|
|
192
|
+
}, {
|
|
193
|
+
upsert: true,
|
|
194
|
+
returnDocument: 'after',
|
|
195
|
+
session
|
|
196
|
+
});
|
|
197
|
+
const time = session.operationTime;
|
|
198
|
+
if (time == null) {
|
|
199
|
+
throw new ServiceAssertionError(`operationTime not available for write checkpoint`);
|
|
200
|
+
}
|
|
201
|
+
else if (time.lt(head)) {
|
|
202
|
+
throw new ServiceAssertionError(`operationTime must be > clusterTime`);
|
|
203
|
+
}
|
|
204
|
+
return r;
|
|
205
|
+
}
|
|
206
|
+
finally {
|
|
207
|
+
await session.endSession();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
171
210
|
async getConnectionSchema() {
|
|
172
211
|
const sampleSize = 50;
|
|
173
212
|
const databases = await this.db.admin().listDatabases({ nameOnly: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MongoRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MongoRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
export type MongoLSNSpecification = {
|
|
3
|
+
timestamp: mongo.Timestamp;
|
|
4
|
+
/**
|
|
5
|
+
* The ResumeToken type here is an alias for `unknown`.
|
|
6
|
+
* The docs mention the contents should be of the form:
|
|
7
|
+
* ```typescript
|
|
8
|
+
* {
|
|
9
|
+
* "_data" : <BinData|string>
|
|
10
|
+
* }
|
|
11
|
+
* ```
|
|
12
|
+
* We use BSON serialization to store the resume token.
|
|
13
|
+
*/
|
|
14
|
+
resume_token?: mongo.ResumeToken;
|
|
15
|
+
};
|
|
16
|
+
export declare const ZERO_LSN = "0000000000000000";
|
|
17
|
+
/**
|
|
18
|
+
* Represent a Logical Sequence Number (LSN) for MongoDB replication sources.
|
|
19
|
+
* This stores a combination of the cluster timestamp and optional Change Stream resume token.
|
|
20
|
+
*/
|
|
21
|
+
export declare class MongoLSN {
|
|
22
|
+
protected options: MongoLSNSpecification;
|
|
23
|
+
static fromSerialized(comparable: string): MongoLSN;
|
|
24
|
+
private static deserialize;
|
|
25
|
+
static ZERO: MongoLSN;
|
|
26
|
+
constructor(options: MongoLSNSpecification);
|
|
27
|
+
get timestamp(): mongo.BSON.Timestamp;
|
|
28
|
+
get resumeToken(): unknown;
|
|
29
|
+
get comparable(): string;
|
|
30
|
+
toString(): string;
|
|
31
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { storage } from '@powersync/service-core';
|
|
3
|
+
export const ZERO_LSN = '0000000000000000';
|
|
4
|
+
const DELIMINATOR = '|';
|
|
5
|
+
/**
|
|
6
|
+
* Represent a Logical Sequence Number (LSN) for MongoDB replication sources.
|
|
7
|
+
* This stores a combination of the cluster timestamp and optional Change Stream resume token.
|
|
8
|
+
*/
|
|
9
|
+
export class MongoLSN {
|
|
10
|
+
options;
|
|
11
|
+
static fromSerialized(comparable) {
|
|
12
|
+
return new MongoLSN(MongoLSN.deserialize(comparable));
|
|
13
|
+
}
|
|
14
|
+
static deserialize(comparable) {
|
|
15
|
+
const [timestampString, resumeString] = comparable.split(DELIMINATOR);
|
|
16
|
+
const a = parseInt(timestampString.substring(0, 8), 16);
|
|
17
|
+
const b = parseInt(timestampString.substring(8, 16), 16);
|
|
18
|
+
return {
|
|
19
|
+
timestamp: mongo.Timestamp.fromBits(b, a),
|
|
20
|
+
resume_token: resumeString ? storage.deserializeBson(Buffer.from(resumeString, 'base64')).resumeToken : null
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
static ZERO = MongoLSN.fromSerialized(ZERO_LSN);
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.options = options;
|
|
26
|
+
}
|
|
27
|
+
get timestamp() {
|
|
28
|
+
return this.options.timestamp;
|
|
29
|
+
}
|
|
30
|
+
get resumeToken() {
|
|
31
|
+
return this.options.resume_token;
|
|
32
|
+
}
|
|
33
|
+
get comparable() {
|
|
34
|
+
const { timestamp, resumeToken } = this;
|
|
35
|
+
const a = timestamp.high.toString(16).padStart(8, '0');
|
|
36
|
+
const b = timestamp.low.toString(16).padStart(8, '0');
|
|
37
|
+
const segments = [`${a}${b}`];
|
|
38
|
+
if (resumeToken) {
|
|
39
|
+
segments.push(storage.serializeBson({ resumeToken }).toString('base64'));
|
|
40
|
+
}
|
|
41
|
+
return segments.join(DELIMINATOR);
|
|
42
|
+
}
|
|
43
|
+
toString() {
|
|
44
|
+
return this.comparable;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=MongoLSN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MongoLSN.js","sourceRoot":"","sources":["../../src/common/MongoLSN.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAiBlD,MAAM,CAAC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AAE3C,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB;;;GAGG;AACH,MAAM,OAAO,QAAQ;IAmBG;IAlBtB,MAAM,CAAC,cAAc,CAAC,UAAkB;QACtC,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,UAAkB;QAC3C,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEtE,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzD,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;YACzC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI;SAC7G,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEhD,YAAsB,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAExD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAExC,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAEtD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,WAAW,EAAE,CAAC;YAChB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { api, replication, system, TearDownOptions } from '@powersync/service-core';
|
|
1
|
+
import { api, ConnectionTestResult, replication, system, TearDownOptions } from '@powersync/service-core';
|
|
2
2
|
import * as types from '../types/types.js';
|
|
3
3
|
export declare class MongoModule extends replication.ReplicationModule<types.MongoConnectionConfig> {
|
|
4
4
|
constructor();
|
|
@@ -9,5 +9,6 @@ export declare class MongoModule extends replication.ReplicationModule<types.Mon
|
|
|
9
9
|
*/
|
|
10
10
|
private resolveConfig;
|
|
11
11
|
teardown(options: TearDownOptions): Promise<void>;
|
|
12
|
-
testConnection(config: types.MongoConnectionConfig): Promise<
|
|
12
|
+
testConnection(config: types.MongoConnectionConfig): Promise<ConnectionTestResult>;
|
|
13
|
+
static testConnection(normalizedConfig: types.NormalizedMongoConnectionConfig): Promise<ConnectionTestResult>;
|
|
13
14
|
}
|
|
@@ -40,23 +40,32 @@ export class MongoModule extends replication.ReplicationModule {
|
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
42
|
async teardown(options) {
|
|
43
|
-
//
|
|
43
|
+
// No-op
|
|
44
44
|
}
|
|
45
45
|
async testConnection(config) {
|
|
46
46
|
this.decodeConfig(config);
|
|
47
|
-
const
|
|
48
|
-
|
|
47
|
+
const normalizedConfig = this.resolveConfig(this.decodedConfig);
|
|
48
|
+
return await MongoModule.testConnection(normalizedConfig);
|
|
49
|
+
}
|
|
50
|
+
static async testConnection(normalizedConfig) {
|
|
51
|
+
const connectionManager = new MongoManager(normalizedConfig, {
|
|
49
52
|
// Use short timeouts for testing connections.
|
|
50
53
|
// Must be < 30s, to ensure we get a proper timeout error.
|
|
51
|
-
socketTimeoutMS:
|
|
52
|
-
serverSelectionTimeoutMS:
|
|
54
|
+
socketTimeoutMS: 1_000,
|
|
55
|
+
serverSelectionTimeoutMS: 1_000
|
|
53
56
|
});
|
|
54
57
|
try {
|
|
55
|
-
|
|
58
|
+
await checkSourceConfiguration(connectionManager);
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
throw lib_mongo.mapConnectionError(e);
|
|
56
62
|
}
|
|
57
63
|
finally {
|
|
58
64
|
await connectionManager.end();
|
|
59
65
|
}
|
|
66
|
+
return {
|
|
67
|
+
connectionDescription: normalizedConfig.uri
|
|
68
|
+
};
|
|
60
69
|
}
|
|
61
70
|
}
|
|
62
71
|
//# sourceMappingURL=MongoModule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoModule.js","sourceRoot":"","sources":["../../src/module/MongoModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"MongoModule.js","sourceRoot":"","sources":["../../src/module/MongoModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAEL,kCAAkC,EAElC,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC;AAE3C,MAAM,OAAO,WAAY,SAAQ,WAAW,CAAC,iBAA8C;IACzF;QACE,KAAK,CAAC;YACJ,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS,CAAC,qBAAqB;YACrC,YAAY,EAAE,KAAK,CAAC,qBAAqB;SAC1C,CAAC,CAAC;IACL,CAAC;IAES,qBAAqB;QAC7B,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC,CAAC;IAC3E,CAAC;IAES,gBAAgB,CAAC,OAA8B;QACvD,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC;QACjE,MAAM,gBAAgB,GAAG,IAAI,kCAAkC,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClG,MAAM,iBAAiB,GAAG,IAAI,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;QAEzE,OAAO,IAAI,sBAAsB,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtD,gBAAgB,EAAE,gBAAgB;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,iBAAiB,EAAE,iBAAiB;YACpC,WAAW,EAAE,IAAI,qBAAqB,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAmC;QACvD,OAAO;YACL,GAAG,MAAM;YACT,GAAG,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,QAAQ;IACV,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAmC;QACtD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAc,CAAC,CAAC;QACjE,OAAO,MAAM,WAAW,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAuD;QACjF,MAAM,iBAAiB,GAAG,IAAI,YAAY,CAAC,gBAAgB,EAAE;YAC3D,8CAA8C;YAC9C,0DAA0D;YAC1D,eAAe,EAAE,KAAK;YACtB,wBAAwB,EAAE,KAAK;SAChC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,wBAAwB,CAAC,iBAAiB,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;gBAAS,CAAC;YACT,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC;QAChC,CAAC;QACD,OAAO;YACL,qBAAqB,EAAE,gBAAgB,CAAC,GAAG;SAC5C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { DatabaseConnectionError } from '@powersync/lib-services-framework';
|
|
2
3
|
import { SourceEntityDescriptor, SourceTable, storage } from '@powersync/service-core';
|
|
3
4
|
import { DatabaseInputRow, SqliteRow, SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
|
|
4
5
|
import { MongoManager } from './MongoManager.js';
|
|
5
|
-
export declare const ZERO_LSN = "0000000000000000";
|
|
6
6
|
export interface ChangeStreamOptions {
|
|
7
7
|
connections: MongoManager;
|
|
8
8
|
storage: storage.SyncRulesBucketStorage;
|
|
@@ -19,8 +19,8 @@ interface InitResult {
|
|
|
19
19
|
* * Some change stream documents do not have postImages.
|
|
20
20
|
* * startAfter/resumeToken is not valid anymore.
|
|
21
21
|
*/
|
|
22
|
-
export declare class ChangeStreamInvalidatedError extends
|
|
23
|
-
constructor(message: string);
|
|
22
|
+
export declare class ChangeStreamInvalidatedError extends DatabaseConnectionError {
|
|
23
|
+
constructor(message: string, cause: any);
|
|
24
24
|
}
|
|
25
25
|
export declare class ChangeStream {
|
|
26
26
|
sync_rules: SqlSyncRules;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
-
import { container, logger } from '@powersync/lib-services-framework';
|
|
2
|
+
import { container, DatabaseConnectionError, ErrorCode, logger, ReplicationAbortedError, ReplicationAssertionError, ServiceError } from '@powersync/lib-services-framework';
|
|
3
3
|
import { Metrics, SaveOperationTag } from '@powersync/service-core';
|
|
4
|
+
import { MongoLSN } from '../common/MongoLSN.js';
|
|
4
5
|
import { PostImagesOption } from '../types/types.js';
|
|
5
6
|
import { escapeRegExp } from '../utils.js';
|
|
6
|
-
import { constructAfterRecord, createCheckpoint,
|
|
7
|
+
import { constructAfterRecord, createCheckpoint, getMongoRelation } from './MongoRelation.js';
|
|
7
8
|
import { CHECKPOINTS_COLLECTION } from './replication-utils.js';
|
|
8
|
-
export const ZERO_LSN = '0000000000000000';
|
|
9
9
|
/**
|
|
10
10
|
* Thrown when the change stream is not valid anymore, and replication
|
|
11
11
|
* must be restarted.
|
|
@@ -14,15 +14,22 @@ export const ZERO_LSN = '0000000000000000';
|
|
|
14
14
|
* * Some change stream documents do not have postImages.
|
|
15
15
|
* * startAfter/resumeToken is not valid anymore.
|
|
16
16
|
*/
|
|
17
|
-
export class ChangeStreamInvalidatedError extends
|
|
18
|
-
constructor(message) {
|
|
19
|
-
super(message);
|
|
17
|
+
export class ChangeStreamInvalidatedError extends DatabaseConnectionError {
|
|
18
|
+
constructor(message, cause) {
|
|
19
|
+
super(ErrorCode.PSYNC_S1344, message, cause);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
export class ChangeStream {
|
|
23
|
+
sync_rules;
|
|
24
|
+
group_id;
|
|
25
|
+
connection_id = 1;
|
|
26
|
+
storage;
|
|
27
|
+
connections;
|
|
28
|
+
client;
|
|
29
|
+
defaultDb;
|
|
30
|
+
abort_signal;
|
|
31
|
+
relation_cache = new Map();
|
|
23
32
|
constructor(options) {
|
|
24
|
-
this.connection_id = 1;
|
|
25
|
-
this.relation_cache = new Map();
|
|
26
33
|
this.storage = options.storage;
|
|
27
34
|
this.group_id = options.storage.group_id;
|
|
28
35
|
this.connections = options.connections;
|
|
@@ -97,7 +104,7 @@ export class ChangeStream {
|
|
|
97
104
|
}
|
|
98
105
|
async estimatedCount(table) {
|
|
99
106
|
const db = this.client.db(table.schema);
|
|
100
|
-
const count = db.collection(table.table).estimatedDocumentCount();
|
|
107
|
+
const count = await db.collection(table.table).estimatedDocumentCount();
|
|
101
108
|
return `~${count}`;
|
|
102
109
|
}
|
|
103
110
|
/**
|
|
@@ -117,14 +124,14 @@ export class ChangeStream {
|
|
|
117
124
|
const hello = await this.defaultDb.command({ hello: 1 });
|
|
118
125
|
const snapshotTime = hello.lastWrite?.majorityOpTime?.ts;
|
|
119
126
|
if (hello.msg == 'isdbgrid') {
|
|
120
|
-
throw new
|
|
127
|
+
throw new ServiceError(ErrorCode.PSYNC_S1341, 'Sharded MongoDB Clusters are not supported yet (including MongoDB Serverless instances).');
|
|
121
128
|
}
|
|
122
129
|
else if (hello.setName == null) {
|
|
123
|
-
throw new
|
|
130
|
+
throw new ServiceError(ErrorCode.PSYNC_S1342, 'Standalone MongoDB instances are not supported - use a replicaset.');
|
|
124
131
|
}
|
|
125
132
|
else if (snapshotTime == null) {
|
|
126
133
|
// Not known where this would happen apart from the above cases
|
|
127
|
-
throw new
|
|
134
|
+
throw new ReplicationAssertionError('MongoDB lastWrite timestamp not found.');
|
|
128
135
|
}
|
|
129
136
|
// We previously used {snapshot: true} for the snapshot session.
|
|
130
137
|
// While it gives nice consistency guarantees, it fails when the
|
|
@@ -132,7 +139,7 @@ export class ChangeStream {
|
|
|
132
139
|
// expiring the snapshot.
|
|
133
140
|
const session = await this.client.startSession();
|
|
134
141
|
try {
|
|
135
|
-
await this.storage.startBatch({ zeroLSN:
|
|
142
|
+
await this.storage.startBatch({ zeroLSN: MongoLSN.ZERO.comparable, defaultSchema: this.defaultDb.databaseName, storeCurrentData: false }, async (batch) => {
|
|
136
143
|
// Start by resolving all tables.
|
|
137
144
|
// This checks postImage configuration, and that should fail as
|
|
138
145
|
// earlier as possible.
|
|
@@ -143,10 +150,10 @@ export class ChangeStream {
|
|
|
143
150
|
}
|
|
144
151
|
for (let table of allSourceTables) {
|
|
145
152
|
await this.snapshotTable(batch, table, session);
|
|
146
|
-
await batch.markSnapshotDone([table],
|
|
153
|
+
await batch.markSnapshotDone([table], MongoLSN.ZERO.comparable);
|
|
147
154
|
await touch();
|
|
148
155
|
}
|
|
149
|
-
const lsn =
|
|
156
|
+
const { comparable: lsn } = new MongoLSN({ timestamp: snapshotTime });
|
|
150
157
|
logger.info(`Snapshot commit at ${snapshotTime.inspect()} / ${lsn}`);
|
|
151
158
|
await batch.commit(lsn);
|
|
152
159
|
});
|
|
@@ -210,15 +217,15 @@ export class ChangeStream {
|
|
|
210
217
|
logger.info(`Replicating ${table.qualifiedName}`);
|
|
211
218
|
const estimatedCount = await this.estimatedCount(table);
|
|
212
219
|
let at = 0;
|
|
220
|
+
let lastLogIndex = 0;
|
|
213
221
|
const db = this.client.db(table.schema);
|
|
214
222
|
const collection = db.collection(table.table);
|
|
215
223
|
const query = collection.find({}, { session, readConcern: { level: 'majority' } });
|
|
216
224
|
const cursor = query.stream();
|
|
217
225
|
for await (let document of cursor) {
|
|
218
226
|
if (this.abort_signal.aborted) {
|
|
219
|
-
throw new
|
|
227
|
+
throw new ReplicationAbortedError(`Aborted initial replication`);
|
|
220
228
|
}
|
|
221
|
-
at += 1;
|
|
222
229
|
const record = constructAfterRecord(document);
|
|
223
230
|
// This auto-flushes when the batch reaches its size limit
|
|
224
231
|
await batch.save({
|
|
@@ -230,6 +237,10 @@ export class ChangeStream {
|
|
|
230
237
|
afterReplicaId: document._id
|
|
231
238
|
});
|
|
232
239
|
at += 1;
|
|
240
|
+
if (at - lastLogIndex >= 5000) {
|
|
241
|
+
logger.info(`[${this.group_id}] Replicating ${table.qualifiedName} ${at}/${estimatedCount}`);
|
|
242
|
+
lastLogIndex = at;
|
|
243
|
+
}
|
|
233
244
|
Metrics.getInstance().rows_replicated_total.add(1);
|
|
234
245
|
await touch();
|
|
235
246
|
}
|
|
@@ -269,7 +280,7 @@ export class ChangeStream {
|
|
|
269
280
|
logger.info(`Enabled postImages on ${db}.${collectionInfo.name}`);
|
|
270
281
|
}
|
|
271
282
|
else if (!enabled) {
|
|
272
|
-
throw new
|
|
283
|
+
throw new ServiceError(ErrorCode.PSYNC_S1343, `postImages not enabled on ${db}.${collectionInfo.name}`);
|
|
273
284
|
}
|
|
274
285
|
}
|
|
275
286
|
async handleRelation(batch, descriptor, options) {
|
|
@@ -282,7 +293,7 @@ export class ChangeStream {
|
|
|
282
293
|
}
|
|
283
294
|
const snapshot = options.snapshot;
|
|
284
295
|
if (!descriptor.objectId && typeof descriptor.objectId != 'string') {
|
|
285
|
-
throw new
|
|
296
|
+
throw new ReplicationAssertionError('MongoDB replication - objectId expected');
|
|
286
297
|
}
|
|
287
298
|
const result = await this.storage.resolveTable({
|
|
288
299
|
group_id: this.group_id,
|
|
@@ -355,7 +366,7 @@ export class ChangeStream {
|
|
|
355
366
|
});
|
|
356
367
|
}
|
|
357
368
|
else {
|
|
358
|
-
throw new
|
|
369
|
+
throw new ReplicationAssertionError(`Unsupported operation: ${change.operationType}`);
|
|
359
370
|
}
|
|
360
371
|
}
|
|
361
372
|
async replicate() {
|
|
@@ -385,7 +396,7 @@ export class ChangeStream {
|
|
|
385
396
|
if (e instanceof mongo.MongoServerError &&
|
|
386
397
|
e.codeName == 'NoMatchingDocument' &&
|
|
387
398
|
e.errmsg?.includes('post-image was not found')) {
|
|
388
|
-
throw new ChangeStreamInvalidatedError(e.errmsg);
|
|
399
|
+
throw new ChangeStreamInvalidatedError(e.errmsg, e);
|
|
389
400
|
}
|
|
390
401
|
throw e;
|
|
391
402
|
}
|
|
@@ -393,9 +404,11 @@ export class ChangeStream {
|
|
|
393
404
|
async streamChangesInternal() {
|
|
394
405
|
// Auto-activate as soon as initial replication is done
|
|
395
406
|
await this.storage.autoActivate();
|
|
396
|
-
await this.storage.startBatch({ zeroLSN:
|
|
397
|
-
const
|
|
398
|
-
const
|
|
407
|
+
await this.storage.startBatch({ zeroLSN: MongoLSN.ZERO.comparable, defaultSchema: this.defaultDb.databaseName, storeCurrentData: false }, async (batch) => {
|
|
408
|
+
const { lastCheckpointLsn } = batch;
|
|
409
|
+
const lastLsn = lastCheckpointLsn ? MongoLSN.fromSerialized(lastCheckpointLsn) : null;
|
|
410
|
+
const startAfter = lastLsn?.timestamp;
|
|
411
|
+
const resumeAfter = lastLsn?.resumeToken;
|
|
399
412
|
logger.info(`Resume streaming at ${startAfter?.inspect()} / ${lastLsn}`);
|
|
400
413
|
const filters = this.getSourceNamespaceFilters();
|
|
401
414
|
const pipeline = [
|
|
@@ -415,12 +428,20 @@ export class ChangeStream {
|
|
|
415
428
|
fullDocument = 'updateLookup';
|
|
416
429
|
}
|
|
417
430
|
const streamOptions = {
|
|
418
|
-
startAtOperationTime: startAfter,
|
|
419
431
|
showExpandedEvents: true,
|
|
420
432
|
useBigInt64: true,
|
|
421
433
|
maxAwaitTimeMS: 200,
|
|
422
434
|
fullDocument: fullDocument
|
|
423
435
|
};
|
|
436
|
+
/**
|
|
437
|
+
* Only one of these options can be supplied at a time.
|
|
438
|
+
*/
|
|
439
|
+
if (resumeAfter) {
|
|
440
|
+
streamOptions.resumeAfter = resumeAfter;
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
streamOptions.startAtOperationTime = startAfter;
|
|
444
|
+
}
|
|
424
445
|
let stream;
|
|
425
446
|
if (filters.multipleDatabases) {
|
|
426
447
|
// Requires readAnyDatabase@admin on Atlas
|
|
@@ -438,7 +459,7 @@ export class ChangeStream {
|
|
|
438
459
|
stream.close();
|
|
439
460
|
});
|
|
440
461
|
// Always start with a checkpoint.
|
|
441
|
-
// This helps us to clear
|
|
462
|
+
// This helps us to clear errors when restarting, even if there is
|
|
442
463
|
// no data to replicate.
|
|
443
464
|
let waitForCheckpointLsn = await createCheckpoint(this.client, this.defaultDb);
|
|
444
465
|
let splitDocument = null;
|
|
@@ -447,6 +468,10 @@ export class ChangeStream {
|
|
|
447
468
|
break;
|
|
448
469
|
}
|
|
449
470
|
const originalChangeDocument = await stream.tryNext();
|
|
471
|
+
// The stream was closed, we will only ever receive `null` from it
|
|
472
|
+
if (!originalChangeDocument && stream.closed) {
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
450
475
|
if (originalChangeDocument == null || this.abort_signal.aborted) {
|
|
451
476
|
continue;
|
|
452
477
|
}
|
|
@@ -477,14 +502,33 @@ export class ChangeStream {
|
|
|
477
502
|
}
|
|
478
503
|
else if (splitDocument != null) {
|
|
479
504
|
// We were waiting for fragments, but got a different event
|
|
480
|
-
throw new
|
|
505
|
+
throw new ReplicationAssertionError(`Incomplete splitEvent: ${JSON.stringify(splitDocument.splitEvent)}`);
|
|
481
506
|
}
|
|
482
|
-
// console.log('event', changeDocument);
|
|
483
507
|
if ((changeDocument.operationType == 'insert' ||
|
|
484
508
|
changeDocument.operationType == 'update' ||
|
|
485
|
-
changeDocument.operationType == 'replace'
|
|
509
|
+
changeDocument.operationType == 'replace' ||
|
|
510
|
+
changeDocument.operationType == 'drop') &&
|
|
486
511
|
changeDocument.ns.coll == CHECKPOINTS_COLLECTION) {
|
|
487
|
-
|
|
512
|
+
/**
|
|
513
|
+
* Dropping the database does not provide an `invalidate` event.
|
|
514
|
+
* We typically would receive `drop` events for the collection which we
|
|
515
|
+
* would process below.
|
|
516
|
+
*
|
|
517
|
+
* However we don't commit the LSN after collections are dropped.
|
|
518
|
+
* The prevents the `startAfter` or `resumeToken` from advancing past the drop events.
|
|
519
|
+
* The stream also closes after the drop events.
|
|
520
|
+
* This causes an infinite loop of processing the collection drop events.
|
|
521
|
+
*
|
|
522
|
+
* This check here invalidates the change stream if our `_checkpoints` collection
|
|
523
|
+
* is dropped. This allows for detecting when the DB is dropped.
|
|
524
|
+
*/
|
|
525
|
+
if (changeDocument.operationType == 'drop') {
|
|
526
|
+
throw new ChangeStreamInvalidatedError('Internal collections have been dropped', new Error('_checkpoints collection was dropped'));
|
|
527
|
+
}
|
|
528
|
+
const { comparable: lsn } = new MongoLSN({
|
|
529
|
+
timestamp: changeDocument.clusterTime,
|
|
530
|
+
resume_token: changeDocument._id
|
|
531
|
+
});
|
|
488
532
|
if (waitForCheckpointLsn != null && lsn >= waitForCheckpointLsn) {
|
|
489
533
|
waitForCheckpointLsn = null;
|
|
490
534
|
}
|