Re: Bug in Physical Replication Slots (at least 9.5)?
Michael Paquier <michael.paquier@gmail.com>
From: Michael Paquier <michael.paquier@gmail.com>
To: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
Cc: jdnelson@dyn.com, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>, PostgreSQL mailing lists <pgsql-bugs@postgresql.org>
Date: 2017-01-18T03:34:51Z
Lists: pgsql-bugs, pgsql-hackers
On Tue, Jan 17, 2017 at 7:36 PM, Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp> wrote: > I managed to reproduce this. A little tweak as the first patch > lets the standby to suicide as soon as walreceiver sees a > contrecord at the beginning of a segment. Good idea. > I believe that a continuation record cannot be span over three or > more *segments* (is it right?), so keeping one spare segment > would be enough. The attached second patch does this. I have to admit that I did not think about this problem much yet (I bookmarked this report weeks ago to be honest as something to look at), but that does not look right to me. Couldn't a record be spawned across even more segments? Take a random string longer than 64MB or event longer for example. > Other possible measures might be, > > - Allowing switching wal source while reading a continuation > record. Currently ReadRecord assumes that a continuation record > can be read from single source. But this needs refactoring > involving xlog.c, xlogreader.c and relatives. This is scary thinking about back-branches. > - Delaying recycling a segment until the last partial record on it > completes. This seems doable in page-wise (coarse resolution) > but would cost additional reading of past xlog files (page > header of past pages is required). Hm, yes. That looks like the least invasive way to go. At least that looks more correct than the others. > - Delaying write/flush feedback until the current record is > completed. walreceiver is not conscious of a WAL record and > this might break synchronous replication. Not sure about this one yet. -- Michael
Commits
-
Fix scenario where streaming standby gets stuck at a continuation record.
- c06380e97692 9.4.18 landed
- 4ea8f7d4553e 9.5.13 landed
- 7b7521d65772 9.6.9 landed
- ca572db22f62 10.4 landed
- 066871980183 11.0 landed