Make XLogRecGetBlockTag() throw error if there's no such block.
Tom Lane <tgl@sss.pgh.pa.us>
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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/heap/heapam.c | modified | +1 −1 |
| src/backend/access/nbtree/nbtxlog.c | modified | +1 −1 |
| src/backend/access/rmgrdesc/xlogdesc.c | modified | +5 −6 |
| src/backend/access/transam/xlogreader.c | modified | +18 −6 |
| src/backend/access/transam/xlogrecovery.c | modified | +4 −3 |
| src/backend/access/transam/xlogutils.c | modified | +2 −1 |
| src/bin/pg_rewind/parsexlog.c | modified | +2 −1 |
| src/bin/pg_waldump/pg_waldump.c | modified | +2 −3 |
| src/include/access/xlogreader.h | modified | +1 −1 |
Discussion
- Fixing code that ignores failure of XLogRecGetBlockTag 4 messages · 2022-04-11