xing-gearman-ruby 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :patch: 0
3
3
  :major: 1
4
- :minor: 2
4
+ :minor: 3
@@ -0,0 +1,16 @@
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)
@@ -0,0 +1,16 @@
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 }
data/gearman-ruby.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{gearman-ruby}
5
- s.version = "1.2.0"
5
+ s.version = "1.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Daniel Erat", "Ladislav Martincik", "Pablo Delgado", "Mauro Pompilio", "Antonio Garrote", "Kim Altintop"]
9
- s.date = %q{2009-07-30}
9
+ s.date = %q{2009-08-04}
10
10
  s.description = %q{Library for the Gearman distributed job system}
11
11
  s.email = %q{ladislav.martincik@xing.com}
12
12
  s.extra_rdoc_files = [
@@ -37,6 +37,7 @@ Gem::Specification.new do |s|
37
37
  "examples/client.php",
38
38
  "examples/client.rb",
39
39
  "examples/client_background.rb",
40
+ "examples/client_data.rb",
40
41
  "examples/client_exception.rb",
41
42
  "examples/client_prefix.rb",
42
43
  "examples/gearman_environment.sh",
@@ -45,6 +46,7 @@ Gem::Specification.new do |s|
45
46
  "examples/server.rb",
46
47
  "examples/worker.php",
47
48
  "examples/worker.rb",
49
+ "examples/worker_data.rb",
48
50
  "examples/worker_exception.rb",
49
51
  "examples/worker_prefix.rb",
50
52
  "gearman-ruby.gemspec",
@@ -77,12 +79,14 @@ Gem::Specification.new do |s|
77
79
  "examples/calculus_worker.rb",
78
80
  "examples/client.rb",
79
81
  "examples/client_background.rb",
82
+ "examples/client_data.rb",
80
83
  "examples/client_exception.rb",
81
84
  "examples/client_prefix.rb",
82
85
  "examples/scale_image.rb",
83
86
  "examples/scale_image_worker.rb",
84
87
  "examples/server.rb",
85
88
  "examples/worker.rb",
89
+ "examples/worker_data.rb",
86
90
  "examples/worker_exception.rb",
87
91
  "examples/worker_prefix.rb"
88
92
  ]
data/lib/gearman/task.rb CHANGED
@@ -17,7 +17,7 @@ class Task
17
17
  def initialize(func, arg='', opts={})
18
18
  @func = func.to_s
19
19
  @arg = arg or '' # TODO: use something more ref-like?
