On Tue, Jan 17, 2017 at 7:36 PM, Kyotaro HORIGUCHI <horiguchi.kyot...@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 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers