Bug in v13 due to "Fix corruption when relation truncation fails."
Yura Sokolov <y.sokolov@postgrespro.ru>
From: Yura Sokolov <y.sokolov@postgrespro.ru>
To: "pgsql-hackers@lists.postgresql.org"
<pgsql-hackers@lists.postgresql.org>, Thomas Munro <tmunro@postgresql.org>,
Heikki Linnakangas <hlinnaka@iki.fi>, Michael Paquier <michael@paquier.xyz>,
Robert Haas <robertmhaas@gmail.com>
Date: 2024-12-26T10:10:59Z
Lists: pgsql-hackers
Good day. Commit "Fix corruption when relation truncation fails." [0] makes smgrtruncate be called in a critical section. Unfortunately in version 13 it leads to occasional call to palloc0 inside of critical section, which triggers Assert in debug builds: - smgrtruncate calls mdtruncate - mdtruncate may call register_dirty_segment - register_dirty_segment calls RegisterSyncRequest - RegisterSyncRequest calls ForwardSyncRequest - ForwardSyncRequest may call CompactCheckpointerRequestQueue - CompactCheckpointerRequestQueue may call palloc0 ... In versions 14 and above CompactCheckpointerRequestQueue does check for critical section due to commit "Fix bugs in MultiXact truncation" [1], which were backported down to 14 version, but not 13. We caught it in our private tests, so it is real. Cherry-pick of [1] from 14 version to 13 solves the issue. [0] https://git.postgresql.org/gitweb/?p=postgresql.git;h=2280912165d [1] https://git.postgresql.org/gitweb/?p=postgresql.git;h=4c8e00ae9ae ------ regards, Yura Sokolov aka funny-falcon
Commits
-
Back-patch b1ffe3ff into REL_13_STABLE.
- a722252ef1e1 13.19 landed