– 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.