mirror of https://github.com/citusdata/citus.git
Fix flakiness in multi_maintenance_multiple_databases.sql x2
parent
5b2c297ca4
commit
10f4777aaf
|
@ -255,32 +255,6 @@ WHERE state = 'idle'
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
-- Let maintenance do it's work...
|
|
||||||
DO
|
|
||||||
$$
|
|
||||||
BEGIN
|
|
||||||
FOR i IN 0 .. 300
|
|
||||||
LOOP
|
|
||||||
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
|
||||||
PERFORM pg_stat_clear_snapshot();
|
|
||||||
PERFORM * FROM pg_stat_activity WHERE application_name = 'Citus Maintenance Daemon';
|
|
||||||
IF (SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test
|
|
||||||
FROM pg_database,
|
|
||||||
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
|
|
||||||
(SELECT setting::int FROM pg_settings WHERE name = 'port')),
|
|
||||||
$statement$
|
|
||||||
SELECT groupid, gid
|
|
||||||
FROM pg_dist_transaction
|
|
||||||
WHERE gid LIKE 'citus_0_1234_4_0_%'
|
|
||||||
OR gid LIKE 'citus_0_should_be_forgotten_%'
|
|
||||||
$statement$) AS t(groupid integer, gid text)
|
|
||||||
WHERE datname LIKE 'db%') THEN
|
|
||||||
EXIT;
|
|
||||||
END IF;
|
|
||||||
PERFORM pg_sleep_for('1 SECOND'::interval);
|
|
||||||
END LOOP;
|
|
||||||
END
|
|
||||||
$$;
|
|
||||||
-- Verify maintenance result
|
-- Verify maintenance result
|
||||||
SELECT count(*) = 0 AS too_many_clients_test
|
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)
|
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line)
|
||||||
|
@ -290,15 +264,43 @@ WHERE log_line LIKE '%sorry, too many clients already%';
|
||||||
t
|
t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
DECLARE
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
pg_dist_transaction_after_recovery_coordinator_test boolean;
|
||||||
cached_connections_after_recovery_coordinator_test
|
cached_connections_after_recovery_coordinator_test boolean;
|
||||||
---------------------------------------------------------------------
|
BEGIN
|
||||||
t
|
FOR i IN 0 .. 300
|
||||||
(1 row)
|
LOOP
|
||||||
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
|
SELECT count(*) = 0
|
||||||
|
FROM pg_database,
|
||||||
|
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
|
||||||
|
(SELECT setting::int FROM pg_settings WHERE name = 'port')),
|
||||||
|
$statement$
|
||||||
|
SELECT groupid, gid
|
||||||
|
FROM pg_dist_transaction
|
||||||
|
WHERE gid LIKE 'citus_0_1234_4_0_%'
|
||||||
|
OR gid LIKE 'citus_0_should_be_forgotten_%'
|
||||||
|
$statement$) AS t(groupid integer, gid text)
|
||||||
|
WHERE datname LIKE 'db%'
|
||||||
|
INTO pg_dist_transaction_after_recovery_coordinator_test;
|
||||||
|
|
||||||
|
SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval
|
||||||
|
INTO cached_connections_after_recovery_coordinator_test;
|
||||||
|
|
||||||
|
IF (pg_dist_transaction_after_recovery_coordinator_test
|
||||||
|
AND cached_connections_after_recovery_coordinator_test) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SELECT count(*) = 0 AS too_many_clients_test
|
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)
|
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line)
|
||||||
|
@ -317,15 +319,22 @@ WHERE gid LIKE 'citus_0_1234_4_0_%'
|
||||||
t
|
t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_worker_1_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
BEGIN
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
FOR i IN 0 .. 300
|
||||||
cached_connections_after_recovery_worker_1_test
|
LOOP
|
||||||
---------------------------------------------------------------------
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
t
|
IF (SELECT count(*) = 0 AS cached_connections_after_recovery_worker_1_test
|
||||||
(1 row)
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
\c - - - :worker_2_port
|
\c - - - :worker_2_port
|
||||||
SELECT count(*) = 0 AS too_many_clients_test
|
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)
|
FROM regexp_split_to_table(pg_read_file('../log/postmaster.log'), E'\n') AS t(log_line)
|
||||||
|
@ -344,15 +353,22 @@ WHERE gid LIKE 'citus_0_1234_4_0_%'
|
||||||
t
|
t
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_worker_2_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
BEGIN
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
FOR i IN 0 .. 300
|
||||||
cached_connections_after_recovery_worker_2_test
|
LOOP
|
||||||
---------------------------------------------------------------------
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
t
|
IF (SELECT count(*) = 0 AS cached_connections_after_recovery_worker_2_test
|
||||||
(1 row)
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
SELECT $definition$
|
SELECT $definition$
|
||||||
|
|
|
@ -220,44 +220,49 @@ WHERE state = 'idle'
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
|
||||||
-- Let maintenance do it's work...
|
|
||||||
|
|
||||||
DO
|
|
||||||
$$
|
|
||||||
BEGIN
|
|
||||||
FOR i IN 0 .. 300
|
|
||||||
LOOP
|
|
||||||
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
|
||||||
PERFORM pg_stat_clear_snapshot();
|
|
||||||
PERFORM * FROM pg_stat_activity WHERE application_name = 'Citus Maintenance Daemon';
|
|
||||||
IF (SELECT count(*) = 0 AS pg_dist_transaction_after_recovery_coordinator_test
|
|
||||||
FROM pg_database,
|
|
||||||
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
|
|
||||||
(SELECT setting::int FROM pg_settings WHERE name = 'port')),
|
|
||||||
$statement$
|
|
||||||
SELECT groupid, gid
|
|
||||||
FROM pg_dist_transaction
|
|
||||||
WHERE gid LIKE 'citus_0_1234_4_0_%'
|
|
||||||
OR gid LIKE 'citus_0_should_be_forgotten_%'
|
|
||||||
$statement$) AS t(groupid integer, gid text)
|
|
||||||
WHERE datname LIKE 'db%') THEN
|
|
||||||
EXIT;
|
|
||||||
END IF;
|
|
||||||
PERFORM pg_sleep_for('1 SECOND'::interval);
|
|
||||||
END LOOP;
|
|
||||||
END
|
|
||||||
$$;
|
|
||||||
|
|
||||||
-- Verify maintenance result
|
-- Verify maintenance result
|
||||||
|
|
||||||
SELECT count(*) = 0 AS too_many_clients_test
|
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)
|
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%';
|
WHERE log_line LIKE '%sorry, too many clients already%';
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
DECLARE
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
pg_dist_transaction_after_recovery_coordinator_test boolean;
|
||||||
|
cached_connections_after_recovery_coordinator_test boolean;
|
||||||
|
BEGIN
|
||||||
|
FOR i IN 0 .. 300
|
||||||
|
LOOP
|
||||||
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
|
SELECT count(*) = 0
|
||||||
|
FROM pg_database,
|
||||||
|
dblink(format('dbname=%s host=localhost port=%s user=postgres', datname,
|
||||||
|
(SELECT setting::int FROM pg_settings WHERE name = 'port')),
|
||||||
|
$statement$
|
||||||
|
SELECT groupid, gid
|
||||||
|
FROM pg_dist_transaction
|
||||||
|
WHERE gid LIKE 'citus_0_1234_4_0_%'
|
||||||
|
OR gid LIKE 'citus_0_should_be_forgotten_%'
|
||||||
|
$statement$) AS t(groupid integer, gid text)
|
||||||
|
WHERE datname LIKE 'db%'
|
||||||
|
INTO pg_dist_transaction_after_recovery_coordinator_test;
|
||||||
|
|
||||||
|
SELECT count(*) = 0 AS cached_connections_after_recovery_coordinator_test
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval
|
||||||
|
INTO cached_connections_after_recovery_coordinator_test;
|
||||||
|
|
||||||
|
IF (pg_dist_transaction_after_recovery_coordinator_test
|
||||||
|
AND cached_connections_after_recovery_coordinator_test) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
|
|
||||||
|
@ -270,10 +275,22 @@ FROM pg_prepared_xacts
|
||||||
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_%';
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_worker_1_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
BEGIN
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
FOR i IN 0 .. 300
|
||||||
|
LOOP
|
||||||
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
|
IF (SELECT count(*) = 0 AS cached_connections_after_recovery_worker_1_test
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
|
||||||
\c - - - :worker_2_port
|
\c - - - :worker_2_port
|
||||||
|
|
||||||
|
@ -286,11 +303,22 @@ FROM pg_prepared_xacts
|
||||||
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_%';
|
||||||
|
|
||||||
SELECT count(*) = 0 AS cached_connections_after_recovery_worker_2_test
|
DO
|
||||||
FROM pg_stat_activity
|
$$
|
||||||
WHERE state = 'idle'
|
BEGIN
|
||||||
AND now() - backend_start > '5 seconds'::interval;
|
FOR i IN 0 .. 300
|
||||||
|
LOOP
|
||||||
|
IF i = 300 THEN RAISE 'Waited too long'; END IF;
|
||||||
|
IF (SELECT count(*) = 0 AS cached_connections_after_recovery_worker_2_test
|
||||||
|
FROM pg_stat_activity
|
||||||
|
WHERE state = 'idle'
|
||||||
|
AND now() - backend_start > '5 seconds'::interval) THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
PERFORM pg_sleep_for('1 SECOND'::interval);
|
||||||
|
END LOOP;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
|
||||||
-- Cleanup
|
-- Cleanup
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue