Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commita39511b

Browse files
committed
don't handle possible hole cut at restore
1 parentcd6dd02 commita39511b

File tree

1 file changed

+12
-32
lines changed

1 file changed

+12
-32
lines changed

‎data.c‎

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,10 @@
2222
typedefstructBackupPageHeader
2323
{
2424
BlockNumberblock;/* block number */
25-
uint16hole_offset;/* number of bytes before "hole" */
26-
uint16hole_length;/* number of bytes in "hole" */
2725
}BackupPageHeader;
2826

2927
staticbool
30-
parse_page(constDataPage*page,
31-
XLogRecPtr*lsn,uint16*offset,uint16*length)
28+
parse_page(constDataPage*page,XLogRecPtr*lsn)
3229
{
3330
constPageHeaderData*page_data=&page->page_data;
3431

@@ -43,13 +40,8 @@ parse_page(const DataPage *page,
4340
page_data->pd_upper <=page_data->pd_special&&
4441
page_data->pd_special <=BLCKSZ&&
4542
page_data->pd_special==MAXALIGN(page_data->pd_special))
46-
{
47-
*offset=page_data->pd_lower;
48-
*length=page_data->pd_upper-page_data->pd_lower;
4943
return true;
50-
}
5144

52-
*offset=*length=0;
5345
return false;
5446
}
5547

@@ -87,8 +79,7 @@ backup_data_page(pgFile *file, const XLogRecPtr *lsn,
8779
* If an invalid data page was found, fallback to simple copy to ensure
8880
* all pages in the file don't have BackupPageHeader.
8981
*/
90-
if (!parse_page(&page,&page_lsn,
91-
&header.hole_offset,&header.hole_length))
82+
if (!parse_page(&page,&page_lsn))
9283
{
9384
inti;
9485
/* Check if the page is zeroed. */
@@ -467,50 +458,39 @@ restore_data_file(const char *from_root,
467458
if (read_len==0&&feof(in))
468459
break;/* EOF found */
469460
elseif (read_len!=0&&feof(in))
470-
{
471461
elog(ERROR,
472462
"odd size page found at block %u of \"%s\"",
473463
blknum,file->path);
474-
}
475464
else
476-
{
477465
elog(ERROR,"cannot read block %u of \"%s\": %s",
478466
blknum,file->path,strerror(errno_tmp));
479-
}
480467
}
481468

482-
if (header.block<blknum||header.hole_offset>BLCKSZ||
483-
(int)header.hole_offset+ (int)header.hole_length>BLCKSZ)
484-
{
469+
if (header.block<blknum)
485470
elog(ERROR,"backup is broken at block %u",
486471
blknum);
487-
}
488472

489-
upper_offset=header.hole_offset+header.hole_length;
490-
upper_length=BLCKSZ-upper_offset;
491473

492-
/* read lower/upper into page.data and restore hole */
493-
memset(page.data+header.hole_offset,0,header.hole_length);
494-
495-
if (fread(page.data,1,header.hole_offset,in)!=header.hole_offset||
496-
fread(page.data+upper_offset,1,upper_length,in)!=upper_length)
497-
{
474+
if (fread(page.data,1,BLCKSZ,in)!=BLCKSZ)
498475
elog(ERROR,"cannot read block %u of \"%s\": %s",
499476
blknum,file->path,strerror(errno));
500-
}
501477

502478
/* update checksum because we are not save whole */
503479
if(backup->checksum_version)
504480
{
505-
/* skip calc checksum if zero page */
481+
boolis_zero_page= false;
482+
506483
if(page.page_data.pd_upper==0)
507484
{
508485
inti;
509-
for(i=0;i<BLCKSZ&&page.data[i]==0;i++);
486+
for(i=0;i<BLCKSZ&&page.data[i]==0;i++);
510487
if (i==BLCKSZ)
511-
gotoskip_checksum;
488+
is_zero_page= true;
512489
}
513-
((PageHeader)page.data)->pd_checksum=pg_checksum_page(page.data,file->segno*RELSEG_SIZE+header.block);
490+
491+
/* skip calc checksum if zero page */
492+
if (!is_zero_page)
493+
((PageHeader)page.data)->pd_checksum=pg_checksum_page(page.data,file->segno*RELSEG_SIZE+header.block);
514494
}
515495

516496
skip_checksum:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp