resque-integration 3.4.1 → 3.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.drone.yml +1 -1
- data/CHANGELOG.md +8 -1
- data/lib/resque/integration/configuration.rb +18 -0
- data/lib/resque/integration/version.rb +1 -1
- data/lib/resque/integration.rb +19 -18
- data/spec/internal/app/jobs/retries_argument_error_job.rb +10 -0
- data/spec/internal/app/jobs/retries_job.rb +10 -0
- data/spec/internal/app/jobs/retries_standard_error_job.rb +10 -0
- data/spec/internal/app/services/dummy_for_retries_service.rb +5 -0
- data/spec/resque/integration/configuration_spec.rb +12 -0
- data/spec/resque/integration_spec.rb +31 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b25c3af3ff9bec74ef1a6c8355f622a8d8ed916a
|
4
|
+
data.tar.gz: fcebf66e66aeb96194e051ddf3381efb4b828ed1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 151ccd775abb8e8df97149a90cdbe679a87367c6fb4a91b05116b45000f9d6eb83bfc773331c05ed87bfdc7a2eabf80c705c27d889f59c5aaa9408ed8dcb0659
|
7
|
+
data.tar.gz: 0c1a6450232a75c71d18168622b5db0b9069e15ca58befd2f67624e22a705965838887308ad75a198240ec9ff2114e43d69fba479734dac447ef206f1300f4da
|
data/.drone.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,14 @@
|
|
1
|
-
# v3.
|
1
|
+
# v3.5.0
|
2
2
|
|
3
|
+
* 2018-09-06 [49717a5](../../commit/49717a5) - __(Mikhail Nelaev)__ Release 3.5.0
|
3
4
|
* 2018-08-21 [b56dcc8](../../commit/b56dcc8) - __(Artem Napolskih)__ chore: Add automatic publication
|
4
5
|
* 2018-08-15 [5e90b55](../../commit/5e90b55) - __(Artem Napolskih)__ feat: rails 5-x support added
|
6
|
+
* 2018-08-09 [3fa8ce0](../../commit/3fa8ce0) - __(terentev)__ feat: move temporary_exceptions to yml config
|
7
|
+
https://jira.railsc.ru/browse/GOODS-1418
|
8
|
+
|
9
|
+
* 2018-08-02 [528feab](../../commit/528feab) - __(terentev)__ feat: adds ability for retry jobs after temporary errors
|
10
|
+
https://jira.railsc.ru/browse/GOODS-1418
|
11
|
+
|
5
12
|
* 2018-06-05 [3fc2608](../../commit/3fc2608) - __(Pavel Galkin)__ Release 3.4.0
|
6
13
|
* 2018-06-05 [6ec7a38](../../commit/6ec7a38) - __(Pavel Galkin)__ feat: resque:expire task
|
7
14
|
https://jira.railsc.ru/browse/PC4-21225
|
@@ -209,6 +209,24 @@ module Resque
|
|
209
209
|
self['resque.god_log_level'] || 'info'
|
210
210
|
end
|
211
211
|
|
212
|
+
# Public: Temporary exceptions.
|
213
|
+
#
|
214
|
+
# Examples
|
215
|
+
#
|
216
|
+
# temporary_exceptions
|
217
|
+
# # => {PG::TRDeadlockDetected => 20, Net::OpenTimeout => 123}
|
218
|
+
#
|
219
|
+
# Returns Hash.
|
220
|
+
def temporary_exceptions
|
221
|
+
return @temporary_exceptions if defined?(@temporary_exceptions)
|
222
|
+
|
223
|
+
return {} unless self['resque.temporary_exceptions']
|
224
|
+
|
225
|
+
@temporary_exceptions = self['resque.temporary_exceptions'].each_with_object({}) do |(key, value), result|
|
226
|
+
result[key.constantize] = value
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
212
230
|
private
|
213
231
|
def load(path)
|
214
232
|
if File.exists?(path)
|
data/lib/resque/integration.rb
CHANGED
@@ -100,33 +100,34 @@ module Resque
|
|
100
100
|
|
101
101
|
# Extend resque-retry.
|
102
102
|
#
|
103
|
-
# options - Hash
|
103
|
+
# options - Hash of retry options (default: {}):
|
104
|
+
# :limit - Integer max number of retry attempts (default: 2)
|
105
|
+
# :delay - Integer seconds between retry attempts (default: 60)
|
106
|
+
# :exceptions - Array or Hash of specific exceptions to retry (optional)
|
107
|
+
# :temporary - boolean retry on temporary exceptions list (default: false)
|
108
|
+
# :expire_retry_key_after - Integer expire of retry key in redis (default: 3200)
|
104
109
|
#
|
105
|
-
#
|
106
|
-
# :delay - Integer (default: 60)
|
107
|
-
# :expire_retry_key_after - Integer (default: 3200), истечение ключа в секундах. Если
|
108
|
-
#
|
109
|
-
# t - среднее время выполнения одного джоба
|
110
|
-
# n - текущее кол-во джобов в очереди
|
111
|
-
# k - кол-во воркеров
|
112
|
-
#
|
113
|
-
# то expire_retry_key_after >= t * n / k
|
114
|
-
#
|
115
|
-
# Иначе ключ истечет, прежде чем джоб отработает.
|
116
|
-
#
|
117
|
-
#
|
118
|
-
# Returns nothing
|
110
|
+
# Returns nothing.
|
119
111
|
def retrys(options = {})
|
120
|
-
if unique?
|
121
|
-
raise '`retrys` should be declared higher in code than `unique`'
|
122
|
-
end
|
112
|
+
raise '`retries` should be declared higher in code than `unique`' if unique?
|
123
113
|
|
124
114
|
extend Resque::Plugins::Retry
|
125
115
|
|
126
116
|
@retry_limit = options.fetch(:limit, 2)
|
127
117
|
@retry_delay = options.fetch(:delay, 60)
|
118
|
+
|
119
|
+
@retry_exceptions = options[:exceptions] if options.key? :exceptions
|
120
|
+
|
121
|
+
if options[:temporary]
|
122
|
+
@retry_exceptions = @retry_exceptions && @retry_exceptions.dup || {}
|
123
|
+
@retry_exceptions = @retry_exceptions.product([@retry_delay]).to_h if @retry_exceptions.is_a? Array
|
124
|
+
|
125
|
+
@retry_exceptions.reverse_merge!(Resque.config.temporary_exceptions)
|
126
|
+
end
|
127
|
+
|
128
128
|
@expire_retry_key_after = options.fetch(:expire_retry_key_after, 1.hour.seconds)
|
129
129
|
end
|
130
|
+
alias retries retrys
|
130
131
|
|
131
132
|
# Mark Job as ordered
|
132
133
|
def ordered(options = {})
|
@@ -54,6 +54,18 @@ describe Resque::Integration::Configuration do
|
|
54
54
|
it { expect(config.run_at_exit_hooks?).to be_falsey }
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
describe '#temporary_exceptions' do
|
59
|
+
context 'when default' do
|
60
|
+
it { expect(config.temporary_exceptions).to eq({}) }
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'when defined' do
|
64
|
+
let(:config_yaml) { {'resque' => {'temporary_exceptions' => {'StandardError' => 12}}} }
|
65
|
+
|
66
|
+
it { expect(config.temporary_exceptions).to eq(StandardError => 12) }
|
67
|
+
end
|
68
|
+
end
|
57
69
|
end
|
58
70
|
|
59
71
|
describe Resque::Integration::Configuration::Notifier do
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
require 'spec_helper'
|
3
2
|
|
4
3
|
RSpec.describe Resque::Integration do
|
@@ -102,4 +101,35 @@ RSpec.describe Resque::Integration do
|
|
102
101
|
end
|
103
102
|
end
|
104
103
|
end
|
104
|
+
|
105
|
+
describe 'retries' do
|
106
|
+
context 'with default params' do
|
107
|
+
let(:job) { Resque::Job.new(:test_retries, 'class' => 'RetriesJob', 'args' => ['meta']) }
|
108
|
+
|
109
|
+
it do
|
110
|
+
expect { job.perform }.to raise_error StandardError
|
111
|
+
expect(Resque.delayed_queue_schedule_size).to eq 1
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'with custom params' do
|
116
|
+
context 'with StandardError in exceptions' do
|
117
|
+
let(:job) { Resque::Job.new(:test_retries, 'class' => 'RetriesStandardErrorJob', 'args' => ['meta']) }
|
118
|
+
|
119
|
+
it do
|
120
|
+
expect { job.perform }.to raise_error StandardError
|
121
|
+
expect(Resque.delayed_queue_schedule_size).to eq 1
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'with ArgumentError in exceptions' do
|
126
|
+
let(:job) { Resque::Job.new(:test_retries, 'class' => 'RetriesArgumentErrorJob', 'args' => ['meta']) }
|
127
|
+
|
128
|
+
it do
|
129
|
+
expect { job.perform }.to raise_error StandardError
|
130
|
+
expect(Resque.delayed_queue_schedule_size).to eq 0
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
105
135
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque-integration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexei Mikhailov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-09-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: resque
|
@@ -349,6 +349,10 @@ files:
|
|
349
349
|
- lib/resque/integration/version.rb
|
350
350
|
- resque-integration.gemspec
|
351
351
|
- spec/fixtures/resque_queues.yml
|
352
|
+
- spec/internal/app/jobs/retries_argument_error_job.rb
|
353
|
+
- spec/internal/app/jobs/retries_job.rb
|
354
|
+
- spec/internal/app/jobs/retries_standard_error_job.rb
|
355
|
+
- spec/internal/app/services/dummy_for_retries_service.rb
|
352
356
|
- spec/resque/controllers/jobs_controller_spec.rb
|
353
357
|
- spec/resque/integration/configuration_spec.rb
|
354
358
|
- spec/resque/integration/continuous_spec.rb
|
@@ -389,6 +393,10 @@ specification_version: 4
|
|
389
393
|
summary: Seamless integration of resque with resque-progress and resque-lock
|
390
394
|
test_files:
|
391
395
|
- spec/fixtures/resque_queues.yml
|
396
|
+
- spec/internal/app/jobs/retries_argument_error_job.rb
|
397
|
+
- spec/internal/app/jobs/retries_job.rb
|
398
|
+
- spec/internal/app/jobs/retries_standard_error_job.rb
|
399
|
+
- spec/internal/app/services/dummy_for_retries_service.rb
|
392
400
|
- spec/resque/controllers/jobs_controller_spec.rb
|
393
401
|
- spec/resque/integration/configuration_spec.rb
|
394
402
|
- spec/resque/integration/continuous_spec.rb
|