Re: Potential (low likelihood) wraparound hazard in heap_abort_speculative()
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Andres Freund <andres@anarazel.de>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2020-03-29T22:20:01Z
Lists: pgsql-hackers
On Sat, Mar 28, 2020 at 2:30 PM Andres Freund <andres@anarazel.de> wrote: > Unless somebody has a better idea for how to solve this in a > back-paptchable way, I think it'd be best to replace RecentGlobalXmin > with RecentXmin. That'd be safe as far as I can see. As far as I can tell, the worst consequence of this wraparound hazard is that we don't opportunistically prune at some later point where we probably ought to. Do you agree with that assessment? Since pd_prune_xid is documented as "a hint field" in bufpage.h, this bug cannot possibly lead to queries that give wrong answers. The performance issue also seems like it should not have much impact, since we only call heap_abort_speculative() in extreme cases where there is a lot of contention among concurrent upserting sessions. Also, as you pointed out already, RecentGlobalXmin is probably not going to be any different to RecentXmin. I am in favor of fixing the issue, and backpatching all the way. I just want to put the issue in perspective, and have my own understanding of things verified. -- Peter Geoghegan
Commits
-
Use TransactionXmin instead of RecentGlobalXmin in heap_abort_speculative().
- a850063ee0bc 9.5.22 landed
- f7f55d02c2a1 9.6.18 landed
- 0e708d311595 10.13 landed
- 1ca97af3ede4 11.8 landed
- 23a0cf2c9ff0 12.3 landed
- f946069e6827 13.0 landed