@@ -22,7 +22,7 @@ static pgBackup* get_closest_backup(timelineInfo *tlinfo);
2222static pgBackup * get_oldest_backup (timelineInfo * tlinfo );
2323static const char * backupModes [] = {"" , "PAGE" , "PTRACK" , "DELTA" , "FULL" };
2424static 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 );
2626
2727static bool backup_lock_exit_hook_registered = false;
2828static parray * locks = NULL ;
@@ -1461,9 +1461,11 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
14611461 int i ;
14621462 char temp [MAXPGPATH ];
14631463 parray * subdirs ;
1464+ err_i err ;
14641465
14651466 /* 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 ))
14671469 {
14681470 /* Clear backup_id as indication of error */
14691471 backup -> backup_id = INVALID_BACKUP_ID ;
@@ -1498,8 +1500,14 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
14981500 /* create directories for actual backup files */
14991501 for (i = 0 ; i < parray_num (subdirs ); i ++ )
15001502 {
1503+ err_i err ;
15011504 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+ }
15031511 }
15041512
15051513 free_dir_list (subdirs );
@@ -1512,22 +1520,24 @@ pgBackupInitDir(pgBackup *backup, const char *backup_instance_path)
15121520 * 0 - ok
15131521 * -1 - error (warning message already emitted)
15141522 */
1515- int
1523+ static err_i
15161524create_backup_dir (pgBackup * backup , const char * backup_instance_path )
15171525{
1518- int rc ;
15191526 char path [MAXPGPATH ];
1527+ err_i err ;
15201528
15211529 join_path_components (path , backup_instance_path , base36enc (backup -> backup_id ));
15221530
15231531 /* 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+ {
15271536 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 ;
15311541}
15321542
15331543/*
@@ -2969,6 +2979,9 @@ pgBackupInit(pgBackup *backup)
29692979 backup -> files = NULL ;
29702980 backup -> note = NULL ;
29712981 backup -> content_crc = 0 ;
2982+
2983+ backup -> backup_location = pioDriveForLocation (FIO_BACKUP_HOST );
2984+ backup -> database_location = pioDriveForLocation (FIO_DB_HOST );
29722985}
29732986
29742987/* free pgBackup object */
@@ -2977,6 +2990,10 @@ pgBackupFree(void *backup)
29772990{
29782991 pgBackup * b = (pgBackup * ) backup ;
29792992
2993+ /* Both point to global static vars */
2994+ b -> backup_location .self = NULL ;
2995+ b -> database_location .self = NULL ;
2996+
29802997 pg_free (b -> primary_conninfo );
29812998 pg_free (b -> external_dir_str );
29822999 pg_free (b -> root_dir );
0 commit comments