Re: Missing LWLock protection in pgstat_reset_replslot()
Anton A. Melnikov <a.melnikov@postgrespro.ru>
From: "Anton A. Melnikov" <a.melnikov@postgrespro.ru>
To: Michael Paquier <michael@paquier.xyz>, Tom Lane <tgl@sss.pgh.pa.us>
Cc: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>,
shveta malik <shveta.malik@gmail.com>, Heikki Linnakangas <hlinnaka@iki.fi>,
pgsql-hackers@lists.postgresql.org
Date: 2024-12-04T00:45:13Z
Lists: pgsql-hackers
Attachments
- repslot_stat.spec (text/x-rpm-spec)
- postmaster.log (text/x-log)
- bt.txt (text/plain)
Hi!
b36fbd9f8d message says that inconsistency may still be possible because
statistics are not completely consistent for a single scan of
pg_stat_replication_slots under concurrent replication slot drop or
creation activity.
Seems there is a reproduction of such a case via isolation test.
Please see the repslot_stat.spec attached.
In an build with asserts performing such a test will result in a
crash in the checkpointer during server shutdown.
Please see postmaster.log and bt.txt. There are
wal_level = logical
max_replication_slots = 4
logical_decoding_work_mem = 64kB
autovacuum_naptime = 1d
log_min_messages = DEBUG
in the postgresql.conf.
The assert occures due to this stats entry:
(gdb) p *ps
$1 = {key = {kind = PGSTAT_KIND_REPLSLOT, dboid = 0, objoid = 0}, dropped = true, refcount = {value = 0}, generation = {value = 1}, body = 1099512025088}
Also the commit message says that such an issue should unlikely be a problem in practice.
So i doubt whether this should be treated as a bug and to be fixed?
Would be glad to figure this out.
With the best regards,
--
Anton A. Melnikov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
Commits
-
Fix invalidation of local pgstats references for entry reinitialization
- 1df1e1e78762 15.11 landed
- ae77bcc3aa1b 16.7 landed
- dc5f9054186a 17.3 landed
- da99fedf8c17 18.0 landed
-
Improve consistency of replication slot statistics
- b36fbd9f8da1 17.0 landed