Skip to content

Commit 48b8f60

Browse files
committed
Refactoring. Introduce instanceState structure. Update code in init.c
1 parent 2284c2b commit 48b8f60

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

src/init.c

+8-7
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,10 @@ do_init(CatalogState *catalogState)
4646
}
4747

4848
int
49-
do_add_instance(CatalogState *catalogState, InstanceConfig *instance)
49+
do_add_instance(InstanceState *instanceState, InstanceConfig *instance)
5050
{
5151
struct stat st;
52+
CatalogState *catalogState = instanceState->catalog_state;
5253

5354
/* PGDATA is always required */
5455
if (instance->pgdata == NULL)
@@ -71,22 +72,22 @@ do_add_instance(CatalogState *catalogState, InstanceConfig *instance)
7172
if (access(catalogState->wal_subdir_path, F_OK) != 0)
7273
elog(ERROR, "Directory does not exist: '%s'", catalogState->wal_subdir_path);
7374

74-
if (stat(instance->backup_instance_path, &st) == 0 && S_ISDIR(st.st_mode))
75+
if (stat(instanceState->instance_backup_subdir_path, &st) == 0 && S_ISDIR(st.st_mode))
7576
elog(ERROR, "Instance '%s' backup directory already exists: '%s'",
76-
instance->name, instance->backup_instance_path);
77+
instanceState->instance_name, instanceState->instance_backup_subdir_path);
7778

7879
/*
7980
* Create directory for wal files of this specific instance.
8081
* Existence check is extra paranoid because if we don't have such a
8182
* directory in data dir, we shouldn't have it in wal as well.
8283
*/
83-
if (stat(instance->arclog_path, &st) == 0 && S_ISDIR(st.st_mode))
84+
if (stat(instanceState->instance_wal_subdir_path, &st) == 0 && S_ISDIR(st.st_mode))
8485
elog(ERROR, "Instance '%s' WAL archive directory already exists: '%s'",
85-
instance->name, instance->arclog_path);
86+
instanceState->instance_name, instanceState->instance_wal_subdir_path);
8687

8788
/* Create directory for data files of this specific instance */
88-
dir_create_dir(instance->backup_instance_path, DIR_PERMISSION, false);
89-
dir_create_dir(instance->arclog_path, DIR_PERMISSION, false);
89+
dir_create_dir(instanceState->instance_backup_subdir_path, DIR_PERMISSION, false);
90+
dir_create_dir(instanceState->instance_wal_subdir_path, DIR_PERMISSION, false);
9091

9192
/*
9293
* Write initial configuration file.

src/pg_probackup.c

+19-1
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,9 @@ static bool compress_shortcut = false;
142142

143143
/* ================ instanceState =========== */
144144
char *instance_name;
145+
146+
static InstanceState *instanceState = NULL;
147+
145148
/* ================ instanceState (END) =========== */
146149

147150
/* archive push options */
@@ -292,6 +295,7 @@ main(int argc, char *argv[])
292295
pgBackupInit(&current);
293296

294297
/* Initialize current instance configuration */
298+
//TODO get git of this global variable craziness
295299
init_config(&instance_config, instance_name);
296300

297301
PROGRAM_NAME = get_progname(argv[0]);
@@ -459,6 +463,8 @@ main(int argc, char *argv[])
459463

460464
/* ===== catalogState (END) ======*/
461465

466+
/* ===== instanceState ======*/
467+
462468
/*
463469
* Option --instance is required for all commands except
464470
* init, show, checkdb and validate
@@ -470,9 +476,21 @@ main(int argc, char *argv[])
470476
elog(ERROR, "required parameter not specified: --instance");
471477
}
472478
else
479+
{
473480
/* Set instance name */
474481
instance_config.name = pgut_strdup(instance_name);
475482

483+
instanceState = pgut_new(InstanceState);
484+
instanceState->catalog_state = catalogState;
485+
486+
strncpy(instanceState->instance_name, instance_name, MAXPGPATH);
487+
join_path_components(instanceState->instance_backup_subdir_path,
488+
catalogState->backup_subdir_path, instance_name);
489+
join_path_components(instanceState->instance_wal_subdir_path,
490+
catalogState->wal_subdir_path, instance_name);
491+
}
492+
/* ===== instanceState (END) ======*/
493+
476494
/*
477495
* If --instance option was passed, construct paths for backup data and
478496
* xlog files of this backup instance.
@@ -786,7 +804,7 @@ main(int argc, char *argv[])
786804
wal_file_path, wal_file_name, batch_size, !no_validate_wal);
787805
break;
788806
case ADD_INSTANCE_CMD:
789-
return do_add_instance(catalogState, &instance_config);
807+
return do_add_instance(instanceState, &instance_config);
790808
case DELETE_INSTANCE_CMD:
791809
return do_delete_instance();
792810
case INIT_CMD:

src/pg_probackup.h

+17-2
Original file line numberDiff line numberDiff line change
@@ -795,8 +795,23 @@ extern bool delete_expired;
795795
extern bool merge_expired;
796796
extern bool dry_run;
797797

798-
/* other options */
798+
/* ===== instanceState ===== */
799799
extern char *instance_name;
800+
typedef struct InstanceState
801+
{
802+
/* catalog, this instance belongs to */
803+
CatalogState *catalog_state;
804+
805+
char instance_name[MAXPGPATH]; //previously global var instance_name
806+
/* $BACKUP_PATH/backups/instance_name */
807+
char instance_backup_subdir_path[MAXPGPATH];
808+
/* $BACKUP_PATH/backups/instance_name */
809+
char instance_wal_subdir_path[MAXPGPATH]; // previously global var arclog_path
810+
811+
//TODO add config here
812+
} InstanceState;
813+
814+
/* ===== instanceState (END) ===== */
800815

801816
/* show options */
802817
extern ShowFormat show_format;
@@ -856,7 +871,7 @@ extern parray *read_database_map(pgBackup *backup);
856871

857872
/* in init.c */
858873
extern int do_init(CatalogState *catalogState);
859-
extern int do_add_instance(CatalogState *catalogState, InstanceConfig *instance);
874+
extern int do_add_instance(InstanceState *instanceState, InstanceConfig *instance);
860875

861876
/* in archive.c */
862877
extern void do_archive_push(InstanceConfig *instance, char *wal_file_path,

0 commit comments

Comments
 (0)