Skip to content

Commit 7b47548

Browse files
authored
[Cuebot][DB] Add history control (#1058)
* Disable to update history tables if DISABLE_HISTORY config exists * Bump up version * Add history control unittests * Delete history for CI
1 parent 1ed72ad commit 7b47548

File tree

2 files changed

+595
-0
lines changed

2 files changed

+595
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,397 @@
1+
-- Add history control
2+
3+
CREATE OR REPLACE FUNCTION trigger__after_insert_job()
4+
RETURNS TRIGGER AS $body$
5+
BEGIN
6+
INSERT INTO job_stat (pk_job_stat,pk_job) VALUES(NEW.pk_job,NEW.pk_job);
7+
INSERT INTO job_resource (pk_job_resource,pk_job) VALUES(NEW.pk_job,NEW.pk_job);
8+
INSERT INTO job_usage (pk_job_usage,pk_job) VALUES(NEW.pk_job,NEW.pk_job);
9+
INSERT INTO job_mem (pk_job_mem,pk_job) VALUES (NEW.pk_job,NEW.pk_job);
10+
11+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
12+
13+
INSERT INTO job_history
14+
(pk_job, pk_show, pk_facility, pk_dept, str_name, str_shot, str_user, int_ts_started)
15+
VALUES
16+
(NEW.pk_job, NEW.pk_show, NEW.pk_facility, NEW.pk_dept,
17+
NEW.str_name, NEW.str_shot, NEW.str_user, epoch(current_timestamp));
18+
19+
END IF;
20+
21+
RETURN NULL;
22+
END;
23+
$body$
24+
LANGUAGE PLPGSQL;
25+
26+
27+
CREATE OR REPLACE FUNCTION trigger__before_delete_job()
28+
RETURNS TRIGGER AS $body$
29+
DECLARE
30+
js JobStatType;
31+
BEGIN
32+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
33+
34+
SELECT
35+
job_usage.int_core_time_success,
36+
job_usage.int_core_time_fail,
37+
job_usage.int_gpu_time_success,
38+
job_usage.int_gpu_time_fail,
39+
job_stat.int_waiting_count,
40+
job_stat.int_dead_count,
41+
job_stat.int_depend_count,
42+
job_stat.int_eaten_count,
43+
job_stat.int_succeeded_count,
44+
job_stat.int_running_count,
45+
job_mem.int_max_rss,
46+
job_mem.int_gpu_mem_max
47+
INTO
48+
js
49+
FROM
50+
job_mem,
51+
job_usage,
52+
job_stat
53+
WHERE
54+
job_usage.pk_job = job_mem.pk_job
55+
AND
56+
job_stat.pk_job = job_mem.pk_job
57+
AND
58+
job_mem.pk_job = OLD.pk_job;
59+
60+
UPDATE
61+
job_history
62+
SET
63+
pk_dept = OLD.pk_dept,
64+
int_core_time_success = js.int_core_time_success,
65+
int_core_time_fail = js.int_core_time_fail,
66+
int_gpu_time_success = js.int_gpu_time_success,
67+
int_gpu_time_fail = js.int_gpu_time_fail,
68+
int_frame_count = OLD.int_frame_count,
69+
int_layer_count = OLD.int_layer_count,
70+
int_waiting_count = js.int_waiting_count,
71+
int_dead_count = js.int_dead_count,
72+
int_depend_count = js.int_depend_count,
73+
int_eaten_count = js.int_eaten_count,
74+
int_succeeded_count = js.int_succeeded_count,
75+
int_running_count = js.int_running_count,
76+
int_max_rss = js.int_max_rss,
77+
int_gpu_mem_max = js.int_gpu_mem_max,
78+
b_archived = true,
79+
int_ts_stopped = COALESCE(epoch(OLD.ts_stopped), epoch(current_timestamp))
80+
WHERE
81+
pk_job = OLD.pk_job;
82+
83+
END IF;
84+
85+
DELETE FROM depend WHERE pk_job_depend_on=OLD.pk_job OR pk_job_depend_er=OLD.pk_job;
86+
DELETE FROM frame WHERE pk_job=OLD.pk_job;
87+
DELETE FROM layer WHERE pk_job=OLD.pk_job;
88+
DELETE FROM job_env WHERE pk_job=OLD.pk_job;
89+
DELETE FROM job_stat WHERE pk_job=OLD.pk_job;
90+
DELETE FROM job_resource WHERE pk_job=OLD.pk_job;
91+
DELETE FROM job_usage WHERE pk_job=OLD.pk_job;
92+
DELETE FROM job_mem WHERE pk_job=OLD.pk_job;
93+
DELETE FROM comments WHERE pk_job=OLD.pk_job;
94+
95+
RETURN OLD;
96+
END
97+
$body$
98+
LANGUAGE PLPGSQL;
99+
100+
101+
CREATE OR REPLACE FUNCTION trigger__after_job_finished()
102+
RETURNS TRIGGER AS $body$
103+
DECLARE
104+
ts INT := cast(epoch(current_timestamp) as integer);
105+
js JobStatType;
106+
ls LayerStatType;
107+
one_layer RECORD;
108+
BEGIN
109+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
110+
111+
SELECT
112+
job_usage.int_core_time_success,
113+
job_usage.int_core_time_fail,
114+
job_usage.int_gpu_time_success,
115+
job_usage.int_gpu_time_fail,
116+
job_stat.int_waiting_count,
117+
job_stat.int_dead_count,
118+
job_stat.int_depend_count,
119+
job_stat.int_eaten_count,
120+
job_stat.int_succeeded_count,
121+
job_stat.int_running_count,
122+
job_mem.int_max_rss,
123+
job_mem.int_gpu_mem_max
124+
INTO
125+
js
126+
FROM
127+
job_mem,
128+
job_usage,
129+
job_stat
130+
WHERE
131+
job_usage.pk_job = job_mem.pk_job
132+
AND
133+
job_stat.pk_job = job_mem.pk_job
134+
AND
135+
job_mem.pk_job = NEW.pk_job;
136+
137+
UPDATE
138+
job_history
139+
SET
140+
pk_dept = NEW.pk_dept,
141+
int_core_time_success = js.int_core_time_success,
142+
int_core_time_fail = js.int_core_time_fail,
143+
int_gpu_time_success = js.int_gpu_time_success,
144+
int_gpu_time_fail = js.int_gpu_time_fail,
145+
int_frame_count = NEW.int_frame_count,
146+
int_layer_count = NEW.int_layer_count,
147+
int_waiting_count = js.int_waiting_count,
148+
int_dead_count = js.int_dead_count,
149+
int_depend_count = js.int_depend_count,
150+
int_eaten_count = js.int_eaten_count,
151+
int_succeeded_count = js.int_succeeded_count,
152+
int_running_count = js.int_running_count,
153+
int_max_rss = js.int_max_rss,
154+
int_gpu_mem_max = js.int_gpu_mem_max,
155+
int_ts_stopped = ts
156+
WHERE
157+
pk_job = NEW.pk_job;
158+
159+
FOR one_layer IN (SELECT pk_layer from layer where pk_job = NEW.pk_job)
160+
LOOP
161+
SELECT
162+
layer_usage.int_core_time_success,
163+
layer_usage.int_core_time_fail,
164+
layer_usage.int_gpu_time_success,
165+
layer_usage.int_gpu_time_fail,
166+
layer_stat.int_total_count,
167+
layer_stat.int_waiting_count,
168+
layer_stat.int_dead_count,
169+
layer_stat.int_depend_count,
170+
layer_stat.int_eaten_count,
171+
layer_stat.int_succeeded_count,
172+
layer_stat.int_running_count,
173+
layer_mem.int_max_rss,
174+
layer_mem.int_gpu_mem_max
175+
INTO
176+
ls
177+
FROM
178+
layer_mem,
179+
layer_usage,
180+
layer_stat
181+
WHERE
182+
layer_usage.pk_layer = layer_mem.pk_layer
183+
AND
184+
layer_stat.pk_layer = layer_mem.pk_layer
185+
AND
186+
layer_mem.pk_layer = one_layer.pk_layer;
187+
188+
UPDATE
189+
layer_history
190+
SET
191+
int_core_time_success = ls.int_core_time_success,
192+
int_core_time_fail = ls.int_core_time_fail,
193+
int_gpu_time_success = ls.int_gpu_time_success,
194+
int_gpu_time_fail = ls.int_gpu_time_fail,
195+
int_frame_count = ls.int_total_count,
196+
int_waiting_count = ls.int_waiting_count,
197+
int_dead_count = ls.int_dead_count,
198+
int_depend_count = ls.int_depend_count,
199+
int_eaten_count = ls.int_eaten_count,
200+
int_succeeded_count = ls.int_succeeded_count,
201+
int_running_count = ls.int_running_count,
202+
int_max_rss = ls.int_max_rss,
203+
int_gpu_mem_max = ls.int_gpu_mem_max
204+
WHERE
205+
pk_layer = one_layer.pk_layer;
206+
END LOOP;
207+
208+
END IF;
209+
210+
/**
211+
* Delete any local core assignments from this job.
212+
**/
213+
DELETE FROM job_local WHERE pk_job=NEW.pk_job;
214+
215+
RETURN NEW;
216+
END;
217+
$body$
218+
LANGUAGE PLPGSQL;
219+
220+
221+
CREATE OR REPLACE FUNCTION trigger__after_insert_layer()
222+
RETURNS TRIGGER AS $body$
223+
BEGIN
224+
INSERT INTO layer_stat (pk_layer_stat, pk_layer, pk_job) VALUES (NEW.pk_layer, NEW.pk_layer, NEW.pk_job);
225+
INSERT INTO layer_resource (pk_layer_resource, pk_layer, pk_job) VALUES (NEW.pk_layer, NEW.pk_layer, NEW.pk_job);
226+
INSERT INTO layer_usage (pk_layer_usage, pk_layer, pk_job) VALUES (NEW.pk_layer, NEW.pk_layer, NEW.pk_job);
227+
INSERT INTO layer_mem (pk_layer_mem, pk_layer, pk_job) VALUES (NEW.pk_layer, NEW.pk_layer, NEW.pk_job);
228+
229+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
230+
231+
INSERT INTO layer_history
232+
(pk_layer, pk_job, str_name, str_type, int_cores_min, int_mem_min, int_gpus_min, int_gpu_mem_min, b_archived,str_services)
233+
VALUES
234+
(NEW.pk_layer, NEW.pk_job, NEW.str_name, NEW.str_type, NEW.int_cores_min, NEW.int_mem_min, NEW.int_gpus_min, NEW.int_gpu_mem_min, false, NEW.str_services);
235+
236+
END IF;
237+
238+
RETURN NEW;
239+
END;
240+
$body$
241+
LANGUAGE PLPGSQL;
242+
243+
244+
CREATE OR REPLACE FUNCTION trigger__before_delete_layer()
245+
RETURNS TRIGGER AS $body$
246+
DECLARE
247+
js LayerStatType;
248+
BEGIN
249+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
250+
251+
SELECT
252+
layer_usage.int_core_time_success,
253+
layer_usage.int_core_time_fail,
254+
layer_usage.int_gpu_time_success,
255+
layer_usage.int_gpu_time_fail,
256+
layer_stat.int_total_count,
257+
layer_stat.int_waiting_count,
258+
layer_stat.int_dead_count,
259+
layer_stat.int_depend_count,
260+
layer_stat.int_eaten_count,
261+
layer_stat.int_succeeded_count,
262+
layer_stat.int_running_count,
263+
layer_mem.int_max_rss,
264+
layer_mem.int_gpu_mem_max
265+
INTO
266+
js
267+
FROM
268+
layer_mem,
269+
layer_usage,
270+
layer_stat
271+
WHERE
272+
layer_usage.pk_layer = layer_mem.pk_layer
273+
AND
274+
layer_stat.pk_layer = layer_mem.pk_layer
275+
AND
276+
layer_mem.pk_layer = OLD.pk_layer;
277+
278+
UPDATE
279+
layer_history
280+
SET
281+
int_core_time_success = js.int_core_time_success,
282+
int_core_time_fail = js.int_core_time_fail,
283+
int_gpu_time_success = js.int_gpu_time_success,
284+
int_gpu_time_fail = js.int_gpu_time_fail,
285+
int_frame_count = js.int_total_count,
286+
int_waiting_count = js.int_waiting_count,
287+
int_dead_count = js.int_dead_count,
288+
int_depend_count = js.int_depend_count,
289+
int_eaten_count = js.int_eaten_count,
290+
int_succeeded_count = js.int_succeeded_count,
291+
int_running_count = js.int_running_count,
292+
int_max_rss = js.int_max_rss,
293+
int_gpu_mem_max = js.int_gpu_mem_max,
294+
b_archived = true
295+
WHERE
296+
pk_layer = OLD.pk_layer;
297+
298+
END IF;
299+
300+
DELETE FROM layer_resource where pk_layer=OLD.pk_layer;
301+
DELETE FROM layer_stat where pk_layer=OLD.pk_layer;
302+
DELETE FROM layer_usage where pk_layer=OLD.pk_layer;
303+
DELETE FROM layer_env where pk_layer=OLD.pk_layer;
304+
DELETE FROM layer_mem where pk_layer=OLD.pk_layer;
305+
DELETE FROM layer_output where pk_layer=OLD.pk_layer;
306+
307+
RETURN OLD;
308+
END;
309+
$body$
310+
LANGUAGE PLPGSQL;
311+
312+
313+
CREATE OR REPLACE FUNCTION trigger__frame_history_open()
314+
RETURNS TRIGGER AS $body$
315+
DECLARE
316+
str_pk_alloc VARCHAR(36) := null;
317+
int_checkpoint INT := 0;
318+
BEGIN
319+
320+
IF NOT EXISTS (SELECT FROM config WHERE str_key='DISABLE_HISTORY') THEN
321+
322+
IF OLD.str_state = 'RUNNING' THEN
323+
324+
IF NEW.int_exit_status = 299 THEN
325+
326+
EXECUTE 'DELETE FROM frame_history WHERE int_ts_stopped = 0 AND pk_frame=$1' USING
327+
NEW.pk_frame;
328+
329+
ELSE
330+
If NEW.str_state = 'CHECKPOINT' THEN
331+
int_checkpoint := 1;
332+
END IF;
333+
334+
EXECUTE
335+
'UPDATE
336+
frame_history
337+
SET
338+
int_mem_max_used=$1,
339+
int_gpu_mem_max_used=$2,
340+
int_ts_stopped=$3,
341+
int_exit_status=$4,
342+
int_checkpoint_count=$5
343+
WHERE
344+
int_ts_stopped = 0 AND pk_frame=$6'
345+
USING
346+
NEW.int_mem_max_used,
347+
NEW.int_gpu_mem_max_used,
348+
epoch(current_timestamp),
349+
NEW.int_exit_status,
350+
int_checkpoint,
351+
NEW.pk_frame;
352+
END IF;
353+
END IF;
354+
355+
IF NEW.str_state = 'RUNNING' THEN
356+
357+
SELECT pk_alloc INTO str_pk_alloc FROM host WHERE str_name=NEW.str_host;
358+
359+
EXECUTE
360+
'INSERT INTO
361+
frame_history
362+
(
363+
pk_frame,
364+
pk_layer,
365+
pk_job,
366+
str_name,
367+
str_state,
368+
int_cores,
369+
int_mem_reserved,
370+
int_gpus,
371+
int_gpu_mem_reserved,
372+
str_host,
373+
int_ts_started,
374+
pk_alloc
375+
)
376+
VALUES
377+
($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)'
378+
USING NEW.pk_frame,
379+
NEW.pk_layer,
380+
NEW.pk_job,
381+
NEW.str_name,
382+
'RUNNING',
383+
NEW.int_cores,
384+
NEW.int_mem_reserved,
385+
NEW.int_gpus,
386+
NEW.int_gpu_mem_reserved,
387+
NEW.str_host,
388+
epoch(current_timestamp),
389+
str_pk_alloc;
390+
END IF;
391+
392+
END IF;
393+
RETURN NULL;
394+
395+
END;
396+
$body$
397+
LANGUAGE PLPGSQL;

0 commit comments

Comments
 (0)