Requeue stale worker jobs on idempotent create
This commit is contained in:
@@ -78,7 +78,33 @@ INSERT INTO ai_jobs (
|
|||||||
)
|
)
|
||||||
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
||||||
ON CONFLICT (idempotency_key) WHERE idempotency_key IS NOT NULL
|
ON CONFLICT (idempotency_key) WHERE idempotency_key IS NOT NULL
|
||||||
DO UPDATE SET updated_at = ai_jobs.updated_at
|
DO UPDATE SET
|
||||||
|
status = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN 'pending' ELSE ai_jobs.status END,
|
||||||
|
priority = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.priority ELSE ai_jobs.priority END,
|
||||||
|
max_attempts = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.max_attempts ELSE ai_jobs.max_attempts END,
|
||||||
|
attempts = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN 0 ELSE ai_jobs.attempts END,
|
||||||
|
input = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.input ELSE ai_jobs.input END,
|
||||||
|
scheduled_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.scheduled_at ELSE ai_jobs.scheduled_at END,
|
||||||
|
started_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.started_at END,
|
||||||
|
completed_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.completed_at END,
|
||||||
|
worker_id = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.worker_id END,
|
||||||
|
heartbeat_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.heartbeat_at END,
|
||||||
|
error_code = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.error_code END,
|
||||||
|
error_message = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.error_message END,
|
||||||
|
updated_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NOW() ELSE ai_jobs.updated_at END
|
||||||
RETURNING ` + jobSelectColumns + `
|
RETURNING ` + jobSelectColumns + `
|
||||||
`
|
`
|
||||||
row := s.pool.QueryRow(ctx, q,
|
row := s.pool.QueryRow(ctx, q,
|
||||||
@@ -106,7 +132,33 @@ INSERT INTO ai_jobs (
|
|||||||
)
|
)
|
||||||
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9)
|
||||||
ON CONFLICT (idempotency_key) WHERE idempotency_key IS NOT NULL
|
ON CONFLICT (idempotency_key) WHERE idempotency_key IS NOT NULL
|
||||||
DO UPDATE SET updated_at = ai_jobs.updated_at
|
DO UPDATE SET
|
||||||
|
status = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN 'pending' ELSE ai_jobs.status END,
|
||||||
|
priority = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.priority ELSE ai_jobs.priority END,
|
||||||
|
max_attempts = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.max_attempts ELSE ai_jobs.max_attempts END,
|
||||||
|
attempts = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN 0 ELSE ai_jobs.attempts END,
|
||||||
|
input = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.input ELSE ai_jobs.input END,
|
||||||
|
scheduled_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN EXCLUDED.scheduled_at ELSE ai_jobs.scheduled_at END,
|
||||||
|
started_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.started_at END,
|
||||||
|
completed_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.completed_at END,
|
||||||
|
worker_id = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.worker_id END,
|
||||||
|
heartbeat_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.heartbeat_at END,
|
||||||
|
error_code = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.error_code END,
|
||||||
|
error_message = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NULL ELSE ai_jobs.error_message END,
|
||||||
|
updated_at = CASE WHEN ai_jobs.status = 'failed' AND ai_jobs.error_code = 'stale_worker'
|
||||||
|
THEN NOW() ELSE ai_jobs.updated_at END
|
||||||
RETURNING ` + jobSelectColumns + `
|
RETURNING ` + jobSelectColumns + `
|
||||||
`
|
`
|
||||||
var batch pgx.Batch
|
var batch pgx.Batch
|
||||||
|
|||||||
Reference in New Issue
Block a user