Re: collect_corrupt_items_vacuum.patch - Mailing list pgsql-hackers

From Alexander Korotkov
Subject Re: collect_corrupt_items_vacuum.patch
Date
Msg-id CAPpHfdtDOCab_RrpkH2Uk6y=BdxS_iPMAOg88dGqzoeUgwZF2A@mail.gmail.com
Whole thread Raw
In response to Re: collect_corrupt_items_vacuum.patch  (Alexander Korotkov <aekorotkov@gmail.com>)
Responses Re: collect_corrupt_items_vacuum.patch
List pgsql-hackers
On Tue, Aug 13, 2024 at 10:15 PM Alexander Korotkov
<aekorotkov@gmail.com> wrote:
> On Tue, Aug 13, 2024 at 9:39 PM Heikki Linnakangas <hlinnaka@iki.fi> wrote:
> >
> > This causes an assertion failure when executed in a hot standby server:
> >
> >   select * from pg_check_visible('pg_database');
> >
> > TRAP: failed Assert("!RecoveryInProgress()"), File:
> > "../src/backend/storage/ipc/procarray.c", Line: 2710, PID: 1142572
> >
> > GetStrictOldestNonRemovableTransactionId does this:
> >
> > >       if (rel == NULL || rel->rd_rel->relisshared || RecoveryInProgress())
> > >       {
> > >               /* Shared relation: take into account all running xids */
> > >               runningTransactions = GetRunningTransactionData();
> > >               LWLockRelease(ProcArrayLock);
> > >               LWLockRelease(XidGenLock);
> > >               return runningTransactions->oldestRunningXid;
> > >       }
> >
> > And GetRunningTransactionData() has this:
> >
> > >       Assert(!RecoveryInProgress());
> >
> > So it's easy to see that you will hit that assertion.
>
> Oh, thank you!
> I'll fix this and add a test for recovery!

Attached patch fixes the problem and adds the corresponding test.  I
would appreciate if you take a look at it.

------
Regards,
Alexander Korotkov
Supabase

Attachment

pgsql-hackers by date:

Previous
From: Andreas Karlsson
Date:
Subject: Re: libpq minor TOCTOU violation
Next
From: "Zhijie Hou (Fujitsu)"
Date:
Subject: RE: Conflict detection and logging in logical replication