1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-01-20 11:34:51 +02:00

Issue 74: copy_file and backup_data_file() always treat missing source file as non-error condition

This commit is contained in:
Grigory Smolkin 2019-05-24 15:12:15 +03:00
parent 84c6fd4101
commit db10096f0f
5 changed files with 33 additions and 20 deletions

View File

@ -2466,7 +2466,8 @@ backup_files(void *arg)
arguments->prev_start_lsn,
current.backup_mode,
instance_config.compress_alg,
instance_config.compress_level))
instance_config.compress_level,
true))
{
/* disappeared file not to be confused with 'not changed' */
if (file->write_size != FILE_NOT_FOUND)
@ -2508,7 +2509,7 @@ backup_files(void *arg)
else
dst = arguments->to_root;
if (skip ||
!copy_file(FIO_DB_HOST, dst, FIO_BACKUP_HOST, file))
!copy_file(FIO_DB_HOST, dst, FIO_BACKUP_HOST, file, true))
{
/* disappeared file not to be confused with 'not changed' */
if (file->write_size != FILE_NOT_FOUND)

View File

@ -521,7 +521,7 @@ bool
backup_data_file(backup_files_arg* arguments,
const char *to_path, pgFile *file,
XLogRecPtr prev_backup_start_lsn, BackupMode backup_mode,
CompressAlg calg, int clevel)
CompressAlg calg, int clevel, bool missing_ok)
{
FILE *in;
FILE *out;
@ -567,9 +567,14 @@ backup_data_file(backup_files_arg* arguments,
*/
if (errno == ENOENT)
{
elog(LOG, "File \"%s\" is not found", file->path);
file->write_size = FILE_NOT_FOUND;
return false;
if (missing_ok)
{
elog(LOG, "File \"%s\" is not found", file->path);
file->write_size = FILE_NOT_FOUND;
return false;
}
else
elog(ERROR, "File \"%s\" is not found", file->path);
}
elog(ERROR, "cannot open file \"%s\": %s",
@ -754,7 +759,7 @@ restore_data_file(const char *to_path, pgFile *file, bool allow_truncate,
break;
/*
* We need to truncate result file if data file in a incremental backup
* We need to truncate result file if data file in an incremental backup
* less than data file in a full backup. We know it thanks to n_blocks.
*
* It may be equal to -1, then we don't want to truncate the result
@ -939,7 +944,7 @@ restore_data_file(const char *to_path, pgFile *file, bool allow_truncate,
*/
bool
copy_file(fio_location from_location, const char *to_root,
fio_location to_location, pgFile *file)
fio_location to_location, pgFile *file, bool missing_ok)
{
char to_path[MAXPGPATH];
FILE *in;
@ -963,12 +968,17 @@ copy_file(fio_location from_location, const char *to_root,
FIN_FILE_CRC32(true, crc);
file->crc = crc;
/* maybe deleted, it's not error */
/* maybe deleted, it's not error in case of backup */
if (errno == ENOENT)
{
elog(LOG, "File \"%s\" is not found", file->path);
file->write_size = FILE_NOT_FOUND;
return false;
if (missing_ok)
{
elog(LOG, "File \"%s\" is not found", file->path);
file->write_size = FILE_NOT_FOUND;
return false;
}
else
elog(ERROR, "File \"%s\" is not found", file->path);
}
elog(ERROR, "cannot open source file \"%s\": %s", file->path,

View File

@ -489,7 +489,7 @@ merge_files(void *arg)
* of DELTA backup we should consider n_blocks to truncate the target
* backup.
*/
if (file->write_size == BYTES_INVALID && file->n_blocks == -1)
if (file->write_size == BYTES_INVALID && file->n_blocks == BLOCKNUM_INVALID)
{
elog(VERBOSE, "Skip merging file \"%s\", the file didn't change",
file->path);
@ -605,7 +605,8 @@ merge_files(void *arg)
to_backup->start_lsn,
to_backup->backup_mode,
to_backup->compress_alg,
to_backup->compress_level);
to_backup->compress_level,
false);
file->path = prev_path;
@ -645,12 +646,12 @@ merge_files(void *arg)
argument->from_external);
makeExternalDirPathByNum(to_root, argument->to_external_prefix,
new_dir_num);
copy_file(FIO_LOCAL_HOST, to_root, FIO_LOCAL_HOST, file);
copy_file(FIO_LOCAL_HOST, to_root, FIO_LOCAL_HOST, file, false);
}
else if (strcmp(file->name, "pg_control") == 0)
copy_pgcontrol_file(argument->from_root, FIO_LOCAL_HOST, argument->to_root, FIO_LOCAL_HOST, file);
else
copy_file(FIO_LOCAL_HOST, argument->to_root, FIO_LOCAL_HOST, file);
copy_file(FIO_LOCAL_HOST, argument->to_root, FIO_LOCAL_HOST, file, false);
/*
* We need to save compression algorithm type of the target backup to be

View File

@ -629,13 +629,14 @@ extern bool backup_data_file(backup_files_arg* arguments,
const char *to_path, pgFile *file,
XLogRecPtr prev_backup_start_lsn,
BackupMode backup_mode,
CompressAlg calg, int clevel);
CompressAlg calg, int clevel,
bool missing_ok);
extern void restore_data_file(const char *to_path,
pgFile *file, bool allow_truncate,
bool write_header,
uint32 backup_version);
extern bool copy_file(fio_location from_location, const char *to_root,
fio_location to_location, pgFile *file);
fio_location to_location, pgFile *file, bool missing_ok);
extern bool check_file_pages(pgFile *file, XLogRecPtr stop_lsn,
uint32 checksum_version, uint32 backup_version);

View File

@ -742,7 +742,7 @@ restore_files(void *arg)
if (backup_contains_external(external_path,
arguments->dest_external_dirs))
copy_file(FIO_BACKUP_HOST,
external_path, FIO_DB_HOST, file);
external_path, FIO_DB_HOST, file, false);
}
else if (strcmp(file->name, "pg_control") == 0)
copy_pgcontrol_file(from_root, FIO_BACKUP_HOST,
@ -751,7 +751,7 @@ restore_files(void *arg)
else
copy_file(FIO_BACKUP_HOST,
instance_config.pgdata, FIO_DB_HOST,
file);
file, false);
/* print size of restored file */
if (file->write_size != BYTES_INVALID)