mirror of https://github.com/citusdata/citus.git
Improve isolation block detection
parent
e25a1c49be
commit
cb5acb8f63
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue