sidekiq 4.1.0 → 4.1.1
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/{Contributing.md → .github/contributing.md} +0 -0
- data/.travis.yml +0 -1
- data/Changes.md +15 -0
- data/Ent-Changes.md +9 -0
- data/Pro-Changes.md +23 -1
- data/README.md +16 -11
- data/lib/sidekiq.rb +38 -5
- data/lib/sidekiq/cli.rb +4 -6
- data/lib/sidekiq/logging.rb +1 -0
- data/lib/sidekiq/middleware/server/retry_jobs.rb +3 -4
- data/lib/sidekiq/processor.rb +1 -0
- data/lib/sidekiq/redis_connection.rb +2 -1
- data/lib/sidekiq/scheduled.rb +10 -1
- data/lib/sidekiq/util.rb +0 -14
- data/lib/sidekiq/version.rb +1 -1
- data/lib/sidekiq/web_helpers.rb +1 -9
- data/test/test_cli.rb +75 -5
- data/test/test_retry_exhausted.rb +37 -11
- data/test/test_sidekiq.rb +7 -0
- data/test/test_util.rb +2 -6
- data/web/locales/cs.yml +11 -1
- data/web/locales/fr.yml +19 -10
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3831fb91606790c4912c4fb8d96a560e49aa9b5
|
4
|
+
data.tar.gz: 74e50d973aab4a58f00f7176ea640dd52f37e218
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5b098a51e90fff82508ddfa1b565d1e06758e99de904870795919314987439231aeeb1b315212eed9dcc771a9464909fa437e6990b799e8c245c52506b66eee
|
7
|
+
data.tar.gz: e1a1ae8f6c3217333b69187041ac8e1c974ebc29aa862b9abab284ae312d8680d960191defb1e67d7a3e6ee95c9d9a924cfc308f5e96e06a38157e0e0dd45ebe
|
File without changes
|
data/.travis.yml
CHANGED
data/Changes.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# Sidekiq Changes
|
2
2
|
|
3
|
+
4.1.1
|
4
|
+
-----------
|
5
|
+
|
6
|
+
- Much better behavior when Redis disappears and comes back. [#2866]
|
7
|
+
- Update FR locale [dbachet]
|
8
|
+
- Don't fill logfile in case of Redis downtime [#2860]
|
9
|
+
- Allow definition of a global retries_exhausted handler. [#2807]
|
10
|
+
```ruby
|
11
|
+
Sidekiq.configure_server do |config|
|
12
|
+
config.default_retries_exhausted = -> (job, ex) do
|
13
|
+
Sidekiq.logger.info "#{job['class']} job is now dead"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
```
|
17
|
+
|
3
18
|
4.1.0
|
4
19
|
-----------
|
5
20
|
|
data/Ent-Changes.md
CHANGED
@@ -3,6 +3,15 @@ Sidekiq Enterprise Changelog
|
|
3
3
|
|
4
4
|
Please see [http://sidekiq.org/](http://sidekiq.org/) for more details and how to buy.
|
5
5
|
|
6
|
+
1.2.1
|
7
|
+
-------------
|
8
|
+
|
9
|
+
- Multi-Process mode can now monitor the RSS memory of children and
|
10
|
+
restart any that grow too large. To limit children to 1GB each:
|
11
|
+
```
|
12
|
+
MAXMEM_KB=1048576 COUNT=2 bundle exec sidekiqswarm ...
|
13
|
+
```
|
14
|
+
|
6
15
|
1.2.0
|
7
16
|
-------------
|
8
17
|
|
data/Pro-Changes.md
CHANGED
@@ -3,7 +3,29 @@ Sidekiq Pro Changelog
|
|
3
3
|
|
4
4
|
Please see [http://sidekiq.org/](http://sidekiq.org/) for more details and how to buy.
|
5
5
|
|
6
|
-
|
6
|
+
3.0.6
|
7
|
+
---------
|
8
|
+
|
9
|
+
- Fix race condition on reliable fetch shutdown
|
10
|
+
|
11
|
+
3.0.5
|
12
|
+
---------
|
13
|
+
|
14
|
+
- Statsd metrics now account for ActiveJob class names
|
15
|
+
- Allow reliable fetch internals to be overridden [jonhyman]
|
16
|
+
|
17
|
+
3.0.4
|
18
|
+
---------
|
19
|
+
|
20
|
+
- Queue pausing no longer requires reliable fetch. [#2786]
|
21
|
+
|
22
|
+
3.0.3, 2.1.4
|
23
|
+
------------
|
24
|
+
|
25
|
+
- Convert Lua-based `Sidekiq::Queue#delete_by_class` to Ruby-based, to
|
26
|
+
avoid O(N^2) performance and possible Redis failure. [#2806]
|
27
|
+
|
28
|
+
3.0.2
|
7
29
|
-----------
|
8
30
|
|
9
31
|
- Make job registration with batch part of the atomic push so batch
|
data/README.md
CHANGED
@@ -11,7 +11,7 @@ Simple, efficient background processing for Ruby.
|
|
11
11
|
|
12
12
|
Sidekiq uses threads to handle many jobs at the same time in the
|
13
13
|
same process. It does not require Rails but will integrate tightly with
|
14
|
-
Rails
|
14
|
+
Rails to make background processing dead simple.
|
15
15
|
|
16
16
|
Sidekiq is compatible with Resque. It uses the exact same
|
17
17
|
message format as Resque so it can integrate into an existing Resque processing farm.
|
@@ -31,10 +31,9 @@ DelayedJob 4.1.1 | - | - | 465 sec | 215 jobs/sec
|
|
31
31
|
Requirements
|
32
32
|
-----------------
|
33
33
|
|
34
|
-
|
35
|
-
are untested but might work fine. CRuby 1.9 is not supported.
|
34
|
+
Sidekiq supports CRuby 2.0+ and JRuby 9k.
|
36
35
|
|
37
|
-
All Rails releases
|
36
|
+
All Rails releases >= 3.2 are officially supported.
|
38
37
|
|
39
38
|
Redis 2.8 or greater is required. 3.0.3+ is recommended for large
|
40
39
|
installations with thousands of worker threads.
|
@@ -63,23 +62,29 @@ features, a commercial-friendly license and allow you to support high
|
|
63
62
|
quality open source development all at the same time. Please see the
|
64
63
|
[Sidekiq](http://sidekiq.org/) homepage for more detail.
|
65
64
|
|
65
|
+
Subscribe to the **[quarterly newsletter](https://tinyletter.com/sidekiq)** to stay informed about the latest
|
66
|
+
features and changes to Sidekiq and its bigger siblings.
|
67
|
+
|
66
68
|
|
67
69
|
Problems?
|
68
70
|
-----------------
|
69
71
|
|
70
72
|
**Please do not directly email any Sidekiq committers with questions or problems.** A community is best served when discussions are held in public.
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
-
but bug reports or feature requests suggestions should still go through [issues on Github](https://github.com/mperham/sidekiq/issues). Release announcements are made to the [@sidekiq](https://twitter.com/sidekiq) Twitter account. **No support via Twitter.**
|
74
|
+
If you have a problem, please review the [FAQ](https://github.com/mperham/sidekiq/wiki/FAQ) and [Troubleshooting](https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting) wiki pages.
|
75
|
+
Searching the [issues](https://github.com/mperham/sidekiq/issues) for your problem is also a good idea.
|
75
76
|
|
76
|
-
|
77
|
-
See the [Sidekiq support page](http://sidekiq.org/support).
|
77
|
+
Useful resources:
|
78
78
|
|
79
|
-
|
79
|
+
* Product documentation is in the [wiki](https://github.com/mperham/sidekiq/wiki).
|
80
|
+
* Release announcements are made to the [@sidekiq](https://twitter.com/sidekiq) Twitter account.
|
81
|
+
* Here's a [Reddit forum](https://reddit.com/r/sidekiq) dedicated to Sidekiq discussion
|
82
|
+
* The [Sidekiq tag](https://stackoverflow.com/questions/tagged/sidekiq) on Stack Overflow has lots of useful Q & A.
|
80
83
|
|
81
|
-
|
84
|
+
**No support via Twitter, 140 characters is not enough.**
|
82
85
|
|
86
|
+
Every Friday morning 9am Pacific is Sidekiq happy hour: I video chat and answer questions.
|
87
|
+
See the [Sidekiq support page](http://sidekiq.org/support).
|
83
88
|
|
84
89
|
Thanks
|
85
90
|
-----------------
|
data/lib/sidekiq.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'sidekiq/version'
|
3
|
-
fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby
|
3
|
+
fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.0.0." if RUBY_PLATFORM != 'java' && RUBY_VERSION < '2.0.0'
|
4
4
|
|
5
5
|
require 'sidekiq/logging'
|
6
6
|
require 'sidekiq/client'
|
@@ -37,6 +37,14 @@ module Sidekiq
|
|
37
37
|
'queue' => 'default'
|
38
38
|
}
|
39
39
|
|
40
|
+
FAKE_INFO = {
|
41
|
+
"redis_version" => "9.9.9",
|
42
|
+
"uptime_in_days" => "9999",
|
43
|
+
"connected_clients" => "9999",
|
44
|
+
"used_memory_human" => "9P",
|
45
|
+
"used_memory_peak_human" => "9P"
|
46
|
+
}.freeze
|
47
|
+
|
40
48
|
def self.❨╯°□°❩╯︵┻━┻
|
41
49
|
puts "Calm down, yo."
|
42
50
|
end
|
@@ -44,7 +52,6 @@ module Sidekiq
|
|
44
52
|
def self.options
|
45
53
|
@options ||= DEFAULTS.dup
|
46
54
|
end
|
47
|
-
|
48
55
|
def self.options=(opts)
|
49
56
|
@options = opts
|
50
57
|
end
|
@@ -91,6 +98,24 @@ module Sidekiq
|
|
91
98
|
end
|
92
99
|
end
|
93
100
|
|
101
|
+
def self.redis_info
|
102
|
+
redis do |conn|
|
103
|
+
begin
|
104
|
+
# admin commands can't go through redis-namespace starting
|
105
|
+
# in redis-namespace 2.0
|
106
|
+
if conn.respond_to?(:namespace)
|
107
|
+
conn.redis.info
|
108
|
+
else
|
109
|
+
conn.info
|
110
|
+
end
|
111
|
+
rescue Redis::CommandError => ex
|
112
|
+
#2850 return fake version when INFO command has (probably) been renamed
|
113
|
+
raise unless ex.message =~ /unknown command/
|
114
|
+
FAKE_INFO
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
94
119
|
def self.redis_pool
|
95
120
|
@redis ||= Sidekiq::RedisConnection.create
|
96
121
|
end
|
@@ -132,15 +157,24 @@ module Sidekiq
|
|
132
157
|
def self.default_worker_options=(hash)
|
133
158
|
@default_worker_options = default_worker_options.merge(hash.stringify_keys)
|
134
159
|
end
|
135
|
-
|
136
160
|
def self.default_worker_options
|
137
161
|
defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS
|
138
162
|
end
|
139
163
|
|
164
|
+
# Sidekiq.configure_server do |config|
|
165
|
+
# config.default_retries_exhausted = -> (job, ex) do
|
166
|
+
# end
|
167
|
+
# end
|
168
|
+
def self.default_retries_exhausted=(prok)
|
169
|
+
@default_retries_exhausted = prok
|
170
|
+
end
|
171
|
+
def self.default_retries_exhausted
|
172
|
+
@default_retries_exhausted
|
173
|
+
end
|
174
|
+
|
140
175
|
def self.load_json(string)
|
141
176
|
JSON.parse(string)
|
142
177
|
end
|
143
|
-
|
144
178
|
def self.dump_json(object)
|
145
179
|
JSON.generate(object)
|
146
180
|
end
|
@@ -148,7 +182,6 @@ module Sidekiq
|
|
148
182
|
def self.logger
|
149
183
|
Sidekiq::Logging.logger
|
150
184
|
end
|
151
|
-
|
152
185
|
def self.logger=(log)
|
153
186
|
Sidekiq::Logging.logger = log
|
154
187
|
end
|
data/lib/sidekiq/cli.rb
CHANGED
@@ -65,12 +65,10 @@ module Sidekiq
|
|
65
65
|
logger.info Sidekiq::LICENSE
|
66
66
|
logger.info "Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org" unless defined?(::Sidekiq::Pro)
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
raise "You are using Redis v#{ver}, Sidekiq requires Redis v2.8.0 or greater" if ver < '2.8'
|
73
|
-
end
|
68
|
+
# touch the connection pool so it is created before we
|
69
|
+
# fire startup and start multithreading.
|
70
|
+
ver = Sidekiq.redis_info['redis_version']
|
71
|
+
raise "You are using Redis v#{ver}, Sidekiq requires Redis v2.8.0 or greater" if ver < '2.8'
|
74
72
|
|
75
73
|
# Before this point, the process is initializing with just the main thread.
|
76
74
|
# Starting here the process will now have multiple threads running.
|
data/lib/sidekiq/logging.rb
CHANGED
@@ -137,11 +137,10 @@ module Sidekiq
|
|
137
137
|
end
|
138
138
|
|
139
139
|
def retries_exhausted(worker, msg, exception)
|
140
|
-
logger.debug { "
|
140
|
+
logger.debug { "Retries exhausted for job" }
|
141
141
|
begin
|
142
|
-
|
143
|
-
|
144
|
-
end
|
142
|
+
block = worker.sidekiq_retries_exhausted_block || Sidekiq.default_retries_exhausted
|
143
|
+
block.call(msg, exception) if block
|
145
144
|
rescue => e
|
146
145
|
handle_exception(e, { context: "Error calling retries_exhausted for #{worker.class}", job: msg })
|
147
146
|
end
|
data/lib/sidekiq/processor.rb
CHANGED
@@ -44,7 +44,8 @@ module Sidekiq
|
|
44
44
|
require 'redis/namespace'
|
45
45
|
Redis::Namespace.new(namespace, :redis => client)
|
46
46
|
rescue LoadError
|
47
|
-
Sidekiq.logger.error("redis-namespace gem not included in Gemfile
|
47
|
+
Sidekiq.logger.error("Your Redis configuration use the namespace '#{namespace}' but the redis-namespace gem not included in Gemfile." \
|
48
|
+
"Add the gem to your Gemfile in case you would like to keep using a namespace, otherwise remove the namespace parameter.")
|
48
49
|
exit(-127)
|
49
50
|
end
|
50
51
|
else
|
data/lib/sidekiq/scheduled.rb
CHANGED
@@ -77,7 +77,9 @@ module Sidekiq
|
|
77
77
|
# Most likely a problem with redis networking.
|
78
78
|
# Punt and try again at the next interval
|
79
79
|
logger.error ex.message
|
80
|
-
|
80
|
+
ex.backtrace.each do |bt|
|
81
|
+
logger.error(bt)
|
82
|
+
end
|
81
83
|
end
|
82
84
|
end
|
83
85
|
|
@@ -86,6 +88,13 @@ module Sidekiq
|
|
86
88
|
def wait
|
87
89
|
@sleeper.pop(random_poll_interval)
|
88
90
|
rescue Timeout::Error
|
91
|
+
# expected
|
92
|
+
rescue => ex
|
93
|
+
# if poll_interval_average hasn't been calculated yet, we can
|
94
|
+
# raise an error trying to reach Redis.
|
95
|
+
logger.error ex.message
|
96
|
+
logger.error ex.backtrace.first
|
97
|
+
sleep 5
|
89
98
|
end
|
90
99
|
|
91
100
|
# Calculates a random interval that is ±50% the desired average.
|
data/lib/sidekiq/util.rb
CHANGED
@@ -57,19 +57,5 @@ module Sidekiq
|
|
57
57
|
end
|
58
58
|
arr.clear
|
59
59
|
end
|
60
|
-
|
61
|
-
def want_a_hertz_donut?
|
62
|
-
# what's a hertz donut?
|
63
|
-
# punch! Hurts, don't it?
|
64
|
-
info = Sidekiq.redis {|c| c.info }
|
65
|
-
if info['connected_clients'].to_i > 1000 && info['hz'].to_i >= 10
|
66
|
-
Sidekiq.logger.warn { "Your Redis `hz` setting is too high at #{info['hz']}. See mperham/sidekiq#2431. Set it to 3 in #{info[:config_file]}" }
|
67
|
-
true
|
68
|
-
else
|
69
|
-
Sidekiq.logger.debug { "Redis hz: #{info['hz']}. Client count: #{info['connected_clients']}" }
|
70
|
-
false
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
60
|
end
|
75
61
|
end
|
data/lib/sidekiq/version.rb
CHANGED
data/lib/sidekiq/web_helpers.rb
CHANGED
@@ -122,15 +122,7 @@ module Sidekiq
|
|
122
122
|
end
|
123
123
|
|
124
124
|
def redis_info
|
125
|
-
Sidekiq.
|
126
|
-
# admin commands can't go through redis-namespace starting
|
127
|
-
# in redis-namespace 2.0
|
128
|
-
if conn.respond_to?(:namespace)
|
129
|
-
conn.redis.info
|
130
|
-
else
|
131
|
-
conn.info
|
132
|
-
end
|
133
|
-
end
|
125
|
+
Sidekiq.redis_info
|
134
126
|
end
|
135
127
|
|
136
128
|
def root_path
|
data/test/test_cli.rb
CHANGED
@@ -309,18 +309,88 @@ class TestCli < Sidekiq::Test
|
|
309
309
|
end
|
310
310
|
|
311
311
|
describe 'misc' do
|
312
|
+
before do
|
313
|
+
@cli = Sidekiq::CLI.new
|
314
|
+
end
|
315
|
+
|
312
316
|
it 'handles interrupts' do
|
313
|
-
cli = Sidekiq::CLI.new
|
314
317
|
assert_raises Interrupt do
|
315
|
-
cli.handle_signal('INT')
|
318
|
+
@cli.handle_signal('INT')
|
316
319
|
end
|
317
320
|
assert_raises Interrupt do
|
318
|
-
cli.handle_signal('TERM')
|
321
|
+
@cli.handle_signal('TERM')
|
319
322
|
end
|
320
|
-
cli.handle_signal('USR2')
|
321
|
-
cli.handle_signal('TTIN')
|
322
323
|
end
|
323
324
|
|
325
|
+
describe 'handles USR1 and USR2' do
|
326
|
+
before do
|
327
|
+
@tmp_log_path = '/tmp/sidekiq.log'
|
328
|
+
@cli.parse(['sidekiq', '-L', @tmp_log_path, '-r', './test/fake_env.rb'])
|
329
|
+
end
|
330
|
+
|
331
|
+
after do
|
332
|
+
File.unlink @tmp_log_path if File.exists? @tmp_log_path
|
333
|
+
end
|
334
|
+
|
335
|
+
it 'shuts down the worker' do
|
336
|
+
count = 0
|
337
|
+
Sidekiq.options[:lifecycle_events][:quiet] = [proc {
|
338
|
+
count += 1
|
339
|
+
}]
|
340
|
+
@cli.launcher = Sidekiq::Launcher.new(Sidekiq.options)
|
341
|
+
@cli.handle_signal('USR1')
|
342
|
+
|
343
|
+
assert_equal 1, count
|
344
|
+
end
|
345
|
+
|
346
|
+
it 'reopens logs' do
|
347
|
+
mock = MiniTest::Mock.new
|
348
|
+
# reopen_logs returns number of files reopened so mock that
|
349
|
+
mock.expect(:call, 1)
|
350
|
+
|
351
|
+
Sidekiq::Logging.stub(:reopen_logs, mock) do
|
352
|
+
@cli.handle_signal('USR2')
|
353
|
+
end
|
354
|
+
mock.verify
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
describe 'handles TTIN' do
|
359
|
+
before do
|
360
|
+
@tmp_log_path = '/tmp/sidekiq.log'
|
361
|
+
@cli.parse(['sidekiq', '-L', @tmp_log_path, '-r', './test/fake_env.rb'])
|
362
|
+
@mock_thread = MiniTest::Mock.new
|
363
|
+
@mock_thread.expect(:[], 'interrupt_test', ['label'])
|
364
|
+
end
|
365
|
+
|
366
|
+
after do
|
367
|
+
File.unlink @tmp_log_path if File.exists? @tmp_log_path
|
368
|
+
end
|
369
|
+
|
370
|
+
describe 'with backtrace' do
|
371
|
+
it 'logs backtrace' do
|
372
|
+
2.times { @mock_thread.expect(:backtrace, ['something went wrong']) }
|
373
|
+
|
374
|
+
Thread.stub(:list, [@mock_thread]) do
|
375
|
+
@cli.handle_signal('TTIN')
|
376
|
+
assert_match(/something went wrong/, File.read(@tmp_log_path), "didn't include the log message")
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
describe 'without backtrace' do
|
382
|
+
it 'logs no backtrace available' do
|
383
|
+
@mock_thread.expect(:backtrace, nil)
|
384
|
+
|
385
|
+
Thread.stub(:list, [@mock_thread]) do
|
386
|
+
@cli.handle_signal('TTIN')
|
387
|
+
assert_match(/no backtrace available/, File.read(@tmp_log_path), "didn't include the log message")
|
388
|
+
end
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
|
324
394
|
it 'can fire events' do
|
325
395
|
count = 0
|
326
396
|
Sidekiq.options[:lifecycle_events][:startup] = [proc {
|
@@ -7,11 +7,11 @@ class TestRetryExhausted < Sidekiq::Test
|
|
7
7
|
class NewWorker
|
8
8
|
include Sidekiq::Worker
|
9
9
|
|
10
|
-
class_attribute :exhausted_called, :
|
10
|
+
class_attribute :exhausted_called, :exhausted_job, :exhausted_exception
|
11
11
|
|
12
|
-
sidekiq_retries_exhausted do |
|
12
|
+
sidekiq_retries_exhausted do |job, e|
|
13
13
|
self.exhausted_called = true
|
14
|
-
self.
|
14
|
+
self.exhausted_job = job
|
15
15
|
self.exhausted_exception = e
|
16
16
|
end
|
17
17
|
end
|
@@ -19,18 +19,18 @@ class TestRetryExhausted < Sidekiq::Test
|
|
19
19
|
class OldWorker
|
20
20
|
include Sidekiq::Worker
|
21
21
|
|
22
|
-
class_attribute :exhausted_called, :
|
22
|
+
class_attribute :exhausted_called, :exhausted_job, :exhausted_exception
|
23
23
|
|
24
|
-
sidekiq_retries_exhausted do |
|
24
|
+
sidekiq_retries_exhausted do |job|
|
25
25
|
self.exhausted_called = true
|
26
|
-
self.
|
26
|
+
self.exhausted_job = job
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def cleanup
|
31
31
|
[NewWorker, OldWorker].each do |worker_class|
|
32
32
|
worker_class.exhausted_called = nil
|
33
|
-
worker_class.
|
33
|
+
worker_class.exhausted_job = nil
|
34
34
|
worker_class.exhausted_exception = nil
|
35
35
|
end
|
36
36
|
end
|
@@ -96,7 +96,7 @@ class TestRetryExhausted < Sidekiq::Test
|
|
96
96
|
end
|
97
97
|
|
98
98
|
|
99
|
-
it 'passes
|
99
|
+
it 'passes job and exception to retries exhausted block' do
|
100
100
|
raised_error = assert_raises RuntimeError do
|
101
101
|
handler.call(new_worker, job('retry_count' => 0, 'retry' => 1), 'default') do
|
102
102
|
raise 'kerblammo!'
|
@@ -104,11 +104,11 @@ class TestRetryExhausted < Sidekiq::Test
|
|
104
104
|
end
|
105
105
|
|
106
106
|
assert new_worker.exhausted_called?
|
107
|
-
assert_equal raised_error.message, new_worker.
|
107
|
+
assert_equal raised_error.message, new_worker.exhausted_job['error_message']
|
108
108
|
assert_equal raised_error, new_worker.exhausted_exception
|
109
109
|
end
|
110
110
|
|
111
|
-
it 'passes
|
111
|
+
it 'passes job to retries exhausted block' do
|
112
112
|
raised_error = assert_raises RuntimeError do
|
113
113
|
handler.call(old_worker, job('retry_count' => 0, 'retry' => 1), 'default') do
|
114
114
|
raise 'kerblammo!'
|
@@ -116,8 +116,34 @@ class TestRetryExhausted < Sidekiq::Test
|
|
116
116
|
end
|
117
117
|
|
118
118
|
assert old_worker.exhausted_called?
|
119
|
-
assert_equal raised_error.message, old_worker.
|
119
|
+
assert_equal raised_error.message, old_worker.exhausted_job['error_message']
|
120
120
|
assert_equal nil, new_worker.exhausted_exception
|
121
121
|
end
|
122
|
+
|
123
|
+
it 'allows a global default handler' do
|
124
|
+
begin
|
125
|
+
class Foobar
|
126
|
+
include Sidekiq::Worker
|
127
|
+
end
|
128
|
+
|
129
|
+
exhausted_job = nil
|
130
|
+
exhausted_exception = nil
|
131
|
+
Sidekiq.default_retries_exhausted = lambda do |job, ex|
|
132
|
+
exhausted_job = job
|
133
|
+
exhausted_exception = ex
|
134
|
+
end
|
135
|
+
f = Foobar.new
|
136
|
+
raised_error = assert_raises RuntimeError do
|
137
|
+
handler.call(f, job('retry_count' => 0, 'retry' => 1), 'default') do
|
138
|
+
raise 'kerblammo!'
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
assert exhausted_job
|
143
|
+
assert_equal raised_error, exhausted_exception
|
144
|
+
ensure
|
145
|
+
Sidekiq.default_retries_exhausted = nil
|
146
|
+
end
|
147
|
+
end
|
122
148
|
end
|
123
149
|
end
|
data/test/test_sidekiq.rb
CHANGED
@@ -96,4 +96,11 @@ class TestSidekiq < Sidekiq::Test
|
|
96
96
|
assert_equal counts[0] + 1, counts[1]
|
97
97
|
end
|
98
98
|
end
|
99
|
+
|
100
|
+
describe 'redis info' do
|
101
|
+
it 'calls the INFO command which returns at least redis_version' do
|
102
|
+
output = Sidekiq.redis_info
|
103
|
+
assert_includes output.keys, "redis_version"
|
104
|
+
end
|
105
|
+
end
|
99
106
|
end
|
data/test/test_util.rb
CHANGED
@@ -6,11 +6,7 @@ class TestUtil < Sidekiq::Test
|
|
6
6
|
include Sidekiq::Util
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
11
|
-
output = capture_logging(Logger::DEBUG) do
|
12
|
-
assert_equal false, obj.want_a_hertz_donut?
|
13
|
-
end
|
14
|
-
assert_includes output, "hz: 10"
|
9
|
+
def test_nothing_atm
|
10
|
+
assert true
|
15
11
|
end
|
16
12
|
end
|
data/web/locales/cs.yml
CHANGED
@@ -33,6 +33,7 @@ cs:
|
|
33
33
|
NextRetry: Další opakování
|
34
34
|
RetryCount: Počet opakování
|
35
35
|
RetryNow: Opakovat teď
|
36
|
+
Kill: Zabít
|
36
37
|
LastRetry: Poslední opakování
|
37
38
|
OriginallyFailed: Původně se nezdařilo
|
38
39
|
AreYouSure: Jste si jisti?
|
@@ -61,8 +62,17 @@ cs:
|
|
61
62
|
Failures: Selhání
|
62
63
|
DeadJobs: Mrtvé úkoly
|
63
64
|
NoDeadJobsFound: Nebyly nalezeny žádné mrtvé úkoly
|
64
|
-
Dead:
|
65
|
+
Dead: Mrtvé
|
65
66
|
Processes: Procesy
|
66
67
|
Thread: Vlákno
|
67
68
|
Threads: Vlákna
|
68
69
|
Jobs: Úkoly
|
70
|
+
Paused: Pozastavené
|
71
|
+
Stop: Zastavit
|
72
|
+
Quiet: Ztišit
|
73
|
+
StopAll: Zastavit vše
|
74
|
+
QuietAll: Ztišit vše
|
75
|
+
PollingInterval: Interval obnovení
|
76
|
+
Plugins: Doplňky
|
77
|
+
NotYetEnqueued: Ještě nezařazeno
|
78
|
+
CreatedAt: Vytvořeno
|
data/web/locales/fr.yml
CHANGED
@@ -6,12 +6,12 @@ fr:
|
|
6
6
|
Namespace: Namespace
|
7
7
|
Realtime: Temps réel
|
8
8
|
History: Historique
|
9
|
-
Busy:
|
9
|
+
Busy: En cours
|
10
10
|
Processed: Traitées
|
11
11
|
Failed: Échouées
|
12
|
-
Scheduled:
|
12
|
+
Scheduled: Planifiées
|
13
13
|
Retries: Tentatives
|
14
|
-
Enqueued: En
|
14
|
+
Enqueued: En attente
|
15
15
|
Worker: Travailleur
|
16
16
|
LivePoll: Temps réel
|
17
17
|
StopPolling: Arrêt du temps réel
|
@@ -20,8 +20,8 @@ fr:
|
|
20
20
|
Job: Tâche
|
21
21
|
Arguments: Arguments
|
22
22
|
Extras: Extras
|
23
|
-
Started:
|
24
|
-
ShowAll:
|
23
|
+
Started: Démarrée
|
24
|
+
ShowAll: Tout montrer
|
25
25
|
CurrentMessagesInQueue: Messages actuellement dans <span class='title'>%{queue}</span>
|
26
26
|
Delete: Supprimer
|
27
27
|
AddToQueue: Ajouter à la queue
|
@@ -35,7 +35,7 @@ fr:
|
|
35
35
|
RetryNow: Réessayer maintenant
|
36
36
|
Kill: Tuer
|
37
37
|
LastRetry: Dernier essai
|
38
|
-
OriginallyFailed: Échec
|
38
|
+
OriginallyFailed: Échec initial
|
39
39
|
AreYouSure: Êtes-vous certain ?
|
40
40
|
DeleteAll: Tout supprimer
|
41
41
|
RetryAll: Tout réessayer
|
@@ -45,11 +45,11 @@ fr:
|
|
45
45
|
ErrorMessage: Message d’erreur
|
46
46
|
ErrorBacktrace: Backtrace d’erreur
|
47
47
|
GoBack: ← Retour
|
48
|
-
NoScheduledFound:
|
48
|
+
NoScheduledFound: Aucune tâche planifiée n'a été trouvée
|
49
49
|
When: Quand
|
50
50
|
ScheduledJobs: Tâches planifiées
|
51
|
-
idle:
|
52
|
-
active:
|
51
|
+
idle: inactif
|
52
|
+
active: actif
|
53
53
|
Version: Version
|
54
54
|
Connections: Connexions
|
55
55
|
MemoryUsage: Mémoire utilisée
|
@@ -62,8 +62,17 @@ fr:
|
|
62
62
|
Failures: Echecs
|
63
63
|
DeadJobs: Tâches mortes
|
64
64
|
NoDeadJobsFound: Aucune tâche morte n'a été trouvée
|
65
|
-
Dead:
|
65
|
+
Dead: Mortes
|
66
66
|
Processes: Processus
|
67
67
|
Thread: Thread
|
68
68
|
Threads: Threads
|
69
69
|
Jobs: Tâches
|
70
|
+
Paused: Mise en pause
|
71
|
+
Stop: Arrêter
|
72
|
+
Quiet: Clôturer
|
73
|
+
StopAll: Tout arrêter
|
74
|
+
QuietAll: Tout clôturer
|
75
|
+
PollingInterval: Interval de rafraîchissement
|
76
|
+
Plugins: Plugins
|
77
|
+
NotYetEnqueued: Pas encore en file d'attente
|
78
|
+
CreatedAt: Créée le
|
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.1.
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Perham
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -167,13 +167,13 @@ executables:
|
|
167
167
|
extensions: []
|
168
168
|
extra_rdoc_files: []
|
169
169
|
files:
|
170
|
+
- ".github/contributing.md"
|
170
171
|
- ".gitignore"
|
171
172
|
- ".travis.yml"
|
172
173
|
- 3.0-Upgrade.md
|
173
174
|
- 4.0-Upgrade.md
|
174
175
|
- COMM-LICENSE
|
175
176
|
- Changes.md
|
176
|
-
- Contributing.md
|
177
177
|
- Ent-Changes.md
|
178
178
|
- Gemfile
|
179
179
|
- LICENSE
|