@@ -22,7 +22,7 @@ static pgBackup* get_closest_backup(timelineInfo *tlinfo);
22
22
static pgBackup * get_oldest_backup (timelineInfo * tlinfo );
23
23
static const char * backupModes [] = {"" , "PAGE" , "PTRACK" , "DELTA" , "FULL" };
24
24
static pgBackup * readBackupControlFile (const char * path );
25
- static int create_backup_dir (pgBackup * backup , const char * backup_instance_path );
25
+ static err_i create_backup_dir (pgBackup * backup , const char * backup_instance_path );
26
26
27
27
static bool backup_lock_exit_hook_registered = false;
28
28
static parray * locks = NULL ;
@@ -1461,9 +1461,11 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
1461
1461
int i ;
1462
1462
char temp [MAXPGPATH ];
1463
1463
parray * subdirs ;
1464
+ err_i err ;
1464
1465
1465
1466
/* Try to create backup directory at first */
1466
- if (create_backup_dir (backup , backup_instance_path ) != 0 )
1467
+ err = create_backup_dir (backup , backup_instance_path );
1468
+ if ($haserr (err ))
1467
1469
{
1468
1470
/* Clear backup_id as indication of error */
1469
1471
backup -> backup_id = INVALID_BACKUP_ID ;
@@ -1498,8 +1500,14 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
1498
1500
/* create directories for actual backup files */
1499
1501
for (i = 0 ; i < parray_num (subdirs ); i ++ )
1500
1502
{
1503
+ err_i err ;
1501
1504
join_path_components (temp , backup -> root_dir , parray_get (subdirs , i ));
1502
- fio_mkdir (FIO_BACKUP_HOST , temp , DIR_PERMISSION , false);
1505
+ err = $i (pioMakeDir , backup -> backup_location , .path = temp ,
1506
+ .mode = DIR_PERMISSION , .strict = false);
1507
+ if ($haserr (err ))
1508
+ {
1509
+ elog (WARNING , "%s" , $errmsg (err ));
1510
+ }
1503
1511
}
1504
1512
1505
1513
free_dir_list (subdirs );
@@ -1512,22 +1520,24 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
1512
1520
* 0 - ok
1513
1521
* -1 - error (warning message already emitted)
1514
1522
*/
1515
- int
1523
+ static err_i
1516
1524
create_backup_dir (pgBackup * backup , const char * backup_instance_path )
1517
1525
{
1518
- int rc ;
1519
1526
char path [MAXPGPATH ];
1527
+ err_i err ;
1520
1528
1521
1529
join_path_components (path , backup_instance_path , base36enc (backup -> backup_id ));
1522
1530
1523
1531
/* TODO: add wrapper for remote mode */
1524
- rc = fio_mkdir (FIO_BACKUP_HOST , path , DIR_PERMISSION , true);
1525
-
1526
- if (rc == 0 )
1532
+ err = $i (pioMakeDir , backup -> backup_location , .path = path ,
1533
+ .mode = DIR_PERMISSION , .strict = true);
1534
+ if (!$haserr (err ))
1535
+ {
1527
1536
backup -> root_dir = pgut_strdup (path );
1528
- else
1529
- elog (WARNING , "Cannot create directory \"%s\": %s" , path , strerror (errno ));
1530
- return rc ;
1537
+ } else {
1538
+ elog (WARNING , "%s" , $errmsg (err ));
1539
+ }
1540
+ return err ;
1531
1541
}
1532
1542
1533
1543
/*
@@ -2969,6 +2979,9 @@ pgBackupInit(pgBackup *backup)
2969
2979
backup -> files = NULL ;
2970
2980
backup -> note = NULL ;
2971
2981
backup -> content_crc = 0 ;
2982
+
2983
+ backup -> backup_location = pioDriveForLocation (FIO_BACKUP_HOST );
2984
+ backup -> database_location = pioDriveForLocation (FIO_DB_HOST );
2972
2985
}
2973
2986
2974
2987
/* free pgBackup object */
@@ -2977,6 +2990,10 @@ pgBackupFree(void *backup)
2977
2990
{
2978
2991
pgBackup * b = (pgBackup * ) backup ;
2979
2992
2993
+ /* Both point to global static vars */
2994
+ b -> backup_location .self = NULL ;
2995
+ b -> database_location .self = NULL ;
2996
+
2980
2997
pg_free (b -> primary_conninfo );
2981
2998
pg_free (b -> external_dir_str );
2982
2999
pg_free (b -> root_dir );
0 commit comments