Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to empty a job queue on a Gearman server

Is it possible to empty a job queue on a Gearman server? I am using the python driver for Gearman, and the documentation does not have any information about emptying queues. I would imagine that this functionality should exist, possibly, with a direct connection to the Gearman server.

like image 376
daniyalzade Avatar asked Dec 22 '10 15:12

daniyalzade


People also ask

How to check Gearman queue?

A persistent queue module is enabled by passing the -q or –queue-type option to gearmand. Run gearmand –help to see which queue modules are supported on your system. If you are missing options for one you would like to use, you will need to install any dependencies and then recompile the gearmand package.

What is gearman job server?

Gearman is an open-source application framework designed to distribute appropriate computer tasks to multiple computers, so large tasks can be done more quickly.


3 Answers

I came across this method:

/usr/bin/gearman -t 1000 -n -w -f function_name > /dev/null

which basically dumps all the jobs into /dev/null.

like image 67
Gary Richardson Avatar answered Oct 03 '22 00:10

Gary Richardson


The telnetable administrative protocol (search for "Administrative Protocol") doesn't have a command to empty a queue either, there is only a shutdown command.

If you wish to avoid downtime, you could write a generic "job consumer" worker and use that to empty the queues. I've set one up as a script which takes a list of job names, and just sits there accepting jobs and consuming them.

Something like:

# generic_consumer.py job1 job2 job3

You can use the administrative protocol's status command to get a list of the function names and counts on the queue. The administrative protocol docs tell you the format of the response.

# (echo status ; sleep 0.1) | netcat 127.0.0.1 4730
like image 21
d5ve Avatar answered Oct 03 '22 02:10

d5ve


As far as i have been able to tell from the docs and using gearman with PHP, the only way to clear the job queue is to restart to the gearmand job server. If you are using persistent job queues, you will also need to empty whatever you are using as the persistent storage, if this is DB storage, you will need to empty the appropriate tables of all the rows.

stop gearmand --> empty table rows --> start gearmand

Hope this is clear enough.

like image 45
James Butler Avatar answered Oct 03 '22 02:10

James Butler