mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
Further fix to the mode where we enter archive recovery after crash recovery.
I missed to returns in the middle of ReadRecord function in my previous fix. If a WAL file was not found at all during crash recovery, XLogPageRead would return 'false', and ReadRecord would return without entering archive recovery. 9.2 only. In master, the code is structured differently and does not have this problem. Kyotaro HORIGUCHI, Mitsumasa KONDO and me.
This commit is contained in:
parent
c52ba36bd7
commit
d009f9036d
@ -4010,7 +4010,16 @@ ReadRecord(XLogRecPtr *RecPtr, int emode, bool fetching_ckpt)
|
||||
retry:
|
||||
/* Read the page containing the record */
|
||||
if (!XLogPageRead(RecPtr, emode, fetching_ckpt, randAccess))
|
||||
return NULL;
|
||||
{
|
||||
/*
|
||||
* In standby-mode, XLogPageRead returning false means that promotion
|
||||
* has been triggered.
|
||||
*/
|
||||
if (StandbyMode)
|
||||
return NULL;
|
||||
else
|
||||
goto next_record_is_invalid;
|
||||
}
|
||||
|
||||
pageHeaderSize = XLogPageHeaderSize((XLogPageHeader) readBuf);
|
||||
targetRecOff = RecPtr->xrecoff % XLOG_BLCKSZ;
|
||||
@ -4168,7 +4177,16 @@ retry:
|
||||
}
|
||||
/* Wait for the next page to become available */
|
||||
if (!XLogPageRead(&pagelsn, emode, false, false))
|
||||
return NULL;
|
||||
{
|
||||
/*
|
||||
* In standby-mode, XLogPageRead returning false means that
|
||||
* promotion has been triggered.
|
||||
*/
|
||||
if (StandbyMode)
|
||||
return NULL;
|
||||
else
|
||||
goto next_record_is_invalid;
|
||||
}
|
||||
|
||||
/* Check that the continuation record looks valid */
|
||||
if (!(((XLogPageHeader) readBuf)->xlp_info & XLP_FIRST_IS_CONTRECORD))
|
||||
@ -10326,6 +10344,9 @@ CancelBackup(void)
|
||||
* and call XLogPageRead() again with the same arguments. This lets
|
||||
* XLogPageRead() to try fetching the record from another source, or to
|
||||
* sleep and retry.
|
||||
*
|
||||
* In standby mode, this only returns false if promotion has been triggered.
|
||||
* Otherwise it keeps sleeping and retrying indefinitely.
|
||||
*/
|
||||
static bool
|
||||
XLogPageRead(XLogRecPtr *RecPtr, int emode, bool fetching_ckpt,
|
||||
|
Loading…
x
Reference in New Issue
Block a user