diff options
Diffstat (limited to 'src/backend/replication/backup_manifest.c')
-rw-r--r-- | src/backend/replication/backup_manifest.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/backend/replication/backup_manifest.c b/src/backend/replication/backup_manifest.c index 921de47a6c2..04ca455ace8 100644 --- a/src/backend/replication/backup_manifest.c +++ b/src/backend/replication/backup_manifest.c @@ -251,11 +251,18 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr, errmsg("expected end timeline %u but found timeline %u", starttli, entry->tli)); - if (!XLogRecPtrIsInvalid(entry->begin)) - tl_beginptr = entry->begin; + /* + * If this timeline entry matches with the timeline on which the + * backup started, WAL needs to be checked from the start LSN of the + * backup. If this entry refers to a newer timeline, WAL needs to be + * checked since the beginning of this timeline, so use the LSN where + * the timeline began. + */ + if (starttli == entry->tli) + tl_beginptr = startptr; else { - tl_beginptr = startptr; + tl_beginptr = entry->begin; /* * If we reach a TLI that has no valid beginning LSN, there can't @@ -263,7 +270,7 @@ AddWALInfoToBackupManifest(backup_manifest_info *manifest, XLogRecPtr startptr, * better have arrived at the expected starting TLI. If not, * something's gone horribly wrong. */ - if (starttli != entry->tli) + if (XLogRecPtrIsInvalid(entry->begin)) ereport(ERROR, errmsg("expected start timeline %u but found timeline %u", starttli, entry->tli)); |