diff --git a/src/backup.c b/src/backup.c index 3cbd4fbf..4c102a4d 100644 --- a/src/backup.c +++ b/src/backup.c @@ -557,7 +557,7 @@ do_backup_pg(InstanceState *instanceState, PGconn *backup_conn, elog(ERROR, "Failed to find file \"%s\" in backup filelist.", XLOG_CONTROL_FILE); - set_min_recovery_point(pg_control, current.database_dir, current.stop_lsn); + set_min_recovery_point(pg_control, instance_config.pgdata, current.database_dir, current.stop_lsn); } /* close and sync page header map */ diff --git a/src/catchup.c b/src/catchup.c index 39fd37d2..06e33312 100644 --- a/src/catchup.c +++ b/src/catchup.c @@ -1123,7 +1123,7 @@ do_catchup(const char *source_pgdata, const char *dest_pgdata, int num_threads, */ if (current.from_replica && !exclusive_backup) { - set_min_recovery_point(source_pg_control_file, dest_pgdata, current.stop_lsn); + set_min_recovery_point(source_pg_control_file, source_pgdata, dest_pgdata, current.stop_lsn); } /* close ssh session in main thread */ diff --git a/src/pg_probackup.h b/src/pg_probackup.h index e5d03495..667c8ae7 100644 --- a/src/pg_probackup.h +++ b/src/pg_probackup.h @@ -1228,7 +1228,7 @@ extern uint32 get_data_checksum_version(bool safe); extern pg_crc32c get_pgcontrol_checksum(const char *pgdata_path); extern uint32 get_xlog_seg_size(const char *pgdata_path); extern void get_redo(const char *pgdata_path, fio_location pgdata_location, RedoParams *redo); -extern void set_min_recovery_point(pgFile *file, const char *backup_path, +extern void set_min_recovery_point(pgFile *file, const char *source_pgdata, const char *backup_path, XLogRecPtr stop_backup_lsn); extern void get_control_file_or_back_file(const char *pgdata_path, fio_location location, ControlFileData *control); diff --git a/src/util.c b/src/util.c index 5189ba3b..04f0108a 100644 --- a/src/util.c +++ b/src/util.c @@ -396,7 +396,7 @@ get_redo(const char *pgdata_path, fio_location pgdata_location, RedoParams *redo * 'as-is' is not to be trusted. */ void -set_min_recovery_point(pgFile *file, const char *backup_path, +set_min_recovery_point(pgFile *file, const char *source_pgdata, const char *backup_path, XLogRecPtr stop_backup_lsn) { ControlFileData ControlFile; @@ -405,7 +405,7 @@ set_min_recovery_point(pgFile *file, const char *backup_path, char fullpath[MAXPGPATH]; /* First fetch file content */ - buffer = slurpFile(instance_config.pgdata, XLOG_CONTROL_FILE, &size, false, FIO_DB_HOST); + buffer = slurpFile(source_pgdata, XLOG_CONTROL_FILE, &size, false, FIO_DB_HOST); digestControlFile(&ControlFile, buffer, size); elog(LOG, "Current minRecPoint %X/%X",