Skip to content
Snippets Groups Projects
Commit cbd13339 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Improved job phase triggers

parent e2f766db
No related branches found
No related tags found
No related merge requests found
...@@ -73,25 +73,41 @@ $func$ LANGUAGE sql; ...@@ -73,25 +73,41 @@ $func$ LANGUAGE sql;
-- Trigger function that automatically updates start time and end time of jobs at phase update. -- Trigger function that automatically updates start time and end time of jobs at phase update.
-- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity. -- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity.
CREATE OR REPLACE FUNCTION job_phase_inserted() RETURNS TRIGGER
AS
$func$
BEGIN
IF new.phase = 'EXECUTING' THEN
new.start_time := NOW();
ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' THEN
new.start_time := NOW();
new.end_time := NOW();
END IF;
RETURN new;
END;
$func$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER
AS AS
$func$ $func$
BEGIN BEGIN
IF new.phase != old.phase THEN
IF new.phase = 'EXECUTING' THEN IF new.phase = 'EXECUTING' THEN
new.start_time := NOW(); new.start_time := NOW();
ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN
new.end_time := NOW(); new.end_time := NOW();
END IF; END IF;
END IF;
RETURN new; RETURN new;
END; END;
$func$ LANGUAGE plpgsql; $func$ LANGUAGE plpgsql;
CREATE TRIGGER job_update
BEFORE UPDATE OF phase ON job
FOR EACH ROW
EXECUTE PROCEDURE job_phase_updated();
CREATE TRIGGER job_insert CREATE TRIGGER job_insert
BEFORE INSERT ON job BEFORE INSERT ON job
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE job_phase_inserted();
CREATE TRIGGER job_update
BEFORE UPDATE OF phase ON job
FOR EACH ROW
EXECUTE PROCEDURE job_phase_updated(); EXECUTE PROCEDURE job_phase_updated();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment