Re: what does this mean: "running xacts with xcnt == 0"

From: Andres Freund <andres(at)2ndquadrant(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: Peter Eisentraut <peter_e(at)gmx(dot)net>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: what does this mean: "running xacts with xcnt == 0"
Date: 2014-11-12 15:59:49
Message-ID: 20141112155949.GB13473@awork2.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2014-11-12 11:56:01 -0300, Alvaro Herrera wrote:
> Andres Freund wrote:
> > Hi,
> >
> > On 2014-11-12 09:03:40 -0500, Peter Eisentraut wrote:
> > > Could someone translate this detail message to English:
> > >
> > > ereport(LOG,
> > > (errmsg("logical decoding found consistent point at %X/%X",
> > > (uint32) (lsn >> 32), (uint32) lsn),
> > > errdetail("running xacts with xcnt == 0")));
> >
> > It means there a xl_running_xacts record was encountered that had xcnt =
> > 0 - allowing logical decoding to find a consistent start point
> >
> > > (or downgrade to debug message, if appropriate)?
> >
> > The message generally is quite relevant, as the process of finding a
> > consistent start point can take quite a while. we don't really have a
> > nice way to make errdetail() only be logged on a certain severity level
> > as far as I am aware off.
>
> Can we do just the errmsg() and remove with the errdetail?

No, I really don't want to do that. When trying to see whether logical
replication started that's imo quite an importantdetail. Especially when
first seing
ereport(LOG,
(errmsg("logical decoding found initial starting point at %X/%X",
(uint32) (lsn >> 32), (uint32) lsn),
errdetail_plural("%u transaction needs to finish.",
"%u transactions need to finish.",
builder->running.xcnt,
(uint32) builder->running.xcnt)));

Btw, Peter, why did you add a (uint32) to one, but not both,
builder->running.xcnt references?

> > So maybe 'Encountered xl_running_xacts record with xcnt = 0.'?
>
> That's not very user-facing, is it -- I mean, why bother the user with
> the names of structs and members thereof? It seems better to describe
> what the condition is; something like "found point in time with no
> running transaction". Maybe "point in time" should be "WAL record"
> instead.

Is that really a win in clarity? When analyzing a problem I'd much
rather have a concrete hint than something fuzzy.

Greetings,

Andres Freund

--
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Fujii Masao 2014-11-12 16:07:25 Re: Unintended restart after recovery error
Previous Message Tom Lane 2014-11-12 15:47:34 Re: Race condition between hot standby and restoring a FPW