diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-01-21 15:46:20 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-02-13 18:19:15 +0200 |
commit | f37a29dd6624db6a1baece54e7625a16137ec383 (patch) | |
tree | 2ee35cb74c6f0099a853499d736cea2dd25612e4 /storage/innobase/mtr | |
parent | 8a039ee107de6deec6377a6e0686629a3080abae (diff) | |
download | mariadb-git-f37a29dd6624db6a1baece54e7625a16137ec383.tar.gz |
MDEV-12353: Write log by mtr_t member functions only
mtr_t::log_write_low(): Replaces mlog_write_initial_log_record_low().
mtr_t::log_file_op(): Replaces fil_op_write_log().
mtr_t::free(): Write MLOG_INIT_FREE_PAGE.
mtr_t::init(): Write MLOG_INIT_FILE_PAGE2.
mtr_t::page_create(): Write record about the partial initialization
of an index page.
mlog_catenate_ulint(), mlog_catenate_string(),
mlog_open(), mlog_close(): Remove.
Diffstat (limited to 'storage/innobase/mtr')
-rw-r--r-- | storage/innobase/mtr/mtr0log.cc | 91 | ||||
-rw-r--r-- | storage/innobase/mtr/mtr0mtr.cc | 16 |
2 files changed, 39 insertions, 68 deletions
diff --git a/storage/innobase/mtr/mtr0log.cc b/storage/innobase/mtr/mtr0log.cc index 076fed2ea21..63a313ff0b8 100644 --- a/storage/innobase/mtr/mtr0log.cc +++ b/storage/innobase/mtr/mtr0log.cc @@ -33,24 +33,7 @@ Created 12/7/1995 Heikki Tuuri #include "dict0boot.h" /********************************************************//** -Catenates n bytes to the mtr log. */ -void -mlog_catenate_string( -/*=================*/ - mtr_t* mtr, /*!< in: mtr */ - const byte* str, /*!< in: string to write */ - ulint len) /*!< in: string length */ -{ - if (mtr_get_log_mode(mtr) == MTR_LOG_NONE) { - - return; - } - - mtr->get_log()->push(str, ib_uint32_t(len)); -} - -/********************************************************//** -Parses an initial log record written by mlog_write_initial_log_record_low(). +Parses an initial log record written by mtr_t::write_low(). @return parsed record end, NULL if not a complete record */ const byte* mlog_parse_initial_log_record( @@ -215,24 +198,23 @@ mlog_parse_nbytes( /** Write a log record for writing 1, 2, 4, or 8 bytes. +@param[in] type number of bytes to write @param[in] block file page -@param[in,out] ptr pointer in file page -@param[in] l number of bytes to write -@param[in,out] log_ptr log record buffer -@param[in,out] mtr mini-transaction */ -static byte * -mlog_log_write_low(const buf_block_t &block, byte *ptr, mlog_id_t l, - byte *log_ptr, mtr_t &mtr) +@param[in] ptr pointer within block.frame +@param[in,out] l log record buffer +@return new end of mini-transaction log */ +byte *mtr_t::log_write_low(mlog_id_t type, const buf_block_t &block, + const byte *ptr, byte *l) { + ut_ad(type == MLOG_1BYTE || type == MLOG_2BYTES || type == MLOG_4BYTES || + type == MLOG_8BYTES); ut_ad(block.page.state == BUF_BLOCK_FILE_PAGE); ut_ad(ptr >= block.frame + FIL_PAGE_OFFSET); - ut_ad(ptr + unsigned(l) <= &block.frame[srv_page_size - FIL_PAGE_DATA_END]); - log_ptr= mlog_write_initial_log_record_low(l, - block.page.id.space(), - block.page.id.page_no(), - log_ptr, &mtr); - mach_write_to_2(log_ptr, page_offset(ptr)); - return log_ptr + 2; + ut_ad(ptr + unsigned(type) <= + &block.frame[srv_page_size - FIL_PAGE_DATA_END]); + l= log_write_low(type, block.page.id, l); + mach_write_to_2(l, page_offset(ptr)); + return l + 2; } /** @@ -246,9 +228,9 @@ void mtr_t::log_write(const buf_block_t &block, byte *ptr, mlog_id_t l, byte *log_ptr, uint32_t val) { ut_ad(l == MLOG_1BYTE || l == MLOG_2BYTES || l == MLOG_4BYTES); - log_ptr= mlog_log_write_low(block, ptr, l, log_ptr, *this); + log_ptr= log_write_low(l, block, ptr, log_ptr); log_ptr+= mach_write_compressed(log_ptr, val); - mlog_close(this, log_ptr); + m_log.close(log_ptr); } /** @@ -262,9 +244,9 @@ void mtr_t::log_write(const buf_block_t &block, byte *ptr, mlog_id_t l, byte *log_ptr, uint64_t val) { ut_ad(l == MLOG_8BYTES); - log_ptr= mlog_log_write_low(block, ptr, l, log_ptr, *this); + log_ptr= log_write_low(l, block, ptr, log_ptr); log_ptr+= mach_u64_write_compressed(log_ptr, val); - mlog_close(this, log_ptr); + m_log.close(log_ptr); } /** Log a write of a byte string to a page. @@ -278,23 +260,20 @@ void mtr_t::memcpy(const buf_block_t &b, ulint ofs, ulint len) ut_ad(ofs + len <= ulint(srv_page_size)); set_modified(); - if (get_log_mode() != MTR_LOG_ALL) + if (m_log_mode != MTR_LOG_ALL) { - ut_ad(get_log_mode() == MTR_LOG_NONE || - get_log_mode() == MTR_LOG_NO_REDO); + ut_ad(m_log_mode == MTR_LOG_NONE || m_log_mode == MTR_LOG_NO_REDO); return; } ut_ad(ofs + len < PAGE_DATA || !b.page.zip.data || mach_read_from_2(b.frame + FIL_PAGE_TYPE) <= FIL_PAGE_TYPE_ZBLOB2); - 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); + byte *l= log_write_low(MLOG_WRITE_STRING, b.page.id, m_log.open(11 + 2 + 2)); 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); + m_log.close(l + 4); + m_log.push(b.frame + ofs, static_cast<uint32_t>(len)); } /** Write a byte string to a ROW_FORMAT=COMPRESSED page. @@ -310,20 +289,17 @@ void mtr_t::zmemcpy(const buf_page_t &b, ulint offset, ulint len) mach_read_from_2(b.zip.data + FIL_PAGE_TYPE) == FIL_PAGE_RTREE); set_modified(); - if (get_log_mode() != MTR_LOG_ALL) + if (m_log_mode != MTR_LOG_ALL) { - ut_ad(get_log_mode() == MTR_LOG_NONE || - get_log_mode() == MTR_LOG_NO_REDO); + ut_ad(m_log_mode == MTR_LOG_NONE || m_log_mode == MTR_LOG_NO_REDO); return; } - byte *l= get_log()->open(11 + 2 + 2); - l= mlog_write_initial_log_record_low(MLOG_ZIP_WRITE_STRING, b.id.space(), - b.id.page_no(), l, this); + byte *l= log_write_low(MLOG_ZIP_WRITE_STRING, b.id, m_log.open(11 + 2 + 2)); mach_write_to_2(l, offset); mach_write_to_2(l + 2, len); - mlog_close(this, l + 4); - mlog_catenate_string(this, b.zip.data + offset, len); + m_log.close(l + 4); + m_log.push(b.zip.data + offset, static_cast<uint32_t>(len)); } /********************************************************//** @@ -392,20 +368,17 @@ void mtr_t::memset(const buf_block_t* b, ulint ofs, ulint len, byte val) ::memset(ofs + b->frame, val, len); set_modified(); - if (get_log_mode() != MTR_LOG_ALL) + if (m_log_mode != MTR_LOG_ALL) { - ut_ad(get_log_mode() == MTR_LOG_NONE || - get_log_mode() == MTR_LOG_NO_REDO); + ut_ad(m_log_mode == MTR_LOG_NONE || m_log_mode == MTR_LOG_NO_REDO); return; } - byte *l= get_log()->open(11 + 2 + 2 + 1); - l= mlog_write_initial_log_record_low(MLOG_MEMSET, b->page.id.space(), - b->page.id.page_no(), l, this); + byte *l= log_write_low(MLOG_MEMSET, b->page.id, m_log.open(11 + 2 + 2 + 1)); mach_write_to_2(l, ofs); mach_write_to_2(l + 2, len); l[4]= val; - mlog_close(this, l + 5); + m_log.close(l + 5); } /********************************************************//** diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc index ca98417c353..cacdb4878c8 100644 --- a/storage/innobase/mtr/mtr0mtr.cc +++ b/storage/innobase/mtr/mtr0mtr.cc @@ -454,7 +454,7 @@ void mtr_t::commit_files(lsn_t checkpoint_lsn) ut_ad(log_mutex_own()); ut_ad(is_active()); ut_ad(!is_inside_ibuf()); - ut_ad(get_log_mode() == MTR_LOG_ALL); + ut_ad(m_log_mode == MTR_LOG_ALL); ut_ad(!m_made_dirty); ut_ad(m_memo.size() == 0); ut_ad(!srv_read_only_mode); @@ -467,7 +467,7 @@ void mtr_t::commit_files(lsn_t checkpoint_lsn) *m_log.front()->begin() |= MLOG_SINGLE_REC_FLAG; break; default: - mlog_catenate_ulint(&m_log, MLOG_MULTI_REC_END, MLOG_1BYTE); + *m_log.push<byte*>(1) = MLOG_MULTI_REC_END; } if (checkpoint_lsn) { @@ -497,7 +497,7 @@ mtr_t::is_named_space(ulint space) const { ut_ad(!m_user_space || m_user_space->id != TRX_SYS_SPACE); - switch (get_log_mode()) { + switch (m_log_mode) { case MTR_LOG_NONE: case MTR_LOG_NO_REDO: return(true); @@ -517,7 +517,7 @@ bool mtr_t::is_named_space(const fil_space_t* space) const { ut_ad(!m_user_space || m_user_space->id != TRX_SYS_SPACE); - switch (get_log_mode()) { + switch (m_log_mode) { case MTR_LOG_NONE: case MTR_LOG_NO_REDO: return true; @@ -548,7 +548,7 @@ mtr_t::x_lock_space(ulint space_id, const char* file, unsigned line) } else if ((space = m_user_space) && space_id == space->id) { } else { space = fil_space_get(space_id); - ut_ad(get_log_mode() != MTR_LOG_NO_REDO + ut_ad(m_log_mode != MTR_LOG_NO_REDO || space->purpose == FIL_TYPE_TEMPORARY || space->purpose == FIL_TYPE_IMPORT); } @@ -642,7 +642,7 @@ inline ulint mtr_t::prepare_write() this tablespace since the latest checkpoint, so some MLOG_FILE_NAME records were appended to m_log. */ ut_ad(m_n_log_recs > n_recs); - mlog_catenate_ulint(&m_log, MLOG_MULTI_REC_END, MLOG_1BYTE); + *m_log.push<byte*>(1) = MLOG_MULTI_REC_END; len = m_log.size(); } else { /* This was not the first time of dirtying a @@ -660,9 +660,7 @@ inline ulint mtr_t::prepare_write() /* Because this mini-transaction comprises multiple log records, append MLOG_MULTI_REC_END at the end. */ - - mlog_catenate_ulint(&m_log, MLOG_MULTI_REC_END, - MLOG_1BYTE); + *m_log.push<byte*>(1) = MLOG_MULTI_REC_END; len++; } } |