@powersync/service-module-mysql 0.15.0 → 0.16.1

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/api/MySQLRouteAPIAdapter.js +3 -3
  3. package/dist/api/MySQLRouteAPIAdapter.js.map +1 -1
  4. package/dist/common/ReplicatedGTID.d.ts +16 -9
  5. package/dist/common/ReplicatedGTID.js +49 -25
  6. package/dist/common/ReplicatedGTID.js.map +1 -1
  7. package/dist/common/check-source-configuration.js +11 -0
  8. package/dist/common/check-source-configuration.js.map +1 -1
  9. package/dist/common/read-executed-gtid.d.ts +11 -1
  10. package/dist/common/read-executed-gtid.js +67 -5
  11. package/dist/common/read-executed-gtid.js.map +1 -1
  12. package/dist/replication/BinLogReplicationJob.js +3 -1
  13. package/dist/replication/BinLogReplicationJob.js.map +1 -1
  14. package/dist/replication/BinLogStream.d.ts +8 -0
  15. package/dist/replication/BinLogStream.js +58 -18
  16. package/dist/replication/BinLogStream.js.map +1 -1
  17. package/dist/replication/MySQLConnectionManager.js +6 -0
  18. package/dist/replication/MySQLConnectionManager.js.map +1 -1
  19. package/dist/replication/zongji/BinLogListener.d.ts +41 -2
  20. package/dist/replication/zongji/BinLogListener.js +104 -30
  21. package/dist/replication/zongji/BinLogListener.js.map +1 -1
  22. package/dist/utils/mysql-utils.d.ts +6 -0
  23. package/dist/utils/mysql-utils.js +10 -0
  24. package/dist/utils/mysql-utils.js.map +1 -1
  25. package/package.json +10 -10
  26. package/src/api/MySQLRouteAPIAdapter.ts +4 -4
  27. package/src/common/ReplicatedGTID.ts +65 -32
  28. package/src/common/check-source-configuration.ts +15 -0
  29. package/src/common/read-executed-gtid.ts +76 -6
  30. package/src/replication/BinLogReplicationJob.ts +3 -1
  31. package/src/replication/BinLogStream.ts +63 -18
  32. package/src/replication/MySQLConnectionManager.ts +6 -0
  33. package/src/replication/zongji/BinLogListener.ts +131 -30
  34. package/src/utils/mysql-utils.ts +11 -0
  35. package/test/src/BinLogListener.test.ts +140 -1
  36. package/test/src/ReplicatedGTID.test.ts +138 -0
  37. package/test/src/check-source-configuration.test.ts +70 -0
  38. package/test/src/mysql-utils.test.ts +19 -1
  39. package/test/src/read-executed-gtid.test.ts +188 -0
  40. package/test/src/util.ts +27 -2
  41. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # @powersync/service-module-mysql
2
2
 
3
+ ## 0.16.1
4
+
5
+ ### Patch Changes
6
+
7
+ - d89195c: Enable TCP keepalive on MySQL connections, as well as a periodic liveness probe on the control connection, so that idle connections are no longer silently dropped by stateful firewalls.
8
+ - 2407f71: Apply timeouts and abortSignal handling to all S3 operations. The broad timeouts can be configured using the new `storage.object_storage.defaults_mode` option, or the `AWS_DEFAULTS_MODE` environment variable. Upgrade S3 SDK to fix further timeout issues.
9
+ - a997c88: Restructure MongoDB V3 bucket compacting.
10
+ - Updated dependencies [e11c54b]
11
+ - Updated dependencies [4b6a23e]
12
+ - Updated dependencies [189bd9e]
13
+ - Updated dependencies [bb08068]
14
+ - Updated dependencies [0077a8d]
15
+ - Updated dependencies [332d649]
16
+ - Updated dependencies [33a3c23]
17
+ - Updated dependencies [fccdff2]
18
+ - Updated dependencies [989d9e1]
19
+ - Updated dependencies [646c0de]
20
+ - Updated dependencies [cc121b3]
21
+ - Updated dependencies [4e4063b]
22
+ - Updated dependencies [2407f71]
23
+ - Updated dependencies [10131ca]
24
+ - Updated dependencies [4037e8f]
25
+ - Updated dependencies [3972bac]
26
+ - Updated dependencies [dd7a22f]
27
+ - Updated dependencies [a997c88]
28
+ - @powersync/service-core@1.26.0
29
+ - @powersync/service-sync-rules@0.41.0
30
+ - @powersync/service-types@0.18.0
31
+ - @powersync/lib-services-framework@0.10.1
32
+
33
+ ## 0.16.0
34
+
35
+ ### Minor Changes
36
+
37
+ - 41dcd7a: Improve MySQL GTID consistency and resume safety. PowerSync now derives replication heads from the active server's executed GTID set, validates stored GTIDs and binlog coordinates before resuming, and re-snapshots after source rewinds or server UUID changes. Replica sources and foreign-origin binlog transactions are rejected until multi-origin transaction ordering is supported, while heartbeat keepalives use the last committed position to prevent idle checkpoint stalls.
38
+
39
+ ### Patch Changes
40
+
41
+ - Updated dependencies [27b56cb]
42
+ - Updated dependencies [798d739]
43
+ - @powersync/service-core@1.25.0
44
+
3
45
  ## 0.15.0
