]> granicus.if.org Git - postgresql/commitdiff
Make stats regression test more robust in the face of parallel query.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 15 May 2017 01:39:10 +0000 (21:39 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 15 May 2017 01:39:10 +0000 (21:39 -0400)
Commit 60690a6fe attempted to fix the wait_for_stats() function in this
test so that it would wait properly if the tenk2 scans were done in
parallel workers instead of the main session (typically as a consequence of
force_parallel_mode being turned on).  However, we made it test for whether
the main session's actions had been reported by looking for inserts on
'trunc_stats_test'.  This is the Wrong Thing, because those aren't the last
updates we expect the main session to do.  As shown by recent failures on
buildfarm member frogmouth, it's entirely likely that the trunc_stats_test
updates will be reported in a separate message from later updates, which
means there can be a window in which wait_for_stats() will exit but not all
the updates we are expecting to see will have arrived.  We should test for
the last updates we're expecting, namely those on 'trunc_stats_test4'.

Unfortunately, I doubt that this explains frogmouth's failures, because
there's no reason to believe that it's running the tenk2 queries in
parallel.  Still, the test is wrong on its own terms, so fix and back-patch
to 9.6 where parallel query came in.

src/test/regress/expected/stats.out
src/test/regress/sql/stats.sql

index 91c061b6c52481a9af524bf776499c002d8a2364..c595442b93fbf8df8a5574c9806efc23f59562c4 100644 (file)
@@ -51,9 +51,9 @@ begin
       FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr
      WHERE st.relname='tenk2' AND cl.relname='tenk2';
 
-    -- check to see if updates have been sensed
+    -- check to see if all updates have been sensed
     SELECT (n_tup_ins > 0) INTO updated3
-      FROM pg_stat_user_tables WHERE relname='trunc_stats_test';
+      FROM pg_stat_user_tables WHERE relname='trunc_stats_test4';
 
     exit when updated1 and updated2 and updated3;
 
index 1c21f3800862532599bd3dc6e84152b3faf18ecf..026c93038f6534d9f77dbb94134c8666c4da9c34 100644 (file)
@@ -50,9 +50,9 @@ begin
       FROM pg_stat_user_tables AS st, pg_class AS cl, prevstats AS pr
      WHERE st.relname='tenk2' AND cl.relname='tenk2';
 
-    -- check to see if updates have been sensed
+    -- check to see if all updates have been sensed
     SELECT (n_tup_ins > 0) INTO updated3
-      FROM pg_stat_user_tables WHERE relname='trunc_stats_test';
+      FROM pg_stat_user_tables WHERE relname='trunc_stats_test4';
 
     exit when updated1 and updated2 and updated3;