Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6179808

Browse files
committed
implement partial validate. add db-include and db-exclude options to validate command
1 parentf36d81d commit6179808

File tree

6 files changed

+34
-12
lines changed

6 files changed

+34
-12
lines changed

‎src/backup.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ do_backup(time_t start_time, bool no_validate)
778778
write_backup(&current);
779779

780780
if (!no_validate)
781-
pgBackupValidate(&current);
781+
pgBackupValidate(&current,NULL);
782782

783783
/* Notify user about backup size */
784784
pretty_size(current.data_bytes,pretty_data_bytes,lengthof(pretty_data_bytes));

‎src/help.c‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ help_restore(void)
359359
printf(_(" [-T OLDDIR=NEWDIR] [--progress]\n"));
360360
printf(_(" [--external-mapping=OLDDIR=NEWDIR]\n"));
361361
printf(_(" [--skip-external-dirs]\n"));
362+
printf(_(" [--db-include dbname | --db-exclude dbname]\n"));
362363
printf(_(" [--remote-proto] [--remote-host]\n"));
363364
printf(_(" [--remote-port] [--remote-path] [--remote-user]\n"));
364365
printf(_(" [--ssh-options]\n\n"));
@@ -396,6 +397,8 @@ help_restore(void)
396397
printf(_(" --external-mapping=OLDDIR=NEWDIR\n"));
397398
printf(_(" relocate the external directory from OLDDIR to NEWDIR\n"));
398399
printf(_(" --skip-external-dirs do not restore all external directories\n"));
400+
printf(_(" --db-include dbname restore only specified databases\n"));
401+
printf(_(" --db-exclude dbname do not restore specified databases\n"));
399402

400403
printf(_("\n Logging options:\n"));
401404
printf(_(" --log-level-console=log-level-console\n"));
@@ -440,6 +443,7 @@ help_validate(void)
440443
printf(_(" [--recovery-target-timeline=timeline]\n"));
441444
printf(_(" [--recovery-target-name=target-name]\n"));
442445
printf(_(" [--skip-block-validation]\n\n"));
446+
printf(_(" [--db-include dbname | --db-exclude dbname]\n"));
443447

444448
printf(_(" -B, --backup-path=backup-path location of the backup storage area\n"));
445449
printf(_(" --instance=instance_name name of the instance\n"));
@@ -458,6 +462,9 @@ help_validate(void)
458462
printf(_(" the named restore point to which recovery will proceed\n"));
459463
printf(_(" --skip-block-validation set to validate only file-level checksum\n"));
460464

465+
printf(_(" --db-include dbname restore only specified databases\n"));
466+
printf(_(" --db-exclude dbname do not restore specified databases\n"));
467+
461468
printf(_("\n Logging options:\n"));
462469
printf(_(" --log-level-console=log-level-console\n"));
463470
printf(_(" level for console logging (default: info)\n"));

‎src/merge.c‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ do_merge(time_t backup_id)
146146
merge_backups(full_backup,from_backup);
147147
}
148148

149-
pgBackupValidate(full_backup);
149+
pgBackupValidate(full_backup,NULL);
150150
if (full_backup->status==BACKUP_STATUS_CORRUPT)
151151
elog(ERROR,"Merging of backup %s failed",base36enc(backup_id));
152152

@@ -198,7 +198,7 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
198198
if (to_backup->status==BACKUP_STATUS_OK||
199199
to_backup->status==BACKUP_STATUS_DONE)
200200
{
201-
pgBackupValidate(to_backup);
201+
pgBackupValidate(to_backup,NULL);
202202
if (to_backup->status==BACKUP_STATUS_CORRUPT)
203203
elog(ERROR,"Interrupt merging");
204204
}
@@ -211,7 +211,7 @@ merge_backups(pgBackup *to_backup, pgBackup *from_backup)
211211
from_backup->status==BACKUP_STATUS_DONE||
212212
from_backup->status==BACKUP_STATUS_MERGING||
213213
from_backup->status==BACKUP_STATUS_DELETING);
214-
pgBackupValidate(from_backup);
214+
pgBackupValidate(from_backup,NULL);
215215
if (from_backup->status==BACKUP_STATUS_CORRUPT)
216216
elog(ERROR,"Interrupt merging");
217217

‎src/pg_probackup.h‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,8 @@ extern pgRecoveryTarget *parseRecoveryTargetOptions(
512512
constchar*target_inclusive,TimeLineIDtarget_tli,constchar*target_lsn,
513513
constchar*target_stop,constchar*target_name,
514514
constchar*target_action);
515+
externparray*get_dbOid_exclude_list(pgBackup*backup,parray*files,
516+
parray*datname_list,boolpartial_restore_type);
515517

