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

Commitc6c43f6

Browse files
committed
Revert "Additional fix for Windows"
This reverts commit97ef6db.
1 parent0aad77e commitc6c43f6

File tree

1 file changed

+31
-37
lines changed

1 file changed

+31
-37
lines changed

‎src/data.c‎

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@ typedef struct DataPage
3131
chardata[BLCKSZ];
3232
}DataPage;
3333

34-
typedefstructDataBlock
35-
{
36-
chardata[BLCKSZ];
37-
}DataBlock;
38-
3934
staticboolget_page_header(FILE*in,constchar*fullpath,BackupPageHeader*bph,
4035
pg_crc32*crc,booluse_crc32c);
4136

@@ -1797,49 +1792,51 @@ validate_file_pages(pgFile *file, const char *fullpath, XLogRecPtr stop_lsn,
17971792
returnis_valid;
17981793
}
17991794

1800-
/* read local data file and construct map with block checksums
1801-
* bufsize must be divisible by BLCKSZ
1802-
*/
1795+
/* read local data file and construct map with block checksums */
18031796
PageState*
18041797
get_checksum_map(constchar*fullpath,uint32checksum_version,
1805-
intn_blocks,XLogRecPtrdest_stop_lsn,
1806-
BlockNumbersegmentno)
1798+
intn_blocks,XLogRecPtrdest_stop_lsn,BlockNumbersegmentno)
18071799
{
18081800
PageState*checksum_map=NULL;
18091801
FILE*in=NULL;
18101802
BlockNumberblknum=0;
1811-
DataBlock*read_buffer;
1812-
intbufsize=LARGE_CHUNK_SIZE;
1803+
charread_buffer[BLCKSZ];
1804+
charin_buf[STDIO_BUFSIZE];
1805+
off_tcur_pos=0;
18131806

18141807
/* open file */
18151808
in=fopen(fullpath,"r+");
18161809
if (!in)
1817-
elog(ERROR,"Cannot open file \"%s\": %s",fullpath,strerror(errno));
1818-
1819-
setvbuf(in,NULL,_IONBF,BUFSIZ);
1810+
elog(ERROR,"Cannot open source file \"%s\": %s",fullpath,strerror(errno));
18201811

18211812
/* truncate up to blocks */
18221813
if (ftruncate(fileno(in),n_blocks*BLCKSZ)!=0)
18231814
elog(ERROR,"Cannot truncate file to blknum %u \"%s\": %s",
18241815
n_blocks,fullpath,strerror(errno));
18251816

1826-
read_buffer=pgut_malloc(bufsize);
1817+
setvbuf(in,in_buf,_IOFBF,STDIO_BUFSIZE);
18271818

18281819
/* initialize array of checksums */
18291820
checksum_map=pgut_malloc(n_blocks*sizeof(PageState));
18301821
memset(checksum_map,0,n_blocks*sizeof(PageState));
18311822

18321823
for (;;)
18331824
{
1834-
intrc;
1835-
intblock;
18361825
PageStatepage_st;
1837-
size_tread_len=0;
1826+
size_tread_len=0;
18381827

1839-
if (interrupted)
1840-
elog(ERROR,"Interrupted during page reading");
1828+
if (blknum >=n_blocks)
1829+
break;
18411830

1842-
read_len=fread(read_buffer,1,bufsize,in);
1831+
if (cur_pos!=blknum*BLCKSZ&&
1832+
fseek(in,blknum*BLCKSZ,SEEK_SET))
1833+
{
1834+
elog(ERROR,"Cannot seek to offset %u in file \"%s\": %s",
1835+
blknum*BLCKSZ,fullpath,strerror(errno));
1836+
}
1837+
1838+
read_len=fread(read_buffer,1,BLCKSZ,in);
1839+
cur_pos+=read_len;
18431840

18441841
/* report error */
18451842
if (ferror(in))
@@ -1849,37 +1846,34 @@ get_checksum_map(const char *fullpath, uint32 checksum_version,
18491846
if (read_len==0&&feof(in))
18501847
break;
18511848

1852-
for (block=0;block<read_len /BLCKSZ;block++)
1849+
if (read_len==BLCKSZ)
18531850
{
1854-
1855-
if (blknum >=n_blocks)
1856-
elog(ERROR,"Concurrent writing to restored cluster detected");
1857-
1858-
rc=validate_one_page(read_buffer[block].data,segmentno+blknum,
1851+
intrc=validate_one_page(read_buffer,segmentno+blknum,
18591852
dest_stop_lsn,&page_st,
18601853
checksum_version);
18611854

1862-
/* we care only about valid pages */
18631855
if (rc==PAGE_IS_VALID)
18641856
{
1865-
//if (checksum_version)
1866-
//checksum_map[blknum].checksum = ((PageHeader) read_buffer)->pd_checksum;
1867-
//else
1868-
//checksum_map[blknum].checksum = page_st.checksum;
1857+
if (checksum_version)
1858+
checksum_map[blknum].checksum= ((PageHeader)read_buffer)->pd_checksum;
1859+
else
1860+
checksum_map[blknum].checksum=page_st.checksum;
18691861

1870-
checksum_map[blknum].checksum=page_st.checksum;
18711862
checksum_map[blknum].lsn=page_st.lsn;
18721863
}
18731864

18741865
blknum++;
18751866
}
1867+
else
1868+
elog(WARNING,"Odd size read len %lu for blknum %u in file \"%s\"",read_len,blknum,fullpath);
1869+
1870+
if (interrupted)
1871+
elog(ERROR,"Interrupted during page reading");
18761872
}
18771873

18781874
if (in)
18791875
fclose(in);
18801876

1881-
pg_free(read_buffer);
1882-
18831877
returnchecksum_map;
18841878
}
18851879

@@ -1899,7 +1893,7 @@ get_lsn_map(const char *fullpath, uint32 checksum_version,
18991893
/* open file */
19001894
in=fopen(fullpath,"r+");
19011895
if (!in)
1902-
elog(ERROR,"Cannot open file \"%s\": %s",fullpath,strerror(errno));
1896+
elog(ERROR,"Cannot opensourcefile \"%s\": %s",fullpath,strerror(errno));
19031897

19041898
/* truncate up to blocks */
19051899
if (ftruncate(fileno(in),n_blocks*BLCKSZ)!=0)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp