Re: prevent immature WAL streaming
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
At Mon, 23 Aug 2021 18:52:17 -0400, Alvaro Herrera <alvherre@alvh.no-ip.org> wrote in
> Included 蔡梦娟 and Jakub Wartak because they've expressed interest on
> this topic -- notably [2] ("Bug on update timing of walrcv->flushedUpto
> variable").
>
> As mentioned in the course of thread [1], we're missing a fix for
> streaming replication to avoid sending records that the primary hasn't
> fully flushed yet. This patch is a first attempt at fixing that problem
> by retreating the LSN reported as FlushPtr whenever a segment is
> registered, based on the understanding that if no registration exists
> then the LogwrtResult.Flush pointer can be taken at face value; but if a
> registration exists, then we have to stream only till the start LSN of
> that registered entry.
>
> This patch is probably incomplete. First, I'm not sure that logical
> replication is affected by this problem. I think it isn't, because
> logical replication will halt until the record can be read completely --
> maybe I'm wrong and there is a way for things to go wrong with logical
> replication as well. But also, I need to look at the other uses of
> GetFlushRecPtr() and see if those need to change to the new function too
> or they can remain what they are now.
>
> I'd also like to have tests. That seems moderately hard, but if we had
> WAL-molasses that could be used in walreceiver, it could be done. (It
> sounds easier to write tests with a molasses-archive_command.)
>
>
> [1] https://postgr.es/m/CBDDFA01-6E40-46BB-9F98-9340F4379505@amazon.com
> [2] https://postgr.es/m/3f9c466d-d143-472c-a961-66406172af96.mengjuan.cmj@alibaba-inc.com
(I'm not sure what "WAL-molasses" above expresses, same as "sugar"?)
For our information, this issue is related to the commit 0668719801
which makes XLogPageRead restart reading a (continued or
segments-spanning) record with switching sources. In that thread, I
modifed the code to cause a server crash under the desired situation.)
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
Commits
-
Fix determination of broken LSN in OVERWRITTEN_CONTRECORD
- ef41c3fd6c86 13.6 landed
- d24dac954906 14.2 landed
- 9c6ab1ef3382 12.10 landed
- 72cf39d51ade 10.20 landed
- 44bd3ed332d6 15.0 landed
- 2c3fddcbbd8a 11.15 landed
-
Fix instability in 026_overwrite_contrecord.pl test.
- b66767b56b1c 15.0 landed
- 9959a078f2d7 12.10 landed
- 5a3240cf6b2e 13.6 landed
- 4dc2cb74d00e 11.15 landed
- 3aa858c8932e 14.2 landed
- 18ce21768a80 10.20 landed
-
Fix typo
- f914b8badc21 12.9 landed
- c3bda112ebe2 10.19 landed
- 7c0a78f08998 13.5 landed
- 3aa572b8b296 11.14 landed
- 9b6194eb0aa5 9.6.24 landed
-
Change recently added test code for stability
- 79c7fe1af82d 14.1 landed
- 6287b8e195f3 11.14 landed
- 5ec87619bc5d 9.6.24 landed
- 4b7abbe48a11 12.9 landed
- 41cce2326135 10.19 landed
- 2cdf97fd1ec8 13.5 landed
- 010e5233733a 15.0 landed
-
Remove unstable, unnecessary test; fix typo
- d186d233dfde 15.0 landed
- 0ce67bce0071 14.1 landed
-
Repair two portability oversights of new test
- e3731bac52cf 14.1 landed
- d03bca4d70c2 15.0 landed
-
Fix WAL replay in presence of an incomplete record
- 64a8687a6891 14.1 landed
- ff9f111bce24 15.0 landed
- d9fe2cc7dd3e 10.19 landed
- cfedb279a6b8 11.14 landed
- 1df0a914d58f 12.9 landed
- 1d97d3d0867f 13.5 landed
- 148c6ee3be39 9.6.24 landed
-
Document XLOG_INCLUDE_XID a little better
- c1d1ae1db237 14.0 landed
- ade24dab97a2 15.0 landed
-
Revert "Avoid creating archive status ".ready" files too early"
- e456167a8af4 12.9 landed
- c801c3a1ff73 11.14 landed
- aa8bd0890bb2 14.0 landed
- 9aaf7dbff36f 10.19 landed
- 96b665083eb7 15.0 landed
- 518621c40b23 13.5 landed
- 121cdaff1068 9.6.24 landed
-
Avoid creating archive status ".ready" files too early
- 5065aeafb0b7 12.9 cited
-
Fix scenario where streaming standby gets stuck at a continuation record.
- 066871980183 11.0 cited
-
Teach xlogreader to follow timeline switches
- 1148e22a82ed 10.0 cited
-
Forbid using pg_xlogfile_name() and pg_xlogfile_name_offset() during
- 370f770c15a4 9.0.0 cited