On Wed, Feb 24, 2021 at 12:39 PM Kyotaro Horiguchi
<horikyota....@gmail.com> wrote:
>
> At Tue, 23 Feb 2021 12:03:32 +0530, Dilip Kumar <dilipbal...@gmail.com> wrote 
> in
> > On Fri, Feb 12, 2021 at 3:26 AM Robert Haas <robertmh...@gmail.com> wrote:
> > > There might be some more to say here, but those are things I notice on
> > > a first read-through.
> >
> > Okay.
>
> It seems to me all the suggestions are addressed in this version.
>
> +        Request to pause recovery.  A request doesn't mean that recovery 
> stops
> +        right away.  If you want a guarantee that recovery is actually 
> paused,
> +        you need to check for the recovery pause state returned by
> +        <function>pg_get_wal_replay_pause_state()</function>.  Note that
> +        <function>pg_is_wal_replay_paused()</function> returns whether a 
> request
> +        is made.  While recovery is paused, no further database changes are 
> applied.
>
> This looks like explainig the same thing twice. ("A request doesn't
> mean.." and "While recovery is paused, ...")
>
> How about something like this?
>
> Request to pause recovery. Server actually stops recovery at a
> convenient time. This can take a few seconds after the request. If you
> need to strictly guarantee that no further database change will occur,
> you can check using pg_get_wal_replay_ause_state(). Note that
> pg_is_wal_replay_paused() may return true before recovery actually
> stops.

I still think that for the user-facing documentation purpose the
current paragraph looks better.

> The patch adds two loops whth the following logic:
>
>  while (GetRecoveryPauseState() != RECOVERY_NOT_PAUSED)
>  {
>    ...
>    ConfirmRecoveryPaused();
>    <wait>
>  }
>
> After the renaming of the function, the following structure looks
> simpler and more natural.
>
>  while (ConfirmRecoveryPaused())
>  {
>    ...
>    <wait>
>  }

So do you mean that if the pause is requested ConfirmRecoveryPaused
will set it to paused and if it is not paused then it will return
false?  With the current function name, I don't think that will look
clean maybe we should change the name to something like
CheckAndConfirmRecoveryPaused?  Or I am fine with the way it is now.
Any other thoughts?

>
> +               /* test for recovery pause, if user has requested the pause */
> +               if (((volatile XLogCtlData *) XLogCtl)->recoveryPauseState !=
>
> The reason for the checkpoint is to move to "paused" state in a
> reasonable time.  I think we need to mention that reason rather than
> what is done here.

I will do that.

>
> +       /* get the recovery pause state */
> +       switch(GetRecoveryPauseState())
> +       {
> +               case RECOVERY_NOT_PAUSED:
> +                       state = "not paused";
> +                       break;
> ...
> +               default:
> +                       elog(ERROR, "invalid recovery pause state");
>
> This disables the static enum coverage check and it is not likely to
> have a wrong value here, other than the case of shared memory
> corruption.  So we can remove the default case
> here. pg_get_replication_slots() is going that direction and
> apply_dispatch() is taking a slightly different way.  Anyway I think
> that we can take away the default case.

So do you think we should put an assert(0) in the default case?

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com


Reply via email to