From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: Drouvot, Bertrand <bdrouvot@amazon.com>
Cc: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: Fujii Masao <masao.fujii@oss.nttdata.com>
Cc: Masahiko Sawada <masahiko.sawada@2ndquadrant.com>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Subject: Re: Add Information during standby recovery conflicts
Date: Fri, 27 Nov 2020 10:40:57 -0300
Message-ID: <20201127134057.GA15122@alvherre.pgsql> (raw)
In-Reply-To: <61a9ad81-9436-dbf2-22a5-044843aa6ba3@amazon.com>
On 2020-Nov-27, Drouvot, Bertrand wrote:
> + if (nprocs > 0)
> + {
> + ereport(LOG,
> + (errmsg("%s after %ld.%03d ms",
> + get_recovery_conflict_desc(reason), msecs, usecs),
> + (errdetail_log_plural("Conflicting process: %s.",
> + "Conflicting processes: %s.",
> + nprocs, buf.data))));
> + }
> +/* Return the description of recovery conflict */
> +static const char *
> +get_recovery_conflict_desc(ProcSignalReason reason)
> +{
> + const char *reasonDesc = gettext_noop("unknown reason");
> +
> + switch (reason)
> + {
> + case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN:
> + reasonDesc = gettext_noop("recovery is still waiting for recovery conflict on buffer pin");
> + break;
This doesn't work from a translation point of view. First, you're
building a sentence from parts, which is against policy. Second, you're
not actually invoking gettext to translate the string returned by
get_recovery_conflict_desc.
I think this needs to be rethought. To handle the first problem I
suggest to split the error message in two. One phrase is the complain
that recovery is waiting, and the other string is the reason for the
wait. Separate both either by splitting with a :, or alternatively put
the other sentence in DETAIL. (The latter would require to mix with the
list of conflicting processes, which might be hard.)
The first idea would look like this:
LOG: recovery still waiting after %ld.03d ms: for recovery conflict on buffer pin
DETAIL: Conflicting processes: 1, 2, 3.
To achieve this, apart from editing the messages returned by
get_recovery_conflict_desc, you'd need to ereport this way:
ereport(LOG,
errmsg("recovery still waiting after %ld.%03d ms: %s",
msecs, usecs, _(get_recovery_conflict_desc(reason))),
errdetail_log_plural("Conflicting process: %s.",
"Conflicting processes: %s.",
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: alvherre@alvh.no-ip.org, bdrouvot@amazon.com, sawada.mshk@gmail.com, masao.fujii@oss.nttdata.com, masahiko.sawada@2ndquadrant.com, horikyota.ntt@gmail.com
Subject: Re: Add Information during standby recovery conflicts
In-Reply-To: <20201127134057.GA15122@alvherre.pgsql>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox