summaryrefslogtreecommitdiff
path: root/storage/innobase/mtr/mtr0log.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-12-03 10:29:50 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2019-12-03 11:05:19 +0200
commitaf5947f433e98d0447960da07856eb207dd09e01 (patch)
treefbb21b374bf87d1462e5f7c22f0a35d795d31f95 /storage/innobase/mtr/mtr0log.cc
parent87839258f86196dfca1d3af2a947e570e13eeb94 (diff)
downloadmariadb-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.cc77
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(