@pgpm/database-jobs 0.23.0 → 0.26.1
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.
- package/Makefile +1 -1
- package/deploy/schemas/app_jobs/procedures/add_job.sql +6 -1
- package/deploy/schemas/app_jobs/procedures/add_scheduled_job.sql +6 -1
- package/deploy/schemas/app_jobs/procedures/run_scheduled_job.sql +2 -0
- package/deploy/schemas/app_jobs/tables/jobs/table.sql +2 -0
- package/deploy/schemas/app_jobs/tables/scheduled_jobs/table.sql +2 -0
- package/package.json +4 -4
- package/pgpm-database-jobs.control +1 -1
- package/sql/{pgpm-database-jobs--0.22.0.sql → pgpm-database-jobs--0.26.0.sql} +88 -15
package/Makefile
CHANGED
|
@@ -13,7 +13,8 @@ CREATE FUNCTION app_jobs.add_job (
|
|
|
13
13
|
queue_name text DEFAULT NULL,
|
|
14
14
|
run_at timestamptz DEFAULT now(),
|
|
15
15
|
max_attempts integer DEFAULT 25,
|
|
16
|
-
priority integer DEFAULT 0
|
|
16
|
+
priority integer DEFAULT 0,
|
|
17
|
+
entity_id uuid DEFAULT NULL
|
|
17
18
|
)
|
|
18
19
|
RETURNS app_jobs.jobs
|
|
19
20
|
AS $$
|
|
@@ -31,6 +32,7 @@ BEGIN
|
|
|
31
32
|
INSERT INTO app_jobs.jobs (
|
|
32
33
|
database_id,
|
|
33
34
|
actor_id,
|
|
35
|
+
entity_id,
|
|
34
36
|
task_identifier,
|
|
35
37
|
payload,
|
|
36
38
|
queue_name,
|
|
@@ -41,6 +43,7 @@ BEGIN
|
|
|
41
43
|
) VALUES (
|
|
42
44
|
v_database_id,
|
|
43
45
|
v_actor_id,
|
|
46
|
+
add_job.entity_id,
|
|
44
47
|
identifier,
|
|
45
48
|
coalesce(payload, '{}'::json),
|
|
46
49
|
queue_name,
|
|
@@ -84,6 +87,7 @@ BEGIN
|
|
|
84
87
|
INSERT INTO app_jobs.jobs (
|
|
85
88
|
database_id,
|
|
86
89
|
actor_id,
|
|
90
|
+
entity_id,
|
|
87
91
|
task_identifier,
|
|
88
92
|
payload,
|
|
89
93
|
queue_name,
|
|
@@ -93,6 +97,7 @@ BEGIN
|
|
|
93
97
|
) VALUES (
|
|
94
98
|
v_database_id,
|
|
95
99
|
v_actor_id,
|
|
100
|
+
add_job.entity_id,
|
|
96
101
|
identifier,
|
|
97
102
|
payload,
|
|
98
103
|
queue_name,
|
|
@@ -14,7 +14,8 @@ CREATE FUNCTION app_jobs.add_scheduled_job(
|
|
|
14
14
|
job_key text DEFAULT NULL,
|
|
15
15
|
queue_name text DEFAULT NULL,
|
|
16
16
|
max_attempts integer DEFAULT 25,
|
|
17
|
-
priority integer DEFAULT 0
|
|
17
|
+
priority integer DEFAULT 0,
|
|
18
|
+
entity_id uuid DEFAULT NULL
|
|
18
19
|
)
|
|
19
20
|
RETURNS app_jobs.scheduled_jobs
|
|
20
21
|
AS $$
|
|
@@ -32,6 +33,7 @@ BEGIN
|
|
|
32
33
|
INSERT INTO app_jobs.scheduled_jobs (
|
|
33
34
|
database_id,
|
|
34
35
|
actor_id,
|
|
36
|
+
entity_id,
|
|
35
37
|
task_identifier,
|
|
36
38
|
payload,
|
|
37
39
|
queue_name,
|
|
@@ -42,6 +44,7 @@ BEGIN
|
|
|
42
44
|
) VALUES (
|
|
43
45
|
v_database_id,
|
|
44
46
|
v_actor_id,
|
|
47
|
+
add_scheduled_job.entity_id,
|
|
45
48
|
identifier,
|
|
46
49
|
coalesce(payload, '{}'::json),
|
|
47
50
|
queue_name,
|
|
@@ -81,6 +84,7 @@ BEGIN
|
|
|
81
84
|
INSERT INTO app_jobs.scheduled_jobs (
|
|
82
85
|
database_id,
|
|
83
86
|
actor_id,
|
|
87
|
+
entity_id,
|
|
84
88
|
task_identifier,
|
|
85
89
|
payload,
|
|
86
90
|
queue_name,
|
|
@@ -90,6 +94,7 @@ BEGIN
|
|
|
90
94
|
) VALUES (
|
|
91
95
|
v_database_id,
|
|
92
96
|
v_actor_id,
|
|
97
|
+
add_scheduled_job.entity_id,
|
|
93
98
|
identifier,
|
|
94
99
|
payload,
|
|
95
100
|
queue_name,
|
|
@@ -42,6 +42,7 @@ BEGIN
|
|
|
42
42
|
INSERT INTO app_jobs.jobs (
|
|
43
43
|
database_id,
|
|
44
44
|
actor_id,
|
|
45
|
+
entity_id,
|
|
45
46
|
queue_name,
|
|
46
47
|
task_identifier,
|
|
47
48
|
payload,
|
|
@@ -51,6 +52,7 @@ BEGIN
|
|
|
51
52
|
) SELECT
|
|
52
53
|
database_id,
|
|
53
54
|
actor_id,
|
|
55
|
+
entity_id,
|
|
54
56
|
queue_name,
|
|
55
57
|
task_identifier,
|
|
56
58
|
payload,
|
|
@@ -6,6 +6,7 @@ CREATE TABLE app_jobs.jobs (
|
|
|
6
6
|
id bigserial PRIMARY KEY,
|
|
7
7
|
database_id uuid,
|
|
8
8
|
actor_id uuid,
|
|
9
|
+
entity_id uuid,
|
|
9
10
|
queue_name text DEFAULT NULL,
|
|
10
11
|
task_identifier text NOT NULL,
|
|
11
12
|
payload json DEFAULT '{}' ::json NOT NULL,
|
|
@@ -30,6 +31,7 @@ COMMENT ON TABLE app_jobs.jobs IS 'Background job queue: each row is a pending o
|
|
|
30
31
|
COMMENT ON COLUMN app_jobs.jobs.id IS 'Auto-incrementing job identifier';
|
|
31
32
|
COMMENT ON COLUMN app_jobs.jobs.database_id IS 'Database this job belongs to (nullable for system-level jobs without tenant context)';
|
|
32
33
|
COMMENT ON COLUMN app_jobs.jobs.actor_id IS 'User who triggered this job, read from JWT claims at enqueue time';
|
|
34
|
+
COMMENT ON COLUMN app_jobs.jobs.entity_id IS 'Entity (org/team) this job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
33
35
|
COMMENT ON COLUMN app_jobs.jobs.queue_name IS 'Name of the queue this job belongs to; used for worker routing and concurrency control';
|
|
34
36
|
COMMENT ON COLUMN app_jobs.jobs.task_identifier IS 'Identifier for the task type (maps to a worker handler function)';
|
|
35
37
|
COMMENT ON COLUMN app_jobs.jobs.payload IS 'JSON payload of arguments passed to the task handler';
|
|
@@ -6,6 +6,7 @@ CREATE TABLE app_jobs.scheduled_jobs (
|
|
|
6
6
|
id bigserial PRIMARY KEY,
|
|
7
7
|
database_id uuid,
|
|
8
8
|
actor_id uuid,
|
|
9
|
+
entity_id uuid,
|
|
9
10
|
queue_name text DEFAULT NULL,
|
|
10
11
|
task_identifier text NOT NULL,
|
|
11
12
|
payload json DEFAULT '{}' ::json NOT NULL,
|
|
@@ -29,6 +30,7 @@ COMMENT ON TABLE app_jobs.scheduled_jobs IS 'Recurring/cron-style job definition
|
|
|
29
30
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.id IS 'Auto-incrementing scheduled job identifier';
|
|
30
31
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.database_id IS 'Database this scheduled job belongs to (nullable for system-level schedules without tenant context)';
|
|
31
32
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.actor_id IS 'User who created this scheduled job, read from JWT claims at creation time';
|
|
33
|
+
COMMENT ON COLUMN app_jobs.scheduled_jobs.entity_id IS 'Entity (org/team) this scheduled job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
32
34
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.queue_name IS 'Name of the queue spawned jobs are placed into';
|
|
33
35
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.task_identifier IS 'Task type identifier for spawned jobs';
|
|
34
36
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.payload IS 'JSON payload passed to each spawned job';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pgpm/database-jobs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.1",
|
|
4
4
|
"description": "Database-specific job handling and queue management",
|
|
5
5
|
"author": "Dan Lynch <pyramation@gmail.com>",
|
|
6
6
|
"contributors": [
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"pgpm": "^4.23.2"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@pgpm/jwt-claims": "0.
|
|
28
|
-
"@pgpm/verify": "0.
|
|
27
|
+
"@pgpm/jwt-claims": "0.26.0",
|
|
28
|
+
"@pgpm/verify": "0.26.0"
|
|
29
29
|
},
|
|
30
30
|
"repository": {
|
|
31
31
|
"type": "git",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"bugs": {
|
|
36
36
|
"url": "https://github.com/constructive-io/pgpm-modules/issues"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "e1f2e9bec1c91d0751ebe49e9193459191d3c464"
|
|
39
39
|
}
|
|
@@ -53,7 +53,9 @@ $EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
|
53
53
|
|
|
54
54
|
COMMENT ON FUNCTION app_jobs.tg_add_job_with_row IS 'Useful shortcut to create a job on insert or update. Pass the task name as the trigger argument, and the record data will automatically be available on the JSON payload.';
|
|
55
55
|
|
|
56
|
-
CREATE FUNCTION app_jobs.json_build_object_apply(
|
|
56
|
+
CREATE FUNCTION app_jobs.json_build_object_apply(
|
|
57
|
+
arguments text[]
|
|
58
|
+
) RETURNS pg_catalog.json AS $EOFCODE$
|
|
57
59
|
DECLARE
|
|
58
60
|
arg text;
|
|
59
61
|
_sql text;
|
|
@@ -116,6 +118,7 @@ CREATE TABLE app_jobs.scheduled_jobs (
|
|
|
116
118
|
id bigserial PRIMARY KEY,
|
|
117
119
|
database_id uuid,
|
|
118
120
|
actor_id uuid,
|
|
121
|
+
entity_id uuid,
|
|
119
122
|
queue_name text DEFAULT NULL,
|
|
120
123
|
task_identifier text NOT NULL,
|
|
121
124
|
payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
|
|
@@ -143,6 +146,8 @@ COMMENT ON COLUMN app_jobs.scheduled_jobs.database_id IS 'Database this schedule
|
|
|
143
146
|
|
|
144
147
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.actor_id IS 'User who created this scheduled job, read from JWT claims at creation time';
|
|
145
148
|
|
|
149
|
+
COMMENT ON COLUMN app_jobs.scheduled_jobs.entity_id IS 'Entity (org/team) this scheduled job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
150
|
+
|
|
146
151
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.queue_name IS 'Name of the queue spawned jobs are placed into';
|
|
147
152
|
|
|
148
153
|
COMMENT ON COLUMN app_jobs.scheduled_jobs.task_identifier IS 'Task type identifier for spawned jobs';
|
|
@@ -189,6 +194,7 @@ CREATE TABLE app_jobs.jobs (
|
|
|
189
194
|
id bigserial PRIMARY KEY,
|
|
190
195
|
database_id uuid,
|
|
191
196
|
actor_id uuid,
|
|
197
|
+
entity_id uuid,
|
|
192
198
|
queue_name text DEFAULT NULL,
|
|
193
199
|
task_identifier text NOT NULL,
|
|
194
200
|
payload pg_catalog.json DEFAULT '{}'::json NOT NULL,
|
|
@@ -218,6 +224,8 @@ COMMENT ON COLUMN app_jobs.jobs.database_id IS 'Database this job belongs to (nu
|
|
|
218
224
|
|
|
219
225
|
COMMENT ON COLUMN app_jobs.jobs.actor_id IS 'User who triggered this job, read from JWT claims at enqueue time';
|
|
220
226
|
|
|
227
|
+
COMMENT ON COLUMN app_jobs.jobs.entity_id IS 'Entity (org/team) this job is scoped to for billing; NULL means platform-level (resolved via database_id → owner_id)';
|
|
228
|
+
|
|
221
229
|
COMMENT ON COLUMN app_jobs.jobs.queue_name IS 'Name of the queue this job belongs to; used for worker routing and concurrency control';
|
|
222
230
|
|
|
223
231
|
COMMENT ON COLUMN app_jobs.jobs.task_identifier IS 'Identifier for the task type (maps to a worker handler function)';
|
|
@@ -366,7 +374,10 @@ CREATE INDEX job_queues_locked_by_idx ON app_jobs.job_queues (locked_by);
|
|
|
366
374
|
|
|
367
375
|
GRANT SELECT, INSERT, UPDATE, DELETE ON app_jobs.job_queues TO administrator;
|
|
368
376
|
|
|
369
|
-
CREATE FUNCTION app_jobs.run_scheduled_job(
|
|
377
|
+
CREATE FUNCTION app_jobs.run_scheduled_job(
|
|
378
|
+
id bigint,
|
|
379
|
+
job_expiry interval DEFAULT '1 hours'
|
|
380
|
+
) RETURNS app_jobs.jobs AS $EOFCODE$
|
|
370
381
|
DECLARE
|
|
371
382
|
j app_jobs.jobs;
|
|
372
383
|
last_id bigint;
|
|
@@ -402,6 +413,7 @@ BEGIN
|
|
|
402
413
|
INSERT INTO app_jobs.jobs (
|
|
403
414
|
database_id,
|
|
404
415
|
actor_id,
|
|
416
|
+
entity_id,
|
|
405
417
|
queue_name,
|
|
406
418
|
task_identifier,
|
|
407
419
|
payload,
|
|
@@ -411,6 +423,7 @@ BEGIN
|
|
|
411
423
|
) SELECT
|
|
412
424
|
database_id,
|
|
413
425
|
actor_id,
|
|
426
|
+
entity_id,
|
|
414
427
|
queue_name,
|
|
415
428
|
task_identifier,
|
|
416
429
|
payload,
|
|
@@ -435,7 +448,13 @@ BEGIN
|
|
|
435
448
|
END;
|
|
436
449
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
437
450
|
|
|
438
|
-
CREATE FUNCTION app_jobs.reschedule_jobs(
|
|
451
|
+
CREATE FUNCTION app_jobs.reschedule_jobs(
|
|
452
|
+
job_ids bigint[],
|
|
453
|
+
run_at timestamptz DEFAULT NULL,
|
|
454
|
+
priority int DEFAULT NULL,
|
|
455
|
+
attempts int DEFAULT NULL,
|
|
456
|
+
max_attempts int DEFAULT NULL
|
|
457
|
+
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
439
458
|
UPDATE
|
|
440
459
|
app_jobs.jobs
|
|
441
460
|
SET
|
|
@@ -451,7 +470,10 @@ CREATE FUNCTION app_jobs.reschedule_jobs(job_ids bigint[], run_at timestamptz DE
|
|
|
451
470
|
*;
|
|
452
471
|
$EOFCODE$;
|
|
453
472
|
|
|
454
|
-
CREATE FUNCTION app_jobs.release_scheduled_jobs(
|
|
473
|
+
CREATE FUNCTION app_jobs.release_scheduled_jobs(
|
|
474
|
+
worker_id text,
|
|
475
|
+
ids bigint[] DEFAULT NULL
|
|
476
|
+
) RETURNS void AS $EOFCODE$
|
|
455
477
|
DECLARE
|
|
456
478
|
BEGIN
|
|
457
479
|
-- clear the scheduled job
|
|
@@ -467,7 +489,9 @@ BEGIN
|
|
|
467
489
|
END;
|
|
468
490
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
469
491
|
|
|
470
|
-
CREATE FUNCTION app_jobs.release_jobs(
|
|
492
|
+
CREATE FUNCTION app_jobs.release_jobs(
|
|
493
|
+
worker_id text
|
|
494
|
+
) RETURNS void AS $EOFCODE$
|
|
471
495
|
DECLARE
|
|
472
496
|
BEGIN
|
|
473
497
|
-- clear the job
|
|
@@ -490,7 +514,10 @@ BEGIN
|
|
|
490
514
|
END;
|
|
491
515
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE;
|
|
492
516
|
|
|
493
|
-
CREATE FUNCTION app_jobs.permanently_fail_jobs(
|
|
517
|
+
CREATE FUNCTION app_jobs.permanently_fail_jobs(
|
|
518
|
+
job_ids bigint[],
|
|
519
|
+
error_message text DEFAULT NULL
|
|
520
|
+
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
494
521
|
UPDATE
|
|
495
522
|
app_jobs.jobs
|
|
496
523
|
SET
|
|
@@ -504,7 +531,10 @@ CREATE FUNCTION app_jobs.permanently_fail_jobs(job_ids bigint[], error_message t
|
|
|
504
531
|
*;
|
|
505
532
|
$EOFCODE$;
|
|
506
533
|
|
|
507
|
-
CREATE FUNCTION app_jobs.get_scheduled_job(
|
|
534
|
+
CREATE FUNCTION app_jobs.get_scheduled_job(
|
|
535
|
+
worker_id text,
|
|
536
|
+
task_identifiers text[] DEFAULT NULL
|
|
537
|
+
) RETURNS app_jobs.scheduled_jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
508
538
|
DECLARE
|
|
509
539
|
v_job_id bigint;
|
|
510
540
|
v_row app_jobs.scheduled_jobs;
|
|
@@ -556,7 +586,11 @@ BEGIN
|
|
|
556
586
|
END;
|
|
557
587
|
$EOFCODE$;
|
|
558
588
|
|
|
559
|
-
CREATE FUNCTION app_jobs.get_job(
|
|
589
|
+
CREATE FUNCTION app_jobs.get_job(
|
|
590
|
+
worker_id text,
|
|
591
|
+
task_identifiers text[] DEFAULT NULL,
|
|
592
|
+
job_expiry interval DEFAULT '4 hours'
|
|
593
|
+
) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
560
594
|
DECLARE
|
|
561
595
|
v_job_id bigint;
|
|
562
596
|
v_queue_name text;
|
|
@@ -611,7 +645,11 @@ BEGIN
|
|
|
611
645
|
END;
|
|
612
646
|
$EOFCODE$;
|
|
613
647
|
|
|
614
|
-
CREATE FUNCTION app_jobs.fail_job(
|
|
648
|
+
CREATE FUNCTION app_jobs.fail_job(
|
|
649
|
+
worker_id text,
|
|
650
|
+
job_id bigint,
|
|
651
|
+
error_message text
|
|
652
|
+
) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
615
653
|
DECLARE
|
|
616
654
|
v_row app_jobs.jobs;
|
|
617
655
|
BEGIN
|
|
@@ -641,7 +679,9 @@ BEGIN
|
|
|
641
679
|
END;
|
|
642
680
|
$EOFCODE$;
|
|
643
681
|
|
|
644
|
-
CREATE FUNCTION app_jobs.complete_jobs(
|
|
682
|
+
CREATE FUNCTION app_jobs.complete_jobs(
|
|
683
|
+
job_ids bigint[]
|
|
684
|
+
) RETURNS SETOF app_jobs.jobs LANGUAGE sql AS $EOFCODE$
|
|
645
685
|
DELETE FROM app_jobs.jobs
|
|
646
686
|
WHERE id = ANY (job_ids)
|
|
647
687
|
AND (locked_by IS NULL
|
|
@@ -650,7 +690,10 @@ CREATE FUNCTION app_jobs.complete_jobs(job_ids bigint[]) RETURNS SETOF app_jobs.
|
|
|
650
690
|
*;
|
|
651
691
|
$EOFCODE$;
|
|
652
692
|
|
|
653
|
-
CREATE FUNCTION app_jobs.complete_job(
|
|
693
|
+
CREATE FUNCTION app_jobs.complete_job(
|
|
694
|
+
worker_id text,
|
|
695
|
+
job_id bigint
|
|
696
|
+
) RETURNS app_jobs.jobs LANGUAGE plpgsql AS $EOFCODE$
|
|
654
697
|
DECLARE
|
|
655
698
|
v_row app_jobs.jobs;
|
|
656
699
|
BEGIN
|
|
@@ -672,7 +715,16 @@ BEGIN
|
|
|
672
715
|
END;
|
|
673
716
|
$EOFCODE$;
|
|
674
717
|
|
|
675
|
-
CREATE FUNCTION app_jobs.add_scheduled_job(
|
|
718
|
+
CREATE FUNCTION app_jobs.add_scheduled_job(
|
|
719
|
+
identifier text,
|
|
720
|
+
payload pg_catalog.json DEFAULT '{}'::json,
|
|
721
|
+
schedule_info pg_catalog.json DEFAULT '{}'::json,
|
|
722
|
+
job_key text DEFAULT NULL,
|
|
723
|
+
queue_name text DEFAULT NULL,
|
|
724
|
+
max_attempts int DEFAULT 25,
|
|
725
|
+
priority int DEFAULT 0,
|
|
726
|
+
entity_id uuid DEFAULT NULL
|
|
727
|
+
) RETURNS app_jobs.scheduled_jobs AS $EOFCODE$
|
|
676
728
|
DECLARE
|
|
677
729
|
v_job app_jobs.scheduled_jobs;
|
|
678
730
|
v_database_id uuid;
|
|
@@ -687,6 +739,7 @@ BEGIN
|
|
|
687
739
|
INSERT INTO app_jobs.scheduled_jobs (
|
|
688
740
|
database_id,
|
|
689
741
|
actor_id,
|
|
742
|
+
entity_id,
|
|
690
743
|
task_identifier,
|
|
691
744
|
payload,
|
|
692
745
|
queue_name,
|
|
@@ -697,6 +750,7 @@ BEGIN
|
|
|
697
750
|
) VALUES (
|
|
698
751
|
v_database_id,
|
|
699
752
|
v_actor_id,
|
|
753
|
+
add_scheduled_job.entity_id,
|
|
700
754
|
identifier,
|
|
701
755
|
coalesce(payload, '{}'::json),
|
|
702
756
|
queue_name,
|
|
@@ -736,6 +790,7 @@ BEGIN
|
|
|
736
790
|
INSERT INTO app_jobs.scheduled_jobs (
|
|
737
791
|
database_id,
|
|
738
792
|
actor_id,
|
|
793
|
+
entity_id,
|
|
739
794
|
task_identifier,
|
|
740
795
|
payload,
|
|
741
796
|
queue_name,
|
|
@@ -745,6 +800,7 @@ BEGIN
|
|
|
745
800
|
) VALUES (
|
|
746
801
|
v_database_id,
|
|
747
802
|
v_actor_id,
|
|
803
|
+
add_scheduled_job.entity_id,
|
|
748
804
|
identifier,
|
|
749
805
|
payload,
|
|
750
806
|
queue_name,
|
|
@@ -756,7 +812,16 @@ BEGIN
|
|
|
756
812
|
END;
|
|
757
813
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
758
814
|
|
|
759
|
-
CREATE FUNCTION app_jobs.add_job(
|
|
815
|
+
CREATE FUNCTION app_jobs.add_job(
|
|
816
|
+
identifier text,
|
|
817
|
+
payload pg_catalog.json DEFAULT '{}'::json,
|
|
818
|
+
job_key text DEFAULT NULL,
|
|
819
|
+
queue_name text DEFAULT NULL,
|
|
820
|
+
run_at timestamptz DEFAULT now(),
|
|
821
|
+
max_attempts int DEFAULT 25,
|
|
822
|
+
priority int DEFAULT 0,
|
|
823
|
+
entity_id uuid DEFAULT NULL
|
|
824
|
+
) RETURNS app_jobs.jobs AS $EOFCODE$
|
|
760
825
|
DECLARE
|
|
761
826
|
v_job app_jobs.jobs;
|
|
762
827
|
v_database_id uuid;
|
|
@@ -771,6 +836,7 @@ BEGIN
|
|
|
771
836
|
INSERT INTO app_jobs.jobs (
|
|
772
837
|
database_id,
|
|
773
838
|
actor_id,
|
|
839
|
+
entity_id,
|
|
774
840
|
task_identifier,
|
|
775
841
|
payload,
|
|
776
842
|
queue_name,
|
|
@@ -781,6 +847,7 @@ BEGIN
|
|
|
781
847
|
) VALUES (
|
|
782
848
|
v_database_id,
|
|
783
849
|
v_actor_id,
|
|
850
|
+
add_job.entity_id,
|
|
784
851
|
identifier,
|
|
785
852
|
coalesce(payload, '{}'::json),
|
|
786
853
|
queue_name,
|
|
@@ -824,6 +891,7 @@ BEGIN
|
|
|
824
891
|
INSERT INTO app_jobs.jobs (
|
|
825
892
|
database_id,
|
|
826
893
|
actor_id,
|
|
894
|
+
entity_id,
|
|
827
895
|
task_identifier,
|
|
828
896
|
payload,
|
|
829
897
|
queue_name,
|
|
@@ -833,6 +901,7 @@ BEGIN
|
|
|
833
901
|
) VALUES (
|
|
834
902
|
v_database_id,
|
|
835
903
|
v_actor_id,
|
|
904
|
+
add_job.entity_id,
|
|
836
905
|
identifier,
|
|
837
906
|
payload,
|
|
838
907
|
queue_name,
|
|
@@ -846,7 +915,9 @@ BEGIN
|
|
|
846
915
|
END;
|
|
847
916
|
$EOFCODE$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
|
|
848
917
|
|
|
849
|
-
CREATE FUNCTION app_jobs.remove_job(
|
|
918
|
+
CREATE FUNCTION app_jobs.remove_job(
|
|
919
|
+
job_key text
|
|
920
|
+
) RETURNS app_jobs.jobs LANGUAGE plpgsql STRICT AS $EOFCODE$
|
|
850
921
|
DECLARE
|
|
851
922
|
v_job app_jobs.jobs;
|
|
852
923
|
BEGIN
|
|
@@ -871,7 +942,9 @@ BEGIN
|
|
|
871
942
|
END;
|
|
872
943
|
$EOFCODE$;
|
|
873
944
|
|
|
874
|
-
CREATE FUNCTION app_jobs.force_unlock_workers(
|
|
945
|
+
CREATE FUNCTION app_jobs.force_unlock_workers(
|
|
946
|
+
worker_ids text[]
|
|
947
|
+
) RETURNS void LANGUAGE sql VOLATILE AS $EOFCODE$
|
|
875
948
|
UPDATE app_jobs.jobs
|
|
876
949
|
SET locked_at = NULL, locked_by = NULL
|
|
877
950
|
WHERE locked_by = ANY (worker_ids);
|