postjob 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/postjob/migrations/005_helpers.sql +4 -4
- data/lib/postjob/migrations/006_enqueue.sql +4 -4
- data/lib/postjob/migrations/006a_processing.sql +2 -2
- data/lib/postjob/migrations/007_job_results.sql +24 -24
- data/lib/postjob/migrations/008_checkout_runnable.sql +8 -8
- data/lib/postjob/migrations/008a_childjobs.sql +6 -6
- data/lib/postjob/migrations/009_tokens.sql +2 -2
- data/lib/postjob/migrations.rb +2 -2
- data/lib/postjob/queue.rb +1 -3
- data/spec/postjob/run_spec.rb +2 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 375c8b8cb2b29ba963463113fa303d53374222fd
|
4
|
+
data.tar.gz: 5feceb4be5f5c97eba91caffd55f73d70469aa0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02cb7b0d90750a13f859c925fccb9fea90af194cd71efcff329be0aa9274195531e2c2892ebaa0a549bc66f470c648b848fab6c697781fc8273265c55ebf09ae
|
7
|
+
data.tar.gz: e663a86782d31c2c84e8039bd373103151fb38685b2973d362ddff5b6bd7dd15943c374ecbe94106c04c16d2519bb084556159418f8aa382442b73c52994674b
|
@@ -6,23 +6,23 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._wakeup_runners() RETURNS TRIGGER AS $$
|
|
6
6
|
$$ LANGUAGE plpgsql;
|
7
7
|
|
8
8
|
BEGIN;
|
9
|
-
DROP TRIGGER IF EXISTS _wakeup_runners ON {
|
9
|
+
DROP TRIGGER IF EXISTS _wakeup_runners ON {SCHEMA_NAME}.postjobs;
|
10
10
|
|
11
11
|
CREATE TRIGGER _wakeup_runners AFTER INSERT OR UPDATE
|
12
|
-
ON {
|
12
|
+
ON {SCHEMA_NAME}.postjobs
|
13
13
|
FOR EACH STATEMENT
|
14
14
|
EXECUTE PROCEDURE {SCHEMA_NAME}._wakeup_runners();
|
15
15
|
COMMIT;
|
16
16
|
|
17
17
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._wakeup_parent_job(job_id BIGINT) RETURNS VOID AS $$
|
18
18
|
BEGIN
|
19
|
-
UPDATE postjobs
|
19
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
20
20
|
SET
|
21
21
|
status='ready',
|
22
22
|
next_run_at=(now() at time zone 'utc'),
|
23
23
|
updated_at=(now() at time zone 'utc')
|
24
24
|
WHERE
|
25
25
|
status='sleep'
|
26
|
-
AND id=(SELECT parent_id FROM postjobs WHERE id=job_id);
|
26
|
+
AND id=(SELECT parent_id FROM {SCHEMA_NAME}.postjobs WHERE id=job_id);
|
27
27
|
END;
|
28
28
|
$$ LANGUAGE plpgsql;
|
@@ -31,14 +31,14 @@ AS $$
|
|
31
31
|
) RETURNING {SCHEMA_NAME}.postjobs.id INTO job_id;
|
32
32
|
|
33
33
|
-- fill in root_id and full_id ------------------------------------
|
34
|
-
UPDATE postjobs
|
34
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
35
35
|
SET
|
36
|
-
root_id=COALESCE((SELECT root_id FROM postjobs s WHERE s.id=postjobs.parent_id), id),
|
37
|
-
full_id=COALESCE((SELECT full_id FROM postjobs s WHERE s.id=postjobs.parent_id) || '.' || id, id::varchar)
|
36
|
+
root_id=COALESCE((SELECT root_id FROM {SCHEMA_NAME}.postjobs s WHERE s.id=postjobs.parent_id), id),
|
37
|
+
full_id=COALESCE((SELECT full_id FROM {SCHEMA_NAME}.postjobs s WHERE s.id=postjobs.parent_id) || '.' || id, id::varchar)
|
38
38
|
WHERE id=job_id;
|
39
39
|
|
40
40
|
-- return the job -------------------------------------------------
|
41
41
|
RETURN QUERY
|
42
|
-
SELECT * FROM postjobs WHERE id=job_id;
|
42
|
+
SELECT * FROM {SCHEMA_NAME}.postjobs WHERE id=job_id;
|
43
43
|
END;
|
44
44
|
$$ LANGUAGE plpgsql;
|
@@ -20,7 +20,7 @@ DECLARE
|
|
20
20
|
BEGIN
|
21
21
|
v_pid := pg_backend_pid();
|
22
22
|
|
23
|
-
UPDATE postjobs
|
23
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
24
24
|
SET
|
25
25
|
status='processing',
|
26
26
|
processing_client=(SELECT client_addr || ':' || client_port FROM pg_stat_activity WHERE pid = v_pid),
|
@@ -37,7 +37,7 @@ $$ LANGUAGE plpgsql;
|
|
37
37
|
|
38
38
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._reset_job_processing(job_id BIGINT) RETURNS VOID AS $$
|
39
39
|
BEGIN
|
40
|
-
UPDATE postjobs
|
40
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
41
41
|
SET
|
42
42
|
processing_client=NULL,
|
43
43
|
processing_client_identifier=NULL,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._update_job_version(job_id BIGINT, p_version VARCHAR) RETURNS VOID AS $$
|
2
2
|
BEGIN
|
3
3
|
IF p_version IS NOT NULL THEN
|
4
|
-
UPDATE postjobs
|
4
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
5
5
|
SET
|
6
6
|
workflow_version=p_version,
|
7
7
|
updated_at=(now() at time zone 'utc')
|
@@ -12,10 +12,10 @@ $$ LANGUAGE plpgsql;
|
|
12
12
|
|
13
13
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.set_job_result(job_id BIGINT, p_results JSONB, p_version VARCHAR) RETURNS VOID AS $$
|
14
14
|
BEGIN
|
15
|
-
PERFORM _update_job_version(job_id, p_version);
|
16
|
-
PERFORM _reset_job_processing(job_id);
|
15
|
+
PERFORM {SCHEMA_NAME}._update_job_version(job_id, p_version);
|
16
|
+
PERFORM {SCHEMA_NAME}._reset_job_processing(job_id);
|
17
17
|
|
18
|
-
UPDATE postjobs
|
18
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
19
19
|
SET
|
20
20
|
results=p_results,
|
21
21
|
error=NULL,
|
@@ -25,16 +25,16 @@ BEGIN
|
|
25
25
|
next_run_at=NULL
|
26
26
|
WHERE id=job_id;
|
27
27
|
|
28
|
-
PERFORM _wakeup_parent_job(job_id);
|
28
|
+
PERFORM {SCHEMA_NAME}._wakeup_parent_job(job_id);
|
29
29
|
END;
|
30
30
|
$$ LANGUAGE plpgsql;
|
31
31
|
|
32
32
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.set_job_pending(job_id BIGINT, p_version VARCHAR) RETURNS VOID AS $$
|
33
33
|
BEGIN
|
34
|
-
PERFORM _update_job_version(job_id, p_version);
|
35
|
-
PERFORM _reset_job_processing(job_id);
|
34
|
+
PERFORM {SCHEMA_NAME}._update_job_version(job_id, p_version);
|
35
|
+
PERFORM {SCHEMA_NAME}._reset_job_processing(job_id);
|
36
36
|
|
37
|
-
UPDATE postjobs
|
37
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
38
38
|
SET status='sleep', next_run_at=NULL
|
39
39
|
WHERE id=job_id;
|
40
40
|
END;
|
@@ -56,7 +56,7 @@ BEGIN
|
|
56
56
|
|
57
57
|
-- If this is a recoverable error we check if we have any remaining attempts.
|
58
58
|
IF p_status = 'err' THEN
|
59
|
-
IF (SELECT max_attempts - failed_attempts FROM postjobs WHERE id=job_id) > 0 THEN
|
59
|
+
IF (SELECT max_attempts - failed_attempts FROM {SCHEMA_NAME}.postjobs WHERE id=job_id) > 0 THEN
|
60
60
|
p_status = 'err';
|
61
61
|
ELSE
|
62
62
|
p_status = 'failed';
|
@@ -64,7 +64,7 @@ BEGIN
|
|
64
64
|
END IF;
|
65
65
|
|
66
66
|
-- set status, clear next_run_at
|
67
|
-
UPDATE postjobs
|
67
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
68
68
|
SET
|
69
69
|
status=p_status,
|
70
70
|
next_run_at=NULL
|
@@ -74,7 +74,7 @@ BEGIN
|
|
74
74
|
IF p_status != 'failed' AND p_status != 'timeout' THEN
|
75
75
|
next_run_at_basetime := CASE WHEN p_fast_mode THEN 0.01 ELSE 10 END;
|
76
76
|
|
77
|
-
UPDATE postjobs
|
77
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
78
78
|
SET
|
79
79
|
next_run_at=(now() at time zone 'utc') + next_run_at_basetime * pow(1.5, failed_attempts) * interval '1 second'
|
80
80
|
WHERE id=job_id;
|
@@ -91,11 +91,11 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.set_job_error(
|
|
91
91
|
p_version VARCHAR,
|
92
92
|
p_fast_mode BOOLEAN) RETURNS VOID AS $$
|
93
93
|
BEGIN
|
94
|
-
PERFORM _update_job_version(job_id, p_version);
|
95
|
-
PERFORM _reset_job_processing(job_id);
|
94
|
+
PERFORM {SCHEMA_NAME}._update_job_version(job_id, p_version);
|
95
|
+
PERFORM {SCHEMA_NAME}._reset_job_processing(job_id);
|
96
96
|
|
97
97
|
-- write error info
|
98
|
-
UPDATE postjobs
|
98
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
99
99
|
SET
|
100
100
|
error=p_error,
|
101
101
|
error_message=p_error_message,
|
@@ -105,8 +105,8 @@ BEGIN
|
|
105
105
|
WHERE id=job_id;
|
106
106
|
|
107
107
|
-- prepare next run, if any
|
108
|
-
PERFORM _prepare_next_run(job_id, p_status, p_fast_mode);
|
109
|
-
PERFORM _wakeup_parent_job(job_id);
|
108
|
+
PERFORM {SCHEMA_NAME}._prepare_next_run(job_id, p_status, p_fast_mode);
|
109
|
+
PERFORM {SCHEMA_NAME}._wakeup_parent_job(job_id);
|
110
110
|
END;
|
111
111
|
$$ LANGUAGE plpgsql;
|
112
112
|
|
@@ -114,10 +114,10 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._set_job_timeout(
|
|
114
114
|
job_id BIGINT,
|
115
115
|
p_fast_mode BOOLEAN) RETURNS VOID AS $$
|
116
116
|
BEGIN
|
117
|
-
PERFORM _reset_job_processing(job_id);
|
117
|
+
PERFORM {SCHEMA_NAME}._reset_job_processing(job_id);
|
118
118
|
|
119
119
|
-- write error info
|
120
|
-
UPDATE postjobs
|
120
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
121
121
|
SET
|
122
122
|
error='Timeout',
|
123
123
|
error_message='timeout',
|
@@ -127,8 +127,8 @@ BEGIN
|
|
127
127
|
WHERE id=job_id;
|
128
128
|
|
129
129
|
-- prepare next run, if any
|
130
|
-
PERFORM _prepare_next_run(job_id, 'timeout', p_fast_mode);
|
131
|
-
PERFORM _wakeup_parent_job(job_id);
|
130
|
+
PERFORM {SCHEMA_NAME}._prepare_next_run(job_id, 'timeout', p_fast_mode);
|
131
|
+
PERFORM {SCHEMA_NAME}._wakeup_parent_job(job_id);
|
132
132
|
END;
|
133
133
|
$$ LANGUAGE plpgsql;
|
134
134
|
|
@@ -136,12 +136,12 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}._set_job_zombie(
|
|
136
136
|
job_id BIGINT,
|
137
137
|
p_fast_mode BOOLEAN) RETURNS VOID AS $$
|
138
138
|
BEGIN
|
139
|
-
PERFORM _reset_job_processing(job_id);
|
139
|
+
PERFORM {SCHEMA_NAME}._reset_job_processing(job_id);
|
140
140
|
|
141
141
|
RAISE NOTICE 'job % is a zombie', job_id;
|
142
142
|
|
143
143
|
-- write error info
|
144
|
-
UPDATE postjobs
|
144
|
+
UPDATE {SCHEMA_NAME}.postjobs
|
145
145
|
SET
|
146
146
|
error='Zombie',
|
147
147
|
error_message='zombie',
|
@@ -151,7 +151,7 @@ BEGIN
|
|
151
151
|
WHERE id=job_id;
|
152
152
|
|
153
153
|
-- prepare next run, if any
|
154
|
-
PERFORM _prepare_next_run(job_id, 'err', p_fast_mode);
|
155
|
-
PERFORM _wakeup_parent_job(job_id);
|
154
|
+
PERFORM {SCHEMA_NAME}._prepare_next_run(job_id, 'err', p_fast_mode);
|
155
|
+
PERFORM {SCHEMA_NAME}._wakeup_parent_job(job_id);
|
156
156
|
END;
|
157
157
|
$$ LANGUAGE plpgsql;
|
@@ -6,15 +6,15 @@ DECLARE
|
|
6
6
|
BEGIN
|
7
7
|
SELECT MIN(processable_at) INTO p_processable_at FROM (
|
8
8
|
SELECT MIN(processing_started_at + processing_max_duration * interval '1 second') AS processable_at
|
9
|
-
FROM {
|
9
|
+
FROM {SCHEMA_NAME}.postjobs
|
10
10
|
WHERE status IN ('processing')
|
11
11
|
UNION
|
12
12
|
SELECT MIN(timing_out_at) AS processable_at
|
13
|
-
FROM {
|
13
|
+
FROM {SCHEMA_NAME}.postjobs
|
14
14
|
WHERE status IN ('ready', 'err', 'sleep')
|
15
15
|
UNION
|
16
16
|
SELECT MIN(next_run_at) AS processable_at
|
17
|
-
FROM {
|
17
|
+
FROM {SCHEMA_NAME}.postjobs
|
18
18
|
WHERE status IN ('ready', 'err')
|
19
19
|
AND workflow || workflow_version = ANY ($1)
|
20
20
|
) sq;
|
@@ -24,16 +24,16 @@ END;
|
|
24
24
|
$$ LANGUAGE plpgsql;
|
25
25
|
|
26
26
|
CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.checkout(workflows_with_versions varchar[], p_fast_mode BOOLEAN)
|
27
|
-
RETURNS SETOF {
|
27
|
+
RETURNS SETOF {SCHEMA_NAME}.postjobs
|
28
28
|
AS $$
|
29
29
|
DECLARE
|
30
|
-
job {
|
30
|
+
job {SCHEMA_NAME}.postjobs;
|
31
31
|
BEGIN
|
32
32
|
LOOP
|
33
33
|
-- try to checkout a job. Each of the conditions here is matching
|
34
34
|
-- one of the CASE .. WHEN clauses below.
|
35
35
|
SELECT INTO job *
|
36
|
-
FROM {
|
36
|
+
FROM {SCHEMA_NAME}.postjobs s
|
37
37
|
WHERE
|
38
38
|
(
|
39
39
|
s.status IN ('processing')
|
@@ -69,8 +69,8 @@ BEGIN
|
|
69
69
|
CONTINUE;
|
70
70
|
ELSE
|
71
71
|
-- set job to processing
|
72
|
-
PERFORM _set_job_processing(job.id);
|
73
|
-
RETURN QUERY SELECT * FROM {
|
72
|
+
PERFORM {SCHEMA_NAME}._set_job_processing(job.id);
|
73
|
+
RETURN QUERY SELECT * FROM {SCHEMA_NAME}.postjobs WHERE id=job.id;
|
74
74
|
EXIT;
|
75
75
|
END CASE;
|
76
76
|
END LOOP;
|
@@ -2,7 +2,7 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.childjobs(v_parent_id BIGINT)
|
|
2
2
|
RETURNS SETOF {SCHEMA_NAME}.postjobs AS $$
|
3
3
|
BEGIN
|
4
4
|
RETURN QUERY
|
5
|
-
SELECT {
|
5
|
+
SELECT {SCHEMA_NAME}.postjobs.* FROM {SCHEMA_NAME}.postjobs
|
6
6
|
WHERE parent_id=v_parent_id
|
7
7
|
ORDER BY id;
|
8
8
|
END;
|
@@ -12,7 +12,7 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.next_unresolved_childjob(v_parent_id BI
|
|
12
12
|
RETURNS SETOF {SCHEMA_NAME}.postjobs AS $$
|
13
13
|
BEGIN
|
14
14
|
RETURN QUERY
|
15
|
-
SELECT {
|
15
|
+
SELECT {SCHEMA_NAME}.postjobs.* FROM {SCHEMA_NAME}.postjobs
|
16
16
|
WHERE status NOT IN ('ok', 'failed') AND parent_id=v_parent_id
|
17
17
|
ORDER BY next_run_at;
|
18
18
|
END;
|
@@ -38,7 +38,7 @@ BEGIN
|
|
38
38
|
END IF;
|
39
39
|
|
40
40
|
IF v_parent_id IS NOT NULL THEN
|
41
|
-
SELECT INTO parent * FROM {
|
41
|
+
SELECT INTO parent * FROM {SCHEMA_NAME}.postjobs WHERE id=v_parent_id;
|
42
42
|
IF parent.id IS NULL THEN
|
43
43
|
RAISE 'No such job: %', v_parent_id;
|
44
44
|
END IF;
|
@@ -47,7 +47,7 @@ BEGIN
|
|
47
47
|
-- check for existing child record
|
48
48
|
|
49
49
|
-- IF v_parent_id IS NOT NULL THEN
|
50
|
-
SELECT id INTO child_id FROM {
|
50
|
+
SELECT id INTO child_id FROM {SCHEMA_NAME}.postjobs
|
51
51
|
WHERE parent_id=v_parent_id
|
52
52
|
AND workflow=v_workflow
|
53
53
|
AND workflow_method=v_workflow_method
|
@@ -58,7 +58,7 @@ BEGIN
|
|
58
58
|
-- note that RETURN QUERY does not return the function here. It 'only'
|
59
59
|
-- adds the specified query to the result set.
|
60
60
|
RETURN QUERY
|
61
|
-
SELECT * FROM {
|
61
|
+
SELECT * FROM {SCHEMA_NAME}.postjobs WHERE id=child_id
|
62
62
|
;
|
63
63
|
ELSE
|
64
64
|
IF v_tags IS NOT NULL THEN
|
@@ -66,7 +66,7 @@ BEGIN
|
|
66
66
|
END IF;
|
67
67
|
|
68
68
|
RETURN QUERY
|
69
|
-
SELECT * FROM enqueue(
|
69
|
+
SELECT * FROM {SCHEMA_NAME}.enqueue(
|
70
70
|
COALESCE(v_queue, parent.queue), -- queue VARCHAR,
|
71
71
|
v_workflow, -- workflow VARCHAR,
|
72
72
|
v_workflow_method, -- workflow_method VARCHAR,
|
@@ -18,8 +18,8 @@ CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.postjobs_by_token(v_token UUID)
|
|
18
18
|
RETURNS SETOF {SCHEMA_NAME}.postjobs AS $$
|
19
19
|
BEGIN
|
20
20
|
RETURN QUERY
|
21
|
-
SELECT {
|
22
|
-
INNER JOIN {SCHEMA_NAME}.tokens ON {SCHEMA_NAME}.tokens.postjob_id={
|
21
|
+
SELECT {SCHEMA_NAME}.postjobs.* FROM {SCHEMA_NAME}.postjobs
|
22
|
+
INNER JOIN {SCHEMA_NAME}.tokens ON {SCHEMA_NAME}.tokens.postjob_id={SCHEMA_NAME}.postjobs.id
|
23
23
|
WHERE {SCHEMA_NAME}.tokens.token=v_token;
|
24
24
|
END;
|
25
25
|
$$ LANGUAGE plpgsql;
|
data/lib/postjob/migrations.rb
CHANGED
@@ -12,8 +12,6 @@ module Postjob
|
|
12
12
|
# below drops that schema, and we don't want to drop the default schema.
|
13
13
|
expect! SCHEMA_NAME != "public"
|
14
14
|
|
15
|
-
TABLE_NAME = "#{SCHEMA_NAME}.postjobs"
|
16
|
-
|
17
15
|
def unmigrate!
|
18
16
|
SQL.exec "DROP SCHEMA IF EXISTS #{SCHEMA_NAME} CASCADE"
|
19
17
|
end
|
@@ -29,6 +27,8 @@ module Postjob
|
|
29
27
|
private
|
30
28
|
|
31
29
|
def run_migration(file)
|
30
|
+
STDERR.puts "[#{file}] Running migration"
|
31
|
+
|
32
32
|
case file
|
33
33
|
when /\.rb$/ then run_migration_ruby(file)
|
34
34
|
when /\.sql$/ then run_migration_sql(file)
|
data/lib/postjob/queue.rb
CHANGED
@@ -9,8 +9,6 @@ module Postjob::Queue
|
|
9
9
|
extend self
|
10
10
|
|
11
11
|
SCHEMA_NAME = "postjob"
|
12
|
-
TABLE_NAME = "#{SCHEMA_NAME}.postjobs"
|
13
|
-
|
14
12
|
SQL = ::Simple::SQL
|
15
13
|
end
|
16
14
|
|
@@ -119,7 +117,7 @@ module Postjob::Queue
|
|
119
117
|
# within a single run of a job (all within the same transaction and therefore
|
120
118
|
# invisible to the outside).
|
121
119
|
SQL.ask <<~SQL, job.id, status
|
122
|
-
UPDATE #{
|
120
|
+
UPDATE #{SCHEMA_NAME}.postjobs
|
123
121
|
SET workflow_status=$2
|
124
122
|
WHERE id=$1
|
125
123
|
SQL
|
data/spec/postjob/run_spec.rb
CHANGED
@@ -32,7 +32,7 @@ describe "Postjob.process_all" do
|
|
32
32
|
context "when scheduled to run in the future" do
|
33
33
|
before do
|
34
34
|
Simple::SQL.ask <<~SQL, id
|
35
|
-
UPDATE postjobs
|
35
|
+
UPDATE postjob.postjobs
|
36
36
|
SET next_run_at=next_run_at + interval '10 seconds'
|
37
37
|
WHERE id=$1
|
38
38
|
SQL
|
@@ -49,7 +49,7 @@ describe "Postjob.process_all" do
|
|
49
49
|
context "when scheduled to time out" do
|
50
50
|
before do
|
51
51
|
Simple::SQL.ask <<~SQL, id
|
52
|
-
UPDATE postjobs
|
52
|
+
UPDATE postjob.postjobs
|
53
53
|
SET timing_out_at=next_run_at
|
54
54
|
WHERE id=$1
|
55
55
|
SQL
|