Re: VACUUM can finish an interrupted nbtree page split -- is that okay?
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2019-05-14T03:18:20Z
Lists: pgsql-hackers
On Tue, May 7, 2019 at 9:59 AM Peter Geoghegan <pg@bowt.ie> wrote: > On Tue, May 7, 2019 at 12:27 AM Heikki Linnakangas <hlinnaka@iki.fi> wrote: > > I don't understand that reasoning. Yes, _bt_pagedel() will complain if > > it finds a half-dead internal page. But how does that mean that > > _bt_lock_branch_parent() can't encounter one? > > I suppose that in theory it could, but only if you allow that any > possible state could be found -- it doesn't seem any more likely than > any other random illegal state. To be fair, I suppose that the code made more sense when it first went in, because at the time there was a chance that there could be leftover half-dead internal pages. But, that was a long time ago now. I wonder why the code wasn't complaining about corruption loudly, like the top level code, instead of treating half-dead pages as a legitimate reason to not proceed with multi-level page deletion. That would have been overkill, but it would have made much more sense IMV. I would like to proceed with pushing this patch to HEAD in the next few days, since it's clearly removing code that can't be useful. Are there any objections? -- Peter Geoghegan
Commits
-
Remove extra nbtree half-dead internal page check.
- 3f58cc6dd8fc 12.0 landed
-
Note case where nbtree VACUUM finishes splits.
- 35bc0ec7c800 12.0 landed
-
Fix error when trying to delete page with half-dead left sibling.
- 8da31837803e 9.4.0 cited
-
Fix race condition in B-tree page deletion.
- efada2b8e920 9.4.0 cited