@powersync/service-module-mysql 0.1.7 → 0.1.9
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 +25 -0
- package/dist/replication/BinLogStream.js +41 -4
- package/dist/replication/BinLogStream.js.map +1 -1
- package/package.json +10 -7
- package/src/replication/BinLogStream.ts +48 -8
- package/src/replication/zongji/zongji.d.ts +10 -0
- package/test/src/BinLogStream.test.ts +11 -6
- package/test/src/BinlogStreamUtils.ts +12 -10
- package/test/src/env.ts +5 -1
- package/test/src/setup.ts +8 -2
- package/test/src/util.ts +10 -24
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# @powersync/service-module-mysql
|
|
2
2
|
|
|
3
|
+
## 0.1.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [9d9ff08]
|
|
8
|
+
- Updated dependencies [9d9ff08]
|
|
9
|
+
- Updated dependencies [9d9ff08]
|
|
10
|
+
- @powersync/service-core@0.15.0
|
|
11
|
+
- @powersync/lib-services-framework@0.4.0
|
|
12
|
+
|
|
13
|
+
## 0.1.8
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- e25263c: Added a heartbeat mechanism to the MySQL binlog listener replication connection to detect connection timeouts.
|
|
18
|
+
- 318f9f9: Resolved excessive memory consumption during MySQL initial replication.
|
|
19
|
+
- Updated dependencies [fea550f]
|
|
20
|
+
- Updated dependencies [fea550f]
|
|
21
|
+
- Updated dependencies [48320b5]
|
|
22
|
+
- Updated dependencies [fea550f]
|
|
23
|
+
- @powersync/service-core@0.14.0
|
|
24
|
+
- @powersync/lib-services-framework@0.3.0
|
|
25
|
+
- @powersync/service-sync-rules@0.23.1
|
|
26
|
+
- @powersync/service-types@0.7.0
|
|
27
|
+
|
|
3
28
|
## 0.1.7
|
|
4
29
|
|
|
5
30
|
### Patch Changes
|
|
@@ -2,9 +2,9 @@ import { logger } from '@powersync/lib-services-framework';
|
|
|
2
2
|
import async from 'async';
|
|
3
3
|
import { framework, getUuidReplicaIdentityBson, Metrics, storage } from '@powersync/service-core';
|
|
4
4
|
import * as common from '../common/common-index.js';
|
|
5
|
-
import * as zongji_utils from './zongji/zongji-utils.js';
|
|
6
5
|
import { isBinlogStillAvailable, ReplicatedGTID, toColumnDescriptors } from '../common/common-index.js';
|
|
7
6
|
import { createRandomServerId, escapeMysqlTableName } from '../utils/mysql-utils.js';
|
|
7
|
+
import * as zongji_utils from './zongji/zongji-utils.js';
|
|
8
8
|
export class BinlogConfigurationError extends Error {
|
|
9
9
|
constructor(message) {
|
|
10
10
|
super(message);
|
|
@@ -31,8 +31,19 @@ export class BinLogStream {
|
|
|
31
31
|
return this.connections.connectionTag;
|
|
32
32
|
}
|
|
33
33
|
get connectionId() {
|
|
34
|
+
const { connectionId } = this.connections;
|
|
34
35
|
// Default to 1 if not set
|
|
35
|
-
|
|
36
|
+
if (!connectionId) {
|
|
37
|
+
return 1;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* This is often `"default"` (string) which will parse to `NaN`
|
|
41
|
+
*/
|
|
42
|
+
const parsed = Number.parseInt(connectionId);
|
|
43
|
+
if (isNaN(parsed)) {
|
|
44
|
+
return 1;
|
|
45
|
+
}
|
|
46
|
+
return parsed;
|
|
36
47
|
}
|
|
37
48
|
get stopped() {
|
|
38
49
|
return this.abortSignal.aborted;
|
|
@@ -214,7 +225,10 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
214
225
|
// Map the columns and their types
|
|
215
226
|
columns = toColumnDescriptors(fields);
|
|
216
227
|
});
|
|
217
|
-
for await (let row of
|
|
228
|
+
for await (let row of stream) {
|
|
229
|
+
if (this.stopped) {
|
|
230
|
+
throw new Error('Abort signal received - initial replication interrupted.');
|
|
231
|
+
}
|
|
218
232
|
if (columns == null) {
|
|
219
233
|
throw new Error(`No 'fields' event emitted`);
|
|
220
234
|
}
|
|
@@ -366,10 +380,33 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
366
380
|
// Powersync is shutting down, don't start replicating
|
|
367
381
|
return;
|
|
368
382
|
}
|
|
383
|
+
// Set a heartbeat interval for the Zongji replication connection
|
|
384
|
+
// Zongji does not explicitly handle the heartbeat events - they are categorized as event:unknown
|
|
385
|
+
// The heartbeat events are enough to keep the connection alive for setTimeout to work on the socket.
|
|
386
|
+
await new Promise((resolve, reject) => {
|
|
387
|
+
zongji.connection.query(
|
|
388
|
+
// In nanoseconds, 10^9 = 1s
|
|
389
|
+
'set @master_heartbeat_period=28*1000000000', function (error, results, fields) {
|
|
390
|
+
if (error) {
|
|
391
|
+
reject(error);
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
resolve(results);
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
});
|
|
398
|
+
logger.info('Successfully set up replication connection heartbeat...');
|
|
399
|
+
// The _socket member is only set after a query is run on the connection, so we set the timeout after setting the heartbeat.
|
|
400
|
+
// The timeout here must be greater than the master_heartbeat_period.
|
|
401
|
+
const socket = zongji.connection._socket;
|
|
402
|
+
socket.setTimeout(60000, () => {
|
|
403
|
+
socket.destroy(new Error('Replication connection timeout.'));
|
|
404
|
+
});
|
|
369
405
|
logger.info(`Reading binlog from: ${binLogPositionState.filename}:${binLogPositionState.offset}`);
|
|
370
406
|
// Only listen for changes to tables in the sync rules
|
|
371
407
|
const includedTables = [...this.tableCache.values()].map((table) => table.table);
|
|
372
408
|
zongji.start({
|
|
409
|
+
// We ignore the unknown/heartbeat event since it currently serves no purpose other than to keep the connection alive
|
|
373
410
|
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows', 'xid', 'rotate', 'gtidlog'],
|
|
374
411
|
excludeEvents: [],
|
|
375
412
|
includeSchema: { [this.defaultSchema]: includedTables },
|
|
@@ -380,7 +417,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
380
417
|
// Forever young
|
|
381
418
|
await new Promise((resolve, reject) => {
|
|
382
419
|
zongji.on('error', (error) => {
|
|
383
|
-
logger.error('
|
|
420
|
+
logger.error('Binlog listener error:', error);
|
|
384
421
|
zongji.stop();
|
|
385
422
|
queue.kill();
|
|
386
423
|
reject(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinLogStream.js","sourceRoot":"","sources":["../../src/replication/BinLogStream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BinLogStream.js","sourceRoot":"","sources":["../../src/replication/BinLogStream.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@powersync/service-module-mysql",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
4
|
"types": "dist/index.d.ts",
|
|
5
|
-
"version": "0.1.
|
|
5
|
+
"version": "0.1.9",
|
|
6
6
|
"license": "FSL-1.1-Apache-2.0",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"type": "module",
|
|
@@ -26,19 +26,22 @@
|
|
|
26
26
|
"semver": "^7.5.4",
|
|
27
27
|
"async": "^3.2.4",
|
|
28
28
|
"mysql2": "^3.11.0",
|
|
29
|
-
"ts-codec": "^1.
|
|
29
|
+
"ts-codec": "^1.3.0",
|
|
30
30
|
"uri-js": "^4.4.1",
|
|
31
31
|
"uuid": "^9.0.1",
|
|
32
|
-
"@powersync/lib-services-framework": "0.
|
|
33
|
-
"@powersync/service-core": "0.
|
|
34
|
-
"@powersync/service-sync-rules": "0.23.
|
|
35
|
-
"@powersync/service-types": "0.
|
|
32
|
+
"@powersync/lib-services-framework": "0.4.0",
|
|
33
|
+
"@powersync/service-core": "0.15.0",
|
|
34
|
+
"@powersync/service-sync-rules": "0.23.1",
|
|
35
|
+
"@powersync/service-types": "0.7.0",
|
|
36
36
|
"@powersync/service-jsonbig": "0.17.10"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/semver": "^7.5.4",
|
|
40
40
|
"@types/async": "^3.2.24",
|
|
41
|
-
"@types/uuid": "^9.0.4"
|
|
41
|
+
"@types/uuid": "^9.0.4",
|
|
42
|
+
"@powersync/service-core-tests": "0.3.0",
|
|
43
|
+
"@powersync/service-module-mongodb-storage": "0.3.0",
|
|
44
|
+
"@powersync/service-module-postgres-storage": "0.1.0"
|
|
42
45
|
},
|
|
43
46
|
"scripts": {
|
|
44
47
|
"build": "tsc -b",
|
|
@@ -6,12 +6,12 @@ import { ColumnDescriptor, framework, getUuidReplicaIdentityBson, Metrics, stora
|
|
|
6
6
|
import mysql, { FieldPacket } from 'mysql2';
|
|
7
7
|
|
|
8
8
|
import { BinLogEvent, StartOptions, TableMapEntry } from '@powersync/mysql-zongji';
|
|
9
|
+
import mysqlPromise from 'mysql2/promise';
|
|
9
10
|
import * as common from '../common/common-index.js';
|
|
10
|
-
import * as zongji_utils from './zongji/zongji-utils.js';
|
|
11
|
-
import { MySQLConnectionManager } from './MySQLConnectionManager.js';
|
|
12
11
|
import { isBinlogStillAvailable, ReplicatedGTID, toColumnDescriptors } from '../common/common-index.js';
|
|
13
|
-
import mysqlPromise from 'mysql2/promise';
|
|
14
12
|
import { createRandomServerId, escapeMysqlTableName } from '../utils/mysql-utils.js';
|
|
13
|
+
import { MySQLConnectionManager } from './MySQLConnectionManager.js';
|
|
14
|
+
import * as zongji_utils from './zongji/zongji-utils.js';
|
|
15
15
|
|
|
16
16
|
export interface BinLogStreamOptions {
|
|
17
17
|
connections: MySQLConnectionManager;
|
|
@@ -75,8 +75,19 @@ export class BinLogStream {
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
get connectionId() {
|
|
78
|
+
const { connectionId } = this.connections;
|
|
78
79
|
// Default to 1 if not set
|
|
79
|
-
|
|
80
|
+
if (!connectionId) {
|
|
81
|
+
return 1;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* This is often `"default"` (string) which will parse to `NaN`
|
|
85
|
+
*/
|
|
86
|
+
const parsed = Number.parseInt(connectionId);
|
|
87
|
+
if (isNaN(parsed)) {
|
|
88
|
+
return 1;
|
|
89
|
+
}
|
|
90
|
+
return parsed;
|
|
80
91
|
}
|
|
81
92
|
|
|
82
93
|
get stopped() {
|
|
@@ -305,12 +316,16 @@ AND table_type = 'BASE TABLE';`,
|
|
|
305
316
|
columns = toColumnDescriptors(fields);
|
|
306
317
|
});
|
|
307
318
|
|
|
308
|
-
for await (let row of
|
|
319
|
+
for await (let row of stream) {
|
|
320
|
+
if (this.stopped) {
|
|
321
|
+
throw new Error('Abort signal received - initial replication interrupted.');
|
|
322
|
+
}
|
|
323
|
+
|
|
309
324
|
if (columns == null) {
|
|
310
325
|
throw new Error(`No 'fields' event emitted`);
|
|
311
326
|
}
|
|
312
|
-
const record = common.toSQLiteRow(row, columns!);
|
|
313
327
|
|
|
328
|
+
const record = common.toSQLiteRow(row, columns!);
|
|
314
329
|
await batch.save({
|
|
315
330
|
tag: storage.SaveOperationTag.INSERT,
|
|
316
331
|
sourceTable: table,
|
|
@@ -476,11 +491,36 @@ AND table_type = 'BASE TABLE';`,
|
|
|
476
491
|
return;
|
|
477
492
|
}
|
|
478
493
|
|
|
479
|
-
|
|
494
|
+
// Set a heartbeat interval for the Zongji replication connection
|
|
495
|
+
// Zongji does not explicitly handle the heartbeat events - they are categorized as event:unknown
|
|
496
|
+
// The heartbeat events are enough to keep the connection alive for setTimeout to work on the socket.
|
|
497
|
+
await new Promise((resolve, reject) => {
|
|
498
|
+
zongji.connection.query(
|
|
499
|
+
// In nanoseconds, 10^9 = 1s
|
|
500
|
+
'set @master_heartbeat_period=28*1000000000',
|
|
501
|
+
function (error: any, results: any, fields: any) {
|
|
502
|
+
if (error) {
|
|
503
|
+
reject(error);
|
|
504
|
+
} else {
|
|
505
|
+
resolve(results);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
);
|
|
509
|
+
});
|
|
510
|
+
logger.info('Successfully set up replication connection heartbeat...');
|
|
511
|
+
|
|
512
|
+
// The _socket member is only set after a query is run on the connection, so we set the timeout after setting the heartbeat.
|
|
513
|
+
// The timeout here must be greater than the master_heartbeat_period.
|
|
514
|
+
const socket = zongji.connection._socket!;
|
|
515
|
+
socket.setTimeout(60_000, () => {
|
|
516
|
+
socket.destroy(new Error('Replication connection timeout.'));
|
|
517
|
+
});
|
|
480
518
|
|
|
519
|
+
logger.info(`Reading binlog from: ${binLogPositionState.filename}:${binLogPositionState.offset}`);
|
|
481
520
|
// Only listen for changes to tables in the sync rules
|
|
482
521
|
const includedTables = [...this.tableCache.values()].map((table) => table.table);
|
|
483
522
|
zongji.start({
|
|
523
|
+
// We ignore the unknown/heartbeat event since it currently serves no purpose other than to keep the connection alive
|
|
484
524
|
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows', 'xid', 'rotate', 'gtidlog'],
|
|
485
525
|
excludeEvents: [],
|
|
486
526
|
includeSchema: { [this.defaultSchema]: includedTables },
|
|
@@ -492,7 +532,7 @@ AND table_type = 'BASE TABLE';`,
|
|
|
492
532
|
// Forever young
|
|
493
533
|
await new Promise<void>((resolve, reject) => {
|
|
494
534
|
zongji.on('error', (error) => {
|
|
495
|
-
logger.error('
|
|
535
|
+
logger.error('Binlog listener error:', error);
|
|
496
536
|
zongji.stop();
|
|
497
537
|
queue.kill();
|
|
498
538
|
reject(error);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
declare module '@powersync/mysql-zongji' {
|
|
2
|
+
import { Socket } from 'net';
|
|
3
|
+
|
|
2
4
|
export type ZongjiOptions = {
|
|
3
5
|
host: string;
|
|
4
6
|
user: string;
|
|
@@ -108,7 +110,15 @@ declare module '@powersync/mysql-zongji' {
|
|
|
108
110
|
|
|
109
111
|
export type BinLogEvent = BinLogRotationEvent | BinLogGTIDLogEvent | BinLogXidEvent | BinLogMutationEvent;
|
|
110
112
|
|
|
113
|
+
// @vlasky/mysql Connection
|
|
114
|
+
export interface MySQLConnection {
|
|
115
|
+
_socket?: Socket;
|
|
116
|
+
/** There are other forms of this method as well - this is the most basic one. */
|
|
117
|
+
query(sql: string, callback: (error: any, results: any, fields: any) => void): void;
|
|
118
|
+
}
|
|
119
|
+
|
|
111
120
|
export default class ZongJi {
|
|
121
|
+
connection: MySQLConnection;
|
|
112
122
|
constructor(options: ZongjiOptions);
|
|
113
123
|
|
|
114
124
|
start(options: StartOptions): void;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Metrics } from '@powersync/service-core';
|
|
1
|
+
import { Metrics, storage } from '@powersync/service-core';
|
|
2
|
+
import { putOp, removeOp } from '@powersync/service-core-tests';
|
|
4
3
|
import { v4 as uuid } from 'uuid';
|
|
5
4
|
import { describe, expect, test } from 'vitest';
|
|
6
5
|
import { BinlogStreamTestContext } from './BinlogStreamUtils.js';
|
|
6
|
+
import { env } from './env.js';
|
|
7
|
+
import { INITIALIZED_MONGO_STORAGE_FACTORY, INITIALIZED_POSTGRES_STORAGE_FACTORY } from './util.js';
|
|
7
8
|
|
|
8
9
|
const BASIC_SYNC_RULES = `
|
|
9
10
|
bucket_definitions:
|
|
@@ -12,11 +13,15 @@ bucket_definitions:
|
|
|
12
13
|
- SELECT id, description FROM "test_data"
|
|
13
14
|
`;
|
|
14
15
|
|
|
15
|
-
describe('Binlog stream - mongodb', { timeout: 20_000 }, function () {
|
|
16
|
-
defineBinlogStreamTests(
|
|
16
|
+
describe.skipIf(!env.TEST_MONGO_STORAGE)(' Binlog stream - mongodb', { timeout: 20_000 }, function () {
|
|
17
|
+
defineBinlogStreamTests(INITIALIZED_MONGO_STORAGE_FACTORY);
|
|
17
18
|
});
|
|
18
19
|
|
|
19
|
-
function
|
|
20
|
+
describe.skipIf(!env.TEST_POSTGRES_STORAGE)(' Binlog stream - postgres', { timeout: 20_000 }, function () {
|
|
21
|
+
defineBinlogStreamTests(INITIALIZED_POSTGRES_STORAGE_FACTORY);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
function defineBinlogStreamTests(factory: storage.TestStorageFactory) {
|
|
20
25
|
test('Replicate basic values', async () => {
|
|
21
26
|
await using context = await BinlogStreamTestContext.open(factory);
|
|
22
27
|
const { connectionManager } = context;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
import { readExecutedGtid } from '@module/common/read-executed-gtid.js';
|
|
2
|
+
import { BinLogStream, BinLogStreamOptions } from '@module/replication/BinLogStream.js';
|
|
3
|
+
import { MySQLConnectionManager } from '@module/replication/MySQLConnectionManager.js';
|
|
4
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
1
5
|
import {
|
|
2
6
|
ActiveCheckpoint,
|
|
3
7
|
BucketStorageFactory,
|
|
4
8
|
OpId,
|
|
5
9
|
OplogEntry,
|
|
10
|
+
storage,
|
|
6
11
|
SyncRulesBucketStorage
|
|
7
12
|
} from '@powersync/service-core';
|
|
8
|
-
import {
|
|
9
|
-
import { fromAsync } from '@core-tests/stream_utils.js';
|
|
10
|
-
import { BinLogStream, BinLogStreamOptions } from '@module/replication/BinLogStream.js';
|
|
11
|
-
import { MySQLConnectionManager } from '@module/replication/MySQLConnectionManager.js';
|
|
13
|
+
import { test_utils } from '@powersync/service-core-tests';
|
|
12
14
|
import mysqlPromise from 'mysql2/promise';
|
|
13
|
-
import {
|
|
14
|
-
import { logger } from '@powersync/lib-services-framework';
|
|
15
|
-
import { StorageFactory } from '@core-tests/util.js';
|
|
15
|
+
import { clearTestDb, TEST_CONNECTION_OPTIONS } from './util.js';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Tests operating on the binlog stream need to configure the stream and manage asynchronous
|
|
@@ -28,7 +28,7 @@ export class BinlogStreamTestContext {
|
|
|
28
28
|
public storage?: SyncRulesBucketStorage;
|
|
29
29
|
private replicationDone = false;
|
|
30
30
|
|
|
31
|
-
static async open(factory:
|
|
31
|
+
static async open(factory: storage.TestStorageFactory, options?: { doNotClear?: boolean }) {
|
|
32
32
|
const f = await factory({ doNotClear: options?.doNotClear });
|
|
33
33
|
const connectionManager = new MySQLConnectionManager(TEST_CONNECTION_OPTIONS, {});
|
|
34
34
|
|
|
@@ -49,6 +49,7 @@ export class BinlogStreamTestContext {
|
|
|
49
49
|
this.abortController.abort();
|
|
50
50
|
await this.streamPromise;
|
|
51
51
|
await this.connectionManager.end();
|
|
52
|
+
await this.factory[Symbol.asyncDispose]();
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
[Symbol.asyncDispose]() {
|
|
@@ -104,6 +105,7 @@ export class BinlogStreamTestContext {
|
|
|
104
105
|
|
|
105
106
|
async replicateSnapshot() {
|
|
106
107
|
await this.binlogStream.initReplication();
|
|
108
|
+
await this.storage!.autoActivate();
|
|
107
109
|
this.replicationDone = true;
|
|
108
110
|
}
|
|
109
111
|
|
|
@@ -132,14 +134,14 @@ export class BinlogStreamTestContext {
|
|
|
132
134
|
async getBucketsDataBatch(buckets: Record<string, string>, options?: { timeout?: number }) {
|
|
133
135
|
const checkpoint = await this.getCheckpoint(options);
|
|
134
136
|
const map = new Map<string, string>(Object.entries(buckets));
|
|
135
|
-
return fromAsync(this.storage!.getBucketDataBatch(checkpoint, map));
|
|
137
|
+
return test_utils.fromAsync(this.storage!.getBucketDataBatch(checkpoint, map));
|
|
136
138
|
}
|
|
137
139
|
|
|
138
140
|
async getBucketData(bucket: string, start = '0', options?: { timeout?: number }): Promise<OplogEntry[]> {
|
|
139
141
|
const checkpoint = await this.getCheckpoint(options);
|
|
140
142
|
const map = new Map<string, string>([[bucket, start]]);
|
|
141
143
|
const batch = this.storage!.getBucketDataBatch(checkpoint, map);
|
|
142
|
-
const batches = await fromAsync(batch);
|
|
144
|
+
const batches = await test_utils.fromAsync(batch);
|
|
143
145
|
return batches[0]?.batch.data ?? [];
|
|
144
146
|
}
|
|
145
147
|
}
|
package/test/src/env.ts
CHANGED
|
@@ -2,6 +2,10 @@ import { utils } from '@powersync/lib-services-framework';
|
|
|
2
2
|
|
|
3
3
|
export const env = utils.collectEnvironmentVariables({
|
|
4
4
|
MYSQL_TEST_URI: utils.type.string.default('mysql://root:mypassword@localhost:3306/mydatabase'),
|
|
5
|
+
MONGO_TEST_URL: utils.type.string.default('mongodb://localhost:27017/powersync_test'),
|
|
6
|
+
PG_STORAGE_TEST_URL: utils.type.string.default('postgres://postgres:postgres@localhost:5431/powersync_storage_test'),
|
|
5
7
|
CI: utils.type.boolean.default('false'),
|
|
6
|
-
SLOW_TESTS: utils.type.boolean.default('false')
|
|
8
|
+
SLOW_TESTS: utils.type.boolean.default('false'),
|
|
9
|
+
TEST_MONGO_STORAGE: utils.type.boolean.default('true'),
|
|
10
|
+
TEST_POSTGRES_STORAGE: utils.type.boolean.default('true')
|
|
7
11
|
});
|
package/test/src/setup.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { container } from '@powersync/lib-services-framework';
|
|
2
|
-
import {
|
|
2
|
+
import { test_utils } from '@powersync/service-core-tests';
|
|
3
|
+
import { beforeAll, beforeEach } from 'vitest';
|
|
3
4
|
|
|
4
|
-
beforeAll(() => {
|
|
5
|
+
beforeAll(async () => {
|
|
5
6
|
// Executes for every test file
|
|
6
7
|
container.registerDefaults();
|
|
8
|
+
await test_utils.initMetrics();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
await test_utils.resetMetrics();
|
|
7
13
|
});
|
package/test/src/util.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as types from '@module/types/types.js';
|
|
2
|
-
import { BucketStorageFactory, Metrics, MongoBucketStorage } from '@powersync/service-core';
|
|
3
|
-
import { env } from './env.js';
|
|
4
|
-
import mysqlPromise from 'mysql2/promise';
|
|
5
|
-
import { connectMongo } from '@core-tests/util.js';
|
|
6
2
|
import { getMySQLVersion, isVersionAtLeast } from '@module/utils/mysql-utils.js';
|
|
3
|
+
import * as mongo_storage from '@powersync/service-module-mongodb-storage';
|
|
4
|
+
import * as postgres_storage from '@powersync/service-module-postgres-storage';
|
|
5
|
+
import mysqlPromise from 'mysql2/promise';
|
|
6
|
+
import { env } from './env.js';
|
|
7
7
|
|
|
8
8
|
export const TEST_URI = env.MYSQL_TEST_URI;
|
|
9
9
|
|
|
@@ -12,28 +12,14 @@ export const TEST_CONNECTION_OPTIONS = types.normalizeConnectionConfig({
|
|
|
12
12
|
uri: TEST_URI
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
powersync_instance_id: 'test',
|
|
19
|
-
internal_metrics_endpoint: 'unused.for.tests.com'
|
|
15
|
+
export const INITIALIZED_MONGO_STORAGE_FACTORY = mongo_storage.MongoTestStorageFactoryGenerator({
|
|
16
|
+
url: env.MONGO_TEST_URL,
|
|
17
|
+
isCI: env.CI
|
|
20
18
|
});
|
|
21
|
-
Metrics.getInstance().resetCounters();
|
|
22
|
-
|
|
23
|
-
export type StorageFactory = () => Promise<BucketStorageFactory>;
|
|
24
19
|
|
|
25
|
-
export const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// None of the tests insert data into this collection, so it was never created
|
|
29
|
-
if (!(await db.db.listCollections({ name: db.bucket_parameters.collectionName }).hasNext())) {
|
|
30
|
-
await db.db.createCollection('bucket_parameters');
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
await db.clear();
|
|
34
|
-
|
|
35
|
-
return new MongoBucketStorage(db, { slot_name_prefix: 'test_' });
|
|
36
|
-
};
|
|
20
|
+
export const INITIALIZED_POSTGRES_STORAGE_FACTORY = postgres_storage.PostgresTestStorageFactoryGenerator({
|
|
21
|
+
url: env.PG_STORAGE_TEST_URL
|
|
22
|
+
});
|
|
37
23
|
|
|
38
24
|
export async function clearTestDb(connection: mysqlPromise.Connection) {
|
|
39
25
|
const version = await getMySQLVersion(connection);
|