@@ -108,7 +108,7 @@ write_backup_control_on_the_fly(pgBackup *backup)
108108 }
109109
110110 tmp -> status = backup -> status ;
111- tmp -> size_on_disk = backup -> size_on_disk ;
111+ tmp -> data_bytes = backup -> data_bytes ;
112112 backup -> duration = difftime (time (NULL ), backup -> start_time );
113113 tmp -> duration = backup -> duration ;
114114 write_backup (tmp );
@@ -611,7 +611,6 @@ pgBackupWriteControl(FILE *out, pgBackup *backup)
611611 if (backup -> external_dir_str )
612612 fio_fprintf (out , "external-dirs = '%s'\n" , backup -> external_dir_str );
613613
614- fio_fprintf (out , "size-on-disk = " INT64_FORMAT "\n" , backup -> size_on_disk );
615614 fio_fprintf (out , "duration = " INT64_FORMAT "\n" , backup -> duration );
616615}
617616
@@ -668,7 +667,7 @@ write_backup_filelist(pgBackup *backup, parray *files, const char *root,
668667 #define BUFFERSZ BLCKSZ*500
669668 char buf [BUFFERSZ ];
670669 size_t write_len = 0 ;
671- int64 backup_size_on_disk = BYTES_INVALID ;
670+ int64 backup_size_on_disk = 0 ;
672671
673672 pgBackupGetPath (backup , path , lengthof (path ), DATABASE_FILE_LIST );
674673 snprintf (path_temp , sizeof (path_temp ), "%s.tmp" , path );
@@ -687,10 +686,20 @@ write_backup_filelist(pgBackup *backup, parray *files, const char *root,
687686 int len = 0 ;
688687
689688 i ++ ;
689+
690690 if (!file -> backuped )
691+ {
692+ elog (WARNING , "file not backuped %s" , file -> rel_path );
691693 continue ;
694+ }
695+
696+ if (S_ISDIR (file -> mode ))
697+ backup_size_on_disk += 4096 ;
698+
699+ /* Count the amount of the data actually copied */
700+ if (S_ISREG (file -> mode ))
701+ backup_size_on_disk += file -> write_size ;
692702
693- backup_size_on_disk += file -> write_size ;
694703 if (file -> external_dir_num && external_list )
695704 {
696705 path = GetRelativePath (path , parray_get (external_list ,
@@ -767,7 +776,8 @@ write_backup_filelist(pgBackup *backup, parray *files, const char *root,
767776 path_temp , path , strerror (errno_temp ));
768777 }
769778
770- backup -> size_on_disk = backup_size_on_disk ;
779+ /* use extra variable to avoid reset of previous data_bytes value in case of error */
780+ backup -> data_bytes = backup_size_on_disk ;
771781 write_backup_control_on_the_fly (backup );
772782}
773783
@@ -816,7 +826,6 @@ readBackupControlFile(const char *path)
816826 {'b' , 0 , "from-replica" , & backup -> from_replica , SOURCE_FILE_STRICT },
817827 {'s' , 0 , "primary-conninfo" , & backup -> primary_conninfo , SOURCE_FILE_STRICT },
818828 {'s' , 0 , "external-dirs" , & backup -> external_dir_str , SOURCE_FILE_STRICT },
819- {'I' , 0 , "size-on-disk" , & backup -> size_on_disk , SOURCE_FILE_STRICT },
820829 {'I' , 0 , "duration" , & backup -> duration , SOURCE_FILE_STRICT },
821830 {0 }
822831 };
@@ -1050,7 +1059,6 @@ pgBackupInit(pgBackup *backup)
10501059 backup -> server_version [0 ] = '\0' ;
10511060 backup -> external_dir_str = NULL ;
10521061
1053- backup -> size_on_disk = BYTES_INVALID ;
10541062 backup -> duration = (time_t ) 0 ;
10551063}
10561064
0 commit comments