On Thu, Dec 12, 2013 at 11:00 AM, Kyotaro HORIGUCHI <horiguchi.kyot...@lab.ntt.co.jp> wrote: > Hello, we happened to see server crash on archive recovery under > some condition. > > After TLI was incremented, there should be the case that the WAL > file for older timeline is archived but not for that of the same > segment id but for newer timeline. Archive recovery should fail > for the case with PANIC error like follows, > > | PANIC: record with zero length at 0/1820D40 > > Replay script is attached. This issue occured for 9.4dev, 9.3.2, > and not for 9.2.6 and 9.1.11. The latter search pg_xlog for the > TLI before trying archive for older TLIs. > > This occurrs during fetching checkpoint redo record in archive > recovery. > >> if (checkPoint.redo < RecPtr) >> { >> /* back up to find the record */ >> record = ReadRecord(xlogreader, checkPoint.redo, PANIC, false); > > And this is caused by that the segment file for older timeline in > archive directory is preferred to that for newer timeline in > pg_xlog. > > Looking into pg_xlog before trying the older TLIs in archive like > 9.2- fixes this issue. The attached patch is one possible > solution for 9.4dev. > > Attached files are, > > - recvtest.sh: Replay script. Step 1 and 2 makes the condition > and step 3 causes the issue. > > - archrecvfix_20131212.patch: The patch fixes the issue. Archive > recovery reads pg_xlog before trying older TLI in archive > similarly to 9.1- by this patch. > > regards, >
Horiguchi-san, Wonder if the following commit in 9.2 branch was to address a similar/same problem? http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=4aed94f1660fb55bc825bf7f3135379dab28eb55 -- Amit Langote -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers