[COMMITTERS] pgsql: Ignore old stats file timestamps when starting the statscollect - Mailing list pgsql-committers

From Tom Lane
Subject [COMMITTERS] pgsql: Ignore old stats file timestamps when starting the statscollect
Date
Msg-id E1dPaRr-0007OA-QY@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Ignore old stats file timestamps when starting the stats collector.

The stats collector disregards inquiry messages that bear a cutoff_time
before when it last wrote the relevant stats file.  That's fine, but at
startup when it reads the "permanent" stats files, it absorbed their
timestamps as if they were the times at which the corresponding temporary
stats files had been written.  In reality, of course, there's no data
out there at all.  This led to disregarding inquiry messages soon after
startup if the postmaster had been shut down and restarted within less
than PGSTAT_STAT_INTERVAL; which is a pretty common scenario, both for
testing and in the field.  Requesting backends would hang for 10 seconds
and then report failure to read statistics, unless they got bailed out
by some other backend coming along and making a newer request within
that interval.

I came across this through investigating unexpected delays in the
src/test/recovery TAP tests: it manifests there because the autovacuum
launcher hangs for 10 seconds when it can't get statistics at startup,
thus preventing a second shutdown from occurring promptly.  We might
want to do some things in the autovac code to make it less prone to
getting stuck that way, but this change is a good bug fix regardless.

In passing, also fix pgstat_read_statsfiles() to ensure that it
re-zeroes its global stats variables if they are corrupted by a
short read from the stats file.  (Other reads in that function
go into temp variables, so that the issue doesn't arise.)

This has been broken since we created the separation between permanent
and temporary stats files in 8.4, so back-patch to all supported branches.

Discussion: https://postgr.es/m/16860.1498442626@sss.pgh.pa.us

Branch
------
REL9_5_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/5a6b95cdf4e9cab086e9278d22fe5952ec7a277b

Modified Files
--------------
src/backend/postmaster/pgstat.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: [COMMITTERS] pgsql: Reduce pg_ctl's reaction time when waiting for postmasterstart/
Next
From: Tom Lane
Date:
Subject: [COMMITTERS] pgsql: Don't lose walreceiver start requests due to race condition inp