As written, if you use XLogBeginRead() to position an xlogreader at
the beginning of a WAL page and then try to read WAL, this assertion
will fail. However, the header comment for XLogBeginRead() claims
that positioning an xlogreader at the beginning of a page is valid,
and the code here is perfectly able to cope with it. It's only the
assertion that causes trouble. So relax it.
This is formally a bug in all supported branches, but as it doesn't
seem to have any consequences for current uses of the xlogreader
facility, no back-patch, at least for now.
Dilip Kumar and Robert Haas
Discussion: http://postgr.es/m/CA+TgmoaJSs2_7WHW2GzFYe9+zfPtxBKvT3GW47+x=ptUE=cULw@mail.gmail.com
/*
* Caller supplied a position to start at.
*
- * In this case, NextRecPtr should already be pointing to a valid
- * record starting position.
+ * In this case, NextRecPtr should already be pointing either to a
+ * valid record starting position or alternatively to the beginning of
+ * a page. See the header comments for XLogBeginRead.
*/
- Assert(XRecOffIsValid(RecPtr));
+ Assert(RecPtr % XLOG_BLCKSZ == 0 || XRecOffIsValid(RecPtr));
randAccess = true;
}