On Wed, Mar 2, 2016 at 4:25 PM, wcting <wcting...@163.com> wrote:
> /*
>                  * If at page start, we must skip over the page header.  But
> we can't
>                  * do that until we've read in the page, since the header
> size is
>                  * variable.
>                  */
>
> i don't know the meaning behind this comments,
>
>  if ((RecPtr->xrecoff % XLogSegSize) == 0)
> it's a long page header, else a short page header,
>
> so "the header size" can be calculated ? right?

This means that the page must be read first, before recalculating the
record pointer to be the first one after the page header. This is done
a little bit after in ReadRecord():
    pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) readBuf);
    targetRecOff = RecPtr->xrecoff % XLOG_BLCKSZ;
    if (targetRecOff == 0)
    {
        /*
         * At page start, so skip over page header.  The Assert checks that
         * we're not scribbling on caller's record pointer; it's OK because we
         * can only get here in the continuing-from-prev-record case, since
         * XRecOffIsValid rejected the zero-page-offset case otherwise.
         */
        Assert(RecPtr == &tmpRecPtr);
        RecPtr->xrecoff += pageHeaderSize;
        targetRecOff = pageHeaderSize;
    }
And XLogPageHeaderSize() makes the difference between a long a short header.
-- 
Michael


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to