mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
MDEV-25998 fixup: Avoid a hang
btr_scrub_start_space(): Avoid an unnecessary tablespace lookup and related acquisition of fil_system->mutex. In MariaDB Server 10.3 we would get deadlocks between that mutex and a crypt_data mutex. The fix was developed by Thirunarayanan Balathandayuthapani.
This commit is contained in:
parent
e11cae71fe
commit
afe00bb7cc
3 changed files with 6 additions and 19 deletions
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2014, Google Inc.
|
||||
// Copyright (c) 2017, MariaDB Corporation.
|
||||
// Copyright (c) 2017, 2021, MariaDB Corporation.
|
||||
|
||||
/**************************************************//**
|
||||
@file btr/btr0scrub.cc
|
||||
|
@ -835,20 +835,12 @@ btr_scrub_page(
|
|||
|
||||
/**************************************************************//**
|
||||
Start iterating a space */
|
||||
UNIV_INTERN
|
||||
bool
|
||||
btr_scrub_start_space(
|
||||
/*===================*/
|
||||
ulint space, /*!< in: space */
|
||||
btr_scrub_t* scrub_data) /*!< in/out: scrub data */
|
||||
bool btr_scrub_start_space(const fil_space_t &space, btr_scrub_t *scrub_data)
|
||||
{
|
||||
bool found;
|
||||
scrub_data->space = space;
|
||||
scrub_data->space = space.id;
|
||||
scrub_data->current_table = NULL;
|
||||
scrub_data->current_index = NULL;
|
||||
const page_size_t page_size = fil_space_get_page_size(space, &found);
|
||||
|
||||
scrub_data->compressed = page_size.is_compressed();
|
||||
scrub_data->compressed = FSP_FLAGS_GET_ZIP_SSIZE(space.flags) != 0;
|
||||
scrub_data->scrubbing = check_scrub_setting(scrub_data);
|
||||
return scrub_data->scrubbing;
|
||||
}
|
||||
|
|
|
@ -1200,7 +1200,7 @@ fil_crypt_space_needs_rotation(
|
|||
key_state->rotate_key_age);
|
||||
|
||||
crypt_data->rotate_state.scrubbing.is_active =
|
||||
btr_scrub_start_space(space->id, &state->scrub_data);
|
||||
btr_scrub_start_space(*space, &state->scrub_data);
|
||||
|
||||
time_t diff = time(0) - crypt_data->rotate_state.scrubbing.
|
||||
last_scrub_completed;
|
||||
|
|
|
@ -141,12 +141,7 @@ btr_scrub_skip_page(
|
|||
/****************************************************************
|
||||
Start iterating a space
|
||||
* @return true if scrubbing is turned on */
|
||||
UNIV_INTERN
|
||||
bool
|
||||
btr_scrub_start_space(
|
||||
/*===================*/
|
||||
ulint space, /*!< in: space */
|
||||
btr_scrub_t* scrub_data); /*!< in/out: scrub data */
|
||||
bool btr_scrub_start_space(const fil_space_t &space, btr_scrub_t *scrub_data);
|
||||
|
||||
/** Complete iterating a space.
|
||||
@param[in,out] scrub_data scrub data */
|
||||
|
|
Loading…
Add table
Reference in a new issue