mirror of
https://github.com/postgres/postgres.git
synced 2025-08-24 09:27:52 +03:00
Make XLogRecGetBlockTag() throw error if there's no such block.
All but a few existing callers assume without checking that this function succeeds. While it probably will, that's a poor excuse for not checking. Let's make it return void and instead throw an error if it doesn't find the block reference. Callers that actually need to handle the no-such-block case must now use the underlying function XLogRecGetBlockTagExtended. In addition to being a bit less error-prone, this should also serve to suppress some Coverity complaints about XLogRecGetBlockRefInfo. While at it, clean up some inconsistency about use of the XLogRecHasBlockRef macro: make XLogRecGetBlockTagExtended use that instead of open-coding the same condition, and avoid calling XLogRecHasBlockRef twice in relevant code paths. (That is, calling XLogRecHasBlockRef followed by XLogRecGetBlockTag is now deprecated: use XLogRecGetBlockTagExtended instead.) Patch HEAD only; this doesn't seem to have enough value to consider a back-branch API break. Discussion: https://postgr.es/m/425039.1649701221@sss.pgh.pa.us
This commit is contained in:
@@ -2172,10 +2172,10 @@ xlog_block_info(StringInfo buf, XLogReaderState *record)
|
||||
ForkNumber forknum;
|
||||
BlockNumber blk;
|
||||
|
||||
if (!XLogRecHasBlockRef(record, block_id))
|
||||
if (!XLogRecGetBlockTagExtended(record, block_id,
|
||||
&rnode, &forknum, &blk, NULL))
|
||||
continue;
|
||||
|
||||
XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blk);
|
||||
if (forknum != MAIN_FORKNUM)
|
||||
appendStringInfo(buf, "; blkref #%d: rel %u/%u/%u, fork %u, blk %u",
|
||||
block_id,
|
||||
@@ -2303,7 +2303,8 @@ verifyBackupPageConsistency(XLogReaderState *record)
|
||||
Buffer buf;
|
||||
Page page;
|
||||
|
||||
if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno))
|
||||
if (!XLogRecGetBlockTagExtended(record, block_id,
|
||||
&rnode, &forknum, &blkno, NULL))
|
||||
{
|
||||
/*
|
||||
* WAL record doesn't contain a block reference with the given id.
|
||||
|
Reference in New Issue
Block a user