From: | Alexander Korotkov <aekorotkov(at)gmail(dot)com> |
---|---|
To: | Pavel Borisov <pashkin(dot)elfe(at)gmail(dot)com> |
Cc: | Peter Eisentraut <peter(at)eisentraut(dot)org>, Michael Paquier <michael(at)paquier(dot)xyz>, pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | Re: pgsql: Implement pg_wal_replay_wait() stored procedure |
Date: | 2024-10-22 20:12:27 |
Message-ID: | CAPpHfdu7eAN6_Xfs+xSnRhu1zoN6WiOvj58i6qv27FgYcd8DSg@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers pgsql-hackers |
Hi, Pavel!
Thank you for your review.
On Tue, Oct 22, 2024 at 4:30 PM Pavel Borisov <pashkin(dot)elfe(at)gmail(dot)com> wrote:
> On Tue, 22 Oct 2024 at 13:26, Alexander Korotkov <aekorotkov(at)gmail(dot)com> wrote:
>>
>> On Wed, Oct 16, 2024 at 11:20 PM Alexander Korotkov
>> <aekorotkov(at)gmail(dot)com> wrote:
>> >
>> > On Wed, Oct 16, 2024 at 10:35 PM Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>> > > On 02.09.24 01:55, Alexander Korotkov wrote:
>> > > > On Mon, Sep 2, 2024 at 2:28 AM Michael Paquier <michael(at)paquier(dot)xyz> wrote:
>> > > >> On Sun, Sep 01, 2024 at 10:35:27PM +0300, Alexander Korotkov wrote:
>> > > >>> This path hasn't changes since the patch revision when it was a
>> > > >>> utility command. I agree that this doesn't look like proper path for
>> > > >>> stored procedure. But I don't think src/backend/utils/adt is
>> > > >>> appropriate path either, because it's not really about data type.
>> > > >>> pg_wal_replay_wait() looks a good neighbor for
>> > > >>> pg_wal_replay_pause()/pg_wal_replay_resume() and other WAL-related
>> > > >>> functions. So, what about moving it to src/backend/access/transam?
>> > > >>
>> > > >> Moving the new function to xlogfuncs.c while publishing
>> > > >> WaitForLSNReplay() makes sense to me.
>> > > >
>> > > > Thank you for proposal. I like this.
>> > > >
>> > > > Could you, please, check the attached patch?
>> > >
>> > > We still have stuff in src/backend/commands/waitlsn.c that is nothing
>> > > like a "command". You have moved some stuff elsewhere, but what are you
>> > > planning to do with the rest?
>> >
>> > Thank you for spotting this another time. What about moving that
>> > somewhere like src/backend/access/transam/xlogwait.c ?
>>
>> Implemented this as a separate patch (0001). Also rebased other
>> pending patches on that. 0004 now revises header comment of
>> xlogwait.c with new procedure signature.
>
>
> I've looked at v5 of a patchset.
>
> 0001:
> Looks completely ok.
>
> 0002:
>
> As stated in latch.c
>
> - WL_POSTMASTER_DEATH: Wait for postmaster to die
> - WL_EXIT_ON_PM_DEATH: Exit immediately if the postmaster dies
>
> * wakeEvents must include either WL_EXIT_ON_PM_DEATH for automatic exit
> * if the postmaster dies or WL_POSTMASTER_DEATH for a flag set in the
> * return value if the postmaster dies
>
> It's not completely clear to me if these comments need some clarification (not related to the patchset), or if we should look for WL_EXIT_ON_PM_DEATH for immediately FATAL. Or waiting for postmaster to die on WL_POSTMASTER_DEATH instead of just fatal immediately?
As I get from the code, WL_EXIT_ON_PM_DEATH cause process to just
proc_exit(1) without throwing FATAL. So, in the most of situations we
do throw FATAL after seeing WL_POSTMASTER_DEATH event. So, it's
reasonable to do the same here. But indeed, this is a question (not
related to this patch) whether WL_EXIT_ON_PM_DEATH should cause
process to throw FATAL.
> 0003:
> Besides refactor it looks that deleteLSNWaiter() is added in WaitForLSNReplay. Maybe it's worth mentioning in the commit message.
> Maybe refactoring for loop for assigning result variable and breaking a loop instead of immediate return would look better and lead to natural call of after the loop before returning.
I don't think we would get much simplicity/readability by breaking
loop instead of immediate return. However, I reflected the changes in
the commit message. Also I reflected that we don't distinguish any
more seeing !RecoveryInProgress() in different places.
> 0004:
>
> Comment:
> + * Waits until recovery replays the target LSN with optional timeout. Throw
> + * an error on failure.
> may need mentioning "Unless no_error provided throws an error on failure"
Changed as you proposed.
> Otherwise the patch looks good.
Thanks!
------
Regards,
Alexander Korotkov
Supabase
Attachment | Content-Type | Size |
---|---|---|
v6-0001-Move-LSN-waiting-declarations-and-definitions-to-.patch | application/octet-stream | 8.7 KB |
v6-0004-Add-no_error-argument-to-pg_wal_replay_wait.patch | application/octet-stream | 10.7 KB |
v6-0002-Make-WaitForLSNReplay-issue-FATAL-on-postmaster-d.patch | application/octet-stream | 1.6 KB |
v6-0003-Refactor-WaitForLSNReplay-to-return-the-result-of.patch | application/octet-stream | 6.9 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Jeff Davis | 2024-10-22 22:24:42 | pgsql: Add functions pg_set_attribute_stats() and pg_clear_attribute_st |
Previous Message | Jeff Davis | 2024-10-22 19:48:13 | pgsql: Change pg_*_relation_stats() functions to return type to void. |
From | Date | Subject | |
---|---|---|---|
Next Message | Erik Sjoblom | 2024-10-22 21:58:29 | Unexpected table size usage for small composite arrays |
Previous Message | Nathan Bossart | 2024-10-22 19:54:57 | use a non-locking initial test in TAS_SPIN on AArch64 |