Re: BUG #17064: Parallel VACUUM operations cause the error "global/pg_filenode.map contains incorrect checksum"
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Heikki Linnakangas <hlinnaka@iki.fi>,
Alexander Lakhin <exclusion@gmail.com>,
PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2021-06-22T14:11:06Z
Lists: pgsql-bugs
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? If we can't assume atomicity of relmapper file I/O, I wonder about pg_control as well. But on the whole, what I'm smelling is a moderately recently introduced kernel bug. We've been doing this this way for years and heard no previous reports. regards, tom lane
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