Improve isolation block detection

enable-progress-monitor-isolation-tests-again-flaky3
Jelte Fennema 2022-10-07 12:08:40 +02:00
parent e25a1c49be
commit cb5acb8f63
3 changed files with 15 additions and 6 deletions

View File

@ -1,8 +1,8 @@
CREATE FUNCTION pg_catalog.citus_backend_gpid()
CREATE FUNCTION pg_catalog.citus_backend_gpid(pid int default NULL)
RETURNS BIGINT
LANGUAGE C STRICT
LANGUAGE C
AS 'MODULE_PATHNAME',$$citus_backend_gpid$$;
COMMENT ON FUNCTION pg_catalog.citus_backend_gpid()
COMMENT ON FUNCTION pg_catalog.citus_backend_gpid(int)
IS 'returns gpid of the current backend';
GRANT EXECUTE ON FUNCTION pg_catalog.citus_backend_gpid() TO PUBLIC;
GRANT EXECUTE ON FUNCTION pg_catalog.citus_backend_gpid(int) TO PUBLIC;

View File

@ -24,14 +24,16 @@ RETURNS boolean AS $$
FROM get_all_active_transactions() WHERE process_id = pBlockedPid;
END IF;
FOR r IN select a1.query blocking_query, a2.query waiting_query from citus_internal_global_blocked_processes() p join pg_stat_activity a1 on p.blocking_pid = a1.pid join pg_stat_activity a2 on p.waiting_pid = a2.pid WHERE waiting_global_pid = mBlockedGlobalPid
RAISE WARNING E'DETECTING BLOCKS FOR %', mBlockedGlobalPid;
FOR r IN select p.blocking_global_pid, a1.query blocking_query, p.waiting_global_pid, a2.query waiting_query from citus_internal_global_blocked_processes() p join pg_stat_activity a1 on p.blocking_pid = a1.pid join pg_stat_activity a2 on p.waiting_pid = a2.pid WHERE waiting_global_pid = mBlockedGlobalPid
LOOP
RAISE WARNING E'%\nBLOCKS\n%', r.blocking_query, r.waiting_query;
RAISE WARNING E'GPID: % %\nBLOCKS\nGPID: % %', r.blocking_global_pid, r.blocking_query, r.waiting_global_pid, r.waiting_query;
END LOOP;
RETURN EXISTS (
SELECT 1 FROM citus_internal_global_blocked_processes()
WHERE waiting_global_pid = mBlockedGlobalPid
AND blocking_global_pid in (SELECT citus_backend_gpid(pid) FROM unnest(pInterestingPids) pid)
);
END;
$$ LANGUAGE plpgsql;

View File

@ -4,6 +4,7 @@ RETURNS boolean AS $$
mBlockedGlobalPid int8;
workerProcessId integer := current_setting('citus.isolation_test_session_remote_process_id');
coordinatorProcessId integer := current_setting('citus.isolation_test_session_process_id');
r record;
BEGIN
IF pg_catalog.old_pg_isolation_test_session_is_blocked(pBlockedPid, pInterestingPids) THEN
RETURN true;
@ -23,6 +24,12 @@ RETURNS boolean AS $$
FROM get_all_active_transactions() WHERE process_id = pBlockedPid;
END IF;
RAISE WARNING E'DETECTING BLOCKS FOR %', mBlockedGlobalPid;
FOR r IN select p.blocking_global_pid, a1.query blocking_query, p.waiting_global_pid, a2.query waiting_query from citus_internal_global_blocked_processes() p join pg_stat_activity a1 on p.blocking_pid = a1.pid join pg_stat_activity a2 on p.waiting_pid = a2.pid
LOOP
RAISE WARNING E'GPID: % %\nBLOCKS\nGPID: % %', r.blocking_global_pid, r.blocking_query, r.waiting_global_pid, r.waiting_query;
END LOOP;
IF current_setting('citus.isolation_test_check_all_blocks') = 'off' THEN
RETURN EXISTS (
SELECT 1 FROM citus_internal_global_blocked_processes()