sidekiq-unique-jobs 4.0.7 → 4.0.8
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.
Potentially problematic release.
This version of sidekiq-unique-jobs might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/LICENSE +9 -18
- data/README.md +1 -1
- data/lib/sidekiq_unique_jobs/lock/until_timeout.rb +2 -5
- data/lib/sidekiq_unique_jobs/unique_args.rb +1 -1
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/sidekiq-unique-jobs.gemspec +1 -1
- data/spec/celluloid_with_fallback.rb +17 -0
- data/spec/jobs/custom_queue_job_with_filter_method.rb +1 -1
- data/spec/jobs/custom_queue_job_with_filter_proc.rb +3 -3
- data/spec/lib/sidekiq_unique_jobs/unique_args_spec.rb +43 -0
- data/spec/spec_helper.rb +1 -8
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64a81ae8142ce1f78d40061b8c1fbe11cd9ec79a
|
4
|
+
data.tar.gz: 6fe4d1d19eaa60088d3a7a46ee9761b7de1cfecb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b0044b2721c29fa5ffbb342c670c2d8f087719c12e7ad59dc9a30e25b9d9a1ba54bd3cdbbe738202bc4f39a1c27835a1e964837ccdec57fc01c43c2ed0efd6e
|
7
|
+
data.tar.gz: 2429e2b73e64cbbdb2972278309ca45ecb1dccff56777c65f15dacd05162c59c755d7a55a1c93cbbc71c13bcc4bfdb71a03496dda881842ddc0b5a3205237008
|
data/LICENSE
CHANGED
@@ -1,22 +1,13 @@
|
|
1
|
-
|
1
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
2
|
+
Version 2, December 2004
|
2
3
|
|
3
|
-
|
4
|
+
Copyright (C) 2015 Mikael Henriksson <mikael@zoolutions.se>
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
6
|
+
Everyone is permitted to copy and distribute verbatim or modified
|
7
|
+
copies of this license document, and changing it is allowed as long
|
8
|
+
as the name is changed.
|
12
9
|
|
13
|
-
|
14
|
-
|
10
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
11
|
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
15
12
|
|
16
|
-
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
13
|
+
0. You just DO WHAT THE FUCK YOU WANT TO.
|
data/README.md
CHANGED
@@ -30,7 +30,7 @@ Or install it yourself as:
|
|
30
30
|
|
31
31
|
## A word on locking
|
32
32
|
|
33
|
-
Like @mperham mentions on
|
33
|
+
Like @mperham mentions on [this wiki page](https://github.com/mperham/sidekiq/wiki/Related-Projects#unique-jobs) it is hard to enforce uniqueness with redis in a distributed redis setting.
|
34
34
|
|
35
35
|
To make things worse there are many ways of wanting to enforce uniqueness.
|
36
36
|
|
@@ -2,11 +2,8 @@ module SidekiqUniqueJobs
|
|
2
2
|
module Lock
|
3
3
|
class UntilTimeout < UntilExecuted
|
4
4
|
def unlock(scope)
|
5
|
-
if scope.to_sym == :server
|
6
|
-
|
7
|
-
else
|
8
|
-
fail ArgumentError, "#{scope} middleware can't #{__method__} #{unique_key}"
|
9
|
-
end
|
5
|
+
return true if scope.to_sym == :server
|
6
|
+
fail ArgumentError, "#{scope} middleware can't #{__method__} #{unique_key}"
|
10
7
|
end
|
11
8
|
|
12
9
|
def execute(_callback)
|
@@ -21,7 +21,7 @@ module SidekiqUniqueJobs
|
|
21
21
|
@item = job
|
22
22
|
@worker_class ||= worker_class_constantize(@item[CLASS_KEY])
|
23
23
|
@item[UNIQUE_PREFIX_KEY] ||= unique_prefix
|
24
|
-
@item[UNIQUE_ARGS_KEY]
|
24
|
+
@item[UNIQUE_ARGS_KEY] = unique_args(@item[ARGS_KEY]) # SIC! Calculate unique_args unconditionally
|
25
25
|
@item[UNIQUE_DIGEST_KEY] ||= unique_digest
|
26
26
|
end
|
27
27
|
end
|
data/sidekiq-unique-jobs.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = ['mikael@zoolutions.se']
|
7
7
|
gem.description = gem.summary = 'The unique jobs that were removed from sidekiq'
|
8
8
|
gem.homepage = 'https://github.com/mhenrixon/sidekiq-unique-jobs'
|
9
|
-
gem.license = '
|
9
|
+
gem.license = 'WTFPL-2.0'
|
10
10
|
|
11
11
|
# gem.executables = ['']
|
12
12
|
gem.files = `git ls-files`.split("\n")
|
@@ -0,0 +1,17 @@
|
|
1
|
+
begin
|
2
|
+
require 'celluloid/current'
|
3
|
+
rescue LoadError
|
4
|
+
warn 'Celluloid is old'
|
5
|
+
begin
|
6
|
+
require 'celluloid' rescue LoadError
|
7
|
+
rescue LoadError
|
8
|
+
warn 'Celluloid not found'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
begin
|
12
|
+
require 'celluloid' rescue LoadError
|
13
|
+
rescue LoadError
|
14
|
+
# do nothing we already know
|
15
|
+
end
|
16
|
+
|
17
|
+
Celluloid.boot if defined?(Celluloid)
|
@@ -2,9 +2,9 @@ class CustomQueueJobWithFilterProc < CustomQueueJob
|
|
2
2
|
# slightly contrived example of munging args to the
|
3
3
|
# worker and removing a random bit.
|
4
4
|
sidekiq_options unique: :until_timeout,
|
5
|
-
unique_args: (lambda do
|
5
|
+
unique_args: (lambda do |args|
|
6
6
|
options = args.extract_options!
|
7
|
-
options.delete(
|
8
|
-
|
7
|
+
options.delete('random')
|
8
|
+
args + [options]
|
9
9
|
end)
|
10
10
|
end
|
@@ -4,6 +4,49 @@ RSpec.describe SidekiqUniqueJobs::UniqueArgs do
|
|
4
4
|
let(:item) { { 'class' => 'UntilExecutedJob', 'queue' => 'myqueue', 'args' => [[1, 2]] } }
|
5
5
|
subject { described_class.new(item) }
|
6
6
|
|
7
|
+
describe '#unique_digest' do
|
8
|
+
let(:item) { item_options.merge('args' => [1, 2, 'type' => 'it'] ) }
|
9
|
+
|
10
|
+
shared_examples 'unique digest' do
|
11
|
+
context 'given another item' do
|
12
|
+
let(:another_subject) { described_class.new(another_item) }
|
13
|
+
|
14
|
+
context 'with the same unique args' do
|
15
|
+
let(:another_item) { item_options.merge('args' => [1, 2, 'type' => 'it']) }
|
16
|
+
it 'equals to unique_digest for that item' do
|
17
|
+
expect(subject.unique_digest).to eq(another_subject.unique_digest)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'with different unique args' do
|
22
|
+
let(:another_item) { item_options.merge('args' => [1, 3, 'type' => 'that']) }
|
23
|
+
it 'differs from unique_digest for that item' do
|
24
|
+
expect(subject.unique_digest).to_not eq(another_subject.unique_digest)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when unique_args is a proc' do
|
31
|
+
let(:item_options) do
|
32
|
+
{ 'class' => 'UntilExecutedJob', 'queue' => 'myqueue',
|
33
|
+
'unique_args' => Proc.new { |args| args[1] } }
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
it_behaves_like 'unique digest'
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'when unique_args is a symbol' do
|
41
|
+
let(:item_options) do
|
42
|
+
{ 'class' => 'UniqueJobWithFilterMethod', 'queue' => 'myqueue',
|
43
|
+
'unique_args' => :filtered_args }
|
44
|
+
end
|
45
|
+
|
46
|
+
it_behaves_like 'unique digest'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
7
50
|
describe '#unique_args_enabled?' do
|
8
51
|
with_default_worker_options(unique: :until_executed, unique_args: ->(args) { args[1]['test'] }) do
|
9
52
|
with_sidekiq_options_for(UntilExecutedJob, unique_args: :unique_args) do
|
data/spec/spec_helper.rb
CHANGED
@@ -16,14 +16,7 @@ end
|
|
16
16
|
require 'rspec'
|
17
17
|
require 'rspec/its'
|
18
18
|
|
19
|
-
|
20
|
-
require 'celluloid/current'
|
21
|
-
rescue LoadError
|
22
|
-
warn 'Celluloid is old'
|
23
|
-
require 'celluloid'
|
24
|
-
end
|
25
|
-
require 'celluloid/test'
|
26
|
-
Celluloid.boot
|
19
|
+
require 'celluloid_with_fallback'
|
27
20
|
require 'sidekiq'
|
28
21
|
require 'sidekiq/util'
|
29
22
|
require 'sidekiq-unique-jobs'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-unique-jobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikael Henriksson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -150,6 +150,7 @@ files:
|
|
150
150
|
- redis/release_lock.lua
|
151
151
|
- redis/synchronize.lua
|
152
152
|
- sidekiq-unique-jobs.gemspec
|
153
|
+
- spec/celluloid_with_fallback.rb
|
153
154
|
- spec/jobs/another_unique_job.rb
|
154
155
|
- spec/jobs/custom_queue_job.rb
|
155
156
|
- spec/jobs/custom_queue_job_with_filter_method.rb
|
@@ -191,7 +192,7 @@ files:
|
|
191
192
|
- spec/support/unique_macros.rb
|
192
193
|
homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
|
193
194
|
licenses:
|
194
|
-
-
|
195
|
+
- WTFPL-2.0
|
195
196
|
metadata: {}
|
196
197
|
post_install_message: 'WARNING: VERSION 4.0.0 HAS BREAKING CHANGES! Please see Readme
|
197
198
|
for info'
|
@@ -210,9 +211,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
211
|
version: '0'
|
211
212
|
requirements: []
|
212
213
|
rubyforge_project:
|
213
|
-
rubygems_version: 2.4.
|
214
|
+
rubygems_version: 2.4.5.1
|
214
215
|
signing_key:
|
215
216
|
specification_version: 4
|
216
217
|
summary: The unique jobs that were removed from sidekiq
|
217
218
|
test_files: []
|
218
|
-
has_rdoc:
|