MDEV-26811: Assertion "log_sys->n_pending_flushes == 1" fails
In commit 1cb218c37cc3fe01a1ff2fe9b1cbfb591e90d5ce (MDEV-26450) we introduced the function log_write_and_flush(), which may compete with log_checkpoint() invoking log_write_flush_to_disk_low() from another thread. The assertion n_pending_flushes==1 is too strict. There is no possibility of a race condition here, because fil_flush() is protected by fil_system->mutex and the rest will be protected by log_sys->mutex. log_write_flush_to_disk_low(), log_write_and_flush(): Relax the assertions to test for a nonzero count.
This commit is contained in:
parent
6f32b28be5
commit
2bb8d7c2f3
@ -983,13 +983,9 @@ loop:
|
||||
|
||||
/** Flush the recently written changes to the log file.
|
||||
and invoke log_mutex_enter(). */
|
||||
static
|
||||
void
|
||||
log_write_flush_to_disk_low()
|
||||
static void log_write_flush_to_disk_low()
|
||||
{
|
||||
/* FIXME: This is not holding log_sys->mutex while
|
||||
calling os_event_set()! */
|
||||
ut_a(log_sys->n_pending_flushes == 1); /* No other threads here */
|
||||
ut_a(log_sys->n_pending_flushes);
|
||||
|
||||
bool do_flush = srv_file_flush_method != SRV_O_DSYNC;
|
||||
|
||||
@ -997,7 +993,6 @@ log_write_flush_to_disk_low()
|
||||
fil_flush(SRV_LOG_SPACE_FIRST_ID);
|
||||
}
|
||||
|
||||
|
||||
log_mutex_enter();
|
||||
if (do_flush) {
|
||||
log_sys->flushed_to_disk_lsn = log_sys->current_flush_lsn;
|
||||
@ -1329,7 +1324,7 @@ ATTRIBUTE_COLD void log_write_and_flush()
|
||||
|
||||
/* Code adapted from log_write_flush_to_disk_low() */
|
||||
|
||||
ut_a(log_sys->n_pending_flushes == 1); /* No other threads here */
|
||||
ut_a(log_sys->n_pending_flushes);
|
||||
|
||||
if (srv_file_flush_method != SRV_O_DSYNC)
|
||||
fil_flush(SRV_LOG_SPACE_FIRST_ID);
|
||||
|
Loading…
x
Reference in New Issue
Block a user