Re: BUG #17064: Parallel VACUUM operations cause the error "global/pg_filenode.map contains incorrect checksum"
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>,
Alexander Lakhin <exclusion@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2021-06-23T00:50:25Z
Lists: pgsql-bugs
On Wed, Jun 23, 2021 at 2:11 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Thomas Munro <thomas.munro@gmail.com> writes: > > Your analysis seems right to me. We have to worry about both things: > > atomicity of writes on power failure (assumed to be sector-level, > > hence our 512 byte struct -- all good), and atomicity of concurrent > > reads and writes (we can't assume anything at all, so r/w locking is > > the simplest way to get a consistent read). Shouldn't relmap_redo() > > also acquire the lock exclusively? > > Shouldn't we instead file a kernel bug report? I seem to recall that > POSIX guarantees atomicity of these things up to some operation size. > Or is that just for pipe I/O? The spec doesn't cover us according to some opinions, at least: https://utcc.utoronto.ca/~cks/space/blog/unix/WriteNotVeryAtomic But at the same time, the behaviour seems quite surprising given the parameters involved and how at least I thought this stuff worked in practice (ie what the rules about the visibility of writes that precede reads imply for the unspoken locking rule that must be the obvious reasonable implementation, and the reality of the inode-level read/write locking plainly visible in the source). It's possible that it's not working as designed in some weird edge case. I guess the next thing to do is write a minimal repro and find an expert to ask about what it's supposed to do.
Commits
-
Another fix to relmapper race condition.
- 5956795cb5be 9.6.23 landed
- fbbc48995d05 10.18 landed
- eb3bd243a245 11.13 landed
- 8b01a403c5cc 12.8 landed
- 6fb377e5f74b 13.4 landed
- 9b8ed0f52bff 14.0 landed
-
Prevent race condition while reading relmapper file.
- 85ae8ccb2fb3 9.6.23 landed
- a5eacd86b715 10.18 landed
- c78bb32c19fe 11.13 landed
- caac1965077f 12.8 landed
- 2a0ab13f8dd1 13.4 landed
- b6d8d2073f22 14.0 landed