Skip to content

Commit

Permalink
MDEV-22931 mtr_t::mtr_t() allocates some memory
Browse files Browse the repository at this point in the history
mtr_t::m_freed_pages: Renamed from m_freed_ranges and made it as
pointer indirection.

mtr_t::add_freed_offset(): Allocates m_freed_pages.

mtr_t:clear_freed_ranges(): Removed.

mtr_t::init(): Added debug assertion to check whether m_freed_pages
is not yet initialized.

btr_page_alloc_low(): Remove #ifdef UNIV_DEBUG_SCRUBBING.

mtr_t::commit(): Delete m_freed_pages, reset m_trim_pages and
m_freed_in_system_tablespace.

fil_space_t::clear_freed_ranges(): Added a comment to explain how
undo log tablespaces uses it.
  • Loading branch information
Thirunarayanan committed Jun 19, 2020
1 parent 451bd32 commit 572e53d
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 42 deletions.
16 changes: 0 additions & 16 deletions storage/innobase/btr/btr0btr.cc
Expand Up @@ -537,22 +537,6 @@ btr_page_alloc_low(
seg_header, hint_page_no, file_direction,
true, mtr, init_mtr);

#ifdef UNIV_DEBUG_SCRUBBING
if (block != NULL) {
fprintf(stderr,
"alloc %lu:%lu to index: %lu root: %lu\n",
buf_block_get_page_no(block),
buf_block_get_space(block),
index->id,
dict_index_get_page(index));
} else {
fprintf(stderr,
"failed alloc index: %lu root: %lu\n",
index->id,
dict_index_get_page(index));
}
#endif /* UNIV_DEBUG_SCRUBBING */

return block;
}

Expand Down
3 changes: 2 additions & 1 deletion storage/innobase/include/fil0fil.h
Expand Up @@ -502,7 +502,8 @@ struct fil_space_t
last_freed_lsn= lsn;
}

/** Clear all freed ranges */
/** Clear all freed ranges for undo tablespace when InnoDB
encounters TRIM redo log record */
void clear_freed_ranges()
{
std::lock_guard<std::mutex> freed_lock(freed_range_mutex);
Expand Down
1 change: 1 addition & 0 deletions storage/innobase/include/mtr0log.h
Expand Up @@ -511,6 +511,7 @@ inline void mtr_t::memcpy(const buf_block_t &b, void *dest, const void *str,
@param[in,out] b buffer page */
inline void mtr_t::init(buf_block_t *b)
{
ut_ad(!m_freed_pages);
b->page.status= buf_page_t::INIT_ON_FLUSH;

if (m_log_mode != MTR_LOG_ALL)
Expand Down
13 changes: 4 additions & 9 deletions storage/innobase/include/mtr0mtr.h
Expand Up @@ -580,16 +580,11 @@ struct mtr_t {
void add_freed_offset(page_id_t id)
{
ut_ad(m_user_space == NULL || id.space() == m_user_space->id);
m_freed_ranges.add_value(id.page_no());
if (!m_freed_pages)
m_freed_pages= new range_set();
m_freed_pages->add_value(id.page_no());
}

/** Clear the freed pages */
void clear_freed_ranges()
{
m_freed_ranges.clear();
m_freed_in_system_tablespace= 0;
m_trim_pages= false;
}
private:
/** Log a write of a byte string to a page.
@param block buffer page
Expand Down Expand Up @@ -685,7 +680,7 @@ struct mtr_t {
lsn_t m_commit_lsn;

/** set of freed page ids */
range_set m_freed_ranges;
range_set *m_freed_pages= nullptr;
};

#include "mtr0mtr.ic"
Expand Down
30 changes: 14 additions & 16 deletions storage/innobase/mtr/mtr0mtr.cc
Expand Up @@ -354,12 +354,8 @@ struct mtr_write_log_t {
/** Start a mini-transaction. */
void mtr_t::start()
{
#ifdef HAVE_valgrind_or_MSAN
char m_freed_ranges_vbits[sizeof m_freed_ranges];
#endif
MEM_GET_VBITS(&m_freed_ranges, m_freed_ranges_vbits, sizeof m_freed_ranges);
UNIV_MEM_INVALID(this, sizeof *this);
MEM_SET_VBITS(&m_freed_ranges, m_freed_ranges_vbits, sizeof m_freed_ranges);
UNIV_MEM_VALID(&m_freed_pages, sizeof(m_freed_pages));

ut_d(m_start= true);
ut_d(m_commit= false);
Expand All @@ -378,6 +374,7 @@ void mtr_t::start()
m_user_space= nullptr;
m_commit_lsn= 0;
m_freed_in_system_tablespace= m_trim_pages= false;
ut_ad(!m_freed_pages);
}

/** Release the resources */
Expand All @@ -387,7 +384,6 @@ inline void mtr_t::release_resources()
ut_d(m_memo.for_each_block_in_reverse(CIterate<DebugCheck>()));
m_log.erase();
m_memo.erase();
clear_freed_ranges();
ut_d(m_commit= true);
}

Expand Down Expand Up @@ -420,8 +416,9 @@ void mtr_t::commit()
to insert into the flush list. */
log_mutex_exit();

if (!m_freed_ranges.empty())
if (m_freed_pages)
{
ut_ad(!m_freed_pages->empty());
fil_space_t *freed_space= m_user_space;
/* Get the freed tablespace in case of predefined tablespace */
if (!freed_space)
Expand All @@ -434,14 +431,15 @@ void mtr_t::commit()
/* Update the last freed lsn */
freed_space->update_last_freed_lsn(m_commit_lsn);

for (const auto &range : m_freed_ranges)
freed_space->add_free_range(range);
}

if (is_trim_pages())
{
ut_ad(m_user_space != nullptr);
m_user_space->clear_freed_ranges();
if (!is_trim_pages())
for (const auto &range : *m_freed_pages)
freed_space->add_free_range(range);
else
freed_space->clear_freed_ranges();
delete m_freed_pages;
m_freed_pages= nullptr;
/* Reset of m_trim_pages and m_freed_in_system_tablespace
happens in mtr_t::start() */
}

m_memo.for_each_block_in_reverse(CIterate<const ReleaseBlocks>
Expand Down Expand Up @@ -472,7 +470,7 @@ void mtr_t::commit_files(lsn_t checkpoint_lsn)
ut_ad(!m_made_dirty);
ut_ad(m_memo.size() == 0);
ut_ad(!srv_read_only_mode);
ut_ad(m_freed_ranges.empty());
ut_ad(!m_freed_pages);
ut_ad(!m_freed_in_system_tablespace);

if (checkpoint_lsn) {
Expand Down

0 comments on commit 572e53d

Please sign in to comment.