Bug in v13 due to "Fix corruption when relation truncation fails." - Mailing list pgsql-hackers

From Yura Sokolov
Subject Bug in v13 due to "Fix corruption when relation truncation fails."
Date
Msg-id f98aaa79-80b5-47c9-832a-31416a3a528b@postgrespro.ru
Whole thread Raw
List 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



pgsql-hackers by date:

Previous
From: "Zhijie Hou (Fujitsu)"
Date:
Subject: RE: Introduce XID age and inactive timeout based replication slot invalidation
Next
From: Michail Nikolaev
Date:
Subject: Re: Introduce XID age and inactive timeout based replication slot invalidation