mariadb/mysql-test/suite
Marko Mäkelä 984606d747 MDEV-34750 SET GLOBAL innodb_log_file_size is not crash safe
The recent commit 4ca355d863 (MDEV-33894)
caused a serious regression for online InnoDB ib_logfile0 resizing,
breaking crash-safety unless the memory-mapped log file interface is
being used. However, the log resizing was broken also before this.

To prevent such regressions in the future, we extend the test
innodb.log_file_size_online with a kill and restart of the server
and with some writes running concurrently with the log size change.
When run enough many times, this test revealed all the bugs that
are being fixed by the code changes.

log_t::resize_start(): Do not allow the resized log to start before
the current log sequence number. In this way, there is no need to
copy anything to the first block of resize_buf. The previous logic
regarding that was incorrect in two ways. First, we would have to
copy from the last written buffer (buf or flush_buf). Second, we failed
to ensure that the mini-transaction end marker bytes would be 1
in the buffer. If the source ib_logfile0 had wrapped around an odd number
of times, the end marker would be 0. This was occasionally observed
when running the test innodb.log_file_size_online.

log_t::resize_write_buf(): To adjust for the resize_start() change,
do not write anything that would be before the resize_lsn.
Take the buffer (resize_buf or resize_flush_buf) as a parameter.
Starting with commit 4ca355d863
we no longer swap buffers when rewriting the last log block.

log_t::append(): Define as a static function; only some debug
assertions need to refer to the log_sys object.

innodb_log_file_size_update(): Wake up the buf_flush_page_cleaner()
if needed, and wait for it to complete a batch while waiting for
the log resizing to be completed. If the current LSN is behind the
resize target LSN, we will write redundant FILE_CHECKPOINT records to
ensure that the log resizing completes. If the buf_pool.flush_list is
empty or the buf_flush_page_cleaner() is stuck for some reason, our wait
will time out in 5 seconds, so that we can periodically check if the
execution of SET GLOBAL innodb_log_file_size was aborted. Previously,
we could get into a busy loop here while the buf_flush_page_cleaner()
would remain idle.
2024-08-29 14:53:08 +03:00
..
archive Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
atomic
binlog Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
binlog_encryption Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
client
compat Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
csv Backporting bugs fixes fixed by MDEV-31340 from 11.5 2024-05-21 14:58:01 +04:00
encryption Merge branch '10.6' into 10.11 2024-08-03 09:15:40 +02:00
engines
federated Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
funcs_1 Merge 10.6 into 10.11 2024-06-11 12:50:10 +03:00
funcs_2
galera Merge 10.6 into 10.11 2024-08-14 11:36:52 +03:00
galera_3nodes Merge 10.6 into 10.11 2024-08-14 11:36:52 +03:00
galera_3nodes_sr Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
galera_sr Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
gcol Merge branch '10.6' into 10.11 2024-05-10 20:02:18 +02:00
handler
heap
innodb MDEV-34750 SET GLOBAL innodb_log_file_size is not crash safe 2024-08-29 14:53:08 +03:00
innodb_fts Merge 10.6 into 10.11 2024-08-14 11:36:52 +03:00
innodb_gis Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
innodb_i_s
innodb_zip
jp
json Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
large_tests
maria Merge 10.6 into 10.11 2024-06-11 12:50:10 +03:00
mariabackup Merge 10.6 into 10.11 2024-08-29 07:47:29 +03:00
mtr/t
mtr2
multi_source
optimizer_unfixed_bugs
parts Merge 10.6 into 10.11 2024-05-30 16:04:00 +03:00
perfschema Merge branch '10.6' into 10.11 2024-05-10 20:02:18 +02:00
perfschema_stress
period
plugins
roles Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
rpl Merge 10.6 into 10.11 2024-08-29 07:47:29 +03:00
s3 Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
sql_sequence Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
storage_engine
stress
sys_vars Merge 10.6 into 10.11 2024-08-29 07:47:29 +03:00
sysschema
unit
vcol Merge 10.6 into 10.11 2024-08-14 11:36:52 +03:00
versioning Merge branch '10.6' into 10.11 2024-07-22 15:14:50 +02:00
wsrep Merge 10.6 into 10.11 2024-08-14 11:36:52 +03:00