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)