Stopping pg-boss gracefully does not wait until stop timeouts
Hi, it looks like pg-boss does not respect graceful nor timeout property. I have a simple worker that needs at least 5 seconds to finish. On SIGTERM I clean up all my server resources but boss.stop does not block until the max timeout of 30s is over.
await fastify.pgboss.send(queue, { some: 'data' });
await fastify.pgboss.work(queue, async function someAsyncJobHandler(job) {
console.log(`job ${job.id} received with data:`);
// promise wait
await new Promise((resolve) => setTimeout(resolve, 5000));
console.log(job);
});
const stopOptions: PgBoss.StopOptions = {
timeout: 30_000,
graceful: true,
destroy: false
};
await boss.stop(stopOptions);
My fault. I still had a timeout in the shutdown phase. The bug is still valid.
I was able to workaround this by
await boss.stop(stopOptions);
await new Promise((resolve) => {
boss.once('stopped', () => resolve(null));
});
fastify.log.info('PgBoss shutdown complete');
I think it would be more intuitive if this is the default behavior of stop(). Would you accept a PR?
PRs are always welcome. I think it should be opt-in via as a new option on stop(). Thanks!
What's the reason for passing it onto the next cycle here? + why is a delay of 1000ms required?
@timgit friendly ping.
Hold off on the PR. v10 will include this
@timgit thank you. Any eta?
Interested in the beta?
Sure