Skip to content

Commit b956feb

Browse files
committed
Refactoring. Get rid of global variable backup_path
1 parent 341d7b8 commit b956feb

File tree

11 files changed

+105
-104
lines changed

11 files changed

+105
-104
lines changed

src/backup.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ do_backup_pg(InstanceState *instanceState, PGconn *backup_conn,
157157
current.backup_mode == BACKUP_MODE_DIFF_DELTA)
158158
{
159159
/* get list of backups already taken */
160-
backup_list = catalog_get_backup_list(instanceState->instance_name, INVALID_BACKUP_ID);
160+
backup_list = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
161161

162162
prev_backup = catalog_get_last_data_backup(backup_list, current.tli, current.start_time);
163163
if (prev_backup == NULL)
@@ -168,7 +168,7 @@ do_backup_pg(InstanceState *instanceState, PGconn *backup_conn,
168168
current.tli);
169169

170170
/* TODO: use read_timeline_history */
171-
tli_list = catalog_get_timelines(&instance_config);
171+
tli_list = catalog_get_timelines(instanceState, &instance_config);
172172

173173
if (parray_num(tli_list) == 0)
174174
elog(WARNING, "Cannot find valid backup on previous timelines, "

src/catalog.c

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -688,38 +688,35 @@ IsDir(const char *dirpath, const char *entry, fio_location location)
688688
/*
689689
* Create list of instances in given backup catalog.
690690
*
691-
* Returns parray of "InstanceConfig" structures, filled with
692-
* actual config of each instance.
691+
* Returns parray of InstanceState structures.
693692
*/
694693
parray *
695-
catalog_get_instance_list(char *backup_catalog_path)
694+
catalog_get_instance_list(CatalogState *catalogState)
696695
{
697-
char path[MAXPGPATH];
698696
DIR *dir;
699697
struct dirent *dent;
700698
parray *instances;
701699

702700
instances = parray_new();
703701

704702
/* open directory and list contents */
705-
join_path_components(path, backup_catalog_path, BACKUPS_DIR);
706-
dir = opendir(path);
703+
dir = opendir(catalogState->backup_subdir_path);
707704
if (dir == NULL)
708705
elog(ERROR, "Cannot open directory \"%s\": %s",
709-
path, strerror(errno));
706+
catalogState->backup_subdir_path, strerror(errno));
710707

711708
while (errno = 0, (dent = readdir(dir)) != NULL)
712709
{
713710
char child[MAXPGPATH];
714711
struct stat st;
715-
InstanceConfig *instance;
712+
InstanceState *instanceState = NULL;
716713

717714
/* skip entries point current dir or parent dir */
718715
if (strcmp(dent->d_name, ".") == 0 ||
719716
strcmp(dent->d_name, "..") == 0)
720717
continue;
721718

722-
join_path_components(child, path, dent->d_name);
719+
join_path_components(child, catalogState->backup_subdir_path, dent->d_name);
723720

724721
if (lstat(child, &st) == -1)
725722
elog(ERROR, "Cannot stat file \"%s\": %s",
@@ -728,9 +725,16 @@ catalog_get_instance_list(char *backup_catalog_path)
728725
if (!S_ISDIR(st.st_mode))
729726
continue;
730727

731-
instance = readInstanceConfigFile(dent->d_name);
728+
instanceState = pgut_new(InstanceState);
729+
instanceState->config = readInstanceConfigFile(instanceState);
730+
731+
strncpy(instanceState->instance_name, dent->d_name, MAXPGPATH);
732+
join_path_components(instanceState->instance_backup_subdir_path,
733+
catalogState->backup_subdir_path, instanceState->instance_name);
734+
join_path_components(instanceState->instance_wal_subdir_path,
735+
catalogState->wal_subdir_path, instanceState->instance_name);
732736

733-
parray_append(instances, instance);
737+
parray_append(instances, instanceState);
734738
}
735739

736740
/* TODO 3.0: switch to ERROR */
@@ -739,11 +743,11 @@ catalog_get_instance_list(char *backup_catalog_path)
739743

740744
if (errno)
741745
elog(ERROR, "Cannot read directory \"%s\": %s",
742-
path, strerror(errno));
746+
catalogState->backup_subdir_path, strerror(errno));
743747

744748
if (closedir(dir))
745749
elog(ERROR, "Cannot close directory \"%s\": %s",
746-
path, strerror(errno));
750+
catalogState->backup_subdir_path, strerror(errno));
747751

748752
return instances;
749753
}
@@ -755,22 +759,18 @@ catalog_get_instance_list(char *backup_catalog_path)
755759
* If valid backup id is passed only matching backup will be added to the list.
756760
*/
757761
parray *
758-
catalog_get_backup_list(const char *instance_name, time_t requested_backup_id)
762+
catalog_get_backup_list(InstanceState *instanceState, time_t requested_backup_id)
759763
{
760764
DIR *data_dir = NULL;
761765
struct dirent *data_ent = NULL;
762766
parray *backups = NULL;
763767
int i;
764-
char backup_instance_path[MAXPGPATH];
765-
766-
sprintf(backup_instance_path, "%s/%s/%s",
767-
backup_path, BACKUPS_DIR, instance_name);
768768

769769
/* open backup instance backups directory */
770-
data_dir = fio_opendir(backup_instance_path, FIO_BACKUP_HOST);
770+
data_dir = fio_opendir(instanceState->instance_backup_subdir_path, FIO_BACKUP_HOST);
771771
if (data_dir == NULL)
772772
{
773-
elog(WARNING, "cannot open directory \"%s\": %s", backup_instance_path,
773+
elog(WARNING, "cannot open directory \"%s\": %s", instanceState->instance_backup_subdir_path,
774774
strerror(errno));
775775
goto err_proc;
776776
}
@@ -784,12 +784,12 @@ catalog_get_backup_list(const char *instance_name, time_t requested_backup_id)
784784
pgBackup *backup = NULL;
785785

786786
/* skip not-directory entries and hidden entries */
787-
if (!IsDir(backup_instance_path, data_ent->d_name, FIO_BACKUP_HOST)
787+
if (!IsDir(instanceState->instance_backup_subdir_path, data_ent->d_name, FIO_BACKUP_HOST)
788788
|| data_ent->d_name[0] == '.')
789789
continue;
790790

791791
/* open subdirectory of specific backup */
792-
join_path_components(data_path, backup_instance_path, data_ent->d_name);
792+
join_path_components(data_path, instanceState->instance_backup_subdir_path, data_ent->d_name);
793793

794794
/* read backup information from BACKUP_CONTROL_FILE */
795795
snprintf(backup_conf_path, MAXPGPATH, "%s/%s", data_path, BACKUP_CONTROL_FILE);
@@ -835,7 +835,7 @@ catalog_get_backup_list(const char *instance_name, time_t requested_backup_id)
835835
if (errno)
836836
{
837837
elog(WARNING, "cannot read backup root directory \"%s\": %s",
838-
backup_instance_path, strerror(errno));
838+
instanceState->instance_backup_subdir_path, strerror(errno));
839839
goto err_proc;
840840
}
841841

@@ -1345,22 +1345,21 @@ create_backup_dir(pgBackup *backup, const char *backup_instance_path)
13451345
* TODO: '.partial' and '.part' segno information should be added to tlinfo.
13461346
*/
13471347
parray *
1348-
catalog_get_timelines(InstanceConfig *instance)
1348+
catalog_get_timelines(InstanceState *instanceState, InstanceConfig *instance)
13491349
{
13501350
int i,j,k;
13511351
parray *xlog_files_list = parray_new();
13521352
parray *timelineinfos;
13531353
parray *backups;
13541354
timelineInfo *tlinfo;
1355-
char arclog_path[MAXPGPATH];
13561355

13571356
/* for fancy reporting */
13581357
char begin_segno_str[MAXFNAMELEN];
13591358
char end_segno_str[MAXFNAMELEN];
13601359

13611360
/* read all xlog files that belong to this archive */
1362-
sprintf(arclog_path, "%s/%s/%s", backup_path, "wal", instance->name);
1363-
dir_list_file(xlog_files_list, arclog_path, false, false, false, false, true, 0, FIO_BACKUP_HOST);
1361+
dir_list_file(xlog_files_list, instanceState->instance_wal_subdir_path,
1362+
false, false, false, false, true, 0, FIO_BACKUP_HOST);
13641363
parray_qsort(xlog_files_list, pgFileCompareName);
13651364

13661365
timelineinfos = parray_new();
@@ -1530,7 +1529,7 @@ catalog_get_timelines(InstanceConfig *instance)
15301529
TimeLineHistoryEntry *tln;
15311530

15321531
sscanf(file->name, "%08X.history", &tli);
1533-
timelines = read_timeline_history(arclog_path, tli, true);
1532+
timelines = read_timeline_history(instanceState->instance_wal_subdir_path, tli, true);
15341533

15351534
if (!tlinfo || tlinfo->tli != tli)
15361535
{
@@ -1564,7 +1563,7 @@ catalog_get_timelines(InstanceConfig *instance)
15641563
}
15651564

15661565
/* save information about backups belonging to each timeline */
1567-
backups = catalog_get_backup_list(instance->name, INVALID_BACKUP_ID);
1566+
backups = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
15681567

15691568
for (i = 0; i < parray_num(timelineinfos); i++)
15701569
{
@@ -2037,7 +2036,7 @@ get_oldest_backup(timelineInfo *tlinfo)
20372036
* Overwrite backup metadata.
20382037
*/
20392038
void
2040-
do_set_backup(const char *instance_name, time_t backup_id,
2039+
do_set_backup(InstanceState *instanceState, time_t backup_id,
20412040
pgSetBackupParams *set_backup_params)
20422041
{
20432042
pgBackup *target_backup = NULL;
@@ -2046,7 +2045,7 @@ do_set_backup(const char *instance_name, time_t backup_id,
20462045
if (!set_backup_params)
20472046
elog(ERROR, "Nothing to set by 'set-backup' command");
20482047

2049-
backup_list = catalog_get_backup_list(instance_name, backup_id);
2048+
backup_list = catalog_get_backup_list(instanceState, backup_id);
20502049
if (parray_num(backup_list) != 1)
20512050
elog(ERROR, "Failed to find backup %s", base36enc(backup_id));
20522051

src/configure.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ init_config(InstanceConfig *config, const char *instance_name)
374374
* read instance config from file
375375
*/
376376
InstanceConfig *
377-
readInstanceConfigFile(const char *instance_name)
377+
readInstanceConfigFile(InstanceState *instanceState)
378378
{
379379
char path[MAXPGPATH];
380380
InstanceConfig *instance = pgut_new(InstanceConfig);
@@ -592,14 +592,14 @@ readInstanceConfigFile(const char *instance_name)
592592
};
593593

594594

595-
init_config(instance, instance_name);
595+
init_config(instance, instanceState->instance_name);
596596

597597
sprintf(instance->backup_instance_path, "%s/%s/%s",
598-
backup_path, BACKUPS_DIR, instance_name);
598+
instanceState->catalog_state->catalog_path, BACKUPS_DIR, instanceState->instance_name);
599599
canonicalize_path(instance->backup_instance_path);
600600

601601
sprintf(instance->arclog_path, "%s/%s/%s",
602-
backup_path, "wal", instance_name);
602+
instanceState->catalog_state->catalog_path, "wal", instanceState->instance_name);
603603
canonicalize_path(instance->arclog_path);
604604

605605
join_path_components(path, instance->backup_instance_path,

src/delete.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ static void do_retention_internal(parray *backup_list, parray *to_keep_list,
2121
static void do_retention_merge(InstanceState *instanceState, parray *backup_list,
2222
parray *to_keep_list, parray *to_purge_list);
2323
static void do_retention_purge(parray *to_keep_list, parray *to_purge_list);
24-
static void do_retention_wal(bool dry_run);
24+
static void do_retention_wal(InstanceState *instanceState, bool dry_run);
2525

2626
// TODO: more useful messages for dry run.
2727
static bool backup_deleted = false; /* At least one backup was deleted */
@@ -39,7 +39,7 @@ do_delete(InstanceState *instanceState, time_t backup_id)
3939
char size_to_delete_pretty[20];
4040

4141
/* Get complete list of backups */
42-
backup_list = catalog_get_backup_list(instanceState->instance_name, INVALID_BACKUP_ID);
42+
backup_list = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
4343

4444
delete_list = parray_new();
4545

@@ -105,7 +105,7 @@ do_delete(InstanceState *instanceState, time_t backup_id)
105105

106106
/* Clean WAL segments */
107107
if (delete_wal)
108-
do_retention_wal(dry_run);
108+
do_retention_wal(instanceState, dry_run);
109109

110110
/* cleanup */
111111
parray_free(delete_list);
@@ -139,7 +139,7 @@ void do_retention(InstanceState *instanceState)
139139
MyLocation = FIO_LOCAL_HOST;
140140

141141
/* Get a complete list of backups. */
142-
backup_list = catalog_get_backup_list(instanceState->instance_name, INVALID_BACKUP_ID);
142+
backup_list = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
143143

144144
if (parray_num(backup_list) == 0)
145145
backup_list_is_empty = true;
@@ -179,7 +179,7 @@ void do_retention(InstanceState *instanceState)
179179

180180
/* TODO: some sort of dry run for delete_wal */
181181
if (delete_wal)
182-
do_retention_wal(dry_run);
182+
do_retention_wal(instanceState, dry_run);
183183

184184
/* TODO: consider dry-run flag */
185185

@@ -653,12 +653,13 @@ do_retention_purge(parray *to_keep_list, parray *to_purge_list)
653653
* and delete them.
654654
*/
655655
static void
656-
do_retention_wal(bool dry_run)
656+
do_retention_wal(InstanceState *instanceState, bool dry_run)
657657
{
658658
parray *tli_list;
659659
int i;
660660

661-
tli_list = catalog_get_timelines(&instance_config);
661+
//TODO check that instanceState is not NULL
662+
tli_list = catalog_get_timelines(instanceState, &instance_config);
662663

663664
for (i = 0; i < parray_num(tli_list); i++)
664665
{
@@ -975,7 +976,7 @@ do_delete_instance(InstanceState *instanceState)
975976

976977

977978
/* Delete all backups. */
978-
backup_list = catalog_get_backup_list(instanceState->instance_name, INVALID_BACKUP_ID);
979+
backup_list = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
979980

980981
catalog_lock_backup_list(backup_list, 0, parray_num(backup_list) - 1, true, true);
981982

@@ -1015,7 +1016,7 @@ do_delete_instance(InstanceState *instanceState)
10151016

10161017
/* Delete all backups of given status in instance */
10171018
void
1018-
do_delete_status(InstanceConfig *instance_config, const char *status)
1019+
do_delete_status(InstanceState *instanceState, InstanceConfig *instance_config, const char *status)
10191020
{
10201021
int i;
10211022
parray *backup_list, *delete_list;
@@ -1038,11 +1039,11 @@ do_delete_status(InstanceConfig *instance_config, const char *status)
10381039
*/
10391040
pretty_status = status2str(status_for_delete);
10401041

1041-
backup_list = catalog_get_backup_list(instance_config->name, INVALID_BACKUP_ID);
1042+
backup_list = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
10421043

10431044
if (parray_num(backup_list) == 0)
10441045
{
1045-
elog(WARNING, "Instance '%s' has no backups", instance_config->name);
1046+
elog(WARNING, "Instance '%s' has no backups", instanceState->instance_name);
10461047
return;
10471048
}
10481049

src/merge.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ do_merge(InstanceState *instanceState, time_t backup_id)
8686
elog(INFO, "Merge started");
8787

8888
/* Get list of all backups sorted in order of descending start time */
89-
backups = catalog_get_backup_list(instanceState->instance_name, INVALID_BACKUP_ID);
89+
backups = catalog_get_backup_list(instanceState, INVALID_BACKUP_ID);
9090

9191
/* Find destination backup first */
9292
for (i = 0; i < parray_num(backups); i++)

src/pg_probackup.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const char *PROGRAM_EMAIL = "https://github.com/postgrespro/pg_probackup/issues
6363
/* ================ catalogState =========== */
6464
/* directory options */
6565
/* TODO make it local variable, pass as an argument to all commands that need it. */
66-
char *backup_path = NULL;
66+
static char *backup_path = NULL;
6767
/*
6868
* path or to the data files in the backup catalog
6969
* $BACKUP_PATH/backups/instance_name
@@ -844,7 +844,7 @@ main(int argc, char *argv[])
844844
restore_params,
845845
no_sync);
846846
case SHOW_CMD:
847-
return do_show(backup_path, instance_name, current.backup_id, show_archive);
847+
return do_show(catalogState, instanceState, current.backup_id, show_archive);
848848
case DELETE_CMD:
849849
if (delete_expired && backup_id_string)
850850
elog(ERROR, "You cannot specify --delete-expired and (-i, --backup-id) options together");
@@ -858,7 +858,7 @@ main(int argc, char *argv[])
858858
if (!backup_id_string)
859859
{
860860
if (delete_status)
861-
do_delete_status(&instance_config, delete_status);
861+
do_delete_status(instanceState, &instance_config, delete_status);
862862
else
863863
do_retention(instanceState);
864864
}
@@ -877,7 +877,7 @@ main(int argc, char *argv[])
877877
case SET_BACKUP_CMD:
878878
if (!backup_id_string)
879879
elog(ERROR, "You must specify parameter (-i, --backup-id) for 'set-backup' command");
880-
do_set_backup(instance_name, current.backup_id, set_backup_params);
880+
do_set_backup(instanceState, current.backup_id, set_backup_params);
881881
break;
882882
case CHECKDB_CMD:
883883
do_checkdb(need_amcheck,

0 commit comments

Comments
 (0)