– zombie checks ————————————————————–
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._set_job_zombie(
job_id BIGINT, p_fast_mode BOOLEAN) RETURNS VOID AS $$
DECLARE
p_worker_session_id UUID; session {SCHEMA_NAME}.worker_sessions;
BEGIN
SELECT * INTO session FROM {SCHEMA_NAME}.worker_sessions worker_sessions INNER JOIN {SCHEMA_NAME}.postjobs postjobs ON postjobs.last_worker_session_id=worker_sessions.id WHERE postjobs.id=job_id; p_worker_session_id := {SCHEMA_NAME}._null_uuid(); PERFORM {SCHEMA_NAME}._reset_job_processing(p_worker_session_id, job_id); -- write error info UPDATE {SCHEMA_NAME}.postjobs SET error='Zombie', error_message='host ' || session.host_id || ' disappeared', error_backtrace=NULL, failed_attempts=failed_attempts+1, next_run_at=NULL WHERE id=job_id; -- prepare next run, if any PERFORM {SCHEMA_NAME}._prepare_rerun(job_id, 'err', p_fast_mode); PERFORM {SCHEMA_NAME}._wakeup_parent_job(p_worker_session_id, job_id);
END; $$ LANGUAGE plpgsql;
– This method runs a zombie check. Its result is written into the database as – a 'zombie' event. A zombie check should only happen once per minute.