516518
/* in merge.c */
517519
externvoiddo_merge(time_tbackup_id);
@@ -556,7 +558,7 @@ extern void help_pg_probackup(void);
556558
externvoidhelp_command(char*command);
557559

558560
/* in validate.c */
559-
externvoidpgBackupValidate(pgBackup*backup);
561+
externvoidpgBackupValidate(pgBackup*backup,pgRestoreParams*params);
560562
externintdo_validate_all(void);
561563

562564
/* in catalog.c */

‎src/restore.c‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ static void create_recovery_conf(time_t backup_id,
4444
pgRestoreParams*params);
4545
staticparray*read_timeline_history(TimeLineIDtargetTLI);
4646
staticvoid*restore_files(void*arg);
47-
48-
staticparray*get_dbOid_exclude_list(pgBackup*backup,parray*files,
49-
parray*datname_list,boolpartial_restore_type);
5047
staticvoidset_orphan_status(parray*backups,pgBackup*parent_backup);
5148

5249
/*
@@ -376,7 +373,7 @@ do_restore_or_validate(time_t target_backup_id, pgRecoveryTarget *rt,
376373
}
377374
}
378375

379-
pgBackupValidate(tmp_backup);
376+
pgBackupValidate(tmp_backup,params);
380377
/* After pgBackupValidate() only following backup
381378
* states are possible: ERROR, RUNNING, CORRUPT and OK.
382379
* Validate WAL only for OK, because there is no point

‎src/validate.c‎

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ typedef struct
3030
uint32checksum_version;
3131
uint32backup_version;
3232
BackupModebackup_mode;
33+
parray*dbOid_exclude_list;
3334

3435
/*
3536
* Return value from the thread.
@@ -42,7 +43,7 @@ typedef struct
4243
* Validate backup files.
4344
*/
4445
void
45-
pgBackupValidate(pgBackup*backup)
46+
pgBackupValidate(pgBackup*backup,pgRestoreParams*params)
4647
{
4748
charbase_path[MAXPGPATH];
4849
charexternal_prefix[MAXPGPATH];
@@ -54,6 +55,7 @@ pgBackupValidate(pgBackup *backup)
5455
pthread_t*threads;
5556
validate_files_arg*threads_args;
5657
inti;
58+
parray*dbOid_exclude_list=NULL;
5759

5860
/* Check backup version */
5961
if (parse_program_version(backup->program_version)>parse_program_version(PROGRAM_VERSION))
@@ -105,6 +107,10 @@ pgBackupValidate(pgBackup *backup)
105107
pgBackupGetPath(backup,path,lengthof(path),DATABASE_FILE_LIST);
106108
files=dir_read_file_list(base_path,external_prefix,path,FIO_BACKUP_HOST);
107109

110+
if (params&&params->partial_db_list)
111+
dbOid_exclude_list=get_dbOid_exclude_list(backup,files,params->partial_db_list,
112+
params->is_include_list);
113+
108114
/* setup threads */
109115
for (i=0;i<parray_num(files);i++)
110116
{
@@ -130,6 +136,7 @@ pgBackupValidate(pgBackup *backup)
130136
arg->stop_lsn=backup->stop_lsn;
131137
arg->checksum_version=backup->checksum_version;
132138
arg->backup_version=parse_program_version(backup->program_version);
139+
arg->dbOid_exclude_list=dbOid_exclude_list;
133140
/* By default there are some error */
134141
threads_args[i].ret=1;
135142

@@ -193,6 +200,15 @@ pgBackupValidateFiles(void *arg)
193200
if (!S_ISREG(file->mode))
194201
continue;
195202

203+
/*
204+
* If in partial validate, check if the file belongs to the database
205+
* we exclude. Only files from pgdata can be skipped.
206+
*/
207+
if (arguments->dbOid_exclude_list&&file->external_dir_num==0
208+
&&parray_bsearch(arguments->dbOid_exclude_list,
209+
&file->dbOid,pgCompareOid))
210+
continue;
211+
196212
/*
197213
* Currently we don't compute checksums for
198214
* cfs_compressed data files, so skip them.
@@ -498,7 +514,7 @@ do_validate_instance(void)
498514
continue;
499515
}
500516
/* Valiate backup files*/
501-
pgBackupValidate(current_backup);
517+
pgBackupValidate(current_backup,NULL);
502518

503519
/* Validate corresponding WAL files */
504520
if (current_backup->status==BACKUP_STATUS_OK)
@@ -593,7 +609,7 @@ do_validate_instance(void)
593609
continue;
594610
}
595611
/* Revalidate backup files*/
596-
pgBackupValidate(backup);
612+
pgBackupValidate(backup,NULL);
597613

598614
if (backup->status==BACKUP_STATUS_OK)
599615
{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp