Re: XLogReadRecord() error in XlogReadTwoPhaseData()
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Noah Misch <noah@leadboat.com>
Cc: pgbf@twiska.com, Tom Lane <tgl@sss.pgh.pa.us>, Michael Paquier <michael@paquier.xyz>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-01-16T09:19:30Z
Lists: pgsql-hackers
On Sun, Jan 16, 2022 at 8:12 PM Noah Misch <noah@leadboat.com> wrote: > For specifics of the kernel bug, see the attached test program. In brief, the > bug arises if one process is write()ing or pwrite()ing a file at about the > same time that another process is read()ing or pread()ing the same. POSIX > says the reader should see the data as it existed before the write or the > newly-written data. On this kernel, the reader can see zeros instead. That > leads to the $SUBJECT failure. PostgreSQL processes write out a given WAL > block 20-30 times in ~10ms, and COMMIT PREPARED reads that block. The writers > aren't changing the bytes of interest to COMMIT PREPARED, but the zeros from > the kernel bug yield the failure. We could opt to work around that by writing > only the not-already-written portion of a WAL block, but I doubt that's > worthwhile unless it happens to be a performance win anyway. > > Separately, while I don't know of relevance to PostgreSQL, I was interested to > see that CentOS 7 pwrite()/pread() fail to have the POSIX-required atomicity. FWIW there was some related discussion over here: https://www.postgresql.org/message-id/flat/17064-bb0d7904ef72add3%40postgresql.org
Commits
-
Under has_wal_read_bug, skip recovery/t/032_relfilenode_reuse.pl.
- 3395cc1dbae5 15.1 landed
- a9f8ca6005f1 16.0 landed
-
Under has_wal_read_bug, skip contrib/bloom/t/001_wal.pl.
- c027e51d0fa3 10.21 landed
- 8fa3386431a7 11.16 landed
- 49d63b2e361c 12.11 landed
- 23213f53ba20 13.7 landed
- aca4d561cb9f 14.3 landed
- ad76c9708bd1 15.0 landed
-
Use Test::Builder::todo_start(), replacing $::TODO.
- b3558cc96cd9 13.7 landed
- 6da62ff14c57 10.21 landed
- 3a32e53e1f38 12.11 landed
- 2373429975ac 11.16 landed
- 1a83297d2224 14.3 landed
- adbd00f7a59b 15.0 landed
-
On sparc64+ext4, suppress test failures from known WAL read failure.
- e092f00d061e 11.15 landed
- d94a95cce9eb 14.2 landed
- a2a4992215c5 10.20 landed
- 785a28e422ea 13.6 landed
- 279956817ff4 12.10 landed
- ce6d79368efa 15.0 landed
-
Report any XLogReadRecord() error in XlogReadTwoPhaseData().
- 2f60fd647d81 10.20 landed
- cae393f0f9fc 11.15 landed
- 2d60ce3e1a46 12.10 landed
- d4e9d6946995 13.6 landed
- 675cd765c2a5 14.2 landed
- 335474691054 15.0 landed