summaryrefslogtreecommitdiff
path: root/storage/innobase/btr/btr0btr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/btr/btr0btr.cc')
-rw-r--r--storage/innobase/btr/btr0btr.cc156
1 files changed, 35 insertions, 121 deletions
diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc
index 0c7e3e38d78..74980775f8e 100644
--- a/storage/innobase/btr/btr0btr.cc
+++ b/storage/innobase/btr/btr0btr.cc
@@ -1376,11 +1376,9 @@ btr_write_autoinc(dict_index_t* index, ib_uint64_t autoinc, bool reset)
}
/** Reorganize an index page.
-@tparam recovery whether this is invoked by btr_parse_page_reorganize()
@param cursor index page cursor
@param index the index that the cursor belongs to
@param mtr mini-transaction */
-template<bool recovery= false>
static void btr_page_reorganize_low(page_cur_t *cursor, dict_index_t *index,
mtr_t *mtr)
{
@@ -1413,9 +1411,7 @@ static void btr_page_reorganize_low(page_cur_t *cursor, dict_index_t *index,
memcpy_aligned<UNIV_PAGE_SIZE_MIN>(temp_block->frame, block->frame,
srv_page_size);
- if (!recovery) {
- btr_search_drop_page_hash_index(block);
- }
+ btr_search_drop_page_hash_index(block);
/* Save the cursor position. */
pos = page_rec_get_n_recs_before(page_cur_get_rec(cursor));
@@ -1447,9 +1443,9 @@ static void btr_page_reorganize_low(page_cur_t *cursor, dict_index_t *index,
if (trx_id_t trx_id = page_get_max_trx_id(temp_block->frame)) {
/* PAGE_MAX_TRX_ID must be zero on non-leaf pages other than
clustered index root pages. */
- ut_ad(recovery || (dict_index_is_sec_or_ibuf(index)
- ? page_is_leaf(temp_block->frame)
- : block->page.id.page_no() == index->page));
+ ut_ad(dict_index_is_sec_or_ibuf(index)
+ ? page_is_leaf(temp_block->frame)
+ : block->page.id.page_no() == index->page);
page_set_max_trx_id(block, NULL, trx_id, mtr);
} else {
/* PAGE_MAX_TRX_ID is unused in clustered index pages
@@ -1458,7 +1454,7 @@ static void btr_page_reorganize_low(page_cur_t *cursor, dict_index_t *index,
It was always zero-initialized in page_create().
PAGE_MAX_TRX_ID must be nonzero on
dict_index_is_sec_or_ibuf() leaf pages. */
- ut_ad(recovery || index->table->is_temporary()
+ ut_ad(index->table->is_temporary()
|| !page_is_leaf(temp_block->frame)
|| !dict_index_is_sec_or_ibuf(index));
}
@@ -1482,46 +1478,44 @@ static void btr_page_reorganize_low(page_cur_t *cursor, dict_index_t *index,
ut_ad(cursor->rec == page_get_infimum_rec(block->frame));
}
- if (!recovery) {
- if (block->page.id.page_no() == index->page
- && fil_page_get_type(temp_block->frame)
- == FIL_PAGE_TYPE_INSTANT) {
- /* Preserve the PAGE_INSTANT information. */
- ut_ad(index->is_instant());
- static_assert(!(FIL_PAGE_TYPE % 2), "alignment");
- memcpy_aligned<2>(FIL_PAGE_TYPE + block->frame,
- FIL_PAGE_TYPE + temp_block->frame, 2);
- static_assert(!((PAGE_HEADER+PAGE_INSTANT) % 2), "");
- memcpy_aligned<2>(PAGE_HEADER + PAGE_INSTANT
- + block->frame,
- PAGE_HEADER + PAGE_INSTANT
- + temp_block->frame, 2);
- if (!index->table->instant) {
- } else if (page_is_comp(block->frame)) {
- memcpy(PAGE_NEW_INFIMUM + block->frame,
- PAGE_NEW_INFIMUM + temp_block->frame, 8);
- memcpy(PAGE_NEW_SUPREMUM + block->frame,
- PAGE_NEW_SUPREMUM + temp_block->frame, 8);
- } else {
- memcpy(PAGE_OLD_INFIMUM + block->frame,
- PAGE_OLD_INFIMUM + temp_block->frame, 8);
- memcpy(PAGE_OLD_SUPREMUM + block->frame,
- PAGE_OLD_SUPREMUM + temp_block->frame, 8);
- }
+ if (block->page.id.page_no() == index->page
+ && fil_page_get_type(temp_block->frame)
+ == FIL_PAGE_TYPE_INSTANT) {
+ /* Preserve the PAGE_INSTANT information. */
+ ut_ad(index->is_instant());
+ static_assert(!(FIL_PAGE_TYPE % 2), "alignment");
+ memcpy_aligned<2>(FIL_PAGE_TYPE + block->frame,
+ FIL_PAGE_TYPE + temp_block->frame, 2);
+ static_assert(!((PAGE_HEADER+PAGE_INSTANT) % 2), "");
+ memcpy_aligned<2>(PAGE_HEADER + PAGE_INSTANT
+ + block->frame,
+ PAGE_HEADER + PAGE_INSTANT
+ + temp_block->frame, 2);
+ if (!index->table->instant) {
+ } else if (page_is_comp(block->frame)) {
+ memcpy(PAGE_NEW_INFIMUM + block->frame,
+ PAGE_NEW_INFIMUM + temp_block->frame, 8);
+ memcpy(PAGE_NEW_SUPREMUM + block->frame,
+ PAGE_NEW_SUPREMUM + temp_block->frame, 8);
+ } else {
+ memcpy(PAGE_OLD_INFIMUM + block->frame,
+ PAGE_OLD_INFIMUM + temp_block->frame, 8);
+ memcpy(PAGE_OLD_SUPREMUM + block->frame,
+ PAGE_OLD_SUPREMUM + temp_block->frame, 8);
}
+ }
- if (!dict_table_is_locking_disabled(index->table)) {
- /* Update the record lock bitmaps */
- lock_move_reorganize_page(block, temp_block);
- }
+ if (!dict_table_is_locking_disabled(index->table)) {
+ /* Update the record lock bitmaps */
+ lock_move_reorganize_page(block, temp_block);
}
buf_block_free(temp_block);
MONITOR_INC(MONITOR_INDEX_REORG_SUCCESSFUL);
- if (!recovery && UNIV_UNLIKELY(fil_page_get_type(block->frame)
- == FIL_PAGE_TYPE_INSTANT)) {
+ if (UNIV_UNLIKELY(fil_page_get_type(block->frame)
+ == FIL_PAGE_TYPE_INSTANT)) {
/* Log the PAGE_INSTANT information. */
ut_ad(index->is_instant());
mtr->write<2,mtr_t::FORCED>(*block, FIL_PAGE_TYPE
@@ -1610,54 +1604,6 @@ btr_page_reorganize(
return true;
}
-/***********************************************************//**
-Parses a redo log record of reorganizing a page.
-@return end of log record or NULL */
-ATTRIBUTE_COLD /* only used when crash-upgrading */
-const byte*
-btr_parse_page_reorganize(
-/*======================*/
- const byte* ptr, /*!< in: buffer */
- const byte* end_ptr,/*!< in: buffer end */
- dict_index_t* index, /*!< in: record descriptor */
- bool compressed,/*!< in: true if compressed page */
- buf_block_t* block, /*!< in: page to be reorganized, or NULL */
- mtr_t* mtr) /*!< in: mtr or NULL */
-{
- ulint level = page_zip_level;
-
- ut_ad(ptr != NULL);
- ut_ad(end_ptr != NULL);
- ut_ad(index != NULL);
-
- /* If dealing with a compressed page the record has the
- compression level used during original compression written in
- one byte. Otherwise record is empty. */
- if (compressed) {
- if (ptr == end_ptr) {
- return(NULL);
- }
-
- level = mach_read_from_1(ptr);
-
- ut_a(level <= 9);
- ++ptr;
- } else {
- level = page_zip_level;
- }
-
- if (block == NULL) {
- } else if (block->page.zip.data) {
- page_zip_reorganize(block, index, level, mtr, true);
- } else {
- page_cur_t cur;
- page_cur_set_before_first(block, &cur);
- btr_page_reorganize_low<true>(&cur, index, mtr);
- }
-
- return(ptr);
-}
-
/** Empty an index page (possibly the root page). @see btr_page_create().
@param[in,out] block page to be emptied
@param[in,out] page_zip compressed page frame, or NULL
@@ -3196,38 +3142,6 @@ void btr_level_list_remove(const buf_block_t& block, const dict_index_t& index,
}
}
-/****************************************************************//**
-Parses the redo log record for setting an index record as the predefined
-minimum record.
-@return end of log record or NULL */
-ATTRIBUTE_COLD /* only used when crash-upgrading */
-const byte*
-btr_parse_set_min_rec_mark(
-/*=======================*/
- const byte* ptr, /*!< in: buffer */
- const byte* end_ptr,/*!< in: buffer end */
- ulint comp, /*!< in: nonzero=compact page format */
- buf_block_t* block, /*!< in: page or NULL */
- mtr_t* mtr) /*!< in: mtr or NULL */
-{
- rec_t* rec;
-
- if (end_ptr < ptr + 2) {
-
- return(NULL);
- }
-
- if (block) {
- ut_a(!page_is_comp(block->frame) == !comp);
-
- rec = block->frame + mach_read_from_2(ptr);
-
- btr_set_min_rec_mark(rec, *block, mtr);
- }
-
- return(ptr + 2);
-}
-
/*************************************************************//**
If page is the only on its level, this function moves its records to the
father page, thus reducing the tree height.