]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add minimal sleep to stats isolation test functions.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Sep 2025 17:29:02 +0000 (13:29 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 25 Sep 2025 17:29:02 +0000 (13:29 -0400)
The functions test_stat_func() and test_stat_func2() had empty
function bodies, so that they took very little time to run.  This made
it possible that on machines with relatively low timer resolution the
functions could return before the clock advanced, making the test fail
(as seen on buildfarm members fruitcrow and hamerkop).

To avoid that, pg_sleep for 10us during the functions.  As far as we
can tell, all current hardware has clock resolution much less than
that.  (The current implementation of pg_sleep will round it up to
1ms anyway, but someday that might get improved.)

Author: Michael Banck <mbanck@gmx.net>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/68d413a3.a70a0220.24c74c.8be9@mx.google.com
Backpatch-through: 15

src/test/isolation/specs/stats.spec

index 5b922d788cc0b83bacc8051380b4c373e5d70966..64247c4087585d7a239afbd2c078674054fb95f8 100644 (file)
@@ -6,10 +6,13 @@ setup
     INSERT INTO test_stat_tab(key, value) VALUES('k0', 1);
     INSERT INTO test_stat_oid(name, oid) VALUES('test_stat_tab', 'test_stat_tab'::regclass);
 
-    CREATE FUNCTION test_stat_func() RETURNS VOID LANGUAGE plpgsql AS $$BEGIN END;$$;
+    -- include 10us sleep to ensure that runtime measures as more than zero
+    CREATE FUNCTION test_stat_func() RETURNS VOID LANGUAGE plpgsql AS
+      $$BEGIN PERFORM pg_sleep(10e-6); END;$$;
     INSERT INTO test_stat_oid(name, oid) VALUES('test_stat_func', 'test_stat_func'::regproc);
 
-    CREATE FUNCTION test_stat_func2() RETURNS VOID LANGUAGE plpgsql AS $$BEGIN END;$$;
+    CREATE FUNCTION test_stat_func2() RETURNS VOID LANGUAGE plpgsql AS
+      $$BEGIN PERFORM pg_sleep(10e-6); END;$$;
     INSERT INTO test_stat_oid(name, oid) VALUES('test_stat_func2', 'test_stat_func2'::regproc);
 
     CREATE TABLE test_slru_stats(slru TEXT, stat TEXT, value INT);