Re: Add Information during standby recovery conflicts

Kyotaro Horiguchi <horikyota.ntt@gmail.com>

From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: masahiko.sawada@2ndquadrant.com
Cc: alvherre@alvh.no-ip.org, bdrouvot@amazon.com, pgsql-hackers@postgresql.org
Date: 2020-10-15T05:52:10Z
Lists: pgsql-hackers
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".

> 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.

regards.


-- 
Kyotaro Horiguchi
NTT Open Source Software Center



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