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

Commit2bc096b

Browse files
authored
Merge pull request#515 from postgrespro/PBCKP-170
PBCKP-170
2 parents2e1950a +8ce27c9 commit2bc096b

File tree

6 files changed

+415
-15
lines changed

6 files changed

+415
-15
lines changed

‎src/backup.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -695,7 +695,7 @@ pgdata_basic_setup(ConnectionOptions conn_opt, PGNodeInfo *nodeInfo)
695695
*/
696696
int
697697
do_backup(InstanceState*instanceState,pgSetBackupParams*set_backup_params,
698-
boolno_validate,boolno_sync,boolbackup_logs)
698+
boolno_validate,boolno_sync,boolbackup_logs,time_tstart_time)
699699
{
700700
PGconn*backup_conn=NULL;
701701
PGNodeInfonodeInfo;
@@ -710,7 +710,7 @@ do_backup(InstanceState *instanceState, pgSetBackupParams *set_backup_params,
710710
current.external_dir_str=instance_config.external_dir_str;
711711

712712
/* Create backup directory and BACKUP_CONTROL_FILE */
713-
pgBackupCreateDir(&current,instanceState->instance_backup_subdir_path);
713+
pgBackupCreateDir(&current,instanceState,start_time);
714714

715715
if (!instance_config.pgdata)
716716
elog(ERROR,"required parameter not specified: PGDATA "

‎src/catalog.c

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ static pgBackup* get_closest_backup(timelineInfo *tlinfo);
2323
staticpgBackup*get_oldest_backup(timelineInfo*tlinfo);
2424
staticconstchar*backupModes[]= {"","PAGE","PTRACK","DELTA","FULL"};
2525
staticpgBackup*readBackupControlFile(constchar*path);
26-
statictime_tcreate_backup_dir(pgBackup*backup,constchar*backup_instance_path);
26+
staticvoidcreate_backup_dir(pgBackup*backup,constchar*backup_instance_path);
2727

2828
staticboolbackup_lock_exit_hook_registered= false;
2929
staticparray*locks=NULL;
@@ -1420,10 +1420,12 @@ get_multi_timeline_parent(parray *backup_list, parray *tli_list,
14201420
*/
14211421

14221422
void
1423-
pgBackupCreateDir(pgBackup*backup,constchar*backup_instance_path)
1423+
pgBackupCreateDir(pgBackup*backup,InstanceState*instanceState,time_tstart_time)
14241424
{
14251425
inti;
14261426
parray*subdirs=parray_new();
1427+
parray*backups;
1428+
pgBackup*target_backup;
14271429

14281430
parray_append(subdirs,pg_strdup(DATABASE_DIR));
14291431

@@ -1444,7 +1446,26 @@ pgBackupCreateDir(pgBackup *backup, const char *backup_instance_path)
14441446
free_dir_list(external_list);
14451447
}
14461448

1447-
backup->backup_id=create_backup_dir(backup,backup_instance_path);
1449+
/* Get list of all backups*/
1450+
backups=catalog_get_backup_list(instanceState,INVALID_BACKUP_ID);
1451+
if (parray_num(backups)>0)
1452+
{
1453+
target_backup= (pgBackup*)parray_get(backups,0);
1454+
if (start_time>target_backup->backup_id)
1455+
{
1456+
backup->backup_id=start_time;
1457+
create_backup_dir(backup,instanceState->instance_backup_subdir_path);
1458+
}
1459+
else
1460+
{
1461+
elog(ERROR,"Cannot create directory for older backup");
1462+
}
1463+
}
1464+
else
1465+
{
1466+
backup->backup_id=start_time;
1467+
create_backup_dir(backup,instanceState->instance_backup_subdir_path);
1468+
}
14481469

14491470
if (backup->backup_id==0)
14501471
elog(ERROR,"Cannot create backup directory: %s",strerror(errno));
@@ -1471,7 +1492,7 @@ pgBackupCreateDir(pgBackup *backup, const char *backup_instance_path)
14711492
* Create root directory for backup,
14721493
* update pgBackup.root_dir if directory creation was a success
14731494
*/
1474-
time_t
1495+
void
14751496
create_backup_dir(pgBackup*backup,constchar*backup_instance_path)
14761497
{
14771498
intattempts=10;
@@ -1480,17 +1501,16 @@ create_backup_dir(pgBackup *backup, const char *backup_instance_path)
14801501
{
14811502
intrc;
14821503
charpath[MAXPGPATH];
1483-
time_tbackup_id=time(NULL);
14841504

1485-
join_path_components(path,backup_instance_path,base36enc(backup_id));
1505+
join_path_components(path,backup_instance_path,base36enc(backup->backup_id));
14861506

14871507
/* TODO: add wrapper for remote mode */
14881508
rc=dir_create_dir(path,DIR_PERMISSION, true);
14891509

14901510
if (rc==0)
14911511
{
14921512
backup->root_dir=pgut_strdup(path);
1493-
returnbackup_id;
1513+
return;
14941514
}
14951515
else
14961516
{
@@ -1499,7 +1519,6 @@ create_backup_dir(pgBackup *backup, const char *backup_instance_path)
14991519
}
15001520
}
15011521

1502-
return0;
15031522
}
15041523

15051524
/*

‎src/pg_probackup.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ pid_t my_pid = 0;
7878
__threadintmy_thread_num=1;
7979
boolprogress= false;
8080
boolno_sync= false;
81+
time_tstart_time=0;
8182
#ifPG_VERSION_NUM >=100000
8283
char*replication_slot=NULL;
8384
booltemp_slot= false;
@@ -201,6 +202,7 @@ static ConfigOption cmd_options[] =
201202
{'s','i',"backup-id",&backup_id_string,SOURCE_CMD_STRICT },
202203
{'b',133,"no-sync",&no_sync,SOURCE_CMD_STRICT },
203204
{'b',134,"no-color",&no_color,SOURCE_CMD_STRICT },
205+
{'U',241,"start-time",&start_time,SOURCE_CMD_STRICT },
204206
/* backup options */
205207
{'b',180,"backup-pg-log",&backup_logs,SOURCE_CMD_STRICT },
206208
{'f','b',"backup-mode",opt_backup_mode,SOURCE_CMD_STRICT },
@@ -957,14 +959,21 @@ main(int argc, char *argv[])
957959
caseBACKUP_CMD:
958960
{
959961
current.stream=stream_wal;
962+
if (start_time==0)
963+
start_time=current_time;
964+
else
965+
elog(WARNING,"Please do not use the --start-time option to start backup. "
966+
"This is a service option required to work with other extensions. "
967+
"We do not guarantee future support for this flag.");
968+
960969

961970
/* sanity */
962971
if (current.backup_mode==BACKUP_MODE_INVALID)
963972
elog(ERROR,"required parameter not specified: BACKUP_MODE "
964973
"(-b, --backup-mode)");
965974

966975
returndo_backup(instanceState,set_backup_params,
967-
no_validate,no_sync,backup_logs);
976+
no_validate,no_sync,backup_logs,start_time);
968977
}
969978
caseCATCHUP_CMD:
970979
returndo_catchup(catchup_source_pgdata,catchup_destination_pgdata,num_threads, !no_sync,

‎src/pg_probackup.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ extern char** commands_args;
842842

843843
/* in backup.c */
844844
externintdo_backup(InstanceState*instanceState,pgSetBackupParams*set_backup_params,
845-
boolno_validate,boolno_sync,boolbackup_logs);
845+
boolno_validate,boolno_sync,boolbackup_logs,time_tstart_time);
846846
externvoiddo_checkdb(boolneed_amcheck,ConnectionOptionsconn_opt,
847847
char*pgdata);
848848
externBackupModeparse_backup_mode(constchar*value);
@@ -983,7 +983,7 @@ extern void write_backup_filelist(pgBackup *backup, parray *files,
983983
constchar*root,parray*external_list,boolsync);
984984

985985

986-
externvoidpgBackupCreateDir(pgBackup*backup,constchar*backup_instance_path);
986+
externvoidpgBackupCreateDir(pgBackup*backup,InstanceState*instanceState,time_tstart_time);
987987
externvoidpgNodeInit(PGNodeInfo*node);
988988
externvoidpgBackupInit(pgBackup*backup);
989989
externvoidpgBackupFree(void*backup);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp