Question

I have multiple workers processing requests in a beanstalkd queue using beanstalk-client-ruby.

For testing purposes, the workers randomly dive into an infinite loop after picking up a job from the queue.

Beanstalk notices that a job has been reserved for too long and returns it to the queue for other workers to process.

How could I detect that this has happened, so that I can kill the malfunctioning worker?

Looks like I can get detect that a timeout has happened :

> job.timeouts
 => 0
> sleep 10
 => nil
> job.timeouts
 => 1

Now how can I something like:

> job=queue.reserve
 => 189
> job.MAGICAL_INFO_STORE[:previous_worker_pid] = $$
 => extraordinary magic happened
> sleep 10
 => nil
> job=queue.reserve
 => 189
> job.timeouts
 => 1
> kill_the_sucker(job.MAGICAL_INFO_STORE[:previous_worker_pid])
 => nil

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top