summaryrefslogtreecommitdiff
path: root/storage/innobase/trx/trx0trx.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-02-20 15:10:03 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2018-02-20 21:36:36 +0200
commit947efe17ed8188ca4feef6deb0c2831a246b5c8f (patch)
tree1df8380c4c59cfb9f119f89d3022b66edb5bd610 /storage/innobase/trx/trx0trx.cc
parentf6544353e0c84d14a333525ba26ebd30bf125615 (diff)
downloadmariadb-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.cc39
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;
}
/********************************************************************