@@ -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 */
694693parray *
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 */
757761parray *
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 */
13471347parray *
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 */
20392038void
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
0 commit comments