aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2016-08-25 09:57:09 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2016-08-25 09:57:27 -0400
commit8c907045f63257859f84b073c0648d2012f7919c (patch)
tree24b76959b5f6245316f133e4266655ee4baf10c0 /src
parent46bd14a108ffde3e0db68ccae0fd88a4128c8e84 (diff)
downloadpostgresql-8c907045f63257859f84b073c0648d2012f7919c.tar.gz
postgresql-8c907045f63257859f84b073c0648d2012f7919c.zip
Fix instability in parallel regression tests.
Commit f0c7b789a added a test case in case.sql that creates and then drops both an '=' operator and the type it's for. Given the right timing, that can cause a "cache lookup failed for type" failure in concurrent sessions, which see the '=' operator as a potential match for '=' in a query, but then the type is gone by the time they inquire into its properties. It might be nice to make that behavior more robust someday, but as a back-patchable solution, adjust the new test case so that the operator is never visible to other sessions. Like the previous commit, back-patch to all supported branches. Discussion: <5983.1471371667@sss.pgh.pa.us>
Diffstat (limited to 'src')
-rw-r--r--src/test/regress/expected/case.out9
-rw-r--r--src/test/regress/sql/case.sql11
2 files changed, 10 insertions, 10 deletions
diff --git a/src/test/regress/expected/case.out b/src/test/regress/expected/case.out
index 35b6476e501..5f6aa16d319 100644
--- a/src/test/regress/expected/case.out
+++ b/src/test/regress/expected/case.out
@@ -305,6 +305,9 @@ SELECT * FROM CASE_TBL;
-- the isNull flag for the case test value incorrectly became true, causing
-- the third WHEN-clause not to match. The volatile function calls are needed
-- to prevent constant-folding in the planner, which would hide the bug.
+-- Wrap this in a single transaction so the transient '=' operator doesn't
+-- cause problems in concurrent sessions
+BEGIN;
CREATE FUNCTION vol(text) returns text as
'begin return $1; end' language plpgsql volatile;
SELECT CASE
@@ -335,13 +338,9 @@ SELECT CASE volfoo('bar') WHEN 'foo'::foodomain THEN 'is foo' ELSE 'is not foo'
is not foo
(1 row)
+ROLLBACK;
--
-- Clean up
--
DROP TABLE CASE_TBL;
DROP TABLE CASE2_TBL;
-DROP OPERATOR = (foodomain, foodomain);
-DROP FUNCTION inline_eq(foodomain, foodomain);
-DROP FUNCTION volfoo(text);
-DROP DOMAIN foodomain;
-DROP FUNCTION vol(text);
diff --git a/src/test/regress/sql/case.sql b/src/test/regress/sql/case.sql
index b2377e46109..c860fae258a 100644
--- a/src/test/regress/sql/case.sql
+++ b/src/test/regress/sql/case.sql
@@ -167,6 +167,10 @@ SELECT * FROM CASE_TBL;
-- the third WHEN-clause not to match. The volatile function calls are needed
-- to prevent constant-folding in the planner, which would hide the bug.
+-- Wrap this in a single transaction so the transient '=' operator doesn't
+-- cause problems in concurrent sessions
+BEGIN;
+
CREATE FUNCTION vol(text) returns text as
'begin return $1; end' language plpgsql volatile;
@@ -194,14 +198,11 @@ CREATE OPERATOR = (procedure = inline_eq,
SELECT CASE volfoo('bar') WHEN 'foo'::foodomain THEN 'is foo' ELSE 'is not foo' END;
+ROLLBACK;
+
--
-- Clean up
--
DROP TABLE CASE_TBL;
DROP TABLE CASE2_TBL;
-DROP OPERATOR = (foodomain, foodomain);
-DROP FUNCTION inline_eq(foodomain, foodomain);
-DROP FUNCTION volfoo(text);
-DROP DOMAIN foodomain;
-DROP FUNCTION vol(text);