Fix flakiness in multi_maintenance_multiple_databases.sql

pull/7286/head
ivyazmitinov 2024-02-12 12:05:52 +01:00
parent 37198369cd
commit 5b2c297ca4
2 changed files with 50 additions and 35 deletions

View File

@ -256,22 +256,15 @@ WHERE state = 'idle'
\c - - - :master_port \c - - - :master_port
-- Let maintenance do it's work... -- Let maintenance do it's work...
SELECT pg_sleep_for('10 seconds'::interval); DO
pg_sleep_for $$
--------------------------------------------------------------------- BEGIN
FOR i IN 0 .. 300
(1 row) LOOP
IF i = 300 THEN RAISE 'Waited too long'; END IF;
-- Verify maintenance result PERFORM pg_stat_clear_snapshot();
SELECT count(*) = 0 AS too_many_clients_test PERFORM * FROM pg_stat_activity WHERE application_name = 'Citus Maintenance Daemon';
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line) IF (SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test
WHERE log_line LIKE '%sorry, too many clients already%';
too_many_clients_test
---------------------------------------------------------------------
t
(1 row)
SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test
FROM pg_database, FROM pg_database,
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname, dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
(SELECT setting::int FROM pg_settings WHERE name = 'port')), (SELECT setting::int FROM pg_settings WHERE name = 'port')),
@ -281,8 +274,18 @@ FROM pg_database,
WHERE gid LIKE 'citus_0_1234_4_0_%' WHERE gid LIKE 'citus_0_1234_4_0_%'
OR gid LIKE 'citus_0_should_be_forgotten_%' OR gid LIKE 'citus_0_should_be_forgotten_%'
$statement$) AS t(groupid integer, gid text) $statement$) AS t(groupid integer, gid text)
WHERE datname LIKE 'db%'; WHERE datname LIKE 'db%') THEN
pg_dist_transaction_after_recovery_coordinator_test EXIT;
END IF;
PERFORM pg_sleep_for('1 SECOND'::interval);
END LOOP;
END
$$;
-- Verify maintenance result
SELECT count(*) = 0 AS too_many_clients_test
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line)
WHERE log_line LIKE '%sorry, too many clients already%';
too_many_clients_test
--------------------------------------------------------------------- ---------------------------------------------------------------------
t t
(1 row) (1 row)

View File

@ -222,15 +222,15 @@ WHERE state = 'idle'
-- Let maintenance do it's work... -- Let maintenance do it's work...
SELECT pg_sleep_for('10 seconds'::interval); DO
$$
-- Verify maintenance result BEGIN
FOR i IN 0 .. 300
SELECT count(*) = 0 AS too_many_clients_test LOOP
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line) IF i = 300 THEN RAISE 'Waited too long'; END IF;
WHERE log_line LIKE '%sorry, too many clients already%'; PERFORM pg_stat_clear_snapshot();
PERFORM * FROM pg_stat_activity WHERE application_name = 'Citus Maintenance Daemon';
SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test IF (SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test
FROM pg_database, FROM pg_database,
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname, dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
(SELECT setting::int FROM pg_settings WHERE name = 'port')), (SELECT setting::int FROM pg_settings WHERE name = 'port')),
@ -240,7 +240,19 @@ FROM pg_database,
WHERE gid LIKE 'citus_0_1234_4_0_%' WHERE gid LIKE 'citus_0_1234_4_0_%'
OR gid LIKE 'citus_0_should_be_forgotten_%' OR gid LIKE 'citus_0_should_be_forgotten_%'
$statement$) AS t(groupid integer, gid text) $statement$) AS t(groupid integer, gid text)
WHERE datname LIKE 'db%'; WHERE datname LIKE 'db%') THEN
EXIT;
END IF;
PERFORM pg_sleep_for('1 SECOND'::interval);
END LOOP;
END
$$;
-- Verify maintenance result
SELECT count(*) = 0 AS too_many_clients_test
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line)
WHERE log_line LIKE '%sorry, too many clients already%';
SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test
FROM pg_stat_activity FROM pg_stat_activity