mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-33098: Fix some instrumentation for innodb.doublewrite_debug
buf_flush_page_cleaner(): A continue or break inside DBUG_EXECUTE_IF actually is a no-op. Use an explicit call to _db_keyword_() to actually avoid advancing the checkpoint. buf_flush_list_now_set(): Invoke os_aio_wait_until_no_pending_writes() to ensure that the page write to the system tablespace is completed.
This commit is contained in:
@ -61,17 +61,6 @@ set global innodb_fil_make_page_dirty_debug = 0;
|
||||
set global innodb_buf_flush_list_now = 1;
|
||||
|
||||
--let CLEANUP_IF_CHECKPOINT=drop table t1, unexpected_checkpoint;
|
||||
# Occasionally, a checkpoint would occur on the MSAN builder.
|
||||
# We do not know the reason, because the failure can only be reproduced if there is
|
||||
# enough load in that environment.
|
||||
# Therefore, we allow the test to be skipped when run on MSAN.
|
||||
# In other environments, we want the test to fail if a checkpoint occurs,
|
||||
# so that we would catch it if it starts to happen regularly.
|
||||
if (`select count(*) from information_schema.system_variables where variable_name='have_sanitizer' and global_value like "MSAN%"`)
|
||||
{
|
||||
--let CLEANUP_IF_CHECKPOINT=drop table t1;
|
||||
}
|
||||
|
||||
--source ../include/no_checkpoint_end.inc
|
||||
|
||||
--echo # Make the 1st page (page_no=0) and 2nd page (page_no=1)
|
||||
|
@ -2333,9 +2333,9 @@ static os_thread_ret_t DECLARE_THREAD(buf_flush_page_cleaner)(void*)
|
||||
|
||||
do
|
||||
{
|
||||
DBUG_EXECUTE_IF("ib_log_checkpoint_avoid", continue;);
|
||||
DBUG_EXECUTE_IF("ib_log_checkpoint_avoid_hard", continue;);
|
||||
|
||||
IF_DBUG(if (_db_keyword_(nullptr, "ib_log_checkpoint_avoid", 1) ||
|
||||
_db_keyword_(nullptr, "ib_log_checkpoint_avoid_hard", 1))
|
||||
continue,);
|
||||
if (!recv_recovery_is_on() &&
|
||||
!srv_startup_is_before_trx_rollback_phase &&
|
||||
srv_operation <= SRV_OPERATION_EXPORT_RESTORED)
|
||||
|
@ -18313,7 +18313,10 @@ buf_flush_list_now_set(THD*, st_mysql_sys_var*, void*, const void* save)
|
||||
if (s)
|
||||
buf_flush_sync();
|
||||
else
|
||||
{
|
||||
while (buf_flush_list_space(fil_system.sys_space, nullptr));
|
||||
os_aio_wait_until_no_pending_writes();
|
||||
}
|
||||
mysql_mutex_lock(&LOCK_global_system_variables);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user