pg-boss 10.1.2 → 10.1.3

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.
Files changed (2) hide show
  1. package/package.json +7 -7
  2. package/src/plans.js +112 -14
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "pg-boss",
3
- "version": "10.1.2",
3
+ "version": "10.1.3",
4
4
  "description": "Queueing jobs in Postgres from Node.js like a boss",
5
5
  "main": "./src/index.js",
6
6
  "engines": {
7
7
  "node": ">=20"
8
8
  },
9
9
  "dependencies": {
10
- "cron-parser": "^4.0.0",
11
- "pg": "^8.5.1",
10
+ "cron-parser": "^4.9.0",
11
+ "pg": "^8.12.0",
12
12
  "serialize-error": "^8.1.0"
13
13
  },
14
14
  "devDependencies": {
15
- "@types/node": "^20.3.3",
16
- "luxon": "^3.0.1",
17
- "mocha": "^10.0.0",
15
+ "@types/node": "^20.16.5",
16
+ "luxon": "^3.5.0",
17
+ "mocha": "^10.7.3",
18
18
  "nyc": "^17.0.0",
19
- "standard": "^17.0.0"
19
+ "standard": "^17.1.2"
20
20
  },
21
21
  "scripts": {
22
22
  "test": "standard && mocha",
package/src/plans.js CHANGED
@@ -194,7 +194,7 @@ function createTableJob (schema) {
194
194
  keep_until timestamp with time zone NOT NULL default now() + interval '14 days',
195
195
  output jsonb,
196
196
  dead_letter text,
197
- policy text
197
+ policy text
198
198
  ) PARTITION BY LIST (name)
199
199
  `
200
200
  }
@@ -555,28 +555,126 @@ function failJobsByTimeout (schema) {
555
555
 
556
556
  function failJobs (schema, where, output) {
557
557
  return `
558
- WITH results AS (
559
- UPDATE ${schema}.job SET
560
- state = CASE
558
+ WITH deleted_jobs AS (
559
+ DELETE FROM ${schema}.job
560
+ WHERE ${where}
561
+ RETURNING *
562
+ ),
563
+ retried_jobs AS (
564
+ INSERT INTO ${schema}.job (
565
+ id,
566
+ name,
567
+ priority,
568
+ data,
569
+ state,
570
+ retry_limit,
571
+ retry_count,
572
+ retry_delay,
573
+ retry_backoff,
574
+ start_after,
575
+ started_on,
576
+ singleton_key,
577
+ singleton_on,
578
+ expire_in,
579
+ created_on,
580
+ completed_on,
581
+ keep_until,
582
+ dead_letter,
583
+ policy,
584
+ output
585
+ )
586
+ SELECT
587
+ id,
588
+ name,
589
+ priority,
590
+ data,
591
+ CASE
561
592
  WHEN retry_count < retry_limit THEN '${JOB_STATES.retry}'::${schema}.job_state
562
593
  ELSE '${JOB_STATES.failed}'::${schema}.job_state
563
- END,
564
- completed_on = CASE
565
- WHEN retry_count < retry_limit THEN NULL
566
- ELSE now()
567
- END,
568
- start_after = CASE
594
+ END as state,
595
+ retry_limit,
596
+ retry_count,
597
+ retry_delay,
598
+ retry_backoff,
599
+ CASE
569
600
  WHEN retry_count = retry_limit THEN start_after
570
601
  WHEN NOT retry_backoff THEN now() + retry_delay * interval '1'
571
602
  ELSE now() + (
572
603
  retry_delay * 2 ^ LEAST(16, retry_count + 1) / 2 +
573
604
  retry_delay * 2 ^ LEAST(16, retry_count + 1) / 2 * random()
574
605
  ) * interval '1'
575
- END,
576
- output = ${output}
577
- WHERE ${where}
606
+ END as start_after,
607
+ started_on,
608
+ singleton_key,
609
+ singleton_on,
610
+ expire_in,
611
+ created_on,
612
+ CASE
613
+ WHEN retry_count < retry_limit THEN NULL
614
+ ELSE now()
615
+ END as completed_on,
616
+ keep_until,
617
+ dead_letter,
618
+ policy,
619
+ ${output}
620
+ FROM deleted_jobs
621
+ ON CONFLICT DO NOTHING
622
+ RETURNING *
623
+ ),
624
+ failed_jobs as (
625
+ INSERT INTO ${schema}.job (
626
+ id,
627
+ name,
628
+ priority,
629
+ data,
630
+ state,
631
+ retry_limit,
632
+ retry_count,
633
+ retry_delay,
634
+ retry_backoff,
635
+ start_after,
636
+ started_on,
637
+ singleton_key,
638
+ singleton_on,
639
+ expire_in,
640
+ created_on,
641
+ completed_on,
642
+ keep_until,
643
+ dead_letter,
644
+ policy,
645
+ output
646
+ )
647
+ SELECT
648
+ id,
649
+ name,
650
+ priority,
651
+ data,
652
+ '${JOB_STATES.failed}'::${schema}.job_state as state,
653
+ retry_limit,
654
+ retry_count,
655
+ retry_delay,
656
+ retry_backoff,
657
+ start_after,
658
+ started_on,
659
+ singleton_key,
660
+ singleton_on,
661
+ expire_in,
662
+ created_on,
663
+ now() as completed_on,
664
+ keep_until,
665
+ dead_letter,
666
+ policy,
667
+ ${output}
668
+ FROM deleted_jobs
669
+ WHERE id NOT IN (SELECT id from retried_jobs)
578
670
  RETURNING *
579
- ), dlq_jobs as (
671
+ ),
672
+ results as (
673
+ SELECT * FROM retried_jobs
674
+ UNION ALL
675
+ SELECT * FROM failed_jobs
676
+ ),
677
+ dlq_jobs as (
580
678
  INSERT INTO ${schema}.job (name, data, output, retry_limit, keep_until)
581
679
  SELECT
582
680
  dead_letter,