diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-03 10:29:50 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-03 11:05:19 +0200 |
commit | af5947f433e98d0447960da07856eb207dd09e01 (patch) | |
tree | fbb21b374bf87d1462e5f7c22f0a35d795d31f95 /storage/innobase/mtr/mtr0log.cc | |
parent | 87839258f86196dfca1d3af2a947e570e13eeb94 (diff) | |
download | mariadb-git-af5947f433e98d0447960da07856eb207dd09e01.tar.gz |
MDEV-21174: Replace mlog_write_string() with mtr_t::memcpy()
mtr_t::memcpy(): Replaces mlog_write_string(), mlog_log_string().
The buf_block_t is passed a parameter, so that
mlog_write_initial_log_record_low() can be used instead of
mlog_write_initial_log_record_fast().
fil_space_crypt_t::write_page0(): Remove the fil_space_t* parameter.
Diffstat (limited to 'storage/innobase/mtr/mtr0log.cc')
-rw-r--r-- | storage/innobase/mtr/mtr0log.cc | 77 |
1 files changed, 26 insertions, 51 deletions
diff --git a/storage/innobase/mtr/mtr0log.cc b/storage/innobase/mtr/mtr0log.cc index cb2b5a84354..60ed8830593 100644 --- a/storage/innobase/mtr/mtr0log.cc +++ b/storage/innobase/mtr/mtr0log.cc @@ -298,63 +298,38 @@ void mtr_t::log_write(const buf_block_t &block, byte *ptr, mlog_id_t l, mlog_close(this, log_ptr); } -/********************************************************//** -Writes a string to a file page buffered in the buffer pool. Writes the -corresponding log record to the mini-transaction log. */ -void -mlog_write_string( -/*==============*/ - byte* ptr, /*!< in: pointer where to write */ - const byte* str, /*!< in: string to write */ - ulint len, /*!< in: string length */ - mtr_t* mtr) /*!< in: mini-transaction handle */ -{ - ut_ad(ptr && mtr); - ut_a(len < srv_page_size); - - memcpy(ptr, str, len); - - mlog_log_string(ptr, len, mtr); -} - -/********************************************************//** -Logs a write of a string to a file page buffered in the buffer pool. -Writes the corresponding log record to the mini-transaction log. */ -void -mlog_log_string( -/*============*/ - byte* ptr, /*!< in: pointer written to */ - ulint len, /*!< in: string length */ - mtr_t* mtr) /*!< in: mini-transaction handle */ +/** Log a write of a byte string to a page. +@param[in] b buffer page +@param[in] ofs byte offset from b->frame +@param[in] str the data to write +@param[in] len length of the data to write */ +void mtr_t::memcpy(const buf_block_t &b, ulint ofs, ulint len) { - byte* log_ptr; - - ut_ad(ptr && mtr); - ut_ad(len <= srv_page_size); - - log_ptr = mlog_open(mtr, 30); - - /* If no logging is requested, we may return now */ - if (log_ptr == NULL) { - - return; - } - - log_ptr = mlog_write_initial_log_record_fast(ptr, MLOG_WRITE_STRING, - log_ptr, mtr); - mach_write_to_2(log_ptr, page_offset(ptr)); - log_ptr += 2; - - mach_write_to_2(log_ptr, len); - log_ptr += 2; + ut_ad(len); + ut_ad(ofs <= ulint(srv_page_size)); + ut_ad(ofs + len <= ulint(srv_page_size)); + ut_ad(ofs + len < PAGE_DATA || !b.page.zip.data || + mach_read_from_2(b.frame + FIL_PAGE_TYPE) <= FIL_PAGE_TYPE_ZBLOB2); - mlog_close(mtr, log_ptr); + set_modified(); + if (get_log_mode() != MTR_LOG_ALL) + { + ut_ad(get_log_mode() == MTR_LOG_NONE || + get_log_mode() == MTR_LOG_NO_REDO); + return; + } - mlog_catenate_string(mtr, ptr, len); + byte *l= get_log()->open(11 + 2 + 2); + l= mlog_write_initial_log_record_low(MLOG_WRITE_STRING, b.page.id.space(), + b.page.id.page_no(), l, this); + mach_write_to_2(l, ofs); + mach_write_to_2(l + 2, len); + mlog_close(this, l + 4); + mlog_catenate_string(this, b.frame + ofs, len); } /********************************************************//** -Parses a log record written by mlog_write_string. +Parses a log record written by mtr_t::memcpy(). @return parsed record end, NULL if not a complete record */ const byte* mlog_parse_string( |