Re: what does this mean: "running xacts with xcnt == 0" - Mailing list pgsql-hackers

From Andres Freund
Subject Re: what does this mean: "running xacts with xcnt == 0"
Date
Msg-id 20141112155949.GB13473@awork2.anarazel.de
Whole thread Raw
In response to Re: what does this mean: "running xacts with xcnt == 0"  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Responses Re: what does this mean: "running xacts with xcnt == 0"  (Robert Haas <robertmhaas@gmail.com>)
Re: what does this mean: "running xacts with xcnt == 0"  (Peter Eisentraut <peter_e@gmx.net>)
List 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



pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Race condition between hot standby and restoring a FPW
Next
From: Fujii Masao
Date:
Subject: Re: Unintended restart after recovery error