Re: Add Information during standby recovery conflicts

Masahiko Sawada <masahiko.sawada@2ndquadrant.com>

From: Masahiko Sawada <masahiko.sawada@2ndquadrant.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: Alvaro Herrera <alvherre@alvh.no-ip.org>, "Drouvot, Bertrand" <bdrouvot@amazon.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-10-15T07:15:51Z
Lists: pgsql-hackers

Attachments

On Thu, 15 Oct 2020 at 14:52, Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote:
>
> At Thu, 15 Oct 2020 14:28:57 +0900, Masahiko Sawada <masahiko.sawada@2ndquadrant.com> wrote in
> > > ereport(..(errmsg("%s", _("hogehoge")))) results in
> > > fprintf((translated("%s")), translate("hogehoge")).
> > >
> > > So your change (errmsg("%s", gettext_noop("hogehoge")) results in
> > >
> > > fprintf((translated("%s")), DONT_translate("hogehoge")).
> > >
> > > which leads to a translation problem.
> > >
> > > (errmsg(gettext_noop("hogehoge"))
> >
> > This seems equivalent to (errmsg("hogehoge")), right?
>
> Yes and no.  However eventually the two works the same way,
> "(errmsg(gettext_noop("hogehoge"))" is a shorthand of
>
> 1: char *msg = gettext_noop("hogehoge");
> ...
> 2: .. (errmsg(msg));
>
> That is, the line 1 only registers a message id "hogehoge" and doesn't
> translate. The line 2 tries to translate the content of msg and it
> finds the translation for the message id "hogehoge".

Understood.

>
> > I think I could understand translation stuff. Given we only report the
> > const string returned from get_recovery_conflict_desc() without
> > placeholders, the patch needs to use errmsg_internal() instead while
> > not changing _() part. (errmsg(get_recovery_conflict_desc())) is not
> > good (warned by -Wformat-security).
>
> Ah, right. we get a complain if no value parameters added. We can
> silence it by adding a dummy parameter to errmsg, but I'm not sure
> which is preferable.

Okay, I'm going to use errmsg_internal() for now until a better idea comes.

I've attached the updated patch that fixed the translation part.

Regards,

-- 
Masahiko Sawada            http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Commits

  1. Log long wait time on recovery conflict when it's resolved.

  2. Add GUC to log long wait times on recovery conflicts.

  3. Detect the deadlocks between backends and the startup process.

  4. Get rid of the dedicated latch for signaling the startup process.

  5. Add block information in error context of WAL REDO apply loop