@@ -80,7 +80,7 @@ static void backup_cleanup(bool fatal, void *userdata);
8080
8181static void * backup_files (void * arg );
8282
83- static void do_backup_instance (PGconn * backup_conn , PGNodeInfo * nodeInfo , bool no_sync );
83+ static void do_backup_instance (PGconn * backup_conn , PGNodeInfo * nodeInfo , bool no_sync , bool backup_logs );
8484
8585static void pg_start_backup (const char * label , bool smooth , pgBackup * backup ,
8686 PGNodeInfo * nodeInfo , PGconn * backup_conn , PGconn * master_conn );
@@ -129,7 +129,7 @@ backup_stopbackup_callback(bool fatal, void *userdata)
129129 * Move files from 'pgdata' to a subdirectory in 'backup_path'.
130130 */
131131static void
132- do_backup_instance (PGconn * backup_conn , PGNodeInfo * nodeInfo , bool no_sync )
132+ do_backup_instance (PGconn * backup_conn , PGNodeInfo * nodeInfo , bool no_sync , bool backup_logs )
133133{
134134 int i ;
135135 char database_path [MAXPGPATH ];
@@ -331,8 +331,12 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
331331 backup_files_list = parray_new ();
332332
333333 /* list files with the logical path. omit $PGDATA */
334- dir_list_file (backup_files_list , instance_config .pgdata ,
335- true, true, false, 0 , FIO_DB_HOST );
334+ if (fio_is_remote (FIO_DB_HOST ))
335+ fio_list_dir (backup_files_list , instance_config .pgdata ,
336+ true, true, false, backup_logs , 0 );
337+ else
338+ dir_list_file (backup_files_list , instance_config .pgdata ,
339+ true, true, false, backup_logs , 0 , FIO_LOCAL_HOST );
336340
337341 /*
338342 * Get database_map (name to oid) for use in partial restore feature.
@@ -345,11 +349,19 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
345349 * from external directory option
346350 */
347351 if (external_dirs )
352+ {
348353 for (i = 0 ; i < parray_num (external_dirs ); i ++ )
354+ {
349355 /* External dirs numeration starts with 1.
350356 * 0 value is not external dir */
351- dir_list_file (backup_files_list , parray_get (external_dirs , i ),
352- false, true, false, i + 1 , FIO_DB_HOST );
357+ if (fio_is_remote (FIO_DB_HOST ))
358+ fio_list_dir (backup_files_list , parray_get (external_dirs , i ),
359+ false, true, false, false, i + 1 );
360+ else
361+ dir_list_file (backup_files_list , parray_get (external_dirs , i ),
362+ false, true, false, false, i + 1 , FIO_LOCAL_HOST );
363+ }
364+ }
353365
354366 /* close ssh session in main thread */
355367 fio_disconnect ();
@@ -551,19 +563,6 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
551563 elog (ERROR , "Data files transferring failed, time elapsed: %s" ,
552564 pretty_time );
553565
554- /* Remove disappeared during backup files from backup_list */
555- for (i = 0 ; i < parray_num (backup_files_list ); i ++ )
556- {
557- pgFile * tmp_file = (pgFile * ) parray_get (backup_files_list , i );
558-
559- if (tmp_file -> write_size == FILE_NOT_FOUND )
560- {
561- pgFileFree (tmp_file );
562- parray_remove (backup_files_list , i );
563- i -- ;
564- }
565- }
566-
567566 /* clean previous backup file list */
568567 if (prev_backup_filelist )
569568 {
@@ -616,7 +615,7 @@ do_backup_instance(PGconn *backup_conn, PGNodeInfo *nodeInfo, bool no_sync)
616615 /* Scan backup PG_XLOG_DIR */
617616 xlog_files_list = parray_new ();
618617 join_path_components (pg_xlog_path , database_path , PG_XLOG_DIR );
619- dir_list_file (xlog_files_list , pg_xlog_path , false, true, false, 0 ,
618+ dir_list_file (xlog_files_list , pg_xlog_path , false, true, false, false, 0 ,
620619 FIO_BACKUP_HOST );
621620
622621 /* TODO: Drop streamed WAL segments greater than stop_lsn */
@@ -802,8 +801,8 @@ pgdata_basic_setup(ConnectionOptions conn_opt, PGNodeInfo *nodeInfo)
802801 * Entry point of pg_probackup BACKUP subcommand.
803802 */
804803int
805- do_backup (time_t start_time , bool no_validate ,
806- pgSetBackupParams * set_backup_params , bool no_sync )
804+ do_backup (time_t start_time , pgSetBackupParams * set_backup_params ,
805+ bool no_validate , bool no_sync , bool backup_logs )
807806{
808807 PGconn * backup_conn = NULL ;
809808 PGNodeInfo nodeInfo ;
@@ -902,7 +901,7 @@ do_backup(time_t start_time, bool no_validate,
902901 add_note (& current , set_backup_params -> note );
903902
904903 /* backup data */
905- do_backup_instance (backup_conn , & nodeInfo , no_sync );
904+ do_backup_instance (backup_conn , & nodeInfo , no_sync , backup_logs );
906905 pgut_atexit_pop (backup_cleanup , NULL );
907906
908907 /* compute size of wal files of this backup stored in the archive */
@@ -2146,6 +2145,12 @@ backup_files(void *arg)
21462145 current .backup_mode , current .parent_backup , true);
21472146 }
21482147
2148+ /* No point in storing empty, missing or not changed files */
2149+ if (file -> write_size <= 0 )
2150+ unlink (to_fullpath );
2151+ // elog(ERROR, "Cannot remove file \"%s\": %s", to_fullpath,
2152+ // strerror(errno));
2153+
21492154 if (file -> write_size == FILE_NOT_FOUND )
21502155 continue ;
21512156
@@ -2188,11 +2193,8 @@ parse_filelist_filenames(parray *files, const char *root)
21882193 while (i < parray_num (files ))
21892194 {
21902195 pgFile * file = (pgFile * ) parray_get (files , i );
2191- // char *relative;
21922196 int sscanf_result ;
21932197
2194- // relative = GetRelativePath(file->rel_path, root);
2195-
21962198 if (S_ISREG (file -> mode ) &&
21972199 path_is_prefix_of_path (PG_TBLSPC_DIR , file -> rel_path ))
21982200 {
0 commit comments