20
- %w{on_complete on_fail on_retry on_exception on_status on_warning
20
+ %w{on_complete on_fail on_retry on_exception on_status on_warning on_data
21
21
  uniq retry_count priority background}.map {|s| s.to_sym }.each do |k|
22
22
  instance_variable_set "@#{k}", opts[k]
23
23
  opts.delete k
@@ -91,6 +91,13 @@ class Task
91
91
  @on_warning = f
92
92
  end
93
93
 
94
+ ##
95
+ # Set a block of code to be executed when we receive a (partial) data packet for this task.
96
+ # The data received will be passed as an argument to the block.
97
+ def on_data(&f)
98
+ @on_data = f
99
+ end
100
+
94
101
  ##
95
102
  # Handle completion of the task.
96
103
  #
@@ -129,7 +136,7 @@ class Task
129
136
  @on_status.call(numerator, denominator) if @on_status
130
137
  self
131
138
  end
132
-
139
+
133
140
  ##
134
141
  # Handle a warning.
135
142
  #
@@ -138,6 +145,13 @@ class Task
138
145
  self
139
146
  end
140
147
 
148
+ ##
149
+ # Handle (partial) data
150
+ def handle_data(data)
151
+ @on_data.call(data) if @on_data
152
+ self
153
+ end
154
+
141
155
  ##
142
156
  # Return a hash that we can use to execute identical tasks on the same
143
157
  # job server.
@@ -113,15 +113,8 @@ class TaskSet
113
113
  # @param data data returned in packet from server
114
114
  def handle_work_complete(hostport, data)
115
115
  handle, data = data.split("\0", 2)
116
- Util.log "Got work_complete with handle #{handle} and " +
117
- "#{data ? data.size : '0'} byte(s) of data from #{hostport}"
118
- js_handle = Util.handle_to_str(hostport, handle)
119
- tasks = @tasks_in_progress.delete(js_handle)
120
- if not tasks
121
- raise ProtocolError, "Got unexpected work_complete with handle " +
122
- "#{handle} from #{hostport} (no task by that name)"
123
- end
124
- tasks.each do |t|
116
+ Util.log "Got work_complete with handle #{handle} and #{data ? data.size : '0'} byte(s) of data from #{hostport}"
117
+ tasks_in_progress(hostport, handle, true).each do |t|
125
118
  t.handle_completion(data)
126
119
  @finished_tasks << t
127
120
  end
@@ -137,13 +130,7 @@ class TaskSet
137
130
  def handle_work_exception(hostport, data)
138
131
  handle, exception = data.split("\0", 2)
139
132
  Util.log "Got work_exception with handle #{handle} from #{hostport}: '#{exception}'"
140
- js_handle = Util.handle_to_str(hostport, handle)
141
- tasks = @tasks_in_progress[js_handle]
142
- if not tasks
143
- raise ProtocolError, "Got unexpected work_exception with handle " +
144
- "#{handle} from #{hostport} (no task by that name)"
145
- end
146
- tasks.each {|t| t.handle_exception(exception) }
133
+ tasks_in_progress(hostport, handle).each {|t| t.handle_exception(exception) }
147
134
  end
148
135
  private :handle_work_exception
149
136
 
@@ -154,13 +141,7 @@ class TaskSet
154
141
  # @param data data returned in packet from server
155
142
  def handle_work_fail(hostport, data)
156
143
  Util.log "Got work_fail with handle #{data} from #{hostport}"
157
- js_handle = Util.handle_to_str(hostport, data)
158
- tasks = @tasks_in_progress.delete(js_handle)
159
- if not tasks
160
- raise ProtocolError, "Got unexpected work_fail with handle " +
161
- "#{data} from #{hostport} (no task by that name)"
162
- end
163
- tasks.each do |t|
144
+ tasks_in_progress(hostport, data, true).each do |t|
164
145
  if t.handle_failure
165
146
  add_task_internal(t, false)
166
147
  else
@@ -177,15 +158,8 @@ class TaskSet
177
158
  # @param data data returned in packet from server
178
159
  def handle_work_status(hostport, data)
179
160
  handle, num, den = data.split("\0", 3)
180
- Util.log "Got work_status with handle #{handle} from #{hostport}: " +
181
- "#{num}/#{den}"
182
- js_handle = Util.handle_to_str(hostport, handle)
183
- tasks = @tasks_in_progress[js_handle]
184
- if not tasks
185
- raise ProtocolError, "Got unexpected work_status with handle " +
186
- "#{handle} from #{hostport} (no task by that name)"
187
- end
188
- tasks.each {|t| t.handle_status(num, den) }
161
+ Util.log "Got work_status with handle #{handle} from #{hostport}: #{num}/#{den}"
162
+ tasks_in_progress(hostport, handle).each {|t| t.handle_status(num, den) }
189
163
  end
190
164
  private :handle_work_status
191
165
 
@@ -197,15 +171,27 @@ class TaskSet
197
171
  def handle_work_warning(hostport, data)
198
172
  handle, message = data.split("\0", 2)
199
173
  Util.log "Got work_warning with handle #{handle} from #{hostport}: '#{message}'"
174
+ tasks_in_progress(hostport, handle).each {|t| t.handle_warning(message) }
175
+ end
176
+ private :handle_work_warning
177
+
178
+ ##
179
+ # Handle a 'work_data' response from a job server
180
+ #
181
+ # @param hostport "host:port" of a job server
182
+ # @param data data returned in packet from server
183
+ def handle_work_data(hostport, data)
184
+ handle, data = data.split("\0", 2)
185
+ Util.log "Got work_data with handle #{handle} and #{data ? data.size : '0'} byte(s) of data from #{hostport}"
186
+
200
187
  js_handle = Util.handle_to_str(hostport, handle)
201
188
  tasks = @tasks_in_progress[js_handle]
202
189
  if not tasks
203
- raise ProtocolError, "Got unexpected work_warning with handle " +
204
- "#{handle} from #{hostport} (no task by that name)"
190
+ raise ProtocolError, "Got unexpected work_data with handle #{handle} from #{hostport} (no task by that name)"
205
191
  end
206
- tasks.each {|t| t.handle_warning(message) }
192
+ tasks.each {|t| t.handle_data(data) }
207
193
  end
208
- private :handle_work_warning
194
+ private :handle_work_data
209
195
 
210
196
  ##
211
197
  # Read and process a packet from a socket.
@@ -218,19 +204,16 @@ class TaskSet
218
204
  sock.inspect
219
205
  end
220
206
  type, data = Util.read_response(sock, timeout)
221
- case type
222
- when :job_created
223
- handle_job_created(hostport, data)
224
- when :work_complete
225
- handle_work_complete(hostport, data)
226
- when :work_fail
227
- handle_work_fail(hostport, data)
228
- when :work_status
229
- handle_work_status(hostport, data)
230
- when :work_exception
231
- handle_work_exception(hostport, data)
232
- when :work_warning
233
- handle_work_warning(hostport, data)
207
+ known_types = [ :job_created,
208
+ :work_complete,
209
+ :work_fail,
210
+ :work_status,
211
+ :work_exception,
212
+ :work_warning,
213
+ :work_data ]
214
+
215
+ if known_types.include?(type)
216
+ send("handle_#{type}".to_sym, hostport, data)
234
217
  else
235
218
  Util.log "Got #{type.to_s} from #{hostport}"
236
219
  end
@@ -278,6 +261,16 @@ class TaskSet
278
261
  end
279
262
  true
280
263
  end
264
+
265
+ private
266
+ def tasks_in_progress(hostport, handle, remove_task = false)
267
+ js_handle = Util.handle_to_str(hostport, handle)
268
+ tasks = remove_task ? @tasks_in_progress.delete(js_handle) : @tasks_in_progress[js_handle]
269
+ if not tasks
270
+ raise ProtocolError, "Got unexpected work_data with handle #{handle} from #{hostport} (no task by that name)"
271
+ end
272
+ tasks
273
+ end
281
274
  end
282
275
 
283
276
  end
data/lib/gearman/util.rb CHANGED
@@ -15,43 +15,42 @@ class Util
15
15
  # Map from Integer representations of commands used in the network
16
16
  # protocol to more-convenient symbols.
17
17
  COMMANDS = {
18
- 1 => :can_do, # W->J: FUNC
19
- 23 => :can_do_timeout, # W->J: FUNC[0]TIMEOUT
20
- 2 => :cant_do, # W->J: FUNC
21
- 3 => :reset_abilities, # W->J: --
22
- 22 => :set_client_id, # W->J: [RANDOM_STRING_NO_WHITESPACE]
23
- 4 => :pre_sleep, # W->J: --
24
-
25
- 6 => :noop, # J->W: --
26
- 7 => :submit_job, # C->J: FUNC[0]UNIQ[0]ARGS
27
- 33 => :submit_job_low, # C->J: FUNC[0]UNIQ[0]ARGS
28
- 34 => :submit_job_low_bg, # C->J: FUNC[0]UNIQ[0]ARGS
29
- 21 => :submit_job_high, # C->J: FUNC[0]UNIQ[0]ARGS
30
- 32 => :submit_job_high_bg, # C->J: FUNC[0]UNIQ[0]ARGS
31
- 18 => :submit_job_bg, # C->J: FUNC[0]UNIQ[0]ARGS
32
-
33
- 8 => :job_created, # J->C: HANDLE
34
- 9 => :grab_job, # W->J: --
35
- 10 => :no_job, # J->W: --
36
- 11 => :job_assign, # J->W: HANDLE[0]FUNC[0]ARG
37
-
38
- 12 => :work_status, # W->J/C: HANDLE[0]NUMERATOR[0]DENOMINATOR
39
- 13 => :work_complete, # W->J/C: HANDLE[0]RES
40
- 14 => :work_fail, # W->J/C: HANDLE
41
- 29 => :work_warning, # W->J/C: HANDLE[0]MSG
42
-
43
- 25 => :work_exception, # W->J: HANDLE[0]ARG
44
- 26 => :option_req, # C->J: TEXT
45
- 27 => :option_res, # J->C: TEXT
46
-
47
- 15 => :get_status, # C->J: HANDLE
48
- 20 => :status_res, # C->J: HANDLE[0]KNOWN[0]RUNNING[0]NUM[0]DENOM
49
-
50
- 25 => :work_exception, # W->J/C: HANDLE[0]ARG
51
- 16 => :echo_req, # ?->J: TEXT
52
- 17 => :echo_res, # J->?: TEXT
53
-
54
- 19 => :error, # J->?: ERRCODE[0]ERR_TEXT
18
+ 1 => :can_do, # W->J: FUNC
19
+ 2 => :cant_do, # W->J: FUNC
20
+ 3 => :reset_abilities, # W->J: --
21
+ 4 => :pre_sleep, # W->J: --
22
+ #5 => (unused), # - -
23
+ 6 => :noop, # J->W: --
24
+ 7 => :submit_job, # C->J: FUNC[0]UNIQ[0]ARGS
25
+ 8 => :job_created, # J->C: HANDLE
26
+ 9 => :grab_job, # W->J: --
27
+ 10 => :no_job, # J->W: --
28
+ 11 => :job_assign, # J->W: HANDLE[0]FUNC[0]ARG
29
+ 12 => :work_status, # W->J/C: HANDLE[0]NUMERATOR[0]DENOMINATOR
30
+ 13 => :work_complete, # W->J/C: HANDLE[0]RES
31
+ 14 => :work_fail, # W->J/C: HANDLE
32
+ 15 => :get_status, # C->J: HANDLE
33
+ 16 => :echo_req, # ?->J: TEXT
34
+ 17 => :echo_res, # J->?: TEXT
35
+ 18 => :submit_job_bg, # C->J: FUNC[0]UNIQ[0]ARGS
36
+ 19 => :error, # J->?: ERRCODE[0]ERR_TEXT
37
+ 20 => :status_res, # C->J: HANDLE[0]KNOWN[0]RUNNING[0]NUM[0]DENOM
38
+ 21 => :submit_job_high, # C->J: FUNC[0]UNIQ[0]ARGS
39
+ 22 => :set_client_id, # W->J: [RANDOM_STRING_NO_WHITESPACE]
40
+ 23 => :can_do_timeout, # W->J: FUNC[0]TIMEOUT
41
+ 24 => :all_yours, # REQ Worker
42
+ 25 => :work_exception, # W->J: HANDLE[0]ARG
43
+ 26 => :option_req, # C->J: TEXT
44
+ 27 => :option_res, # J->C: TEXT
45
+ 28 => :work_data, # REQ Worker
46
+ 29 => :work_warning, # W->J/C: HANDLE[0]MSG
47
+ 30 => :grab_job_uniq, # REQ Worker
48
+ 31 => :job_assign_uniq, # RES Worker
49
+ 32 => :submit_job_high_bg, # C->J: FUNC[0]UNIQ[0]ARGS
50
+ 33 => :submit_job_low, # C->J: FUNC[0]UNIQ[0]ARGS
51
+ 34 => :submit_job_low_bg, # C->J: FUNC[0]UNIQ[0]ARGS
52
+ 35 => :submit_job_sched, # REQ Client
53
+ 36 => :submit_job_epoch # REQ Client
55
54
  }
56
55
 
57
56
  # Map e.g. 'can_do' => 1
@@ -79,6 +79,22 @@ class Worker
79
79
  Util.send_request(@socket, req)
80
80
  self
81
81
  end
82
+
83
+ ##
84
+ # Send data before job completes
85
+ def send_data(data)
86
+ req = Util.pack_request(:work_data, "#{@handle}\0#{data}")
87
+ Util.send_request(@socket, req)
88
+ self
89
+ end
90
+
91
+ ##
92
+ # Send a warning explicitly
93
+ def report_warning(warning)
94
+ req = Util.pack_request(:work_warning, "#{@handle}\0#{warning}")
95
+ Util.send_request(@socket, req)
96
+ self
97
+ end
82
98
  end
83
99
 
84
100
  ##
@@ -218,7 +218,7 @@ class TestClient < Test::Unit::TestCase
218
218
  def test_callbacks
219
219
  server = FakeJobServer.new(self)
220
220
  client, task, taskset, sock = nil
221
- failed, retries, num, den = nil
221
+ failed, retries, num, den, warning = nil
222
222
 
223
223
  s = TestScript.new
224
224
  c = TestScript.new
@@ -228,18 +228,20 @@ class TestClient < Test::Unit::TestCase
228
228
 
229
229
  c.exec { client = Gearman::Client.new("localhost:#{server.port}") }
230
230
 
231
- task = Gearman::Task.new('foo', 'bar',
232
- { :retry_count => 2 })
231
+ task = Gearman::Task.new('foo', 'bar', { :retry_count => 3 })
233
232
  task.on_fail { failed = true }
234
233
  task.on_retry {|r| retries = r }
235
234
  task.on_status {|n,d| num = n.to_i; den = d.to_i }
235
+ task.on_warning {|msg| warning = msg }
236
+ received_data = ""
237
+ task.on_data {|data| received_data << data }
236
238
 
237
239
  c.exec { taskset = Gearman::TaskSet.new(client) }
238
240
  c.exec { taskset.add_task(task) }
239
241
  s.exec { sock = server.expect_connection }
240
242
  s.wait
241
243
 
242
- # Send three failures back to the client.
244
+ # Send 4 failures back to the client.
243
245
  c.exec { taskset.wait }
244
246
  s.exec { server.expect_request(sock, :submit_job, "foo\000\000bar") }
245
247
  s.exec { server.send_response(sock, :job_created, 'a') }
@@ -251,13 +253,20 @@ class TestClient < Test::Unit::TestCase
251
253
  s.exec { server.send_response(sock, :job_created, 'c') }
252
254
  s.exec { server.send_response(sock, :work_status, "c\0001\0002") }
253
255
  s.exec { server.send_response(sock, :work_fail, 'c') }
256
+ s.exec { server.send_response(sock, :job_created, 'd') }
257
+ s.exec { server.send_response(sock, :work_data, "d\000data chunk 1") }
258
+ s.exec { server.send_response(sock, :work_data, "d\000data chunk 2") }
259
+ s.exec { server.send_response(sock, :work_warning, "d\000warning") }
260
+ s.exec { server.send_response(sock, :work_fail, 'd') }
254
261
  c.wait
255
262
  s.wait
256
263
 
257
264
  assert_equal(true, failed)
258
- assert_equal(2, retries)
265
+ assert_equal(3, retries)
259
266
  assert_equal(1, num)
260
267
  assert_equal(2, den)
268
+ assert_equal("data chunk 1data chunk 2", received_data)
269
+ assert_equal("warning", warning)
261
270
  end
262
271
 
263
272
  def test_failure
@@ -582,4 +591,39 @@ class TestClient < Test::Unit::TestCase
582
591
 
583
592
  assert_equal(false, res)
584
593
  end
594
+
595
+ ##
596
+ # Tests partial data responses (work_data)
597
+ def test_chunked_data
598
+ server = FakeJobServer.new(self)
599
+ client, sock, task, taskset, res = nil
600
+
601
+ s = TestScript.new
602
+ c = TestScript.new
603
+
604
+ server_thread = Thread.new { s.loop_forever }.run
605
+ client_thread = Thread.new { c.loop_forever }.run
606
+
607
+ c.exec { client = Gearman::Client.new("localhost:#{server.port}") }
608
+ task = Gearman::Task.new('foo', 'bar', { :retry_count => 3 })
609
+ received_data = ""
610
+ task.on_data {|data| received_data << data }
611
+ task.on_complete {|data| received_data << data}
612
+
613
+ c.exec { taskset = Gearman::TaskSet.new(client) }
614
+ c.exec { taskset.add_task(task) }
615
+ s.exec { sock = server.expect_connection }
616
+ s.wait
617
+
618
+ c.exec { taskset.wait }
619
+ s.exec { server.expect_request(sock, :submit_job, "foo\000\000bar") }
620
+ s.exec { server.send_response(sock, :job_created, 'a') }
621
+ s.exec { server.send_response(sock, :work_data, "a\000data chunk 1\n") }
622
+ s.exec { server.send_response(sock, :work_data, "a\000data chunk 2\n") }
623
+ s.exec { server.send_response(sock, :work_complete, "a\000data complete") }
624
+ c.wait
625
+ s.wait
626
+
627
+ assert_equal("data chunk 1\ndata chunk 2\ndata complete", received_data)
628
+ end
585
629
  end
@@ -41,7 +41,14 @@ class TestWorker < Test::Unit::TestCase
41
41
  # After it connects, it should send its ID, and it should tell us its
42
42
  # abilities when we report them.
43
43
  s.exec { @server.expect_request(sock, :set_client_id, 'test') }
44
- w.exec { worker.add_ability('echo') {|d,j| j.report_status(1, 1); d } }
44
+ w.exec do
45
+ worker.add_ability('echo') do |data, job|
46
+ job.report_status(1, 1);
47
+ part1, part2 = data.split(//, 2)
48
+ job.send_data(part1) # send partial data first
49
+ part2
50
+ end
51
+ end
45
52
  s.exec { @server.expect_request(sock, :can_do, 'echo') }
46
53
 
47
54
  # It should try to grab a job when we tell it to work.
@@ -59,7 +66,8 @@ class TestWorker < Test::Unit::TestCase
59
66
  # When we give it a job, it should do it.
60
67
  s.exec { @server.send_response(sock, :job_assign, "a\0echo\0foo") }
61
68
  s.exec { @server.expect_request(sock, :work_status, "a\0001\0001") }
62
- s.exec { @server.expect_request(sock, :work_complete, "a\0foo") }
69
+ s.exec { @server.expect_request(sock, :work_data, "a\000f") }
70
+ s.exec { @server.expect_request(sock, :work_complete, "a\0oo") }
63
71
 
64
72
  # Test that functions are unregistered correctly.
65
73
  w.exec { worker.remove_ability('echo') }
@@ -250,7 +258,10 @@ class TestWorker < Test::Unit::TestCase
250
258
 
251
259
  # When we give it a job, it should raise an excpetion and notify the server
252
260
  s.exec { @server.send_response(sock, :job_assign, "a\0echo\0foo") }
253
- s.exec { @server.expect_request(sock, :work_exception, "a\0fooexception") }
261
+ s.exec do
262
+ @server.expect_request(sock, :work_warning, "a\0fooexception")
263
+ @server.expect_request(sock, :work_fail, "a")
264
+ end
254
265
 
255
266
  s.wait
256
267
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xing-gearman-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Erat
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2009-07-30 00:00:00 -07:00
17
+ date: 2009-08-04 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -51,6 +51,7 @@ files:
51
51
  - examples/client.php
52
52
  - examples/client.rb
53
53
  - examples/client_background.rb
54
+ - examples/client_data.rb
54
55
  - examples/client_exception.rb
55
56
  - examples/client_prefix.rb
56
57
  - examples/gearman_environment.sh
@@ -59,6 +60,7 @@ files:
59
60
  - examples/server.rb
60
61
  - examples/worker.php
61
62
  - examples/worker.rb
63
+ - examples/worker_data.rb
62
64
  - examples/worker_exception.rb
63
65
  - examples/worker_prefix.rb
64
66
  - gearman-ruby.gemspec
@@ -112,11 +114,13 @@ test_files:
112
114
  - examples/calculus_worker.rb
113
115
  - examples/client.rb
114
116
  - examples/client_background.rb
117
+ - examples/client_data.rb
115
118
  - examples/client_exception.rb
116
119
  - examples/client_prefix.rb
117
120
  - examples/scale_image.rb
118
121
  - examples/scale_image_worker.rb
119
122
  - examples/server.rb
120
123
  - examples/worker.rb
124
+ - examples/worker_data.rb
121
125
  - examples/worker_exception.rb
122
126
  - examples/worker_prefix.rb