citus/src/test/regress/sql/multi_connection_cache.sql

89 lines
2.6 KiB
SQL

ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 410000;
ALTER SEQUENCE pg_catalog.pg_dist_jobid_seq RESTART 410000;
-- ===================================================================
-- create test functions
-- ===================================================================
CREATE FUNCTION initialize_remote_temp_table(cstring, integer)
RETURNS bool
AS 'citus'
LANGUAGE C STRICT;
CREATE FUNCTION count_remote_temp_table_rows(cstring, integer)
RETURNS integer
AS 'citus'
LANGUAGE C STRICT;
CREATE FUNCTION get_and_purge_connection(cstring, integer)
RETURNS bool
AS 'citus'
LANGUAGE C STRICT;
CREATE FUNCTION connect_and_purge_connection(cstring, integer)
RETURNS bool
AS 'citus'
LANGUAGE C STRICT;
CREATE FUNCTION set_connection_status_bad(cstring, integer)
RETURNS bool
AS 'citus'
LANGUAGE C STRICT;
-- ===================================================================
-- test connection hash functionality
-- ===================================================================
-- worker port number is set in pg_regress_multi.pl
\set worker_port 57638
-- reduce verbosity to squelch chatty warnings
\set VERBOSITY terse
-- connect to non-existent host
SELECT initialize_remote_temp_table('dummy-host-name', 12345);
\set VERBOSITY default
-- try to use hostname over 255 characters
SELECT initialize_remote_temp_table(repeat('a', 256)::cstring, :worker_port);
-- connect to localhost and build a temp table
SELECT initialize_remote_temp_table('localhost', :worker_port);
-- table should still be visible since session is reused
SELECT count_remote_temp_table_rows('localhost', :worker_port);
-- purge existing connection to localhost
SELECT get_and_purge_connection('localhost', :worker_port);
-- squelch WARNINGs that contain worker_port
SET client_min_messages TO ERROR;
-- should not be able to see table anymore
SELECT count_remote_temp_table_rows('localhost', :worker_port);
-- recreate once more
SELECT initialize_remote_temp_table('localhost', :worker_port);
-- set the connection status to bad
SELECT set_connection_status_bad('localhost', :worker_port);
-- should get connection failure (cached connection bad)
SELECT count_remote_temp_table_rows('localhost', :worker_port);
-- should get result failure (reconnected, so no temp table)
SELECT count_remote_temp_table_rows('localhost', :worker_port);
-- purge the connection so that we clean up the bad connection
SELECT get_and_purge_connection('localhost', :worker_port);
SET client_min_messages TO DEFAULT;
\c
-- purge existing connection to localhost
SELECT connect_and_purge_connection('localhost', :worker_port);