rails / solid_queue

Database-backed Active Job backend
MIT License
1.95k stars 130 forks source link

Question: How to set process_alive_threshold or a global job timeout on a worker queue type? #346

Closed kirkath closed 2 months ago

kirkath commented 2 months ago

My use case wants to set up a special queue for long_running_tasks. E.g. When i run async_migrations (specifically - data backfills) through special solid_queue backed background job similar to as described here: https://kirshatrov.com/posts/async-migrations

My queue configuration:

- queues: "long_running_task"
      threads: 1
      polling_interval: 5
      processes: 2

I was wondering:

Thank you

rosa commented 2 months ago

Hey @kirkath! The process_alive_threshold can only be set globally at the moment, but this threshold is not used to kill workers automatically. This is used by the supervisor to delete process records from the database if a process fails to send the heartbeat for more time than that interval, as described here. It doesn't matter how long jobs take to run, the heartbeat is sent in a separate thread.

Can I configure a global timeout for a job, e.g. tasks that have been running for longer than 30 minutes automatically get shut down with a failure?

Unfortunately, we don't have any feature like this yet. You'd have to do something external to Solid Queue. I'll consider it, in any case.

kirkath commented 2 months ago

Thank you for the quick response. I shall figure something out in the meanwhile. Closing.