Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 304122d

Browse files
committed
Fix page and ptrack backup. It is necessary to backup only changed relations
1 parent a4eb925 commit 304122d

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

src/backup.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1939,7 +1939,8 @@ backup_files(void *arg)
19391939
/* backup block by block if datafile AND not compressed by cfs*/
19401940
if (!backup_data_file(arguments->from_root,
19411941
arguments->to_root, file,
1942-
arguments->prev_backup_start_lsn))
1942+
arguments->prev_backup_start_lsn,
1943+
current.backup_mode))
19431944
{
19441945
file->write_size = BYTES_INVALID;
19451946
elog(LOG, "File \"%s\" was not copied to backup", file->path);

src/data.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,8 @@ backup_data_page(pgFile *file, XLogRecPtr prev_backup_start_lsn,
282282
*/
283283
bool
284284
backup_data_file(const char *from_root, const char *to_root,
285-
pgFile *file, XLogRecPtr prev_backup_start_lsn)
285+
pgFile *file, XLogRecPtr prev_backup_start_lsn,
286+
BackupMode backup_mode)
286287
{
287288
char to_path[MAXPGPATH];
288289
FILE *in;
@@ -292,6 +293,17 @@ backup_data_file(const char *from_root, const char *to_root,
292293
int n_blocks_skipped = 0;
293294
int n_blocks_read = 0;
294295

296+
if ((backup_mode == BACKUP_MODE_DIFF_PAGE ||
297+
backup_mode == BACKUP_MODE_DIFF_PTRACK) &&
298+
file->pagemap.bitmapsize == 0)
299+
{
300+
/*
301+
* There are no changed blocks since last backup. We want make
302+
* incremental backup, so we should exit.
303+
*/
304+
return false;
305+
}
306+
295307
/* reset size summary */
296308
file->read_size = 0;
297309
file->write_size = 0;

src/pg_probackup.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,8 @@ extern int pgFileCompareSize(const void *f1, const void *f2);
413413

414414
/* in data.c */
415415
extern bool backup_data_file(const char *from_root, const char *to_root,
416-
pgFile *file, XLogRecPtr prev_backup_start_lsn);
416+
pgFile *file, XLogRecPtr prev_backup_start_lsn,
417+
BackupMode backup_mode);
417418
extern void restore_data_file(const char *from_root, const char *to_root,
418419
pgFile *file, pgBackup *backup);
419420
extern bool copy_file(const char *from_root, const char *to_root,

0 commit comments

Comments
 (0)