@@ -60,6 +60,7 @@ backup_data_page(pgFile *file, const XLogRecPtr *lsn,
60
60
XLogRecPtr page_lsn ;
61
61
int ret ;
62
62
int try_checksum = 100 ;
63
+ struct stat st ;
63
64
64
65
header .block = blknum ;
65
66
offset = blknum * BLCKSZ ;
@@ -72,9 +73,22 @@ backup_data_page(pgFile *file, const XLogRecPtr *lsn,
72
73
(long long unsigned int ) offset , ret );
73
74
74
75
read_len = fread (& page , 1 , sizeof (page ), in );
76
+
75
77
if (read_len != sizeof (page ))
76
- elog (ERROR , "File: %s, block size of block %u of nblocks %u is incorrect %lu" ,
78
+ {
79
+ stat (file -> path , & st );
80
+
81
+ if (st .st_size /BLCKSZ <= blknum )
82
+ {
83
+ elog (WARNING , "File: %s, file was truncated after backup start."
84
+ "Expected nblocks %u. Real nblocks %ld. Cannot read block %u " ,
85
+ file -> path , nblocks , st .st_size /BLCKSZ , blknum );
86
+ return ;
87
+ }
88
+ else
89
+ elog (ERROR , "File: %s, block size of block %u of nblocks %u is incorrect %lu" ,
77
90
file -> path , blknum , nblocks , read_len );
91
+ }
78
92
79
93
/*
80
94
* If an invalid data page was found, fallback to simple copy to ensure
@@ -187,7 +201,7 @@ backup_data_file(const char *from_root, const char *to_root,
187
201
stat (file -> path , & st );
188
202
189
203
if (st .st_size < file -> size )
190
- elog (ERROR , "File: %s, file was truncated after backup start. Expected size %lu" ,
204
+ elog (WARNING , "File: %s, file was truncated after backup start. Expected size %lu" ,
191
205
file -> path , file -> size );
192
206
193
207
if (file -> size % BLCKSZ != 0 )
@@ -456,8 +470,6 @@ restore_data_file(const char *from_root,
456
470
{
457
471
size_t read_len ;
458
472
DataPage page ; /* used as read buffer */
459
- int upper_offset ;
460
- int upper_length ;
461
473
462
474
/* read BackupPageHeader */
463
475
read_len = fread (& header , 1 , sizeof (header ), in );
@@ -502,8 +514,6 @@ restore_data_file(const char *from_root,
502
514
((PageHeader ) page .data )-> pd_checksum = pg_checksum_page (page .data , file -> segno * RELSEG_SIZE + header .block );
503
515
}
504
516
505
- skip_checksum :
506
-
507
517
/*
508
518
* Seek and write the restored page. Backup might have holes in
509
519
* differential backups.
0 commit comments