On Fri, 2009-10-02 at 10:04 +0300, Heikki Linnakangas wrote:
> Simon Riggs wrote:
> > @@ -7061,6 +7061,15 @@ ShutdownXLOG(int code, Datum arg)
> > else
> > {
> > /*
> > + * Take a snapshot of running transactions and write this to WAL.
> > + * This allows us to reconstruct the state of running transactions
> > + * during archive recovery, if required. We do this even if we are
> > + * not archiving, to allow a cold physical backup of the server to
> > + * be useful as a read only standby.
> > + */
> > + GetRunningTransactionData();
> > +
> > + /*
> > * If archiving is enabled, rotate the last XLOG file so that all the
> > * remaining records are archived (postmaster wakes up the archiver
> > * process one more time at the end of shutdown). The checkpoint
> >
>
> I don't think this will do any good where it's placed. The checkpoint
> that follows will have its redo-pointer beyond the running-xacts record,
> so WAL replay will never see it.
Perhaps we need two entries then to cover multiple use cases?
The placement of this was specifically chosen so that it is the last
entry before the log switch, so that the runningxact record would be
archived.
Yes, we also need one after the shutdown checkpoint to cover the case
where the whole data directory is copied after shutdown. The comments
matched the latter case but the position addressed the first case, so it
looks like I was confused as to which case I was addressing.
Have updated code to do both. See what you think. Thanks.
-- Simon Riggs www.2ndQuadrant.com