Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
mysql: Add trigger to update mxq_daemon if job is started/finished
  • Loading branch information
mariux committed Nov 20, 2015
1 parent a0d1513 commit 4d9d4cf
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions mysql/create_trigger.sql
Expand Up @@ -47,19 +47,43 @@ DROP TRIGGER IF EXISTS mxq_update_job|
CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job
FOR EACH ROW BEGIN
IF NEW.job_status != OLD.job_status THEN
-- INQ(0) | ASSIGNED(100) -> LOADED(150) | RUNNING(200)
IF NEW.job_status IN (150, 200) AND OLD.job_status IN (0, 100) THEN
IF NEW.daemon_id != 0 THEN
UPDATE mxq_daemon SET
daemon_slots_running = daemon_slots_running + NEW.host_slots,
daemon_jobs_running = daemon_jobs_running + 1
WHERE daemon_id = NEW.daemon_id;
END IF;
UPDATE mxq_group SET
group_jobs_inq=group_jobs_inq-1,
group_jobs_running=group_jobs_running+1,
group_slots_running=group_slots_running+NEW.host_slots,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- LOADED(150) -> RUNNING(200)
ELSEIF NEW.job_status = 200 AND OLD.job_status = 150 THEN
UPDATE mxq_group SET
group_slots_running=group_slots_running-OLD.host_slots+NEW.host_slots,
group_mtime=NULL
WHERE group_id=NEW.group_id;
IF OLD.host_slots != NEW.host_slots THEN
IF NEW.daemon_id != 0 THEN
UPDATE mxq_daemon SET
daemon_slots_running = daemon_slots_running + NEW.host_slots - OLD.host_slots
WHERE daemon_id = NEW.daemon_id;
END IF;
END IF;
-- LOADED(150) | RUNNING(200) | UNKNOWN_RUN(250) | EXTRUNNING(300) | STOPPED(350) | KILLING(399) -> KILLED(400) | FAILED(750)
ELSEIF NEW.job_status IN (400, 750) AND OLD.job_status IN (150, 200, 250, 300, 350, 399) THEN
IF NEW.daemon_id != 0 THEN
UPDATE mxq_daemon SET
daemon_slots_running = daemon_slots_running - NEW.host_slots,
daemon_jobs_running = daemon_jobs_running - 1
WHERE daemon_id = NEW.daemon_id
AND daemon_slots_running >= NEW.host_slots
AND daemon_jobs_running >= 1;
END IF;
UPDATE mxq_group SET
group_slots_running=group_slots_running-NEW.host_slots,
group_jobs_running=group_jobs_running-1,
Expand All @@ -74,6 +98,7 @@ CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job
stats_total_real_sec=stats_total_real_sec+NEW.stats_real_sec,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- INQ(0) | ASSIGNED(100) | CANCELLING(989) -> CANCELLED(990)
ELSEIF NEW.job_status = 990 AND OLD.job_status IN (0, 100, 989) THEN
SET NEW.date_start = NOW();
SET NEW.date_end = NEW.date_start;
Expand All @@ -82,20 +107,39 @@ CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job
group_jobs_cancelled=group_jobs_cancelled+1,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- LOADED(150) | RUNNING(200) | UNKNOWN_RUN(250) | KILLING(399) -> UNKNOWN(999)
ELSEIF NEW.job_status = 999 AND OLD.job_status IN (150, 200, 250, 399) THEN
IF NEW.daemon_id != 0 THEN
UPDATE mxq_daemon SET
daemon_slots_running = daemon_slots_running - NEW.host_slots,
daemon_jobs_running = daemon_jobs_running - 1
WHERE daemon_id = NEW.daemon_id
AND daemon_slots_running >= NEW.host_slots
AND daemon_jobs_running >= 1;
END IF;
UPDATE mxq_group SET
group_slots_running=group_slots_running-NEW.host_slots,
group_jobs_running=group_jobs_running-1,
group_jobs_unknown=group_jobs_unknown+1,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- UNKNOWN(999) -> KILLED(400) | FAILED(750) | UNKNWON_PRE(755)
ELSEIF NEW.job_status = 999 AND OLD.job_status IN (400, 750, 755) THEN
UPDATE mxq_group SET
group_jobs_failed=group_jobs_failed-1,
group_jobs_unknown=group_jobs_unknown+1,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- LOADED(150) | RUNNING(200) | UNKNOWN_RUN(250) | EXTRUNNING(300) | STOPPED(350) | KILLING(399) -> FINISHED(1000)
ELSEIF NEW.job_status = 1000 AND OLD.job_status IN (150, 200, 250, 300, 350, 399) THEN
IF NEW.daemon_id != 0 THEN
UPDATE mxq_daemon SET
daemon_slots_running = daemon_slots_running - NEW.host_slots,
daemon_jobs_running = daemon_jobs_running - 1
WHERE daemon_id = NEW.daemon_id
AND daemon_slots_running >= NEW.host_slots
AND daemon_jobs_running >= 1;
END IF;
UPDATE mxq_group SET
group_slots_running=group_slots_running-NEW.host_slots,
group_jobs_running=group_jobs_running-1,
Expand All @@ -113,6 +157,7 @@ CREATE TRIGGER mxq_update_job BEFORE UPDATE ON mxq_job
stats_total_real_sec_finished=stats_total_real_sec_finished+NEW.stats_real_sec,
group_mtime=NULL
WHERE group_id=NEW.group_id;
-- * -> NOT IN [ KILLING(399) | UNKNOWN_PRE(755) | CANCELLING(989) | CANCELLED(990) ]
ELSEIF NEW.job_status NOT IN (399, 755, 989, 990) THEN
UPDATE mxq_group SET
stats_max_sumrss=GREATEST(stats_max_sumrss, NEW.stats_max_sumrss),
Expand Down

0 comments on commit 4d9d4cf

Please sign in to comment.