From 32914d900f90f7f5238a3856e67f6bc5bf05e1d9 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Fri, 16 Sep 2022 10:07:12 -0700 Subject: [PATCH] Fix race condition in stats.sql added in 5264add7847 Very occasionally the stats test failed due to the number of sessions not being updated yet. Likely this requires that there is contention on the database's stats entry. Solve this by forcing pending stats to be flushed before fetching the stats. I verified that there are no other test failures after making pgstat_report_stat() only flush stats when force = true. Per message from Tom Lane and buildfarm member crake. Discussion: https://postgr.es/m/3428246.1663271992@sss.pgh.pa.us Backpatch: 15-, where 5264add7847 added the test --- src/test/regress/expected/stats.out | 6 ++++++ src/test/regress/sql/stats.sql | 1 + 2 files changed, 7 insertions(+) diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 6b233ff4c0..628df302df 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -560,6 +560,12 @@ DROP TABLE prevstats; -- Test that sessions is incremented when a new session is started in pg_stat_database SELECT sessions AS db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database()) \gset \c +SELECT pg_stat_force_next_flush(); + pg_stat_force_next_flush +-------------------------- + +(1 row) + SELECT sessions > :db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database()); ?column? ---------- diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index 096f00ce8b..2f39778b15 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -294,6 +294,7 @@ DROP TABLE prevstats; -- Test that sessions is incremented when a new session is started in pg_stat_database SELECT sessions AS db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database()) \gset \c +SELECT pg_stat_force_next_flush(); SELECT sessions > :db_stat_sessions FROM pg_stat_database WHERE datname = (SELECT current_database()); -- Test pg_stat_bgwriter checkpointer-related stats, together with pg_stat_wal