sidekiq 3.5.4 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sidekiq might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/4.0-Upgrade.md +50 -0
- data/Changes.md +15 -3
- data/Ent-Changes.md +27 -0
- data/Gemfile +2 -1
- data/Pro-3.0-Upgrade.md +46 -0
- data/Pro-Changes.md +21 -0
- data/README.md +4 -4
- data/bin/sidekiqctl +8 -2
- data/bin/sidekiqload +20 -6
- data/lib/sidekiq.rb +24 -11
- data/lib/sidekiq/api.rb +2 -2
- data/lib/sidekiq/cli.rb +19 -29
- data/lib/sidekiq/client.rb +0 -5
- data/lib/sidekiq/fetch.rb +35 -111
- data/lib/sidekiq/launcher.rb +105 -46
- data/lib/sidekiq/manager.rb +77 -180
- data/lib/sidekiq/middleware/server/retry_jobs.rb +1 -1
- data/lib/sidekiq/processor.rb +119 -96
- data/lib/sidekiq/redis_connection.rb +23 -5
- data/lib/sidekiq/scheduled.rb +47 -26
- data/lib/sidekiq/testing.rb +84 -14
- data/lib/sidekiq/util.rb +7 -0
- data/lib/sidekiq/version.rb +1 -1
- data/lib/sidekiq/web_helpers.rb +8 -1
- data/sidekiq.gemspec +2 -2
- data/test/helper.rb +30 -5
- data/test/test_actors.rb +137 -0
- data/test/test_api.rb +395 -394
- data/test/test_fetch.rb +2 -57
- data/test/test_launcher.rb +80 -0
- data/test/test_manager.rb +13 -132
- data/test/test_middleware.rb +3 -5
- data/test/test_processor.rb +20 -57
- data/test/test_scheduled.rb +2 -2
- data/test/test_testing_fake.rb +64 -1
- data/web/assets/stylesheets/application.css +4 -0
- data/web/views/_footer.erb +2 -7
- metadata +30 -25
- data/lib/sidekiq/actor.rb +0 -39
data/test/test_scheduled.rb
CHANGED
@@ -37,7 +37,7 @@ class TestScheduled < Sidekiq::Test
|
|
37
37
|
@scheduled.schedule (Time.now - 60).to_f, @future_2
|
38
38
|
@scheduled.schedule (Time.now - 60).to_f, @future_3
|
39
39
|
|
40
|
-
@poller.
|
40
|
+
@poller.enqueue
|
41
41
|
|
42
42
|
assert_equal 0, Sidekiq::Queue.new("queue_1").size
|
43
43
|
assert_equal 1, Sidekiq::Queue.new("queue_2").size
|
@@ -62,7 +62,7 @@ class TestScheduled < Sidekiq::Test
|
|
62
62
|
end
|
63
63
|
|
64
64
|
Time.stub(:now, enqueued_time) do
|
65
|
-
@poller.
|
65
|
+
@poller.enqueue
|
66
66
|
|
67
67
|
Sidekiq.redis do |conn|
|
68
68
|
%w(queue:queue_1 queue:queue_2 queue:queue_4 queue:queue_5).each do |queue_name|
|
data/test/test_testing_fake.rb
CHANGED
@@ -54,6 +54,7 @@ class TestTesting < Sidekiq::Test
|
|
54
54
|
|
55
55
|
after do
|
56
56
|
Sidekiq::Testing.disable!
|
57
|
+
Sidekiq::Queues.clear_all
|
57
58
|
end
|
58
59
|
|
59
60
|
it 'stubs the async call' do
|
@@ -93,7 +94,7 @@ class TestTesting < Sidekiq::Test
|
|
93
94
|
it 'stubs the enqueue_to call' do
|
94
95
|
assert_equal 0, EnqueuedWorker.jobs.size
|
95
96
|
assert Sidekiq::Client.enqueue_to('someq', EnqueuedWorker, 1, 2)
|
96
|
-
assert_equal 1,
|
97
|
+
assert_equal 1, Sidekiq::Queues['someq'].size
|
97
98
|
end
|
98
99
|
|
99
100
|
it 'executes all stored jobs' do
|
@@ -263,6 +264,68 @@ class TestTesting < Sidekiq::Test
|
|
263
264
|
it 'can execute a job' do
|
264
265
|
DirectWorker.execute_job(DirectWorker.new, [2, 3])
|
265
266
|
end
|
267
|
+
end
|
268
|
+
|
269
|
+
describe 'queue testing' do
|
270
|
+
before do
|
271
|
+
require 'sidekiq/testing'
|
272
|
+
Sidekiq::Testing.fake!
|
273
|
+
end
|
274
|
+
|
275
|
+
after do
|
276
|
+
Sidekiq::Testing.disable!
|
277
|
+
Sidekiq::Queues.clear_all
|
278
|
+
end
|
266
279
|
|
280
|
+
class QueueWorker
|
281
|
+
include Sidekiq::Worker
|
282
|
+
def perform(a, b)
|
283
|
+
a + b
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
class AltQueueWorker
|
288
|
+
include Sidekiq::Worker
|
289
|
+
sidekiq_options queue: :alt
|
290
|
+
def perform(a, b)
|
291
|
+
a + b
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
it 'finds enqueued jobs' do
|
296
|
+
assert_equal 0, Sidekiq::Queues["default"].size
|
297
|
+
|
298
|
+
QueueWorker.perform_async(1, 2)
|
299
|
+
QueueWorker.perform_async(1, 2)
|
300
|
+
AltQueueWorker.perform_async(1, 2)
|
301
|
+
|
302
|
+
assert_equal 2, Sidekiq::Queues["default"].size
|
303
|
+
assert_equal [1, 2], Sidekiq::Queues["default"].first["args"]
|
304
|
+
|
305
|
+
assert_equal 1, Sidekiq::Queues["alt"].size
|
306
|
+
end
|
307
|
+
|
308
|
+
it 'clears out all queues' do
|
309
|
+
assert_equal 0, Sidekiq::Queues["default"].size
|
310
|
+
|
311
|
+
QueueWorker.perform_async(1, 2)
|
312
|
+
QueueWorker.perform_async(1, 2)
|
313
|
+
AltQueueWorker.perform_async(1, 2)
|
314
|
+
|
315
|
+
Sidekiq::Queues.clear_all
|
316
|
+
|
317
|
+
assert_equal 0, Sidekiq::Queues["default"].size
|
318
|
+
assert_equal 0, Sidekiq::Queues["alt"].size
|
319
|
+
end
|
320
|
+
|
321
|
+
it 'finds jobs enqueued by client' do
|
322
|
+
Sidekiq::Client.push(
|
323
|
+
'class' => 'NonExistentWorker',
|
324
|
+
'queue' => 'missing',
|
325
|
+
'args' => [1]
|
326
|
+
)
|
327
|
+
|
328
|
+
assert_equal 1, Sidekiq::Queues["missing"].size
|
329
|
+
end
|
267
330
|
end
|
268
331
|
end
|
data/web/views/_footer.erb
CHANGED
@@ -6,16 +6,11 @@
|
|
6
6
|
<p class="navbar-text" style="color:white;"><%= product_version %></p>
|
7
7
|
</li>
|
8
8
|
<li>
|
9
|
-
<p class="navbar-text redis-url"
|
9
|
+
<p class="navbar-text redis-url" title="<%= redis_connection_and_namespace %>"><%= redis_connection_and_namespace %></p>
|
10
10
|
</li>
|
11
11
|
<li>
|
12
|
-
<p class="navbar-text"><%=
|
12
|
+
<p class="navbar-text"><%= Time.now.utc.strftime('%H:%M:%S UTC') %></p>
|
13
13
|
</li>
|
14
|
-
<% if namespace %>
|
15
|
-
<li>
|
16
|
-
<p class="navbar-text redis-namespace"><%= t('Namespace') %>: <%= namespace %></p>
|
17
|
-
</li>
|
18
|
-
<% end %>
|
19
14
|
</ul>
|
20
15
|
</div>
|
21
16
|
</div>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Perham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -31,73 +31,73 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: 3.2.1
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: connection_pool
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '2.2'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 2.2.0
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '2.2'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
52
|
+
version: 2.2.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
name:
|
54
|
+
name: json
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 2.2.0
|
59
|
+
version: '1.0'
|
63
60
|
type: :runtime
|
64
61
|
prerelease: false
|
65
62
|
version_requirements: !ruby/object:Gem::Requirement
|
66
63
|
requirements:
|
67
64
|
- - "~>"
|
68
65
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
version: 2.2.0
|
66
|
+
version: '1.0'
|
73
67
|
- !ruby/object:Gem::Dependency
|
74
|
-
name:
|
68
|
+
name: concurrent-ruby
|
75
69
|
requirement: !ruby/object:Gem::Requirement
|
76
70
|
requirements:
|
77
71
|
- - "~>"
|
78
72
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0
|
73
|
+
version: '1.0'
|
80
74
|
type: :runtime
|
81
75
|
prerelease: false
|
82
76
|
version_requirements: !ruby/object:Gem::Requirement
|
83
77
|
requirements:
|
84
78
|
- - "~>"
|
85
79
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0
|
80
|
+
version: '1.0'
|
87
81
|
- !ruby/object:Gem::Dependency
|
88
|
-
name:
|
82
|
+
name: redis-namespace
|
89
83
|
requirement: !ruby/object:Gem::Requirement
|
90
84
|
requirements:
|
91
85
|
- - "~>"
|
92
86
|
- !ruby/object:Gem::Version
|
93
|
-
version: '1.
|
94
|
-
|
87
|
+
version: '1.5'
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.5.2
|
91
|
+
type: :development
|
95
92
|
prerelease: false
|
96
93
|
version_requirements: !ruby/object:Gem::Requirement
|
97
94
|
requirements:
|
98
95
|
- - "~>"
|
99
96
|
- !ruby/object:Gem::Version
|
100
|
-
version: '1.
|
97
|
+
version: '1.5'
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.5.2
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: sinatra
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -184,6 +184,7 @@ files:
|
|
184
184
|
- ".gitignore"
|
185
185
|
- ".travis.yml"
|
186
186
|
- 3.0-Upgrade.md
|
187
|
+
- 4.0-Upgrade.md
|
187
188
|
- COMM-LICENSE
|
188
189
|
- Changes.md
|
189
190
|
- Contributing.md
|
@@ -191,6 +192,7 @@ files:
|
|
191
192
|
- Gemfile
|
192
193
|
- LICENSE
|
193
194
|
- Pro-2.0-Upgrade.md
|
195
|
+
- Pro-3.0-Upgrade.md
|
194
196
|
- Pro-Changes.md
|
195
197
|
- README.md
|
196
198
|
- Rakefile
|
@@ -202,7 +204,6 @@ files:
|
|
202
204
|
- lib/generators/sidekiq/templates/worker_test.rb.erb
|
203
205
|
- lib/generators/sidekiq/worker_generator.rb
|
204
206
|
- lib/sidekiq.rb
|
205
|
-
- lib/sidekiq/actor.rb
|
206
207
|
- lib/sidekiq/api.rb
|
207
208
|
- lib/sidekiq/cli.rb
|
208
209
|
- lib/sidekiq/client.rb
|
@@ -239,12 +240,14 @@ files:
|
|
239
240
|
- test/fake_env.rb
|
240
241
|
- test/fixtures/en.yml
|
241
242
|
- test/helper.rb
|
243
|
+
- test/test_actors.rb
|
242
244
|
- test/test_api.rb
|
243
245
|
- test/test_cli.rb
|
244
246
|
- test/test_client.rb
|
245
247
|
- test/test_exception_handler.rb
|
246
248
|
- test/test_extensions.rb
|
247
249
|
- test/test_fetch.rb
|
250
|
+
- test/test_launcher.rb
|
248
251
|
- test/test_logging.rb
|
249
252
|
- test/test_manager.rb
|
250
253
|
- test/test_middleware.rb
|
@@ -378,7 +381,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
378
381
|
version: '0'
|
379
382
|
requirements: []
|
380
383
|
rubyforge_project:
|
381
|
-
rubygems_version: 2.5
|
384
|
+
rubygems_version: 2.4.5
|
382
385
|
signing_key:
|
383
386
|
specification_version: 4
|
384
387
|
summary: Simple, efficient background processing for Ruby
|
@@ -388,12 +391,14 @@ test_files:
|
|
388
391
|
- test/fake_env.rb
|
389
392
|
- test/fixtures/en.yml
|
390
393
|
- test/helper.rb
|
394
|
+
- test/test_actors.rb
|
391
395
|
- test/test_api.rb
|
392
396
|
- test/test_cli.rb
|
393
397
|
- test/test_client.rb
|
394
398
|
- test/test_exception_handler.rb
|
395
399
|
- test/test_extensions.rb
|
396
400
|
- test/test_fetch.rb
|
401
|
+
- test/test_launcher.rb
|
397
402
|
- test/test_logging.rb
|
398
403
|
- test/test_manager.rb
|
399
404
|
- test/test_middleware.rb
|
data/lib/sidekiq/actor.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
module Sidekiq
|
2
|
-
module Actor
|
3
|
-
|
4
|
-
module ClassMethods
|
5
|
-
def trap_exit(*args)
|
6
|
-
end
|
7
|
-
def new_link(*args)
|
8
|
-
new(*args)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
module InstanceMethods
|
13
|
-
def current_actor
|
14
|
-
self
|
15
|
-
end
|
16
|
-
def after(interval)
|
17
|
-
end
|
18
|
-
def alive?
|
19
|
-
@dead = false unless defined?(@dead)
|
20
|
-
!@dead
|
21
|
-
end
|
22
|
-
def terminate
|
23
|
-
@dead = true
|
24
|
-
end
|
25
|
-
def defer
|
26
|
-
yield
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.included(klass)
|
31
|
-
if $TESTING
|
32
|
-
klass.__send__(:include, InstanceMethods)
|
33
|
-
klass.__send__(:extend, ClassMethods)
|
34
|
-
else
|
35
|
-
klass.__send__(:include, Celluloid)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|