pg-boss 10.3.3 → 10.4.0
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/.claude/settings.local.json +15 -0
- package/package.json +1 -1
- package/src/plans.js +18 -3
package/package.json
CHANGED
package/src/plans.js
CHANGED
|
@@ -506,7 +506,7 @@ function insertVersion (schema, version) {
|
|
|
506
506
|
function fetchNextJob (schema) {
|
|
507
507
|
return ({ includeMetadata, priority = true, ignoreStartAfter = false } = {}) => `
|
|
508
508
|
WITH next as (
|
|
509
|
-
SELECT id
|
|
509
|
+
SELECT id, singleton_key, policy
|
|
510
510
|
FROM ${schema}.job
|
|
511
511
|
WHERE name = $1
|
|
512
512
|
AND state < '${JOB_STATES.active}'
|
|
@@ -514,13 +514,28 @@ function fetchNextJob (schema) {
|
|
|
514
514
|
ORDER BY ${priority ? 'priority desc, ' : ''}created_on, id
|
|
515
515
|
LIMIT $2
|
|
516
516
|
FOR UPDATE SKIP LOCKED
|
|
517
|
+
), grouped as (
|
|
518
|
+
SELECT
|
|
519
|
+
n.id,
|
|
520
|
+
n.policy as grouped_policy,
|
|
521
|
+
row_number() OVER (
|
|
522
|
+
PARTITION BY CASE
|
|
523
|
+
WHEN $2 > 1 AND n.policy in ('${QUEUE_POLICIES.singleton}', '${QUEUE_POLICIES.stately}') THEN n.singleton_key -- gate singleton/stately by key per batch
|
|
524
|
+
ELSE n.id::text
|
|
525
|
+
END
|
|
526
|
+
) as row_number
|
|
527
|
+
FROM next n
|
|
517
528
|
)
|
|
518
529
|
UPDATE ${schema}.job j SET
|
|
519
530
|
state = '${JOB_STATES.active}',
|
|
520
531
|
started_on = now(),
|
|
521
532
|
retry_count = CASE WHEN started_on IS NOT NULL THEN retry_count + 1 ELSE retry_count END
|
|
522
|
-
FROM
|
|
523
|
-
WHERE name = $1 AND j.id =
|
|
533
|
+
FROM grouped
|
|
534
|
+
WHERE name = $1 AND j.id = grouped.id
|
|
535
|
+
AND (
|
|
536
|
+
(grouped.grouped_policy IN ('${QUEUE_POLICIES.singleton}', '${QUEUE_POLICIES.stately}') AND grouped.row_number = 1) -- only one per singleton key
|
|
537
|
+
OR COALESCE(grouped.grouped_policy, '') NOT IN ('${QUEUE_POLICIES.singleton}', '${QUEUE_POLICIES.stately}') -- other policies unaffected
|
|
538
|
+
)
|
|
524
539
|
RETURNING j.${includeMetadata ? allJobColumns : baseJobColumns}
|
|
525
540
|
`
|
|
526
541
|
}
|