diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-02-20 15:10:03 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-02-20 21:36:36 +0200 |
commit | 947efe17ed8188ca4feef6deb0c2831a246b5c8f (patch) | |
tree | 1df8380c4c59cfb9f119f89d3022b66edb5bd610 /storage/innobase/trx/trx0trx.cc | |
parent | f6544353e0c84d14a333525ba26ebd30bf125615 (diff) | |
download | mariadb-git-947efe17ed8188ca4feef6deb0c2831a246b5c8f.tar.gz |
MDEV-15158 On commit, do not write to the TRX_SYS page
This is based on a prototype by
Thirunarayanan Balathandayuthapani <thiru@mariadb.com>.
Binlog and Galera write-set replication information was written into
TRX_SYS page on each commit. Instead of writing to the TRX_SYS during
normal operation, InnoDB can make use of rollback segment header pages,
which are already being written to during a commit.
The following list of fields in rollback segment header page are added:
TRX_RSEG_BINLOG_OFFSET
TRX_RSEG_BINLOG_NAME (NUL-terminated; empty name = not present)
TRX_RSEG_WSREP_XID_FORMAT (0=not present; 1=present)
TRX_RSEG_WSREP_XID_GTRID
TRX_RSEG_WSREP_XID_BQUAL
TRX_RSEG_WSREP_XID_DATA
trx_sys_t: Introduce the fields
recovered_binlog_filename, recovered_binlog_offset, recovered_wsrep_xid.
To facilitate upgrade from older mysql or mariaDB versions, we will read
the information in TRX_SYS page. It will be overridden by the
information that we find in rollback segment header pages.
Mariabackup --prepare will read the metadata from the rollback
segment header pages via trx_rseg_array_init(). It will still
not read any undo log pages or recover any transactions.
Diffstat (limited to 'storage/innobase/trx/trx0trx.cc')
-rw-r--r-- | storage/innobase/trx/trx0trx.cc | 39 |
1 files changed, 9 insertions, 30 deletions
diff --git a/storage/innobase/trx/trx0trx.cc b/storage/innobase/trx/trx0trx.cc index 7b104653cf9..0263b42812a 100644 --- a/storage/innobase/trx/trx0trx.cc +++ b/storage/innobase/trx/trx0trx.cc @@ -885,6 +885,14 @@ trx_lists_init_at_db_start() ut_ad(!srv_was_started); ut_ad(!purge_sys); + if (srv_operation == SRV_OPERATION_RESTORE) { + /* mariabackup --prepare only deals with + the redo log and the data files, not with + transactions or the data dictionary. */ + trx_rseg_array_init(); + return; + } + purge_sys = UT_NEW_NOKEY(purge_sys_t()); if (srv_force_recovery >= SRV_FORCE_NO_UNDO_LOG_SCAN) { @@ -1303,36 +1311,7 @@ trx_write_serialisation_history( MONITOR_INC(MONITOR_TRX_COMMIT_UNDO); -#ifdef WITH_WSREP - const bool update_wsrep = wsrep_is_wsrep_xid(trx->xid); -#endif - const bool update_binlog_pos = trx->mysql_log_file_name - && *trx->mysql_log_file_name; - if (!update_binlog_pos -#ifdef WITH_WSREP - && !update_wsrep -#endif - ) return; - - buf_block_t* block = trx_sysf_get(mtr); -#ifdef WITH_WSREP - if (update_wsrep) - trx_sys_update_wsrep_checkpoint(trx->xid, block, mtr); -#endif /* WITH_WSREP */ - - /* Update the latest MySQL binlog name and offset info - in trx sys header if MySQL binlogging is on or the database - server is a MySQL replication slave */ - - if (update_binlog_pos) { - - trx_sys_update_mysql_binlog_offset( - trx->mysql_log_file_name, - trx->mysql_log_offset, - block, mtr); - - trx->mysql_log_file_name = NULL; - } + trx->mysql_log_file_name = NULL; } /******************************************************************** |