Re: Add Information during standby recovery conflicts

Alvaro Herrera <alvherre@alvh.no-ip.org>

From: Alvaro Herrera <alvherre@alvh.no-ip.org>
To: "Drouvot, Bertrand" <bdrouvot@amazon.com>
Cc: Masahiko Sawada <sawada.mshk@gmail.com>, Fujii Masao <masao.fujii@oss.nttdata.com>, Masahiko Sawada <masahiko.sawada@2ndquadrant.com>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2020-11-28T17:36:26Z
Lists: pgsql-hackers
Hi Bertrand,

On 2020-Nov-28, Drouvot, Bertrand wrote:

> +		if (nprocs > 0)
> +		{
> +			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.",
> +										   nprocs, buf.data))));
> +		}
> +		else
> +		{
> +			ereport(LOG,
> +					(errmsg("recovery still waiting after %ld.%03d ms: %s",
> +							msecs, usecs, _(get_recovery_conflict_desc(reason)))));
> +		}
> +
> +		pfree(buf.data);
> +	}
> +	else
> +		ereport(LOG,
> +				(errmsg("recovery still waiting after %ld.%03d ms: %s",
> +						msecs, usecs, _(get_recovery_conflict_desc(reason)))));
> +}

Another trivial stylistic point is that you can collapse all these
ereport calls into one, with something like

  ereport(LOG,
          errmsg("recovery still waiting after ...", opts),
          waitlist != NULL ? errdetail_log_plural("foo bar baz", opts) : 0);

where the "waitlist" has been constructed beforehand, or is set to NULL
if there's no process list.

> +	switch (reason)
> +	{
> +		case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN:
> +			reasonDesc = gettext_noop("for recovery conflict on buffer pin");
> +			break;

Pure bikeshedding after discussing this with my pillow: I think I'd get
rid of the initial "for" in these messages.



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