Fix single-record reads to use restore_command if available in pg_rewind
readOneRecord() is used now when looking for a checkpoint record to check if the target server is an ancestor of the source across multiple timelines, and using a restore_command if available improves the stability of the operation. This part was missed in a7e8ece. Reported-by: Kyotaro Horiguchi Discussion: https://postgr.es/m/20200421.150830.1410714948345179794.horikyota.ntt@gmail.com
This commit is contained in:
parent
c33869cc3b
commit
cd12323440
@ -106,7 +106,8 @@ extractPageMap(const char *datadir, XLogRecPtr startpoint, int tliIndex,
|
||||
* doing anything with the record itself.
|
||||
*/
|
||||
XLogRecPtr
|
||||
readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex)
|
||||
readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex,
|
||||
const char *restoreCommand)
|
||||
{
|
||||
XLogRecord *record;
|
||||
XLogReaderState *xlogreader;
|
||||
@ -115,6 +116,7 @@ readOneRecord(const char *datadir, XLogRecPtr ptr, int tliIndex)
|
||||
XLogRecPtr endptr;
|
||||
|
||||
private.tliIndex = tliIndex;
|
||||
private.restoreCommand = restoreCommand;
|
||||
xlogreader = XLogReaderAllocate(WalSegSz, datadir, &SimpleXLogPageRead,
|
||||
&private);
|
||||
if (xlogreader == NULL)
|
||||
|
@ -339,7 +339,8 @@ main(int argc, char **argv)
|
||||
/* Read the checkpoint record on the target to see where it ends. */
|
||||
chkptendrec = readOneRecord(datadir_target,
|
||||
ControlFile_target.checkPoint,
|
||||
targetNentries - 1);
|
||||
targetNentries - 1,
|
||||
restore_command);
|
||||
|
||||
/*
|
||||
* If the histories diverged exactly at the end of the shutdown
|
||||
|
@ -50,7 +50,7 @@ extern void findLastCheckpoint(const char *datadir, XLogRecPtr searchptr,
|
||||
XLogRecPtr *lastchkptredo,
|
||||
const char *restoreCommand);
|
||||
extern XLogRecPtr readOneRecord(const char *datadir, XLogRecPtr ptr,
|
||||
int tliIndex);
|
||||
int tliIndex, const char *restoreCommand);
|
||||
|
||||
/* in pg_rewind.c */
|
||||
extern void progress_report(bool force);
|
||||
|
Loading…
x
Reference in New Issue
Block a user