On Fri, Oct 20, 2023 at 8:55 PM Noah Misch <noah@leadboat.com> wrote:
> > > I lean toward fixing this by
> > > having amcheck scan left; if left links reach only half-dead or deleted pages,
> > > that's as good as the present child block being P_LEFTMOST.
> >
> > Also my preference.
>
> Done mostly that way, except I didn't accept deleted pages. Making this work
> on !readonly would take more than that, and readonly shouldn't need that.
That makes sense to me. I believe that it's not possible to have a
string of consecutive sibling pages that are all half-dead (regardless
of the BlockNumber order of sibling pages, even). But I'd probably
have written the fix in roughly the same way. Although...maybe you
should try to detect a string of half-dead pages? Hard to say if it's
worth the trouble.
Suggest adding a CHECK_FOR_INTERRUPTS() call to the loop, too, just
for good luck.
> After I fixed the original error, the "block %u is not leftmost" surfaced
> next. The attached patch fixes that, too. I didn't investigate the others.
> The original test was flaky in response to WAL flush timing, but this one
> survives thousands of runs.
Hmm. Can't argue with that. Your fix seems sound.
--
Peter Geoghegan