summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Lesin <vlad_lesin@mail.ru>2021-03-01 16:44:14 +0300
committerVlad Lesin <vlad_lesin@mail.ru>2021-03-01 16:44:14 +0300
commit3ff15ca16d86ef422187e2e0f4a0245cc31782fb (patch)
tree1963d803757dae1745d93458573c7084709fe36d
parent83bf2fa7929757a9d3aecb5f82d604a4413d4805 (diff)
downloadmariadb-git-bb-10.2-MDEV-24719-last-skipped-lsn-check.tar.gz
MDEV-24719 backport MDEV-24705 from 10.5 to 10.2, 10.3, 10.4bb-10.2-MDEV-24719-last-skipped-lsn-check
Do not mark page as modified if log mode is MTR_LOG_ALL. Set log mode to MTR_LOG_NO_REDO instead of MTR_LOG_ALL for the cases when pages must be marked as modified but no log records are written for them.
-rw-r--r--storage/innobase/btr/btr0btr.cc2
-rw-r--r--storage/innobase/include/mtr0mtr.ic10
-rw-r--r--storage/innobase/log/log0recv.cc6
-rw-r--r--storage/innobase/mtr/mtr0mtr.cc4
4 files changed, 8 insertions, 14 deletions
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index 511ac66d58c..8e0d7e14898 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -1496,7 +1496,7 @@ btr_page_reorganize_low(
data_size1 = page_get_data_size(page);
max_ins_size1 = page_get_max_insert_size_after_reorganize(page, 1);
/* Turn logging off */
- mtr_log_t log_mode = mtr_set_log_mode(mtr, MTR_LOG_NONE);
+ mtr_log_t log_mode = mtr_set_log_mode(mtr, MTR_LOG_NO_REDO);
temp_block = buf_block_alloc(buf_pool);
temp_page = temp_block->frame;
diff --git a/storage/innobase/include/mtr0mtr.ic b/storage/innobase/include/mtr0mtr.ic
index cf9756fb8c2..d3e8f6b0407 100644
--- a/storage/innobase/include/mtr0mtr.ic
+++ b/storage/innobase/include/mtr0mtr.ic
@@ -203,10 +203,6 @@ mtr_t::set_log_mode(mtr_log_t mode)
const mtr_log_t old_mode = m_log_mode;
switch (old_mode) {
- case MTR_LOG_NO_REDO:
- /* Once this mode is set, it must not be changed. */
- ut_ad(mode == MTR_LOG_NO_REDO || mode == MTR_LOG_NONE);
- return(old_mode);
case MTR_LOG_NONE:
if (mode == old_mode || mode == MTR_LOG_SHORT_INSERTS) {
/* Keep MTR_LOG_NONE. */
@@ -214,12 +210,10 @@ mtr_t::set_log_mode(mtr_log_t mode)
}
/* fall through */
case MTR_LOG_SHORT_INSERTS:
- ut_ad(mode == MTR_LOG_ALL);
+ ut_ad(mode == MTR_LOG_ALL || mode == MTR_LOG_NO_REDO);
/* fall through */
+ case MTR_LOG_NO_REDO:
case MTR_LOG_ALL:
- /* MTR_LOG_NO_REDO can only be set before generating
- any redo log records. */
- ut_ad(mode != MTR_LOG_NO_REDO || m_n_log_recs == 0);
m_log_mode = mode;
return(old_mode);
}
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index 7b0e991dfb3..711ba3b7e49 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -2267,7 +2267,7 @@ void recv_recover_page(buf_page_t* bpage)
{
mtr_t mtr;
mtr.start();
- mtr.set_log_mode(MTR_LOG_NONE);
+ mtr.set_log_mode(MTR_LOG_NO_REDO);
ut_ad(buf_page_get_state(bpage) == BUF_BLOCK_FILE_PAGE);
buf_block_t* block = reinterpret_cast<buf_block_t*>(bpage);
@@ -2385,7 +2385,7 @@ init_fail:
goto init_fail;
mtr.start();
- mtr.set_log_mode(MTR_LOG_NONE);
+ mtr.set_log_mode(MTR_LOG_NO_REDO);
buf_block_t* block = buf_page_create(page_id, page_size_t(space->flags),
&mtr);
if (recv_addr->state == RECV_PROCESSED)
@@ -2511,7 +2511,7 @@ ignore:
if (recv_addr->state == RECV_NOT_PROCESSED) {
apply:
mtr.start();
- mtr.set_log_mode(MTR_LOG_NONE);
+ mtr.set_log_mode(MTR_LOG_NO_REDO);
if (buf_block_t* block = buf_page_get_low(
page_id, univ_page_size,
RW_X_LATCH, NULL,
diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc
index 38a1b4ba7d0..88e683d1d11 100644
--- a/storage/innobase/mtr/mtr0mtr.cc
+++ b/storage/innobase/mtr/mtr0mtr.cc
@@ -1006,7 +1006,7 @@ struct FindModifiedSpacePage
void mtr_t::memo_modify_page(ulint space, ulint page)
{
- if (m_memo.empty())
+ if (m_log_mode == MTR_LOG_NONE || m_memo.empty())
return;
Iterate<FindModifiedSpacePage> iteration(
(FindModifiedSpacePage(space, page)));
@@ -1045,7 +1045,7 @@ struct FindModifiedPtr
@param[in] ptr pointer to within buffer frame */
void mtr_t::memo_modify_page(const byte *ptr)
{
- if (m_memo.empty())
+ if (m_log_mode == MTR_LOG_NONE || m_memo.empty())
return;
Iterate<FindModifiedPtr> iteration((FindModifiedPtr(ptr)));