On Thu, Jun 12, 2014 at 02:44:10AM -0400, Tom Lane wrote: > Andres Freund <and...@2ndquadrant.com> writes: > > On 2014-06-12 00:38:36 -0400, Noah Misch wrote: > >> http://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=prairiedog&dt=2014-06-12%2000%3A17%3A07 > > > Hm. My guess it's that it's just a 'harmless' concurrency issue. The > > test currently run in concurrency with others: I think what happens is > > that the table gets dropped in the other relation after the query has > > acquired the mvcc snapshot (used for the pg_class) test. > > But why is it triggering on such a 'unusual' system and not on others? > > That's what worries me a bit.
I can reproduce a similar disturbance in the test query using gdb and a concurrent table drop, and the table reported in the prairiedog failure is a table dropped in a concurrent test group. That explanation may not be the full story behind these particular failures, but it certainly could cause similar failures in the future. Let's prevent this by only reporting rows for relations that still exist after the query is complete. > prairiedog is pretty damn slow by modern standards. OTOH, I think it > is not the slowest machine in the buildfarm; hamster for instance seems > to be at least a factor of 2 slower. So I'm not sure whether to believe > it's just a timing issue. That kernel's process scheduler could be a factor. -- Noah Misch EnterpriseDB http://www.enterprisedb.com
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out index a182176..a274d82 100644 --- a/src/test/regress/expected/alter_table.out +++ b/src/test/regress/expected/alter_table.out @@ -2375,14 +2375,18 @@ Check constraints: DROP TABLE alter2.tt8; DROP SCHEMA alter2; --- Check that we map relation oids to filenodes and back correctly. --- Only display bad mappings so the test output doesn't change all the --- time. +-- Check that we map relation oids to filenodes and back correctly. Only +-- display bad mappings so the test output doesn't change all the time. A +-- filenode function call can return NULL for a relation dropped concurrently +-- with the call's surrounding query, so check mappings only for relations +-- that still exist after all calls finish. +CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +SELECT m.* FROM filenode_mapping m JOIN pg_class c ON c.oid = m.oid; oid | mapped_oid | reltablespace | relfilenode | relname -----+------------+---------------+-------------+--------- (0 rows) diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql index 3f641f9..19e1229 100644 --- a/src/test/regress/sql/alter_table.sql +++ b/src/test/regress/sql/alter_table.sql @@ -1582,15 +1582,20 @@ ALTER TABLE IF EXISTS tt8 SET SCHEMA alter2; DROP TABLE alter2.tt8; DROP SCHEMA alter2; --- Check that we map relation oids to filenodes and back correctly. --- Only display bad mappings so the test output doesn't change all the --- time. +-- Check that we map relation oids to filenodes and back correctly. Only +-- display bad mappings so the test output doesn't change all the time. A +-- filenode function call can return NULL for a relation dropped concurrently +-- with the call's surrounding query, so check mappings only for relations +-- that still exist after all calls finish. +CREATE TEMP TABLE filenode_mapping AS SELECT oid, mapped_oid, reltablespace, relfilenode, relname FROM pg_class, pg_filenode_relation(reltablespace, pg_relation_filenode(oid)) AS mapped_oid WHERE relkind IN ('r', 'i', 'S', 't', 'm') AND mapped_oid IS DISTINCT FROM oid; +SELECT m.* FROM filenode_mapping m JOIN pg_class c ON c.oid = m.oid; + -- Checks on creating and manipulation of user defined relations in -- pg_catalog. --
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers