mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 23:56:58 +03:00
Disable cache clobber to avoid breaking postgres_fdw termination test.
Commit 93f414614 improved a pre-existing test case so that it would show whether or not termination of the "remote" worker process happened. This soon exposed that, when debug_invalidate_system_caches_always (nee CLOBBER_CACHE_ALWAYS) is enabled, no such termination occurs. That's because cache invalidation forces postgres_fdw connections to be dropped at end of transaction, so that there's no worker to terminate. There's a race condition as to whether the worker will manage to get out of the BackendStatusArray before we look, but at least on buildfarm member hyrax, it's failed twice in two attempts. Rather than re-lobotomizing the test, let's fix this by transiently disabling debug_invalidate_system_caches_always. (Hooray for that being just a GUC nowadays, rather than a compile-time option.) If this proves not to be enough to make the test stable, we can do the other thing instead. Discussion: https://postgr.es/m/3854538.1620081771@sss.pgh.pa.us
This commit is contained in:
parent
e798d095da
commit
1273a15bf9
@ -9204,6 +9204,12 @@ WARNING: there is no transaction in progress
|
||||
-- Change application_name of remote connection to special one
|
||||
-- so that we can easily terminate the connection later.
|
||||
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
||||
-- If debug_invalidate_system_caches_always is active, it results in
|
||||
-- dropping remote connections after every transaction, making it
|
||||
-- impossible to test termination meaningfully. So turn that off
|
||||
-- for this test.
|
||||
SET debug_invalidate_system_caches_always = 0;
|
||||
-- Make sure we have a remote connection.
|
||||
SELECT 1 FROM ft1 LIMIT 1;
|
||||
?column?
|
||||
----------
|
||||
@ -9227,9 +9233,8 @@ SELECT 1 FROM ft1 LIMIT 1;
|
||||
1
|
||||
(1 row)
|
||||
|
||||
-- If the query detects the broken connection when starting new remote
|
||||
-- subtransaction, it doesn't reestablish new connection and should fail.
|
||||
-- The text of the error might vary across platforms, so don't show it.
|
||||
-- If we detect the broken connection when starting a new remote
|
||||
-- subtransaction, we should fail instead of establishing a new connection.
|
||||
-- Terminate the remote connection and wait for the termination to complete.
|
||||
SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity
|
||||
WHERE application_name = 'fdw_retry_check';
|
||||
@ -9239,11 +9244,13 @@ SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity
|
||||
(1 row)
|
||||
|
||||
SAVEPOINT s;
|
||||
-- The text of the error might vary across platforms, so only show SQLSTATE.
|
||||
\set VERBOSITY sqlstate
|
||||
SELECT 1 FROM ft1 LIMIT 1; -- should fail
|
||||
ERROR: 08006
|
||||
\set VERBOSITY default
|
||||
COMMIT;
|
||||
RESET debug_invalidate_system_caches_always;
|
||||
-- =============================================================================
|
||||
-- test connection invalidation cases and postgres_fdw_get_connections function
|
||||
-- =============================================================================
|
||||
|
@ -2795,6 +2795,14 @@ ROLLBACK;
|
||||
-- Change application_name of remote connection to special one
|
||||
-- so that we can easily terminate the connection later.
|
||||
ALTER SERVER loopback OPTIONS (application_name 'fdw_retry_check');
|
||||
|
||||
-- If debug_invalidate_system_caches_always is active, it results in
|
||||
-- dropping remote connections after every transaction, making it
|
||||
-- impossible to test termination meaningfully. So turn that off
|
||||
-- for this test.
|
||||
SET debug_invalidate_system_caches_always = 0;
|
||||
|
||||
-- Make sure we have a remote connection.
|
||||
SELECT 1 FROM ft1 LIMIT 1;
|
||||
|
||||
-- Terminate the remote connection and wait for the termination to complete.
|
||||
@ -2806,18 +2814,20 @@ SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity
|
||||
BEGIN;
|
||||
SELECT 1 FROM ft1 LIMIT 1;
|
||||
|
||||
-- If the query detects the broken connection when starting new remote
|
||||
-- subtransaction, it doesn't reestablish new connection and should fail.
|
||||
-- The text of the error might vary across platforms, so don't show it.
|
||||
-- If we detect the broken connection when starting a new remote
|
||||
-- subtransaction, we should fail instead of establishing a new connection.
|
||||
-- Terminate the remote connection and wait for the termination to complete.
|
||||
SELECT pg_terminate_backend(pid, 180000) FROM pg_stat_activity
|
||||
WHERE application_name = 'fdw_retry_check';
|
||||
SAVEPOINT s;
|
||||
-- The text of the error might vary across platforms, so only show SQLSTATE.
|
||||
\set VERBOSITY sqlstate
|
||||
SELECT 1 FROM ft1 LIMIT 1; -- should fail
|
||||
\set VERBOSITY default
|
||||
COMMIT;
|
||||
|
||||
RESET debug_invalidate_system_caches_always;
|
||||
|
||||
-- =============================================================================
|
||||
-- test connection invalidation cases and postgres_fdw_get_connections function
|
||||
-- =============================================================================
|
||||
|
Loading…
x
Reference in New Issue
Block a user