@powersync/service-module-mysql 0.0.0-dev-20260602073133 → 0.0.0-dev-20260909133214
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 +134 -4
- package/dist/api/MySQLRouteAPIAdapter.d.ts +3 -3
- package/dist/api/MySQLRouteAPIAdapter.js +6 -5
- package/dist/api/MySQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/ReplicatedGTID.d.ts +16 -9
- package/dist/common/ReplicatedGTID.js +49 -25
- package/dist/common/ReplicatedGTID.js.map +1 -1
- package/dist/common/check-source-configuration.js +11 -0
- package/dist/common/check-source-configuration.js.map +1 -1
- package/dist/common/read-executed-gtid.d.ts +11 -1
- package/dist/common/read-executed-gtid.js +67 -5
- package/dist/common/read-executed-gtid.js.map +1 -1
- package/dist/common/schema-utils.js +4 -0
- package/dist/common/schema-utils.js.map +1 -1
- package/dist/replication/BinLogReplicationJob.d.ts +1 -1
- package/dist/replication/BinLogReplicationJob.js +6 -4
- package/dist/replication/BinLogReplicationJob.js.map +1 -1
- package/dist/replication/BinLogReplicator.js +1 -1
- package/dist/replication/BinLogReplicator.js.map +1 -1
- package/dist/replication/BinLogStream.d.ts +8 -0
- package/dist/replication/BinLogStream.js +62 -22
- package/dist/replication/BinLogStream.js.map +1 -1
- package/dist/replication/MySQLConnectionManager.js +6 -0
- package/dist/replication/MySQLConnectionManager.js.map +1 -1
- package/dist/replication/zongji/BinLogListener.d.ts +41 -2
- package/dist/replication/zongji/BinLogListener.js +104 -30
- package/dist/replication/zongji/BinLogListener.js.map +1 -1
- package/dist/utils/mysql-utils.d.ts +6 -0
- package/dist/utils/mysql-utils.js +10 -0
- package/dist/utils/mysql-utils.js.map +1 -1
- package/package.json +12 -22
- package/src/api/MySQLRouteAPIAdapter.ts +10 -9
- package/src/common/ReplicatedGTID.ts +65 -32
- package/src/common/check-source-configuration.ts +15 -0
- package/src/common/read-executed-gtid.ts +76 -6
- package/src/common/schema-utils.ts +8 -0
- package/src/replication/BinLogReplicationJob.ts +6 -4
- package/src/replication/BinLogReplicator.ts +1 -1
- package/src/replication/BinLogStream.ts +67 -22
- package/src/replication/MySQLConnectionManager.ts +6 -0
- package/src/replication/zongji/BinLogListener.ts +131 -30
- package/src/utils/mysql-utils.ts +11 -0
- package/test/src/BinLogListener.test.ts +140 -1
- package/test/src/BinlogStreamUtils.ts +23 -23
- package/test/src/ReplicatedGTID.test.ts +138 -0
- package/test/src/check-source-configuration.test.ts +70 -0
- package/test/src/mysql-utils.test.ts +19 -1
- package/test/src/read-executed-gtid.test.ts +188 -0
- package/test/src/util.ts +27 -2
- package/tsconfig.json +0 -3
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger as defaultLogger } from '@powersync/lib-services-framework';
|
|
1
|
+
import { ReplicationAssertionError, logger as defaultLogger } from '@powersync/lib-services-framework';
|
|
2
2
|
import async from 'async';
|
|
3
3
|
import pkg from 'node-sql-parser';
|
|
4
4
|
import timers from 'timers/promises';
|
|
@@ -10,6 +10,16 @@ const { Parser } = pkg;
|
|
|
10
10
|
* Seconds of inactivity after which a keepalive event is sent by the MySQL server.
|
|
11
11
|
*/
|
|
12
12
|
export const KEEPALIVE_INACTIVITY_THRESHOLD = 30;
|
|
13
|
+
/**
|
|
14
|
+
* Maximum time in milliseconds to wait for Zongji to stop before force-closing its control connection.
|
|
15
|
+
*/
|
|
16
|
+
export const ZONGJI_STOP_TIMEOUT = 5_000;
|
|
17
|
+
/**
|
|
18
|
+
* Maximum time in milliseconds a control connection liveness probe may execute before the
|
|
19
|
+
* connection is considered dead. Time the probe spends queued behind other control queries
|
|
20
|
+
* does not count towards this.
|
|
21
|
+
*/
|
|
22
|
+
export const CTRL_CONNECTION_PROBE_TIMEOUT = 5_000;
|
|
13
23
|
/**
|
|
14
24
|
* Schema changes that are detectable by inspecting query events.
|
|
15
25
|
* Create table statements are not included here, since new tables are automatically detected when row events
|
|
@@ -30,8 +40,6 @@ export var SchemaChangeType;
|
|
|
30
40
|
export class BinLogListener {
|
|
31
41
|
options;
|
|
32
42
|
sqlParser;
|
|
33
|
-
connectionManager;
|
|
34
|
-
eventHandler;
|
|
35
43
|
binLogPosition;
|
|
36
44
|
currentGTID;
|
|
37
45
|
logger;
|
|
@@ -39,6 +47,8 @@ export class BinLogListener {
|
|
|
39
47
|
databaseFilter;
|
|
40
48
|
isStopped = false;
|
|
41
49
|
isStopping = false;
|
|
50
|
+
// Set while a control connection probe is awaiting a response, so repeated probes do not pile up behind it.
|
|
51
|
+
probePending = false;
|
|
42
52
|
// Flag to indicate if are currently in a transaction that involves multiple row mutation events.
|
|
43
53
|
isTransactionOpen = false;
|
|
44
54
|
zongji;
|
|
@@ -50,9 +60,8 @@ export class BinLogListener {
|
|
|
50
60
|
constructor(options) {
|
|
51
61
|
this.options = options;
|
|
52
62
|
this.logger = options.logger ?? defaultLogger;
|
|
53
|
-
|
|
54
|
-
this.
|
|
55
|
-
this.binLogPosition = options.startGTID.position;
|
|
63
|
+
// Copy the position: the listener mutates it as events are processed, and the caller's startGTID must not change
|
|
64
|
+
this.binLogPosition = { ...options.startGTID.position };
|
|
56
65
|
this.currentGTID = options.startGTID;
|
|
57
66
|
this.sqlParser = new Parser();
|
|
58
67
|
this.processingQueue = this.createProcessingQueue();
|
|
@@ -60,6 +69,15 @@ export class BinLogListener {
|
|
|
60
69
|
this.listenerError = null;
|
|
61
70
|
this.databaseFilter = this.createDatabaseFilter(options.sourceTables);
|
|
62
71
|
}
|
|
72
|
+
get connectionManager() {
|
|
73
|
+
return this.options.connectionManager;
|
|
74
|
+
}
|
|
75
|
+
get eventHandler() {
|
|
76
|
+
return this.options.eventHandler;
|
|
77
|
+
}
|
|
78
|
+
get activeServerUuid() {
|
|
79
|
+
return this.options.activeServerUuid;
|
|
80
|
+
}
|
|
63
81
|
/**
|
|
64
82
|
* The queue memory limit in bytes as defined in the connection options.
|
|
65
83
|
* @private
|
|
@@ -130,12 +148,29 @@ export class BinLogListener {
|
|
|
130
148
|
async stopZongji() {
|
|
131
149
|
if (!this.zongji.stopped) {
|
|
132
150
|
this.logger.info('Stopping BinLog Listener...');
|
|
133
|
-
|
|
151
|
+
const controlConnection = this.zongji.ctrlConnection;
|
|
152
|
+
let stopped = false;
|
|
153
|
+
const stopPromise = new Promise((resolve) => {
|
|
134
154
|
this.zongji.once('stopped', () => {
|
|
155
|
+
stopped = true;
|
|
135
156
|
resolve();
|
|
136
157
|
});
|
|
137
158
|
this.zongji.stop();
|
|
138
159
|
});
|
|
160
|
+
// Zongji only emits 'stopped' once the KILL query on its control connection has completed.
|
|
161
|
+
// If that connection has been dead for a while, the query can block on TCP retransmissions
|
|
162
|
+
// for many minutes, so we destroy the socket after a timeout to unblock the stop.
|
|
163
|
+
const timeout = timers.setTimeout(ZONGJI_STOP_TIMEOUT, undefined, { ref: false }).then(() => {
|
|
164
|
+
if (!stopped) {
|
|
165
|
+
this.logger.warn('Timed out waiting for the BinLog Listener to stop. Closing the control connection.');
|
|
166
|
+
controlConnection._socket?.destroy();
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
await Promise.race([stopPromise, timeout]);
|
|
170
|
+
// Zongji destroys the control connection when it stops, which drops pending query callbacks:
|
|
171
|
+
// a probe waiting on this connection would otherwise stay pending forever and disable
|
|
172
|
+
// probing after a restart.
|
|
173
|
+
this.probePending = false;
|
|
139
174
|
this.logger.info('BinLog Listener stopped.');
|
|
140
175
|
}
|
|
141
176
|
}
|
|
@@ -156,6 +191,38 @@ export class BinLogListener {
|
|
|
156
191
|
throw this.listenerError;
|
|
157
192
|
}
|
|
158
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* The binlog connection is kept alive by the MySQL server heartbeat, but the control connection
|
|
196
|
+
* carries no traffic between metadata queries. TCP keepalive stops it from being dropped when idle,
|
|
197
|
+
* but detects an already dead connection slowly, so the replication job's keepAlive additionally
|
|
198
|
+
* probes it with a lightweight query and stops the listener (restarting replication) if the probe
|
|
199
|
+
* does not respond in time.
|
|
200
|
+
*
|
|
201
|
+
* The driver starts the query timeout when the query begins executing, not when it is queued, so a
|
|
202
|
+
* probe waiting behind a legitimately slow metadata query does not produce a false failure. A probe
|
|
203
|
+
* queued on a dead socket is failed together with the queued query by TCP keepalive on the socket.
|
|
204
|
+
*/
|
|
205
|
+
probeControlConnection() {
|
|
206
|
+
if (this.probePending || this.zongji.stopped || this.isStopped || this.isStopping) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
this.probePending = true;
|
|
210
|
+
const controlConnection = this.zongji.ctrlConnection;
|
|
211
|
+
const timeout = this.options.ctrlConnectionProbeTimeoutMs ?? CTRL_CONNECTION_PROBE_TIMEOUT;
|
|
212
|
+
controlConnection.query({ sql: 'SELECT 1', timeout }, (error) => {
|
|
213
|
+
this.probePending = false;
|
|
214
|
+
// Only act if the probe failed on a connection that is still supposed to be alive.
|
|
215
|
+
if (error != null &&
|
|
216
|
+
this.zongji.ctrlConnection === controlConnection &&
|
|
217
|
+
!this.zongji.stopped &&
|
|
218
|
+
!(this.isStopped || this.isStopping)) {
|
|
219
|
+
this.logger.warn('MySQL control connection is unresponsive. Stopping the BinLog Listener...');
|
|
220
|
+
this.listenerError = new Error('MySQL control connection is unresponsive.');
|
|
221
|
+
controlConnection._socket?.destroy();
|
|
222
|
+
this.stop();
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
159
226
|
createProcessingQueue() {
|
|
160
227
|
const queue = async.queue(this.createQueueWorker(), 1);
|
|
161
228
|
queue.error((error) => {
|
|
@@ -202,28 +269,33 @@ export class BinLogListener {
|
|
|
202
269
|
return async (evt) => {
|
|
203
270
|
switch (true) {
|
|
204
271
|
case zongji_utils.eventIsGTIDLog(evt):
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
272
|
+
const transactionGTID = common.ReplicatedGTID.fromBinLogEvent({
|
|
273
|
+
rawGtid: {
|
|
274
|
+
serverUuid: evt.serverId, // The server uuid this transaction originated from
|
|
275
|
+
transactionId: evt.transactionRange
|
|
209
276
|
},
|
|
210
277
|
position: {
|
|
211
278
|
filename: this.binLogPosition.filename,
|
|
212
279
|
offset: evt.nextPosition
|
|
213
280
|
}
|
|
214
281
|
});
|
|
282
|
+
if (transactionGTID.serverUuid !== this.activeServerUuid) {
|
|
283
|
+
throw new ReplicationAssertionError(`Detected a transaction from a different MySQL server UUID: ${transactionGTID.serverUuid} than the server that is currently being replicated from: ${this.activeServerUuid}. ` +
|
|
284
|
+
`A re-snapshot is required to ensure consistency.`);
|
|
285
|
+
}
|
|
286
|
+
this.currentGTID = transactionGTID;
|
|
215
287
|
this.binLogPosition.offset = evt.nextPosition;
|
|
216
288
|
await this.eventHandler.onTransactionStart({ timestamp: new Date(evt.timestamp) });
|
|
217
289
|
this.logger.info(`Processed GTID event: ${this.currentGTID.comparable}`);
|
|
218
290
|
break;
|
|
219
291
|
case zongji_utils.eventIsRotation(evt):
|
|
220
292
|
// The first event when starting replication is a synthetic Rotate event
|
|
221
|
-
// It describes the
|
|
293
|
+
// It describes the the position and file that the replica requested to start from
|
|
294
|
+
const isNewFile = this.binLogPosition.filename !== evt.binlogName;
|
|
222
295
|
this.binLogPosition.filename = evt.binlogName;
|
|
223
|
-
this.binLogPosition.offset = evt.
|
|
296
|
+
this.binLogPosition.offset = evt.position;
|
|
224
297
|
await this.eventHandler.onRotate();
|
|
225
|
-
|
|
226
|
-
if (newFile) {
|
|
298
|
+
if (isNewFile) {
|
|
227
299
|
this.logger.info(`Processed Rotate event. New BinLog file is: ${this.binLogPosition.filename}:${this.binLogPosition.offset}`);
|
|
228
300
|
}
|
|
229
301
|
break;
|
|
@@ -255,11 +327,7 @@ export class BinLogListener {
|
|
|
255
327
|
break;
|
|
256
328
|
case zongji_utils.eventIsXid(evt):
|
|
257
329
|
this.isTransactionOpen = false;
|
|
258
|
-
|
|
259
|
-
const LSN = new common.ReplicatedGTID({
|
|
260
|
-
raw_gtid: this.currentGTID.raw,
|
|
261
|
-
position: this.binLogPosition
|
|
262
|
-
}).comparable;
|
|
330
|
+
const LSN = this.advanceCommitPosition(evt.nextPosition);
|
|
263
331
|
await this.eventHandler.onCommit(LSN);
|
|
264
332
|
this.logger.info(`Processed Xid event - transaction complete. LSN: ${LSN}.`);
|
|
265
333
|
break;
|
|
@@ -270,6 +338,20 @@ export class BinLogListener {
|
|
|
270
338
|
this.queueMemoryUsage -= evt.size;
|
|
271
339
|
};
|
|
272
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Advances the binlog position to the end of a committed transaction and updates the currentGTID to match.
|
|
343
|
+
* This ensures subsequent heartbeat keepalives report an LSN that is not behind the last commit LSN,
|
|
344
|
+
* which would otherwise block checkpoint creation until the next transaction arrives.
|
|
345
|
+
* Returns the commit LSN.
|
|
346
|
+
*/
|
|
347
|
+
advanceCommitPosition(nextPosition) {
|
|
348
|
+
this.binLogPosition.offset = nextPosition;
|
|
349
|
+
this.currentGTID = new common.ReplicatedGTID({
|
|
350
|
+
rawGtid: this.currentGTID.raw,
|
|
351
|
+
position: { ...this.binLogPosition }
|
|
352
|
+
});
|
|
353
|
+
return this.currentGTID.comparable;
|
|
354
|
+
}
|
|
273
355
|
async processQueryEvent(event) {
|
|
274
356
|
const { query, nextPosition } = event;
|
|
275
357
|
// BEGIN query events mark the start of a transaction before any row events. They are not schema changes so no further parsing is necessary.
|
|
@@ -288,11 +370,7 @@ export class BinLogListener {
|
|
|
288
370
|
// DDL queries are auto commited, but do not come with a corresponding Xid event, in those cases we trigger a manual commit if we are not already in a transaction.
|
|
289
371
|
// Some DDL queries include row events, and in those cases will include a Xid event.
|
|
290
372
|
if (!this.isTransactionOpen) {
|
|
291
|
-
|
|
292
|
-
const LSN = new common.ReplicatedGTID({
|
|
293
|
-
raw_gtid: this.currentGTID.raw,
|
|
294
|
-
position: this.binLogPosition
|
|
295
|
-
}).comparable;
|
|
373
|
+
const LSN = this.advanceCommitPosition(nextPosition);
|
|
296
374
|
await this.eventHandler.onCommit(LSN);
|
|
297
375
|
}
|
|
298
376
|
this.logger.info(`Successfully processed ${schemaChanges.length} schema change(s).`);
|
|
@@ -309,11 +387,7 @@ export class BinLogListener {
|
|
|
309
387
|
}
|
|
310
388
|
}
|
|
311
389
|
else if (!this.isTransactionOpen) {
|
|
312
|
-
|
|
313
|
-
const LSN = new common.ReplicatedGTID({
|
|
314
|
-
raw_gtid: this.currentGTID.raw,
|
|
315
|
-
position: this.binLogPosition
|
|
316
|
-
}).comparable;
|
|
390
|
+
const LSN = this.advanceCommitPosition(nextPosition);
|
|
317
391
|
await this.eventHandler.onCommit(LSN);
|
|
318
392
|
}
|
|
319
393
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinLogListener.js","sourceRoot":"","sources":["../../../src/replication/zongji/BinLogListener.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BinLogListener.js","sourceRoot":"","sources":["../../../src/replication/zongji/BinLogListener.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,12 @@ export type RetriedQueryOptions = {
|
|
|
8
8
|
params?: any[];
|
|
9
9
|
retries?: number;
|
|
10
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* TCP keepalive initial delay in milliseconds for connections to the MySQL server.
|
|
13
|
+
* Keepalive prevents long-lived idle connections from being silently dropped by stateful
|
|
14
|
+
* firewalls, which commonly time out idle flows after an hour.
|
|
15
|
+
*/
|
|
16
|
+
export declare const TCP_KEEPALIVE_INITIAL_DELAY = 40000;
|
|
11
17
|
/**
|
|
12
18
|
* Retry a simple query - up to 2 attempts total.
|
|
13
19
|
*/
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { logger } from '@powersync/lib-services-framework';
|
|
2
2
|
import mysql from 'mysql2';
|
|
3
3
|
import { coerce, gte, satisfies } from 'semver';
|
|
4
|
+
/**
|
|
5
|
+
* TCP keepalive initial delay in milliseconds for connections to the MySQL server.
|
|
6
|
+
* Keepalive prevents long-lived idle connections from being silently dropped by stateful
|
|
7
|
+
* firewalls, which commonly time out idle flows after an hour.
|
|
8
|
+
*/
|
|
9
|
+
export const TCP_KEEPALIVE_INITIAL_DELAY = 40_000;
|
|
4
10
|
/**
|
|
5
11
|
* Retry a simple query - up to 2 attempts total.
|
|
6
12
|
*/
|
|
@@ -41,6 +47,10 @@ export function createPool(config, options) {
|
|
|
41
47
|
timezone: 'Z', // Ensure no auto timezone manipulation of the dates occur
|
|
42
48
|
jsonStrings: true, // Return JSON columns as strings
|
|
43
49
|
dateStrings: true, // We parse and format them ourselves
|
|
50
|
+
// mysql2 enables TCP keepalive by default, but without an initial delay the OS default of
|
|
51
|
+
// 7200 seconds applies, which is too late for common 3600 second firewall idle timeouts.
|
|
52
|
+
enableKeepAlive: true,
|
|
53
|
+
keepAliveInitialDelay: TCP_KEEPALIVE_INITIAL_DELAY,
|
|
44
54
|
// Apply URL connection parameters (explicit options override these via spread below)
|
|
45
55
|
...(params.connectTimeout != null ? { connectTimeout: params.connectTimeout } : {}),
|
|
46
56
|
...(params.connectionLimit != null ? { connectionLimit: params.connectionLimit } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql-utils.js","sourceRoot":"","sources":["../../src/utils/mysql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,KAAK,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAUhD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAChE,KAAK,IAAI,KAAK,GAAG,OAAO,GAAI,KAAK,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;YAC1C,OAAO,UAAU,CAAC,KAAK,CAA+B,KAAK,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA6C,EAAE,OAA2B;IACnG,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,GAAG,EAAE,MAAM,CAAC,kBAAkB;QAC9B,IAAI,EAAE,MAAM,CAAC,kBAAkB;KAChC,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,+EAA+E;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAEvC,6CAA6C;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3C,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,GAAG,EAAE,0DAA0D;QACzE,WAAW,EAAE,IAAI,EAAE,iCAAiC;QACpD,WAAW,EAAE,IAAI,EAAE,qCAAqC;QACxD,qFAAqF;QACrF,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACnB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAmC;IACvE,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,YAAY,CAAC;QAC3C,UAAU;QACV,KAAK,EAAE,6BAA6B;KACrC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,OAAiB,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,cAAsB;IACtE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,cAAe,EAAE,qBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,aAAqB;IACrE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvC,OAAO,SAAS,CAAC,cAAe,EAAE,aAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAKD,MAAM,UAAU,mBAAmB,CAAC,KAA8B,EAAE,MAAe;IACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAC7F,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"mysql-utils.js","sourceRoot":"","sources":["../../src/utils/mysql-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,KAAK,MAAM,QAAQ,CAAC;AAE3B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAUhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC;AAElD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA4B;IAC7D,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAChE,KAAK,IAAI,KAAK,GAAG,OAAO,GAAI,KAAK,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,oBAAoB,KAAK,EAAE,CAAC,CAAC;YAC1C,OAAO,UAAU,CAAC,KAAK,CAA+B,KAAK,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,CAAC;YACV,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA6C,EAAE,OAA2B;IACnG,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,MAAM,CAAC,MAAM;QACjB,GAAG,EAAE,MAAM,CAAC,kBAAkB;QAC9B,IAAI,EAAE,MAAM,CAAC,kBAAkB;KAChC,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,+EAA+E;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAEvC,6CAA6C;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAC3C,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,QAAQ,EAAE,GAAG,EAAE,0DAA0D;QACzE,WAAW,EAAE,IAAI,EAAE,iCAAiC;QACpD,WAAW,EAAE,IAAI,EAAE,qCAAqC;QACxD,0FAA0F;QAC1F,yFAAyF;QACzF,eAAe,EAAE,IAAI;QACrB,qBAAqB,EAAE,2BAA2B;QAClD,qFAAqF;QACrF,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;KACnB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB;IACrD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAmC;IACvE,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,MAAM,YAAY,CAAC;QAC3C,UAAU;QACV,KAAK,EAAE,6BAA6B;KACrC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,OAAiB,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,cAAsB;IACtE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,cAAe,EAAE,qBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,aAAqB;IACrE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEvC,OAAO,SAAS,CAAC,cAAe,EAAE,aAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAKD,MAAM,UAAU,mBAAmB,CAAC,KAA8B,EAAE,MAAe;IACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAC7F,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,OAAO,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/service-module-mysql",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
|
-
"
|
|
5
|
-
"version": "0.0.0-dev-20260602073133",
|
|
4
|
+
"version": "0.0.0-dev-20260909133214",
|
|
6
5
|
"license": "FSL-1.1-ALv2",
|
|
7
|
-
"main": "dist/index.js",
|
|
8
6
|
"type": "module",
|
|
9
7
|
"publishConfig": {
|
|
10
8
|
"access": "public"
|
|
11
9
|
},
|
|
12
10
|
"exports": {
|
|
13
|
-
".":
|
|
14
|
-
|
|
15
|
-
"require": "./dist/index.js",
|
|
16
|
-
"default": "./dist/index.js"
|
|
17
|
-
},
|
|
18
|
-
"./types": {
|
|
19
|
-
"import": "./dist/types/types.js",
|
|
20
|
-
"require": "./dist/types/types.js",
|
|
21
|
-
"default": "./dist/types/types.js"
|
|
22
|
-
}
|
|
11
|
+
".": "./dist/index.js",
|
|
12
|
+
"./types": "./dist/types/types.js"
|
|
23
13
|
},
|
|
24
14
|
"dependencies": {
|
|
25
|
-
"@powersync/mysql-zongji": "^0.6.
|
|
15
|
+
"@powersync/mysql-zongji": "^0.6.2",
|
|
26
16
|
"async": "^3.2.4",
|
|
27
17
|
"mysql2": "^3.11.0",
|
|
28
18
|
"node-sql-parser": "^5.3.9",
|
|
@@ -30,18 +20,18 @@
|
|
|
30
20
|
"ts-codec": "^1.3.0",
|
|
31
21
|
"uri-js": "^4.4.1",
|
|
32
22
|
"uuid": "^14.0.0",
|
|
33
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
34
|
-
"@powersync/service-core": "0.0.0-dev-
|
|
35
|
-
"@powersync/service-
|
|
36
|
-
"@powersync/service-
|
|
37
|
-
"@powersync/service-
|
|
23
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20260909133214",
|
|
24
|
+
"@powersync/service-core": "0.0.0-dev-20260909133214",
|
|
25
|
+
"@powersync/service-jsonbig": "0.17.13",
|
|
26
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20260909133214",
|
|
27
|
+
"@powersync/service-types": "0.18.0"
|
|
38
28
|
},
|
|
39
29
|
"devDependencies": {
|
|
40
30
|
"@types/async": "^3.2.24",
|
|
41
31
|
"@types/semver": "^7.7.1",
|
|
42
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
43
|
-
"@powersync/service-module-mongodb-storage": "0.0.0-dev-
|
|
44
|
-
"@powersync/service-module-postgres-storage": "0.0.0-dev-
|
|
32
|
+
"@powersync/service-core-tests": "0.0.0-dev-20260909133214",
|
|
33
|
+
"@powersync/service-module-mongodb-storage": "0.0.0-dev-20260909133214",
|
|
34
|
+
"@powersync/service-module-postgres-storage": "0.0.0-dev-20260909133214"
|
|
45
35
|
},
|
|
46
36
|
"scripts": {
|
|
47
37
|
"build": "tsc -b",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { api,
|
|
1
|
+
import { api, ParseSyncConfigOptions } from '@powersync/service-core';
|
|
2
2
|
|
|
3
3
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
4
4
|
import * as service_types from '@powersync/service-types';
|
|
@@ -29,7 +29,7 @@ export class MySQLRouteAPIAdapter implements api.RouteAPI {
|
|
|
29
29
|
return this.config;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
getParseSyncRulesOptions():
|
|
32
|
+
getParseSyncRulesOptions(): ParseSyncConfigOptions {
|
|
33
33
|
return {
|
|
34
34
|
// In MySQL Schema and Database are the same thing. There is no default database
|
|
35
35
|
defaultSchema: this.config.database
|
|
@@ -260,12 +260,12 @@ export class MySQLRouteAPIAdapter implements api.RouteAPI {
|
|
|
260
260
|
const { bucketStorage } = options;
|
|
261
261
|
const lastCheckpoint = await bucketStorage.getCheckpoint();
|
|
262
262
|
|
|
263
|
-
const current = lastCheckpoint.lsn
|
|
264
|
-
? common.ReplicatedGTID.fromSerialized(lastCheckpoint.lsn)
|
|
265
|
-
: common.ReplicatedGTID.ZERO;
|
|
266
|
-
|
|
267
263
|
const connection = await this.pool.getConnection();
|
|
268
264
|
const head = await common.readExecutedGtid(connection);
|
|
265
|
+
|
|
266
|
+
const current = lastCheckpoint.lsn
|
|
267
|
+
? common.ReplicatedGTID.fromSerialized(lastCheckpoint.lsn)
|
|
268
|
+
: common.ReplicatedGTID.ZERO(await common.readServerUuid(connection));
|
|
269
269
|
const lag = await current.distanceTo(connection, head);
|
|
270
270
|
connection.release();
|
|
271
271
|
if (lag == null) {
|
|
@@ -282,10 +282,11 @@ export class MySQLRouteAPIAdapter implements api.RouteAPI {
|
|
|
282
282
|
return result.comparable;
|
|
283
283
|
}
|
|
284
284
|
|
|
285
|
-
async createReplicationHead<T>(callback: ReplicationHeadCallback<T>): Promise<T> {
|
|
285
|
+
async createReplicationHead<T>(callback: api.ReplicationHeadCallback<T>): Promise<T> {
|
|
286
286
|
const head = await this.getReplicationHead();
|
|
287
|
-
// TODO: make sure another message is replicated
|
|
288
|
-
|
|
287
|
+
// TODO: make sure another message is replicated when shouldAdvance is true
|
|
288
|
+
const { response } = await callback(head);
|
|
289
|
+
return response;
|
|
289
290
|
}
|
|
290
291
|
|
|
291
292
|
async getConnectionSchema(): Promise<service_types.DatabaseSchema[]> {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReplicationAssertionError } from '@powersync/lib-services-framework';
|
|
1
2
|
import mysql from 'mysql2/promise';
|
|
2
3
|
import * as uuid from 'uuid';
|
|
3
4
|
import * as mysql_utils from '../utils/mysql-utils.js';
|
|
@@ -8,7 +9,11 @@ export type BinLogPosition = {
|
|
|
8
9
|
};
|
|
9
10
|
|
|
10
11
|
export type ReplicatedGTIDSpecification = {
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* The raw Global Transaction ID. This is of the format `server_uuid:transaction_id`.
|
|
14
|
+
* Must be a single GTID — not a GTID set (multiple UUIDs) or interval range.
|
|
15
|
+
*/
|
|
16
|
+
rawGtid: string;
|
|
12
17
|
/**
|
|
13
18
|
* The (end) position in a BinLog file where this transaction has been replicated in.
|
|
14
19
|
*/
|
|
@@ -16,12 +21,12 @@ export type ReplicatedGTIDSpecification = {
|
|
|
16
21
|
};
|
|
17
22
|
|
|
18
23
|
export type BinLogGTIDFormat = {
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
serverUuid: Buffer;
|
|
25
|
+
transactionId: number;
|
|
21
26
|
};
|
|
22
27
|
|
|
23
28
|
export type BinLogGTIDEvent = {
|
|
24
|
-
|
|
29
|
+
rawGtid: BinLogGTIDFormat;
|
|
25
30
|
position: BinLogPosition;
|
|
26
31
|
};
|
|
27
32
|
|
|
@@ -31,30 +36,43 @@ export type BinLogGTIDEvent = {
|
|
|
31
36
|
* and position where this GTID could be located.
|
|
32
37
|
*/
|
|
33
38
|
export class ReplicatedGTID {
|
|
39
|
+
private options: ReplicatedGTIDSpecification;
|
|
40
|
+
|
|
41
|
+
constructor(options: ReplicatedGTIDSpecification) {
|
|
42
|
+
const rawGtid = options.rawGtid.trim();
|
|
43
|
+
assertSingleGtid(rawGtid);
|
|
44
|
+
this.options = { ...options, rawGtid };
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
static fromSerialized(comparable: string): ReplicatedGTID {
|
|
35
48
|
return new ReplicatedGTID(ReplicatedGTID.deserialize(comparable));
|
|
36
49
|
}
|
|
37
50
|
|
|
38
51
|
private static deserialize(comparable: string): ReplicatedGTIDSpecification {
|
|
39
52
|
const components = comparable.split('|');
|
|
40
|
-
if (components.length <
|
|
41
|
-
throw new
|
|
53
|
+
if (components.length < 4) {
|
|
54
|
+
throw new ReplicationAssertionError(`Invalid serialized GTID: ${comparable}`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const offset = parseInt(components[3], 10);
|
|
58
|
+
if (Number.isNaN(offset)) {
|
|
59
|
+
throw new ReplicationAssertionError(`Invalid BinLog offset in serialized GTID: ${comparable}`);
|
|
42
60
|
}
|
|
43
61
|
|
|
44
62
|
return {
|
|
45
|
-
|
|
63
|
+
rawGtid: components[1],
|
|
46
64
|
position: {
|
|
47
65
|
filename: components[2],
|
|
48
|
-
offset:
|
|
66
|
+
offset: offset
|
|
49
67
|
} satisfies BinLogPosition
|
|
50
68
|
};
|
|
51
69
|
}
|
|
52
70
|
|
|
53
71
|
static fromBinLogEvent(event: BinLogGTIDEvent) {
|
|
54
|
-
const {
|
|
55
|
-
const stringGTID = `${uuid.stringify(
|
|
72
|
+
const { rawGtid, position } = event;
|
|
73
|
+
const stringGTID = `${uuid.stringify(rawGtid.serverUuid)}:${rawGtid.transactionId}`;
|
|
56
74
|
return new ReplicatedGTID({
|
|
57
|
-
|
|
75
|
+
rawGtid: stringGTID,
|
|
58
76
|
position
|
|
59
77
|
});
|
|
60
78
|
}
|
|
@@ -62,9 +80,12 @@ export class ReplicatedGTID {
|
|
|
62
80
|
/**
|
|
63
81
|
* Special case for the zero GTID which means no transactions have been executed.
|
|
64
82
|
*/
|
|
65
|
-
static ZERO
|
|
66
|
-
|
|
67
|
-
|
|
83
|
+
static ZERO(serverUuid: string): ReplicatedGTID {
|
|
84
|
+
return new ReplicatedGTID({
|
|
85
|
+
rawGtid: `${serverUuid}:0`,
|
|
86
|
+
position: { filename: '', offset: 0 }
|
|
87
|
+
});
|
|
88
|
+
}
|
|
68
89
|
|
|
69
90
|
/**
|
|
70
91
|
* Get the BinLog position of this replicated GTID event
|
|
@@ -74,14 +95,17 @@ export class ReplicatedGTID {
|
|
|
74
95
|
}
|
|
75
96
|
|
|
76
97
|
/**
|
|
77
|
-
* Get the raw Global Transaction ID. This of the format `
|
|
98
|
+
* Get the raw Global Transaction ID. This is of the format `server_uuid:transaction_id`
|
|
78
99
|
*/
|
|
79
100
|
get raw() {
|
|
80
|
-
return this.options.
|
|
101
|
+
return this.options.rawGtid;
|
|
81
102
|
}
|
|
82
103
|
|
|
83
|
-
|
|
84
|
-
|
|
104
|
+
/**
|
|
105
|
+
* The server UUID of the server this transaction originated from
|
|
106
|
+
*/
|
|
107
|
+
get serverUuid() {
|
|
108
|
+
return this.options.rawGtid.split(':')[0];
|
|
85
109
|
}
|
|
86
110
|
|
|
87
111
|
/**
|
|
@@ -94,21 +118,9 @@ export class ReplicatedGTID {
|
|
|
94
118
|
*/
|
|
95
119
|
get comparable(): string {
|
|
96
120
|
const { raw, position } = this;
|
|
97
|
-
const [,
|
|
121
|
+
const [, transactionId] = this.raw.split(':');
|
|
98
122
|
|
|
99
|
-
|
|
100
|
-
if (!transactionRanges) {
|
|
101
|
-
return ReplicatedGTID.ZERO.comparable;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
let maxTransactionId = 0;
|
|
105
|
-
|
|
106
|
-
for (const range of transactionRanges.split(',')) {
|
|
107
|
-
const [start, end] = range.split('-');
|
|
108
|
-
maxTransactionId = Math.max(maxTransactionId, parseInt(start, 10), parseInt(end || start, 10));
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const paddedTransactionId = maxTransactionId.toString().padStart(16, '0');
|
|
123
|
+
const paddedTransactionId = transactionId.toString().padStart(16, '0');
|
|
112
124
|
return [paddedTransactionId, raw, position.filename, position.offset].join('|');
|
|
113
125
|
}
|
|
114
126
|
|
|
@@ -161,3 +173,24 @@ export class ReplicatedGTID {
|
|
|
161
173
|
);
|
|
162
174
|
}
|
|
163
175
|
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Asserts that the given gtid string is a single GTID of the form `server_uuid:transaction_id`,
|
|
179
|
+
* not a GTID set such as `uuid:1-17` or `uuid1:1,uuid2:2`.
|
|
180
|
+
*/
|
|
181
|
+
function assertSingleGtid(gtid: string): void {
|
|
182
|
+
// GTID sets join UUID sets with commas (often with newlines: `,\n`).
|
|
183
|
+
if (gtid.includes(',') || gtid.includes('\n')) {
|
|
184
|
+
throw new ReplicationAssertionError(`Expected a single GTID (server_uuid:transaction_id), got a GTID set: ${gtid}`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const parts = gtid.split(':');
|
|
188
|
+
if (parts.length !== 2 || parts[0].length === 0 || parts[1].length === 0) {
|
|
189
|
+
throw new ReplicationAssertionError(`Expected a single GTID (server_uuid:transaction_id), got: ${gtid}`);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Intervals use `n-m`; a single transaction id must be a non-negative integer.
|
|
193
|
+
if (!/^\d+$/.test(parts[1])) {
|
|
194
|
+
throw new ReplicationAssertionError(`Expected a single transaction id, got: ${gtid}`);
|
|
195
|
+
}
|
|
196
|
+
}
|