mirror of
https://github.com/MariaDB/server.git
synced 2025-08-16 07:21:32 +02:00
![]() The test innodb.undo_truncate occasionally demonstrates a race condition where scrubbing is writing zeroes to a freed undo page, and innodb_undo_log_truncate=ON truncating the same tablespace. The truncation is an exception to the rule that InnoDB tablespace file sizes can only grow, never shrink. The fields fil_space_t::size and fil_node_t::size are protected by fil_system.mutex, which used to be a highly contended resource. We do not want to revert back to acquiring the mutex in fil_space_t::io() because that would introduce an obvious scalability bottleneck. fil_space_t::flush_freed(): Do not try to scrub pages of the undo tablespace in order to prevent a race condition between io() and undo tablespace truncation. fil_space_t::io(): Prevent a null pointer dereference when reporting an out-of-bounds access to the non-first file of the system or temporary tablespace. Do not invoke set_corrupted() after an out-of-bounds asynchronous read. Note: fil_space_t::flush_freed() may only invoke PUNCH_RANGE on page_compressed tablespaces, never on an undo tablespace. |
||
---|---|---|
.. | ||
fil0crypt.cc | ||
fil0fil.cc | ||
fil0pagecompress.cc |