Comment 3 for bug 1228341

Revision history for this message
Raghavendra D Prabhu (raghavendra-prabhu) wrote :

=== modified file 'Percona-Server/storage/innobase/trx/trx0sys.cc'
--- Percona-Server/storage/innobase/trx/trx0sys.cc 2013-09-05 13:50:58 +0000
+++ Percona-Server/storage/innobase/trx/trx0sys.cc 2013-09-30 12:49:45 +0000
@@ -358,10 +358,12 @@
  mtr_start(&mtr);

  sys_header = trx_sysf_get(&mtr);
-
- if ((magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO
- + TRX_SYS_WSREP_XID_MAGIC_N_FLD))
- != TRX_SYS_WSREP_XID_MAGIC_N) {
+ magic = mach_read_from_4(sys_header + TRX_SYS_WSREP_XID_INFO + TRX_SYS_WSREP_XID_MAGIC_N_FLD);
+
+
+ if (magic != TRX_SYS_WSREP_XID_MAGIC_N) {
+ mtr_commit(&mtr);
+ mtr_start(&mtr);
                 memset(xid, 0, sizeof(*xid));
                 xid->formatID = -1;
                 trx_sys_update_wsrep_checkpoint(xid, &mtr);

is better (since mtr_commit is avoided twice)

but it is much better to not query sys_header again in trx_sys_update_wsrep_checkpoint