Re: XLogReadRecord() error in XlogReadTwoPhaseData()
От | Thomas Munro |
---|---|
Тема | Re: XLogReadRecord() error in XlogReadTwoPhaseData() |
Дата | |
Msg-id | CA+hUKGLoV=wYa301GWaQUb7zb4cNE4QLqnik_QbHe-=3kpp=Ew@mail.gmail.com обсуждение исходный текст |
Ответ на | XLogReadRecord() error in XlogReadTwoPhaseData() (Noah Misch <noah@leadboat.com>) |
Ответы |
Re: XLogReadRecord() error in XlogReadTwoPhaseData()
|
Список | 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
В списке pgsql-hackers по дате отправления: