import dbHandler from "../db-handler"; import { quoteIdentifier } from "../../utils/sql-identifier"; import { QUEUE_NOW_SQL, requireQueueTable } from "./queue-utils"; /** * Extend the lease on a claimed job, for jobs that run longer than the * lease given to `claim`. */ export default async function QueueExtend({ table, id, lock_token, lease_ms, config, }) { try { const options = requireQueueTable(table); const leaseMs = Math.max(0, Math.floor(Number(lease_ms ?? options.lease_ms) || 0)); const res = await dbHandler({ query: `UPDATE ${quoteIdentifier(table)} SET queue_lease_expires_at = ${QUEUE_NOW_SQL} + ?, updated_at = ${QUEUE_NOW_SQL} WHERE id = ? AND queue_status = 'processing' AND queue_lock_token = ?`, values: [leaseMs, id, lock_token], config, }); if (!res.success) { return { ...res, success: false }; } if (!res.db_res?.affectedRows) { return { ...res, success: false, msg: "Job is not claimed with this lock token", }; } return await dbHandler({ query: `SELECT * FROM ${quoteIdentifier(table)} WHERE id = ?`, values: [id], config, }); } catch (error) { return { success: false, error: error.message, }; } }