Skip to content

Commit 30845bf

Browse files
committed
Check ptrack control file.
1 parent 633b4b5 commit 30845bf

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed

backup.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,12 @@ do_backup_database(parray *backup_list, pgBackupOption bkupopt)
230230

231231
if (current.backup_mode == BACKUP_MODE_DIFF_PTRACK)
232232
{
233+
XLogRecPtr ptrack_lsn = get_last_ptrack_lsn();
234+
if (ptrack_lsn < prev_backup->start_lsn || ptrack_lsn >= current.start_lsn)
235+
elog(ERROR, "Wrong ptrack lsn:%lx prev:%lx current:%lx",
236+
ptrack_lsn,
237+
prev_backup->start_lsn,
238+
current.start_lsn);
233239
parray_qsort(backup_files_list, pgFileComparePathDesc);
234240
make_pagemap_from_ptrack(backup_files_list);
235241
}

parsexlog.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,9 @@ SimpleXLogPageRead(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr,
107107
{
108108
XLogPageReadPrivate *private = (XLogPageReadPrivate *) xlogreader->private_data;
109109
uint32 targetPageOff;
110-
XLogRecPtr targetSegEnd;
111110
XLogSegNo targetSegNo;
112111

113112
XLByteToSeg(targetPagePtr, targetSegNo);
114-
XLogSegNoOffsetToRecPtr(targetSegNo + 1, 0, targetSegEnd);
115113
targetPageOff = targetPagePtr % XLogSegSize;
116114

117115
/*

pg_arman.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ extern void time2iso(char *buf, size_t len, time_t time);
298298
extern const char *status2str(BackupStatus status);
299299
extern void remove_trailing_space(char *buf, int comment_mark);
300300
extern void remove_not_digit(char *buf, size_t len, const char *str);
301+
extern XLogRecPtr get_last_ptrack_lsn(void);
301302

302303
/* in status.c */
303304
extern bool is_pg_running(void);

util.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,21 @@ sanityChecks(void)
7575
"target master need to use either data checksums or \"wal_log_hints = on\".");
7676
}
7777

78+
XLogRecPtr
79+
get_last_ptrack_lsn(void)
80+
{
81+
char *buffer;
82+
size_t size;
83+
XLogRecPtr lsn;
84+
85+
buffer = slurpFile(pgdata, "global/ptrack_control", &size, false);
86+
if (buffer == NULL)
87+
return 0;
88+
89+
lsn = *(XLogRecPtr *)buffer;
90+
return lsn;
91+
}
92+
7893
/*
7994
* Utility shared by backup and restore to fetch the current timeline
8095
* used by a node.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy