gearman-ruby 3.0.8 → 4.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/.travis.yml +5 -0
- data/CHANGELOG.md +6 -4
- data/README.md +111 -0
- data/examples/client.rb +1 -2
- data/examples/client_reverse_nohost.rb +30 -0
- data/examples/{client_reverse.rb → client_reverse_wait.rb} +9 -11
- data/examples/worker.rb +8 -5
- data/examples/worker_reverse_string.rb +12 -17
- data/gearman-ruby.gemspec +3 -5
- data/lib/gearman.rb +17 -77
- data/lib/gearman/client.rb +129 -147
- data/lib/gearman/connection.rb +158 -0
- data/lib/gearman/connection_pool.rb +131 -0
- data/lib/gearman/exceptions.rb +24 -0
- data/lib/gearman/logging.rb +19 -0
- data/lib/gearman/packet.rb +61 -0
- data/lib/gearman/task.rb +1 -1
- data/lib/gearman/task_set.rb +67 -0
- data/lib/gearman/version.rb +1 -1
- data/lib/gearman/worker.rb +185 -412
- data/lib/gearman/worker/ability.rb +55 -0
- data/lib/gearman/worker/callbacks.rb +39 -0
- data/lib/gearman/worker/job.rb +44 -0
- data/spec/client_spec.rb +32 -20
- data/spec/connection_pool_spec.rb +55 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/task_spec.rb +10 -0
- data/spec/taskset_spec.rb +2 -2
- metadata +18 -37
- data/HOWTO +0 -146
- data/README +0 -9
- data/TODO +0 -8
- data/VERSION.yml +0 -4
- data/examples/calculus_client.rb +0 -39
- data/examples/calculus_worker.rb +0 -45
- data/examples/client.php +0 -23
- data/examples/client_background.rb +0 -14
- data/examples/client_data.rb +0 -16
- data/examples/client_epoch.rb +0 -23
- data/examples/client_exception.rb +0 -19
- data/examples/client_prefix.rb +0 -17
- data/examples/gearman_environment.sh +0 -25
- data/examples/scale_image.rb +0 -31
- data/examples/scale_image_worker.rb +0 -34
- data/examples/server.rb +0 -15
- data/examples/worker_data.rb +0 -16
- data/examples/worker_exception.rb +0 -14
- data/examples/worker_prefix.rb +0 -25
- data/examples/worker_reverse_to_file.rb +0 -18
- data/examples/worker_signals.rb +0 -36
- data/lib/gearman/taskset.rb +0 -293
- data/lib/gearman/util.rb +0 -211
- data/spec/util_spec.rb +0 -67
data/README
DELETED
data/TODO
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
- Failover strategies
|
2
|
-
- Client:
|
3
|
-
* If connected for the first time, try to connect to at least one server from the server array
|
4
|
-
* If already connected to a server, and it goes down, the client should go down as well
|
5
|
-
- Worker:
|
6
|
-
* If connected for the first time, try to connect to as many servers as it can.
|
7
|
-
Loop trough the bad servers, trying to reconnect to them as well.
|
8
|
-
* If a already connected to a server, and it goes down, wait and try to reconnect again.
|
data/VERSION.yml
DELETED
data/examples/calculus_client.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
require '../lib/gearman'
|
4
|
-
#Gearman::Util.debug = true
|
5
|
-
|
6
|
-
# Connect to the local server (at the default port 7003)
|
7
|
-
client = Gearman::Client.new('localhost')
|
8
|
-
taskset = Gearman::TaskSet.new(client)
|
9
|
-
|
10
|
-
# Get something to echo
|
11
|
-
puts '[client] Write a basic arithmetic operation:'
|
12
|
-
input = gets
|
13
|
-
|
14
|
-
operations = input.chomp.scan(/\d+[\+\-\*\/]\d+/).compact
|
15
|
-
puts "[client] The following operations were found: #{operations.inspect}"
|
16
|
-
|
17
|
-
# Setup a task for operation
|
18
|
-
operations.each do |op|
|
19
|
-
# Determining the operation
|
20
|
-
case op
|
21
|
-
when /\+/
|
22
|
-
type, data = 'addition', op.split('+')
|
23
|
-
when /\-/
|
24
|
-
type, data = 'subtraction', op.split('-')
|
25
|
-
when /\*/
|
26
|
-
type, data = 'multiplication', op.split('*')
|
27
|
-
when /\//
|
28
|
-
type, data = 'division', op.split('/')
|
29
|
-
end
|
30
|
-
|
31
|
-
task = Gearman::Task.new(type, Marshal.dump(data.map {|v| v.to_i}))
|
32
|
-
task.on_complete {|r| puts "[client] #{type} result is: #{r}" }
|
33
|
-
|
34
|
-
# Sending the task to the server
|
35
|
-
puts "[client] Sending values: #{data.inspect}, to the '#{type}' worker"
|
36
|
-
taskset.add_task(task)
|
37
|
-
taskset.wait(100)
|
38
|
-
end
|
39
|
-
|
data/examples/calculus_worker.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
require '../lib/gearman'
|
4
|
-
|
5
|
-
#Gearman::Util.debug = true
|
6
|
-
|
7
|
-
worker = Gearman::Worker.new('localhost')
|
8
|
-
worker.reconnect_sec = 2
|
9
|
-
|
10
|
-
# Additon ability
|
11
|
-
worker.add_ability('addition') do |data,job|
|
12
|
-
values = Marshal.load(data)
|
13
|
-
puts "[addition_worker] Calculating #{values.inspect}..."
|
14
|
-
# sleep 5
|
15
|
-
values.first + values.last
|
16
|
-
end
|
17
|
-
|
18
|
-
# Subtraction ability
|
19
|
-
worker.add_ability('subtraction') do |data,job|
|
20
|
-
values = Marshal.load(data)
|
21
|
-
puts "[subtraction_worker] Calculating #{values.inspect}..."
|
22
|
-
# sleep 5
|
23
|
-
values.first - values.last
|
24
|
-
end
|
25
|
-
|
26
|
-
# Multiplication worker
|
27
|
-
worker.add_ability('multiplication') do |data,job|
|
28
|
-
values = Marshal.load(data)
|
29
|
-
puts "[multiplication_worker] Calculating #{values.inspect}..."
|
30
|
-
# sleep 5
|
31
|
-
values.first * values.last
|
32
|
-
end
|
33
|
-
|
34
|
-
# Division worker
|
35
|
-
worker.add_ability('division') do |data,job|
|
36
|
-
values = Marshal.load(data)
|
37
|
-
puts "[division_worker] Calculating #{data.inspect}..."
|
38
|
-
# sleep 5
|
39
|
-
values.first / values.last
|
40
|
-
end
|
41
|
-
|
42
|
-
# Running the workers
|
43
|
-
loop do
|
44
|
-
worker.work
|
45
|
-
end
|
data/examples/client.php
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
<?php
|
2
|
-
|
3
|
-
require_once 'Net/Gearman/Client.php';
|
4
|
-
|
5
|
-
$set = new Net_Gearman_Set();
|
6
|
-
|
7
|
-
function result($func, $handle, $result) {
|
8
|
-
var_dump($func);
|
9
|
-
var_dump($handle);
|
10
|
-
var_dump($result);
|
11
|
-
}
|
12
|
-
|
13
|
-
$task = new Net_Gearman_Task('Sleep', array(
|
14
|
-
'seconds' => 20
|
15
|
-
));
|
16
|
-
|
17
|
-
$task->attachCallback('result');
|
18
|
-
$set->addTask($task);
|
19
|
-
|
20
|
-
$client = new Net_Gearman_Client(array('localhost:4730', 'localhost:4731'));
|
21
|
-
$client->runSet($set);
|
22
|
-
|
23
|
-
?>
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
|
5
|
-
servers = ['localhost:4730',]
|
6
|
-
|
7
|
-
client = Gearman::Client.new(servers)
|
8
|
-
taskset = Gearman::TaskSet.new(client)
|
9
|
-
|
10
|
-
task = Gearman::Task.new('sleep', 20, { :background => true })
|
11
|
-
task.on_complete {|d| puts d }
|
12
|
-
|
13
|
-
taskset.add_task(task)
|
14
|
-
taskset.wait(100)
|
data/examples/client_data.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
Gearman::Util.debug = true
|
5
|
-
|
6
|
-
servers = ['localhost:4730']
|
7
|
-
|
8
|
-
client = Gearman::Client.new(servers)
|
9
|
-
taskset = Gearman::TaskSet.new(client)
|
10
|
-
|
11
|
-
task = Gearman::Task.new('chunked_transfer')
|
12
|
-
task.on_data {|d| puts d }
|
13
|
-
task.on_complete {|d| puts d }
|
14
|
-
|
15
|
-
taskset.add_task(task)
|
16
|
-
taskset.wait(100)
|
data/examples/client_epoch.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
# Client using Gearman SUBMIT_JOB_EPOCH (currently requires the gearmand branch lp:~jewart/gearmand/scheduled_jobs_support/)
|
4
|
-
|
5
|
-
require 'rubygems'
|
6
|
-
require '../lib/gearman'
|
7
|
-
|
8
|
-
(1..100).each do
|
9
|
-
# Connect to the local server (at the default port 4730)
|
10
|
-
client = Gearman::Client.new('localhost')
|
11
|
-
taskset = Gearman::TaskSet.new(client)
|
12
|
-
|
13
|
-
data = rand(36**8).to_s(36)
|
14
|
-
# Set scheduled time to some time in the future
|
15
|
-
time = Time.now() + rand(10)
|
16
|
-
puts "Time as seconds: #{time.to_i}"
|
17
|
-
task = Gearman::Task.new("reverse_string", data)
|
18
|
-
task.schedule(time)
|
19
|
-
|
20
|
-
# Sending the task to the server
|
21
|
-
puts "[client] Sending task: #{task.inspect}, to the 'reverse_string' worker"
|
22
|
-
taskset.add_task(task)
|
23
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require '../lib/gearman'
|
3
|
-
Gearman::Util.debug = true
|
4
|
-
|
5
|
-
servers = ['localhost:4730']
|
6
|
-
|
7
|
-
client = Gearman::Client.new(servers)
|
8
|
-
taskset = Gearman::TaskSet.new(client)
|
9
|
-
|
10
|
-
task = Gearman::Task.new('fail_with_exception', "void")
|
11
|
-
task.retry_count = 2
|
12
|
-
task.on_complete {|d| puts d }
|
13
|
-
task.on_exception {|ex| puts "This should never be called" }
|
14
|
-
task.on_warning {|warning| puts "WARNING: #{warning}" }
|
15
|
-
task.on_retry { puts "PRE-RETRY HOOK: retry no. #{task.retries_done}" }
|
16
|
-
task.on_fail { puts "TASK FAILED, GIVING UP" }
|
17
|
-
|
18
|
-
taskset.add_task(task)
|
19
|
-
taskset.wait(100)
|
data/examples/client_prefix.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
Gearman::Util.debug = true
|
5
|
-
|
6
|
-
servers = ['localhost:4730', 'localhost:4731']
|
7
|
-
|
8
|
-
ability_name_with_prefix = Gearman::Util.ability_name_with_prefix("test","sleep")
|
9
|
-
|
10
|
-
client = Gearman::Client.new(servers)
|
11
|
-
taskset = Gearman::TaskSet.new(client)
|
12
|
-
|
13
|
-
task = Gearman::Task.new(ability_name_with_prefix, 20)
|
14
|
-
task.on_complete {|d| puts d }
|
15
|
-
|
16
|
-
taskset.add_task(task)
|
17
|
-
taskset.wait(100)
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
|
3
|
-
# Start Gearmand
|
4
|
-
echo ' + Starting Gearmand'
|
5
|
-
gearmand --daemon --pidfile=/tmp/gearmand.pid
|
6
|
-
|
7
|
-
# Start the client and the worker(s)
|
8
|
-
echo ' + Starting calculus_worker.rb'
|
9
|
-
ruby calculus_worker.rb &
|
10
|
-
|
11
|
-
sleep 3
|
12
|
-
|
13
|
-
echo ' + Starting calculus_client.rb'
|
14
|
-
ruby calculus_client.rb
|
15
|
-
|
16
|
-
echo ' +++ Example finished +++ '
|
17
|
-
|
18
|
-
# Stop Gearmand
|
19
|
-
echo ' - Stopping Gearmand'
|
20
|
-
kill -9 `cat /tmp/gearmand.pid`
|
21
|
-
|
22
|
-
# Stop the workers
|
23
|
-
echo ' - Stopping calculus_worker.rb'
|
24
|
-
kill -9 `ps ax|grep calculus_worker|grep ruby|awk -F' ' '{print $1}'`
|
25
|
-
|
data/examples/scale_image.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
$: << '../lib'
|
4
|
-
require 'gearman'
|
5
|
-
require 'optparse'
|
6
|
-
|
7
|
-
servers = 'localhost:4730'
|
8
|
-
format = 'PNG'
|
9
|
-
width, height = 100, 100
|
10
|
-
|
11
|
-
opts = OptionParser.new
|
12
|
-
opts.banner = "Usage: #{$0} [options] <input> <output>"
|
13
|
-
opts.on('-f FORMAT', '--format', 'Scaled image format') { format }
|
14
|
-
opts.on('-h HEIGHT', '--height', 'Scaled image height') { height }
|
15
|
-
opts.on('-s SERVERS', '--servers',
|
16
|
-
'Servers, comma-separated host:port') { servers }
|
17
|
-
opts.on('-w WIDTH', '--width', 'Scaled image width') { width }
|
18
|
-
opts.parse!
|
19
|
-
|
20
|
-
if ARGV.size != 2
|
21
|
-
$stderr.puts opts.banner
|
22
|
-
exit 1
|
23
|
-
end
|
24
|
-
|
25
|
-
client = Gearman::Client.new(servers.split(','), 'example')
|
26
|
-
taskset = Gearman::TaskSet.new(client)
|
27
|
-
arg = [width, height, format, File.read(ARGV[0])].join("\0")
|
28
|
-
task = Gearman::Task.new('scale_image', arg)
|
29
|
-
task.on_complete {|d| File.new(ARGV[1],'w').write(d) }
|
30
|
-
taskset.add_task(task)
|
31
|
-
taskset.wait(10)
|
@@ -1,34 +0,0 @@
|
|
1
|
-
#!/usr/bin/ruby
|
2
|
-
|
3
|
-
$: << '../lib'
|
4
|
-
require 'gearman'
|
5
|
-
require 'optparse'
|
6
|
-
require 'RMagick'
|
7
|
-
|
8
|
-
Gearman::Util.debug = true
|
9
|
-
servers = 'localhost:7003'
|
10
|
-
|
11
|
-
opts = OptionParser.new
|
12
|
-
opts.banner = "Usage: #{$0} [options]"
|
13
|
-
opts.on('-s SERVERS', '--servers',
|
14
|
-
'Job servers, comma-separated host:port') { servers }
|
15
|
-
opts.parse!
|
16
|
-
|
17
|
-
worker = Gearman::Worker.new(servers.split(','), 'example')
|
18
|
-
|
19
|
-
worker.add_ability('scale_image') do |data,job|
|
20
|
-
width, height, format, data = data.split("\0", 4)
|
21
|
-
width = width.to_f
|
22
|
-
height = height.to_f
|
23
|
-
image = Magick::Image.from_blob(data)[0]
|
24
|
-
orig_ratio = image.columns.to_f / image.rows
|
25
|
-
new_ratio = width / height
|
26
|
-
w = new_ratio < orig_ratio ? width : orig_ratio / new_ratio * width
|
27
|
-
h = new_ratio > orig_ratio ? height : new_ratio / orig_ratio * height
|
28
|
-
puts "Got #{image.inspect}; resizing to #{w}x#{h} #{format}"
|
29
|
-
image.resize!(w, h)
|
30
|
-
image.format = format
|
31
|
-
image.to_blob
|
32
|
-
end
|
33
|
-
|
34
|
-
loop { worker.work }
|
data/examples/server.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
# require 'gearman'
|
3
|
-
# require 'gearman/server'
|
4
|
-
require '../lib/gearman'
|
5
|
-
require '../lib/gearman/server'
|
6
|
-
require 'pp'
|
7
|
-
|
8
|
-
Gearman::Util.debug = true
|
9
|
-
w = Gearman::Server.new('localhost:4730')
|
10
|
-
|
11
|
-
loop {
|
12
|
-
pp "Status: ", w.status
|
13
|
-
pp "Workers: ", w.workers
|
14
|
-
sleep 5
|
15
|
-
}
|
data/examples/worker_data.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require '../lib/gearman'
|
3
|
-
|
4
|
-
Gearman::Util.debug = true
|
5
|
-
|
6
|
-
servers = ['localhost:4730']
|
7
|
-
worker = Gearman::Worker.new(servers)
|
8
|
-
|
9
|
-
worker.add_ability('chunked_transfer') do |data, job|
|
10
|
-
5.times do |i|
|
11
|
-
sleep 1
|
12
|
-
job.send_data("CHUNK #{i}")
|
13
|
-
end
|
14
|
-
"EOD"
|
15
|
-
end
|
16
|
-
loop { worker.work }
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require '../lib/gearman'
|
3
|
-
|
4
|
-
Gearman::Util.debug = true
|
5
|
-
|
6
|
-
servers = ['localhost:4730']
|
7
|
-
w = Gearman::Worker.new(servers)
|
8
|
-
|
9
|
-
# Add a handler for a "sleep" function that takes a single argument, the
|
10
|
-
# number of seconds to sleep before reporting success.
|
11
|
-
w.add_ability('fail_with_exception') do |data,job|
|
12
|
-
raise Exception.new("Exception in worker (args: #{data.inspect})")
|
13
|
-
end
|
14
|
-
loop { w.work }
|
data/examples/worker_prefix.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
|
5
|
-
Gearman::Util.debug = true
|
6
|
-
|
7
|
-
servers = ['localhost:4730', 'localhost:4731']
|
8
|
-
w = Gearman::Worker.new(servers)
|
9
|
-
|
10
|
-
ability_name_with_prefix = Gearman::Util.ability_name_with_prefix("test","sleep")
|
11
|
-
|
12
|
-
# Add a handler for a "sleep" function that takes a single argument, the
|
13
|
-
# number of seconds to sleep before reporting success.
|
14
|
-
w.add_ability(ability_name_with_prefix) do |data,job|
|
15
|
-
seconds = data
|
16
|
-
(1..seconds.to_i).each do |i|
|
17
|
-
sleep 1
|
18
|
-
print i
|
19
|
-
# Report our progress to the job server every second.
|
20
|
-
job.report_status(i, seconds)
|
21
|
-
end
|
22
|
-
# Report success.
|
23
|
-
true
|
24
|
-
end
|
25
|
-
loop { w.work }
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
|
5
|
-
servers = ['localhost:4730']
|
6
|
-
w = Gearman::Worker.new(servers)
|
7
|
-
|
8
|
-
# Add a handler for a "sleep" function that takes a single argument, the
|
9
|
-
# number of seconds to sleep before reporting success.
|
10
|
-
w.add_ability('reverse_to_file') do |data,job|
|
11
|
-
puts "Data: #{data.inspect}"
|
12
|
-
word, file = data.split("\0")
|
13
|
-
puts "Word: #{word}"
|
14
|
-
puts "File: #{file}"
|
15
|
-
# Report success.
|
16
|
-
true
|
17
|
-
end
|
18
|
-
loop { w.work }
|
data/examples/worker_signals.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
#require 'gearman'
|
3
|
-
require '../lib/gearman'
|
4
|
-
|
5
|
-
Gearman::Util.debug = true
|
6
|
-
|
7
|
-
servers = ['localhost:4730', 'localhost:4731']
|
8
|
-
w = Gearman::Worker.new(servers)
|
9
|
-
|
10
|
-
# Add a handler for a "sleep" function that takes a single argument, the
|
11
|
-
# number of seconds to sleep before reporting success.
|
12
|
-
w.add_ability('sleep') do |data,job|
|
13
|
-
seconds = data
|
14
|
-
(1..seconds.to_i).each do |i|
|
15
|
-
sleep 1
|
16
|
-
Gearman::Util.logger.info i
|
17
|
-
# Report our progress to the job server every second.
|
18
|
-
job.report_status(i, seconds)
|
19
|
-
end
|
20
|
-
# Report success.
|
21
|
-
true
|
22
|
-
end
|
23
|
-
|
24
|
-
# Trap signals while is working
|
25
|
-
%w(HUP USR1 ALRM TERM).each do |signal|
|
26
|
-
trap(signal) do
|
27
|
-
puts "Received signal #{signal} - setting worker_enabled to false. Worker status is [#{w.status}]"
|
28
|
-
w.worker_enabled = false
|
29
|
-
if w.status == :waiting
|
30
|
-
trap(signal, "DEFAULT")
|
31
|
-
Process.kill( signal, $$ )
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
loop { w.work or break }
|