4
46
 
5
47
  ### Minor Changes
@@ -224,11 +224,11 @@ export class MySQLRouteAPIAdapter {
224
224
  async getReplicationLagBytes(options) {
225
225
  const { bucketStorage } = options;
226
226
  const lastCheckpoint = await bucketStorage.getCheckpoint();
227
- const current = lastCheckpoint.lsn
228
- ? common.ReplicatedGTID.fromSerialized(lastCheckpoint.lsn)
229
- : common.ReplicatedGTID.ZERO;
230
227
  const connection = await this.pool.getConnection();
231
228
  const head = await common.readExecutedGtid(connection);
229
+ const current = lastCheckpoint.lsn
230
+ ? common.ReplicatedGTID.fromSerialized(lastCheckpoint.lsn)
231
+ : common.ReplicatedGTID.ZERO(await common.readServerUuid(connection));
232
232
  const lag = await current.distanceTo(connection, head);
233
233
  connection.release();
234
234
  if (lag == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"MySQLRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MySQLRouteAPIAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAC5D,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAQvD,MAAM,OAAO,oBAAoB;IAGT;IAFZ,IAAI,CAAa;IAE3B,YAAsB,MAAsC;QAAtC,WAAM,GAAN,MAAM,CAAgC;QAC1D,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,wBAAwB;QACtB,OAAO;YACL,gFAAgF;YAChF,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAClB,GAAG,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;SACnF,CAAC;QACF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC;gBACtB,KAAK,EAAE,oCAAoC;aAC5C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;aAC3E,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO;oBACL,GAAG,IAAI;oBACP,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL,GAAG,IAAI;gBACP,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;aACjD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,OAAO;YACL,GAAG,IAAI;YACP,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,MAAa;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,OAAO,aAAa,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC7D,OAAO,EAAE;oBACP,OAAO,EAAE,EAAE;oBACX,IAAI,EAAE,EAAE;iBACT;gBACD,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,6BAA6B;aACrC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAwB,KAAK,EAAE,MAAM,CAAC,CAAC;YACtF,OAAO,aAAa,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC7D,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;wBACxB;;;2BAGG;wBACH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BACtB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;4BAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,iBAAiB,CAC3C,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAClC,UAAU,CAAC,oBAAoB,CAAC,4BAA4B,CAC7D,CAAC;4BACF,IAAI,OAAO,QAAQ,IAAI,QAAQ,EAAE,CAAC;gCAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;4BACvB,CAAC;iCAAM,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;gCACjC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;4BAC7B,CAAC;iCAAM,IAAI,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;gCAC5C,OAAO,QAAQ,CAAC;4BAClB,CAAC;iCAAM,CAAC;gCACN,OAAO,IAAI,CAAC;4BACd,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC;iBACH;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,aAAa,CAAC,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC;gBAC7D,OAAO,EAAE;oBACP,OAAO,EAAE,EAAE;oBACX,IAAI,EAAE,EAAE;iBACT;gBACD,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,aAAwC,EACxC,YAAqC;QAErC,IAAI,MAAM,GAAwB,EAAE,CAAC;QAErC,KAAK,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;YACnC,IAAI,aAAa,GAAsB;gBACrC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,YAAY,CAAC,YAAY;gBAClC,QAAQ,EAAE,YAAY,CAAC,UAAU;aAClC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE3B,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC5B,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC;gBAExC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACrC;;;;;;kCAMwB,EACxB,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACpC,CAAC;gBAEF,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAoB,CAAC;oBAEtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC7B,SAAS;oBACX,CAAC;oBAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC/E,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACrC;;;;;;+BAMqB,EACrB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;gBAEF,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACxB,kBAAkB;oBAClB,aAAa,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACpG,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACvB,aAAa,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,KAAK,CAAC,iBAAiB,CAC/B,YAAqC,EACrC,SAAiB,EACjB,SAAkC;QAElC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;QAEhC,IAAI,eAAe,GAAmD,IAAI,CAAC;QAC3E,IAAI,cAAc,GAA0C,IAAI,CAAC;QACjE,IAAI,UAAU,GAAgC,IAAI,CAAC;QACnD,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7C,eAAe,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC;gBAC3D,UAAU,EAAE,UAAU;gBACtB,MAAM;gBACN,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;gBAAS,CAAC;YACT,UAAU,EAAE,OAAO,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,EAAE,OAAO,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAA8B;YACrC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YAC9B,MAAM;YACN,IAAI,EAAE,SAAS;SAChB,CAAC;QACF,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE3D,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YACpD,IAAI,OAAO,GAAG,+BAA+B,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,uBAAuB,eAAe,EAAE,QAAQ,GAAG,CAAC;YACrI,IAAI,eAAe,EAAE,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC3C,OAAO,IAAI,wCAAwC,CAAC;YACtD,CAAC;YACD,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,WAAW,GAA0C,IAAI,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC;gBACtB,KAAK,EAAE,iBAAiB,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU;aACvE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACvD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;YACxE,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5C,YAAY,EAAE,QAAQ;YACtB,iBAAiB,EAAE,cAAc;YACjC,MAAM,EAAE,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAqC;SAC3G,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,OAAkC;QAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAClC,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,aAAa,EAAE,CAAC;QAE3D,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG;YAChC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,CAAC;YAC1D,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;QAE/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvD,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACzD,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAI,QAAwC;QACrE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,2EAA2E;QAC3E,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACxC,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCN;SACF,CAAC,CAAC;QAEH;;;WAGG;QAEH,OAAO,MAAM,CAAC,MAAM,CACjB,OAA0B,CAAC,MAAM,CAAC,CAAC,IAAkD,EAAE,MAAM,EAAE,EAAE;YAChG,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACxB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;oBAC1B,IAAI,EAAE,MAAM,CAAC,WAAW;oBACxB,MAAM,EAAE,EAAE;iBACX,CAAC,CAAC;YAEL,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAkD,EAAE,EAAE,CAAC,CAAC;gBACtG,IAAI,EAAE,MAAM,CAAC,WAAW;gBACxB,IAAI,EAAE,MAAM,CAAC,SAAS;gBACtB,WAAW,EAAE,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS;gBACtE,aAAa,EAAE,MAAM,CAAC,SAAS;gBAC/B,OAAO,EAAE,MAAM,CAAC,SAAS;aAC1B,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC,UAAU;gBACvB,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAAE,CAAC,CACP,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,OAA0C;QACrE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAEnD,OAAO,WAAW;aACf,YAAY,CAAC;YACZ,UAAU,EAAE,UAAU;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;aACD,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,CAAC;CACF"}
1
+ {"version":3,"file":"MySQLRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MySQLRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
@@ -4,18 +4,22 @@ export type BinLogPosition = {
4
4
  offset: number;
5
5
  };
6
6
  export type ReplicatedGTIDSpecification = {
7
- raw_gtid: string;
7
+ /**
8
+ * The raw Global Transaction ID. This is of the format `server_uuid:transaction_id`.
9
+ * Must be a single GTID — not a GTID set (multiple UUIDs) or interval range.
10
+ */
11
+ rawGtid: string;
8
12
  /**
9
13
  * The (end) position in a BinLog file where this transaction has been replicated in.
10
14
  */
11
15
  position: BinLogPosition;
12
16
  };
13
17
  export type BinLogGTIDFormat = {
14
- server_id: Buffer;
15
- transaction_range: number;
18
+ serverUuid: Buffer;
19
+ transactionId: number;
16
20
  };
17
21
  export type BinLogGTIDEvent = {
18
- raw_gtid: BinLogGTIDFormat;
22
+ rawGtid: BinLogGTIDFormat;
19
23
  position: BinLogPosition;
20
24
  };
21
25
  /**
@@ -24,24 +28,27 @@ export type BinLogGTIDEvent = {
24
28
  * and position where this GTID could be located.
25
29
  */
26
30
  export declare class ReplicatedGTID {
27
- protected options: ReplicatedGTIDSpecification;
31
+ private options;
32
+ constructor(options: ReplicatedGTIDSpecification);
28
33
  static fromSerialized(comparable: string): ReplicatedGTID;
29
34
  private static deserialize;
30
35
  static fromBinLogEvent(event: BinLogGTIDEvent): ReplicatedGTID;
31
36
  /**
32
37
  * Special case for the zero GTID which means no transactions have been executed.
33
38
  */
34
- static ZERO: ReplicatedGTID;
35
- constructor(options: ReplicatedGTIDSpecification);
39
+ static ZERO(serverUuid: string): ReplicatedGTID;
36
40
  /**
37
41
  * Get the BinLog position of this replicated GTID event
38
42
  */
39
43
  get position(): BinLogPosition;
40
44
  /**
41
- * Get the raw Global Transaction ID. This of the format `server_id:transaction_ranges`
45
+ * Get the raw Global Transaction ID. This is of the format `server_uuid:transaction_id`
42
46
  */
43
47
  get raw(): string;
44
- get serverId(): string;
48
+ /**
49
+ * The server UUID of the server this transaction originated from
50
+ */
51
+ get serverUuid(): string;
45
52
  /**
46
53
  * Transforms a GTID into a comparable string format, ensuring lexicographical
47
54
  * order aligns with the GTID's relative age. This assumes that all GTIDs
@@ -1,3 +1,4 @@
1
+ import { ReplicationAssertionError } from '@powersync/lib-services-framework';
1
2
  import * as uuid from 'uuid';
2
3
  import * as mysql_utils from '../utils/mysql-utils.js';
3
4
  /**
@@ -7,36 +8,47 @@ import * as mysql_utils from '../utils/mysql-utils.js';
7
8
  */
8
9
  export class ReplicatedGTID {
9
10
  options;
11
+ constructor(options) {
12
+ const rawGtid = options.rawGtid.trim();
13
+ assertSingleGtid(rawGtid);
14
+ this.options = { ...options, rawGtid };
15
+ }
10
16
  static fromSerialized(comparable) {
11
17
  return new ReplicatedGTID(ReplicatedGTID.deserialize(comparable));
12
18
  }
13
19
  static deserialize(comparable) {
14
20
  const components = comparable.split('|');
15
- if (components.length < 3) {
16
- throw new Error(`Invalid serialized GTID: ${comparable}`);
21
+ if (components.length < 4) {
22
+ throw new ReplicationAssertionError(`Invalid serialized GTID: ${comparable}`);
23
+ }
24
+ const offset = parseInt(components[3], 10);
25
+ if (Number.isNaN(offset)) {
26
+ throw new ReplicationAssertionError(`Invalid BinLog offset in serialized GTID: ${comparable}`);
17
27
  }
18
28
  return {
19
- raw_gtid: components[1],
29
+ rawGtid: components[1],
20
30
  position: {
21
31
  filename: components[2],
22
- offset: parseInt(components[3])
32
+ offset: offset
23
33
  }
24
34
  };
25
35
  }
26
36
  static fromBinLogEvent(event) {
27
- const { raw_gtid, position } = event;
28
- const stringGTID = `${uuid.stringify(raw_gtid.server_id)}:${raw_gtid.transaction_range}`;
37
+ const { rawGtid, position } = event;
38
+ const stringGTID = `${uuid.stringify(rawGtid.serverUuid)}:${rawGtid.transactionId}`;
29
39
  return new ReplicatedGTID({
30
- raw_gtid: stringGTID,
40
+ rawGtid: stringGTID,
31
41
  position
32
42
  });
33
43
  }
34
44
  /**
35
45
  * Special case for the zero GTID which means no transactions have been executed.
36
46
  */
37
- static ZERO = new ReplicatedGTID({ raw_gtid: '0:0', position: { filename: '', offset: 0 } });
38
- constructor(options) {
39
- this.options = options;
47
+ static ZERO(serverUuid) {
48
+ return new ReplicatedGTID({
49
+ rawGtid: `${serverUuid}:0`,
50
+ position: { filename: '', offset: 0 }
51
+ });
40
52
  }
41
53
  /**
42
54
  * Get the BinLog position of this replicated GTID event
@@ -45,13 +57,16 @@ export class ReplicatedGTID {
45
57
  return this.options.position;
46
58
  }
47
59
  /**
48
- * Get the raw Global Transaction ID. This of the format `server_id:transaction_ranges`
60
+ * Get the raw Global Transaction ID. This is of the format `server_uuid:transaction_id`
49
61
  */
50
62
  get raw() {
51
- return this.options.raw_gtid;
63
+ return this.options.rawGtid;
52
64
  }
53
- get serverId() {
54
- return this.options.raw_gtid.split(':')[0];
65
+ /**
66
+ * The server UUID of the server this transaction originated from
67
+ */
68
+ get serverUuid() {
69
+ return this.options.rawGtid.split(':')[0];
55
70
  }
56
71
  /**
57
72
  * Transforms a GTID into a comparable string format, ensuring lexicographical
@@ -63,17 +78,8 @@ export class ReplicatedGTID {
63
78
  */
64
79
  get comparable() {
65
80
  const { raw, position } = this;
66
- const [, transactionRanges] = this.raw.split(':');
67
- // This means no transactions have been executed on the database yet
68
- if (!transactionRanges) {
69
- return ReplicatedGTID.ZERO.comparable;
70
- }
71
- let maxTransactionId = 0;
72
- for (const range of transactionRanges.split(',')) {
73
- const [start, end] = range.split('-');
74
- maxTransactionId = Math.max(maxTransactionId, parseInt(start, 10), parseInt(end || start, 10));
75
- }
76
- const paddedTransactionId = maxTransactionId.toString().padStart(16, '0');
81
+ const [, transactionId] = this.raw.split(':');
82
+ const paddedTransactionId = transactionId.toString().padStart(16, '0');
77
83
  return [paddedTransactionId, raw, position.filename, position.offset].join('|');
78
84
  }
79
85
  toString() {
@@ -112,4 +118,22 @@ export class ReplicatedGTID {
112
118
  logFiles.slice(startFileIndex + 1, endFileIndex).reduce((sum, file) => sum + file['File_size'], 0));
113
119
  }
114
120
  }
121
+ /**
122
+ * Asserts that the given gtid string is a single GTID of the form `server_uuid:transaction_id`,
123
+ * not a GTID set such as `uuid:1-17` or `uuid1:1,uuid2:2`.
124
+ */
125
+ function assertSingleGtid(gtid) {
126
+ // GTID sets join UUID sets with commas (often with newlines: `,\n`).
127
+ if (gtid.includes(',') || gtid.includes('\n')) {
128
+ throw new ReplicationAssertionError(`Expected a single GTID (server_uuid:transaction_id), got a GTID set: ${gtid}`);
129
+ }
130
+ const parts = gtid.split(':');
131
+ if (parts.length !== 2 || parts[0].length === 0 || parts[1].length === 0) {
132
+ throw new ReplicationAssertionError(`Expected a single GTID (server_uuid:transaction_id), got: ${gtid}`);
133
+ }
134
+ // Intervals use `n-m`; a single transaction id must be a non-negative integer.
135
+ if (!/^\d+$/.test(parts[1])) {
136
+ throw new ReplicationAssertionError(`Expected a single transaction id, got: ${gtid}`);
137
+ }
138
+ }
115
139
  //# sourceMappingURL=ReplicatedGTID.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ReplicatedGTID.js","sourceRoot":"","sources":["../../src/common/ReplicatedGTID.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReplicatedGTID.js","sourceRoot":"","sources":["../../src/common/ReplicatedGTID.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,22 @@
1
1
  import * as mysql_utils from '../utils/mysql-utils.js';
2
2
  const MIN_SUPPORTED_VERSION = '5.7.0';
3
+ const REPLICA_TERMINOLOGY_VERSION = '8.0.22';
3
4
  export async function checkSourceConfiguration(connection) {
4
5
  const errors = [];
5
6
  const version = await mysql_utils.getMySQLVersion(connection);
6
7
  if (!mysql_utils.isVersionAtLeast(version, MIN_SUPPORTED_VERSION)) {
7
8
  errors.push(`MySQL versions older than ${MIN_SUPPORTED_VERSION} are not supported. Your version is: ${version}.`);
8
9
  }
10
+ const replicaStatusQuery = mysql_utils.isVersionAtLeast(version, REPLICA_TERMINOLOGY_VERSION)
11
+ ? 'SHOW REPLICA STATUS'
12
+ : 'SHOW SLAVE STATUS';
13
+ const [replicaStatuses] = await mysql_utils.retriedQuery({
14
+ connection,
15
+ query: replicaStatusQuery
16
+ });
17
+ if (replicaStatuses.length > 0) {
18
+ errors.push('Connecting PowerSync to a MySQL replica is not supported. Please connect PowerSync directly to the primary server.');
19
+ }
9
20
  const [[result]] = await mysql_utils.retriedQuery({
10
21
  connection,
11
22
  query: `
@@ -1 +1 @@
1
- {"version":3,"file":"check-source-configuration.js","sourceRoot":"","sources":["../../src/common/check-source-configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAmC;IAChF,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,6BAA6B,qBAAqB,wCAAwC,OAAO,GAAG,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAChD,UAAU;QACV,KAAK,EAAE;;;;;;;OAOJ;KACJ,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,+CAA+C,MAAM,CAAC,SAAS,qBAAqB,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,iFAAiF,MAAM,CAAC,SAAS,sCAAsC,CACxI,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAC5D,UAAU;QACV,KAAK,EAAE,sCAAsC;KAC9C,CAAC,CAAC;IAEH,IAAI,kBAAkB,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC5F,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QACxD,UAAU;QACV,KAAK,EAAE,gDAAgD;KACxD,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CACT,mEAAmE,cAAc,CAAC,KAAK,IAAI,SAAS,IAAI;YACtG,iFAAiF;YACjF,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"check-source-configuration.js","sourceRoot":"","sources":["../../src/common/check-source-configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,OAAO,CAAC;AACtC,MAAM,2BAA2B,GAAG,QAAQ,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAmC;IAChF,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,6BAA6B,qBAAqB,wCAAwC,OAAO,GAAG,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,kBAAkB,GAAG,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,2BAA2B,CAAC;QAC3F,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,mBAAmB,CAAC;IACxB,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QACvD,UAAU;QACV,KAAK,EAAE,kBAAkB;KAC1B,CAAC,CAAC;IAEH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CACT,oHAAoH,CACrH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAChD,UAAU;QACV,KAAK,EAAE;;;;;;;OAOJ;KACJ,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,+CAA+C,MAAM,CAAC,SAAS,qBAAqB,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,iFAAiF,MAAM,CAAC,SAAS,sCAAsC,CACxI,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;IAED,oBAAoB;IACpB,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAC5D,UAAU;QACV,KAAK,EAAE,sCAAsC;KAC9C,CAAC,CAAC;IAEH,IAAI,kBAAkB,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC5F,CAAC;IAED,6CAA6C;IAC7C,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QACxD,UAAU;QACV,KAAK,EAAE,gDAAgD;KACxD,CAAC,CAAC;IAEH,IAAI,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CACT,mEAAmE,cAAc,CAAC,KAAK,IAAI,SAAS,IAAI;YACtG,iFAAiF;YACjF,4EAA4E,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,7 +1,17 @@
1
1
  import mysqlPromise from 'mysql2/promise';
2
2
  import { ReplicatedGTID } from './ReplicatedGTID.js';
3
+ /**
4
+ * Gets the `@@server_uuid` of the current connected server
5
+ */
6
+ export declare function readServerUuid(connection: mysqlPromise.Connection): Promise<string>;
3
7
  /**
4
8
  * Gets the current master HEAD GTID
5
9
  */
6
10
  export declare function readExecutedGtid(connection: mysqlPromise.Connection): Promise<ReplicatedGTID>;
7
- export declare function isBinlogStillAvailable(connection: mysqlPromise.Connection, binlogFile: string): Promise<boolean>;
11
+ export declare function getLatestActiveGtid(gtidSets: string[], activeServerUuid: string): Promise<string>;
12
+ /**
13
+ * Checks that a stored resume GTID is still part of the server's executed history and that its
14
+ * binlog coordinate is still readable. This detects source rewinds where a restored server keeps
15
+ * the same UUID or recreates a binlog with the same filename but a shorter length.
16
+ */
17
+ export declare function isGtidPositionStillAvailable(connection: mysqlPromise.Connection, gtid: ReplicatedGTID): Promise<boolean>;
@@ -1,5 +1,15 @@
1
1
  import * as mysql_utils from '../utils/mysql-utils.js';
2
2
  import { ReplicatedGTID } from './ReplicatedGTID.js';
3
+ /**
4
+ * Gets the `@@server_uuid` of the current connected server
5
+ */
6
+ export async function readServerUuid(connection) {
7
+ const [[result]] = await mysql_utils.retriedQuery({
8
+ connection,
9
+ query: `SELECT @@server_uuid AS server_uuid`
10
+ });
11
+ return result.server_uuid;
12
+ }
3
13
  /**
4
14
  * Gets the current master HEAD GTID
5
15
  */
@@ -25,17 +35,69 @@ export async function readExecutedGtid(connection) {
25
35
  filename: binlogStatus.File,
26
36
  offset: parseInt(binlogStatus.Position)
27
37
  };
38
+ const activeServerUuid = await readServerUuid(connection);
39
+ const executedGtidSet = binlogStatus.Executed_Gtid_Set.trim();
40
+ if (executedGtidSet.length === 0) {
41
+ // New server with no transactions executed yet. Keep the current binlog
42
+ // coordinate so this synthetic GTID can still be validated after a restart.
43
+ return new ReplicatedGTID({
44
+ rawGtid: `${activeServerUuid}:0`,
45
+ position
46
+ });
47
+ }
48
+ const gtidSets = executedGtidSet.split(',');
49
+ const latestActiveGtid = await getLatestActiveGtid(gtidSets, activeServerUuid);
28
50
  return new ReplicatedGTID({
29
- // The head always points to the next position to start replication from
30
- position,
31
- raw_gtid: binlogStatus.Executed_Gtid_Set
51
+ rawGtid: latestActiveGtid,
52
+ position
32
53
  });
33
54
  }
34
- export async function isBinlogStillAvailable(connection, binlogFile) {
55
+ export async function getLatestActiveGtid(gtidSets, activeServerUuid) {
56
+ for (const gtidSet of gtidSets) {
57
+ const [serverUuid, ...intervals] = gtidSet.trim().split(':');
58
+ if (serverUuid === activeServerUuid) {
59
+ let maxTransactionId = null;
60
+ for (const interval of intervals) {
61
+ const [start, end] = interval.split('-');
62
+ const startId = parseInt(start, 10);
63
+ const endId = end !== undefined ? parseInt(end, 10) : startId;
64
+ if (!Number.isNaN(startId)) {
65
+ maxTransactionId = Math.max(maxTransactionId ?? 0, startId);
66
+ }
67
+ if (!Number.isNaN(endId)) {
68
+ maxTransactionId = Math.max(maxTransactionId ?? 0, endId);
69
+ }
70
+ }
71
+ return activeServerUuid + ':' + maxTransactionId;
72
+ }
73
+ }
74
+ return `${activeServerUuid}:0`;
75
+ }
76
+ /**
77
+ * Checks that a stored resume GTID is still part of the server's executed history and that its
78
+ * binlog coordinate is still readable. This detects source rewinds where a restored server keeps
79
+ * the same UUID or recreates a binlog with the same filename but a shorter length.
80
+ */
81
+ export async function isGtidPositionStillAvailable(connection, gtid) {
35
82
  const [logFiles] = await mysql_utils.retriedQuery({
36
83
  connection,
37
84
  query: `SHOW BINARY LOGS;`
38
85
  });
39
- return logFiles.some((f) => f['Log_name'] == binlogFile);
86
+ const logFile = logFiles.find((file) => file['Log_name'] == gtid.position.filename);
87
+ if (!logFile || Number(logFile['File_size']) < gtid.position.offset) {
88
+ return false;
89
+ }
90
+ // Transaction zero is PowerSync's synthetic position before the first
91
+ // transaction from this server UUID. It is not valid MySQL GTID_SET syntax,
92
+ // so its availability is determined by the binlog coordinate above.
93
+ if (gtid.raw.split(':')[1] === '0') {
94
+ return true;
95
+ }
96
+ const [[result]] = await mysql_utils.retriedQuery({
97
+ connection,
98
+ query: `SELECT GTID_SUBSET(?, @@GLOBAL.gtid_executed) AS is_executed`,
99
+ params: [gtid.raw]
100
+ });
101
+ return result.is_executed === 1;
40
102
  }
41
103
  //# sourceMappingURL=read-executed-gtid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-executed-gtid.js","sourceRoot":"","sources":["../../src/common/read-executed-gtid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAmC;IACxE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,YAAwC,CAAC;IAC7C,IAAI,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACnD,8CAA8C;QAC9C,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;YACtD,UAAU;YACV,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;QACH,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;YACtD,UAAU;YACV,KAAK,EAAE,oBAAoB;SAC5B,CAAC,CAAC;QACH,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,YAAY,CAAC,IAAI;QAC3B,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;KACxC,CAAC;IAEF,OAAO,IAAI,cAAc,CAAC;QACxB,wEAAwE;QACxE,QAAQ;QACR,QAAQ,EAAE,YAAY,CAAC,iBAAiB;KACzC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAmC,EACnC,UAAkB;IAElB,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAChD,UAAU;QACV,KAAK,EAAE,mBAAmB;KAC3B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"read-executed-gtid.js","sourceRoot":"","sources":["../../src/common/read-executed-gtid.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,9 @@ export class BinLogReplicationJob extends replication.AbstractReplicationJob {
13
13
  return this.options.storage.replicationStreamName;
14
14
  }
15
15
  async keepAlive() {
16
- // Keepalives are handled by the binlog heartbeat mechanism
16
+ // The binlog connection is kept alive by the MySQL server heartbeat mechanism. The control
17
+ // connection carries no traffic between metadata queries, so probe its liveness here.
18
+ this.lastStream?.probeControlConnection();
17
19
  }
18
20
  async replicate() {
19
21
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"BinLogReplicationJob.js","sourceRoot":"","sources":["../../src/replication/BinLogReplicationJob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BinLogReplicationJob.js","sourceRoot":"","sources":["../../src/replication/BinLogReplicationJob.ts"],"names":[],"mappings":"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"}
@@ -21,8 +21,10 @@ export declare class BinLogStream {
21
21
  private readonly connections;
22
22
  private readonly abortSignal;
23
23
  private readonly logger;
24
+ private activeServerUuid;
24
25
  private tableCache;
25
26
  private replicationLag;
27
+ private binLogListener;
26
28
  constructor(options: BinLogStreamOptions);
27
29
  get connectionTag(): string;
28
30
  private get metrics();
@@ -45,6 +47,7 @@ export declare class BinLogStream {
45
47
  startInitialReplication(): Promise<void>;
46
48
  private snapshotTable;
47
49
  replicate(): Promise<void>;
50
+ private ensureActiveServerUuid;
48
51
  initReplication(): Promise<void>;
49
52
  private getTables;
50
53
  streamChanges(): Promise<void>;
@@ -56,5 +59,10 @@ export declare class BinLogStream {
56
59
  private toSQLiteRow;
57
60
  private writeChange;
58
61
  getReplicationLagMillis(): number | undefined;
62
+ /**
63
+ * Probe the liveness of the BinLog Listener's control connection. Called from the replication
64
+ * job's keepAlive. Does nothing before streaming starts (during the initial snapshot).
65
+ */
66
+ probeControlConnection(): void;
59
67
  tryRollback(promiseConnection: mysqlPromise.Connection): Promise<void>;
60
68
  }