Commit bde7e0ba authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-21500 Server hang when using simulated AIO

The write-heavy test innodb_zip.wl6501_scale_1 timed out on
10.2 60d7011c for me.
Out of os_aio_n_segments=6, 5 are waiting for an event in
os_aio_simulated_handler(). One thread is waiting for a
write to complete in buf_dblwr_add_to_batch(), but that
would never happen, because nothing is waking up the simulated AIO
handler threads.

This hang appears to have been introduced in MySQL 5.6.12
in mysql/mysql-server@26cfde776cdf5ce61bd5cc494dfc1df28c76977f.
parent 23041af7
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2013, 2019, MariaDB Corporation. Copyright (c) 2013, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -963,6 +963,7 @@ buf_dblwr_flush_buffered_writes(void) ...@@ -963,6 +963,7 @@ buf_dblwr_flush_buffered_writes(void)
ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event); ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event);
mutex_exit(&buf_dblwr->mutex); mutex_exit(&buf_dblwr->mutex);
os_aio_simulated_wake_handler_threads();
os_event_wait_low(buf_dblwr->b_event, sig_count); os_event_wait_low(buf_dblwr->b_event, sig_count);
goto try_again; goto try_again;
} }
...@@ -1096,6 +1097,7 @@ buf_dblwr_add_to_batch( ...@@ -1096,6 +1097,7 @@ buf_dblwr_add_to_batch(
checkpoint. */ checkpoint. */
ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event); ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event);
mutex_exit(&buf_dblwr->mutex); mutex_exit(&buf_dblwr->mutex);
os_aio_simulated_wake_handler_threads();
os_event_wait_low(buf_dblwr->b_event, sig_count); os_event_wait_low(buf_dblwr->b_event, sig_count);
goto try_again; goto try_again;
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2017, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2013, 2019, MariaDB Corporation. Copyright (c) 2013, 2020, MariaDB Corporation.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -963,6 +963,7 @@ buf_dblwr_flush_buffered_writes(void) ...@@ -963,6 +963,7 @@ buf_dblwr_flush_buffered_writes(void)
ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event); ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event);
mutex_exit(&buf_dblwr->mutex); mutex_exit(&buf_dblwr->mutex);
os_aio_simulated_wake_handler_threads();
os_event_wait_low(buf_dblwr->b_event, sig_count); os_event_wait_low(buf_dblwr->b_event, sig_count);
goto try_again; goto try_again;
} }
...@@ -1112,6 +1113,7 @@ buf_dblwr_add_to_batch( ...@@ -1112,6 +1113,7 @@ buf_dblwr_add_to_batch(
checkpoint. */ checkpoint. */
ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event); ib_int64_t sig_count = os_event_reset(buf_dblwr->b_event);
mutex_exit(&buf_dblwr->mutex); mutex_exit(&buf_dblwr->mutex);
os_aio_simulated_wake_handler_threads();
os_event_wait_low(buf_dblwr->b_event, sig_count); os_event_wait_low(buf_dblwr->b_event, sig_count);
goto try_again; goto try_again;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment