From 1be0fdb9de559ce8daf6d5603f0329cbd056111a Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Tue, 7 Mar 2023 10:03:42 -0800 Subject: [PATCH] Fix flakey pg_stat_io test Wrap test of pg_stat_io's tracking of shared buffer reads in a transaction to prevent concurrent accesses (e.g. by autovacuum) causing spurious test failures. Reported-by: Tom Lane Author: Melanie Plageman Discussion: https://www.postgresql.org/message-id/20230306190919.ai6mxdq3sygyyths%40awork3.anarazel.de --- src/test/regress/expected/stats.out | 4 ++++ src/test/regress/sql/stats.sql | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/test/regress/expected/stats.out b/src/test/regress/expected/stats.out index 937b2101b33..186c2962990 100644 --- a/src/test/regress/expected/stats.out +++ b/src/test/regress/expected/stats.out @@ -1181,6 +1181,9 @@ SELECT current_setting('fsync') = 'off' -- from it to cause it to be read back into shared buffers. SELECT sum(reads) AS io_sum_shared_before_reads FROM pg_stat_io WHERE io_context = 'normal' AND io_object = 'relation' \gset +-- Do this in a transaction to prevent spurious failures due to concurrent accesses to our newly +-- rewritten table, e.g. by autovacuum. +BEGIN; ALTER TABLE test_io_shared SET TABLESPACE regress_tblspace; -- SELECT from the table so that the data is read into shared buffers and -- io_context 'normal', io_object 'relation' reads are counted. @@ -1190,6 +1193,7 @@ SELECT COUNT(*) FROM test_io_shared; 100 (1 row) +COMMIT; SELECT pg_stat_force_next_flush(); pg_stat_force_next_flush -------------------------- diff --git a/src/test/regress/sql/stats.sql b/src/test/regress/sql/stats.sql index 74e592aa8af..d7f873cfc9d 100644 --- a/src/test/regress/sql/stats.sql +++ b/src/test/regress/sql/stats.sql @@ -576,10 +576,14 @@ SELECT current_setting('fsync') = 'off' -- from it to cause it to be read back into shared buffers. SELECT sum(reads) AS io_sum_shared_before_reads FROM pg_stat_io WHERE io_context = 'normal' AND io_object = 'relation' \gset +-- Do this in a transaction to prevent spurious failures due to concurrent accesses to our newly +-- rewritten table, e.g. by autovacuum. +BEGIN; ALTER TABLE test_io_shared SET TABLESPACE regress_tblspace; -- SELECT from the table so that the data is read into shared buffers and -- io_context 'normal', io_object 'relation' reads are counted. SELECT COUNT(*) FROM test_io_shared; +COMMIT; SELECT pg_stat_force_next_flush(); SELECT sum(reads) AS io_sum_shared_after_reads FROM pg_stat_io WHERE io_context = 'normal' AND io_object = 'relation' \gset -- 2.39.5