Fix a flaky test related with temp columnar table cleanup (#5599)

Wait until old backend to expire to make sure that temp table cleanup
is complete.
pull/5567/head
Onur Tirtir 2022-01-17 20:26:30 +03:00 committed by GitHub
parent e564220dd5
commit d98500ac22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 0 deletions

View File

@ -76,7 +76,16 @@ CREATE TEMPORARY TABLE columnar_temp(i int) USING columnar;
INSERT INTO columnar_temp SELECT i FROM generate_series(1,5) i;
SELECT columnar_test_helpers.columnar_relation_storageid(oid) AS columnar_temp_storage_id
FROM pg_class WHERE relname='columnar_temp' \gset
SELECT pg_backend_pid() AS val INTO old_backend_pid;
\c - - - :master_port
-- wait until old backend to expire to make sure that temp table cleanup is complete
SELECT columnar_test_helpers.pg_waitpid(val) FROM old_backend_pid;
pg_waitpid
---------------------------------------------------------------------
(1 row)
DROP TABLE old_backend_pid;
-- show that temporary table itself and it's metadata is removed
SELECT COUNT(*)=0 FROM pg_class WHERE relname='columnar_temp';
?column?

View File

@ -118,3 +118,11 @@ BEGIN
END LOOP;
RETURN false;
END; $$ language plpgsql;
CREATE OR REPLACE FUNCTION pg_waitpid(p_pid integer)
RETURNS VOID AS $$
BEGIN
WHILE EXISTS (SELECT * FROM pg_stat_activity WHERE pid=p_pid)
LOOP
PERFORM pg_sleep(0.001);
END LOOP;
END; $$ language plpgsql;

View File

@ -63,8 +63,15 @@ INSERT INTO columnar_temp SELECT i FROM generate_series(1,5) i;
SELECT columnar_test_helpers.columnar_relation_storageid(oid) AS columnar_temp_storage_id
FROM pg_class WHERE relname='columnar_temp' \gset
SELECT pg_backend_pid() AS val INTO old_backend_pid;
\c - - - :master_port
-- wait until old backend to expire to make sure that temp table cleanup is complete
SELECT columnar_test_helpers.pg_waitpid(val) FROM old_backend_pid;
DROP TABLE old_backend_pid;
-- show that temporary table itself and it's metadata is removed
SELECT COUNT(*)=0 FROM pg_class WHERE relname='columnar_temp';
SELECT columnar_test_helpers.columnar_metadata_has_storage_id(:columnar_temp_storage_id);

View File

@ -128,3 +128,12 @@ BEGIN
END LOOP;
RETURN false;
END; $$ language plpgsql;
CREATE OR REPLACE FUNCTION pg_waitpid(p_pid integer)
RETURNS VOID AS $$
BEGIN
WHILE EXISTS (SELECT * FROM pg_stat_activity WHERE pid=p_pid)
LOOP
PERFORM pg_sleep(0.001);
END LOOP;
END; $$ language plpgsql;