sidekiq-clutch 1.0.0 → 2.0.2
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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +12 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +22 -0
- data/lib/sidekiq/clutch.rb +12 -7
- data/lib/sidekiq/clutch/job_wrapper.rb +8 -1
- data/lib/sidekiq/clutch/jobs_collection.rb +11 -1
- data/lib/sidekiq/clutch/version.rb +1 -1
- data/sidekiq-clutch.gemspec +4 -5
- metadata +10 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 796b85ff9627cc5bc227521ee81c318f38fc979a7e963df54c762ee174320564
|
4
|
+
data.tar.gz: 9196201e96688775de3dca64d1322a8709b9641ed9fbbeb9ccdae187e4e7b3b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15b262b976dff8c5fd3034ec4368d8e7058bfb4879234e9ad881893fb00f08aa81c48c9c6b44044b84321606a7ccf6901165c395146fc07cddb0e0bdbece1edd
|
7
|
+
data.tar.gz: de761b630c42ec9d78f82f9281f442c05fc88fb3161522f7190765603129852afbd1675fb2d93a1bd79ec8f46a979b062f29346e7e5406200ae962847babfa6f
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
# 2.0.2 - Sep 24, 2020
|
2
|
+
|
3
|
+
* PERF: Delete keys based on known values, instead of a glob
|
4
|
+
* PERF: Don't bother enqueing a `:complete` callback if no `on_failure` is specified
|
5
|
+
|
6
|
+
# 2.0.1 - Jun 1, 2020
|
7
|
+
|
8
|
+
* CHORE: Bump development dependency versions
|
9
|
+
* CHORE: Add .ruby-version file for easier development
|
10
|
+
|
11
|
+
# 2.0.0 - Feb 5, 2020
|
12
|
+
|
13
|
+
* BREAKING: Treat each parallel block as a distinct step
|
14
|
+
|
15
|
+
# 1.1.0 - Feb 5, 2020
|
16
|
+
|
17
|
+
* FEAT: use Sidekiq's wrapped option for improved logging
|
18
|
+
|
19
|
+
# 1.0.1 - May 7, 2019
|
20
|
+
|
21
|
+
* FIX: don't look up previous results in Redis if the key is nil
|
22
|
+
|
1
23
|
# 1.0.0 - Nov 5, 2018
|
2
24
|
|
3
25
|
Initial release.
|
data/lib/sidekiq/clutch.rb
CHANGED
@@ -10,18 +10,18 @@ module Sidekiq
|
|
10
10
|
@batch = batch || Sidekiq::Batch.new
|
11
11
|
end
|
12
12
|
|
13
|
-
attr_reader :batch, :queue
|
13
|
+
attr_reader :batch, :queue, :parallel_key
|
14
14
|
|
15
15
|
attr_accessor :current_result_key, :on_failure
|
16
16
|
|
17
17
|
def parallel
|
18
|
-
@
|
18
|
+
@parallel_key = SecureRandom.uuid
|
19
19
|
yield
|
20
|
-
@
|
20
|
+
@parallel_key = nil
|
21
21
|
end
|
22
22
|
|
23
23
|
def parallel?
|
24
|
-
|
24
|
+
!!@parallel_key
|
25
25
|
end
|
26
26
|
|
27
27
|
def jobs
|
@@ -54,7 +54,8 @@ module Sidekiq
|
|
54
54
|
return if step.nil?
|
55
55
|
batch.callback_queue = queue if queue
|
56
56
|
batch.on(:success, Sidekiq::Clutch, 'jobs' => jobs_queue.dup, 'result_key' => step['result_key'])
|
57
|
-
|
57
|
+
on_failure_name = on_failure&.name
|
58
|
+
batch.on(:complete, Sidekiq::Clutch, 'on_failure' => on_failure_name) if on_failure_name
|
58
59
|
batch.jobs do
|
59
60
|
if step['series']
|
60
61
|
series_step(step)
|
@@ -102,6 +103,7 @@ module Sidekiq
|
|
102
103
|
options = {
|
103
104
|
'class' => JobWrapper,
|
104
105
|
'queue' => queue || job_options['queue'],
|
106
|
+
'wrapped' => klass,
|
105
107
|
'args' => [batch.bid, klass, params, current_result_key, result_key],
|
106
108
|
'retry' => job_options['retry'],
|
107
109
|
'backtrace' => job_options['backtrace']
|
@@ -111,8 +113,11 @@ module Sidekiq
|
|
111
113
|
|
112
114
|
def clean_up_result_keys(key_base)
|
113
115
|
Sidekiq.redis do |redis|
|
114
|
-
|
115
|
-
|
116
|
+
result_key_index = 1
|
117
|
+
loop do
|
118
|
+
result = redis.del("#{key_base}-#{result_key_index}")
|
119
|
+
result_key_index += 1
|
120
|
+
break if result == 0
|
116
121
|
end
|
117
122
|
end
|
118
123
|
end
|
@@ -21,9 +21,16 @@ module Sidekiq
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
+
def lookup_last_result(key)
|
25
|
+
Sidekiq.redis do |client|
|
26
|
+
client.lrange(key, 0, -1)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
24
30
|
def assign_previous_results(job, last_result_key)
|
25
31
|
return unless job.respond_to?(:previous_results=)
|
26
|
-
job.previous_results =
|
32
|
+
return job.previous_results = [] if last_result_key.nil?
|
33
|
+
job.previous_results = lookup_last_result(last_result_key).map do |r|
|
27
34
|
JSON.parse(r, quirks_mode: true) # quirks_mode allows a bare string or number
|
28
35
|
end
|
29
36
|
end
|
@@ -22,7 +22,7 @@ module Sidekiq
|
|
22
22
|
|
23
23
|
def <<((klass, *params))
|
24
24
|
if @service.parallel?
|
25
|
-
@jobs <<
|
25
|
+
@jobs << new_parallel_step unless continue_existing_parallel_step?
|
26
26
|
@jobs.last['parallel'] << [klass.name, params]
|
27
27
|
else
|
28
28
|
@jobs << { 'series' => [klass.name, params], 'result_key' => next_result_key }
|
@@ -33,6 +33,16 @@ module Sidekiq
|
|
33
33
|
@result_key_index += 1
|
34
34
|
"#{@result_key_prefix}-#{@result_key_index}"
|
35
35
|
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def new_parallel_step
|
40
|
+
{ 'parallel' => [], 'result_key' => next_result_key, 'parallel_key' => @service.parallel_key }
|
41
|
+
end
|
42
|
+
|
43
|
+
def continue_existing_parallel_step?
|
44
|
+
@jobs.last && @jobs.last['parallel_key'] == @service.parallel_key
|
45
|
+
end
|
36
46
|
end
|
37
47
|
end
|
38
48
|
end
|
data/sidekiq-clutch.gemspec
CHANGED
@@ -15,14 +15,13 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
18
|
-
`git ls-files`.split("\n").reject { |f| f.match(%r{^(
|
18
|
+
`git ls-files`.split("\n").reject { |f| f.match(%r{^(spec|\.ruby-version)}) }
|
19
19
|
end
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
22
|
spec.add_dependency 'sidekiq', '>= 5.0.0'
|
23
23
|
|
24
|
-
spec.add_development_dependency '
|
25
|
-
spec.add_development_dependency '
|
26
|
-
spec.add_development_dependency '
|
27
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
24
|
+
spec.add_development_dependency 'bundler', '~> 2.1.4'
|
25
|
+
spec.add_development_dependency 'rake', '~> 13.0.1'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3.9.0'
|
28
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-clutch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Morgan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -24,62 +24,48 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 5.0.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: pry
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 2.1.4
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 2.1.4
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rake
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: 13.0.1
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
54
|
+
version: 13.0.1
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: rspec
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: 3.9.0
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: 3.9.0
|
83
69
|
description: Sidekiq::Clutch provides an ergonomic wrapper API for Sidekiq Batches
|
84
70
|
so you can easily manage serial and parallel jobs.
|
85
71
|
email:
|
@@ -88,6 +74,7 @@ executables: []
|
|
88
74
|
extensions: []
|
89
75
|
extra_rdoc_files: []
|
90
76
|
files:
|
77
|
+
- ".circleci/config.yml"
|
91
78
|
- ".gitignore"
|
92
79
|
- ".rspec"
|
93
80
|
- ".rubocop.yml"
|
@@ -121,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
121
108
|
- !ruby/object:Gem::Version
|
122
109
|
version: '0'
|
123
110
|
requirements: []
|
124
|
-
|
125
|
-
rubygems_version: 2.5.2.3
|
111
|
+
rubygems_version: 3.0.3
|
126
112
|
signing_key:
|
127
113
|
specification_version: 4
|
128
114
|
summary: An ergonomic wrapper API for Sidekiq Batches
|