sidekiq-unique-jobs 5.0.4 → 5.0.5
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/.gitignore +2 -0
- data/CHANGELOG.md +3 -0
- data/README.md +1 -1
- data/lib/sidekiq-unique-jobs.rb +2 -2
- data/lib/sidekiq_unique_jobs/lock/while_executing.rb +5 -4
- data/lib/sidekiq_unique_jobs/script_mock.rb +12 -12
- data/lib/sidekiq_unique_jobs/scripts.rb +3 -3
- data/lib/sidekiq_unique_jobs/unlockable.rb +1 -1
- data/lib/sidekiq_unique_jobs/util.rb +2 -2
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/sidekiq-unique-jobs.gemspec +5 -5
- metadata +6 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f35cb3be6bdca4175e0c98f2a2ea068d2d35b26
|
4
|
+
data.tar.gz: b1e359ad759c2db79f8bda05daaf8f04ea392124
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f82651ba910aa23ff9dc5d291a44640290860fd9ef43281fcd4cb41eabad5e997dc495b54547b5341271acd7d3e36c06dc8eaca68015bdb5706468ff234919c
|
7
|
+
data.tar.gz: a338ce8b7b65dbca292b0665aadf7fb3df43e00eaf341c2ebb96b13e36c525d033c074648e125c55566ab99c0b4d38cbf0674519b6b9573ec7d38cd3d436e365
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -135,7 +135,7 @@ The method or the proc can return a modified version of args without the transie
|
|
135
135
|
```ruby
|
136
136
|
class UniqueJobWithFilterMethod
|
137
137
|
include Sidekiq::Worker
|
138
|
-
sidekiq_options unique: :
|
138
|
+
sidekiq_options unique: :until_and_while_executing,
|
139
139
|
unique_args: :unique_args
|
140
140
|
|
141
141
|
def self.unique_args(name, id, options)
|
data/lib/sidekiq-unique-jobs.rb
CHANGED
@@ -51,7 +51,7 @@ module SidekiqUniqueJobs
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def namespace
|
54
|
-
@namespace ||= connection { |
|
54
|
+
@namespace ||= connection { |conn| conn.respond_to?(:namespace) ? conn.namespace : nil }
|
55
55
|
end
|
56
56
|
|
57
57
|
# Attempt to constantize a string worker_class argument, always
|
@@ -68,7 +68,7 @@ module SidekiqUniqueJobs
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def redis_version
|
71
|
-
@redis_version ||= connection { |
|
71
|
+
@redis_version ||= connection { |conn| conn.info('server')['redis_version'] }
|
72
72
|
end
|
73
73
|
|
74
74
|
def connection(redis_pool = nil)
|
@@ -3,19 +3,20 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
module Lock
|
5
5
|
class WhileExecuting
|
6
|
+
MUTEX = Mutex.new
|
7
|
+
|
6
8
|
def self.synchronize(item, redis_pool = nil)
|
7
9
|
new(item, redis_pool).synchronize { yield }
|
8
10
|
end
|
9
11
|
|
10
12
|
def initialize(item, redis_pool = nil)
|
11
13
|
@item = item
|
12
|
-
@mutex = Mutex.new
|
13
14
|
@redis_pool = redis_pool
|
14
15
|
@unique_digest = "#{create_digest}:run"
|
15
16
|
end
|
16
17
|
|
17
18
|
def synchronize
|
18
|
-
|
19
|
+
MUTEX.lock
|
19
20
|
sleep 0.1 until locked?
|
20
21
|
|
21
22
|
yield
|
@@ -23,8 +24,8 @@ module SidekiqUniqueJobs
|
|
23
24
|
logger.fatal { "the unique_key: #{@unique_digest} needs to be unlocked manually" }
|
24
25
|
raise
|
25
26
|
ensure
|
26
|
-
SidekiqUniqueJobs.connection(@redis_pool) { |
|
27
|
-
|
27
|
+
SidekiqUniqueJobs.connection(@redis_pool) { |conn| conn.del @unique_digest }
|
28
|
+
MUTEX.unlock
|
28
29
|
end
|
29
30
|
|
30
31
|
def locked?
|
@@ -15,46 +15,46 @@ module SidekiqUniqueJobs
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def acquire_lock(redis_pool, options = {})
|
18
|
-
connection(redis_pool) do |
|
18
|
+
connection(redis_pool) do |conn|
|
19
19
|
unique_key = options[:keys][0]
|
20
20
|
job_id = options[:argv][0]
|
21
21
|
expires = options[:argv][1].to_i
|
22
|
-
stored_jid =
|
22
|
+
stored_jid = conn.get(unique_key)
|
23
23
|
|
24
24
|
return (stored_jid == job_id) ? 1 : 0 if stored_jid
|
25
25
|
|
26
|
-
return 0 unless
|
27
|
-
|
26
|
+
return 0 unless conn.set(unique_key, job_id, nx: true, ex: expires)
|
27
|
+
conn.hsetnx(SidekiqUniqueJobs::HASH_KEY, job_id, unique_key)
|
28
28
|
return 1
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
def release_lock(redis_pool, options = {})
|
33
|
-
connection(redis_pool) do |
|
33
|
+
connection(redis_pool) do |conn|
|
34
34
|
unique_key = options[:keys][0]
|
35
35
|
job_id = options[:argv][0]
|
36
|
-
stored_jid =
|
36
|
+
stored_jid = conn.get(unique_key)
|
37
37
|
|
38
38
|
return -1 unless stored_jid
|
39
39
|
return 0 unless stored_jid == job_id || stored_jid == '2'
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
conn.del(unique_key)
|
42
|
+
conn.hdel(SidekiqUniqueJobs::HASH_KEY, job_id)
|
43
43
|
return 1
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def synchronize(redis_pool, options = {})
|
48
|
-
connection(redis_pool) do |
|
48
|
+
connection(redis_pool) do |conn|
|
49
49
|
unique_key = options[:keys][0]
|
50
50
|
time = options[:argv][0].to_i
|
51
51
|
expires = options[:argv][1].to_f
|
52
52
|
|
53
|
-
return 1 if
|
53
|
+
return 1 if conn.set(unique_key, time + expires, nx: true, ex: expires)
|
54
54
|
|
55
|
-
stored_time =
|
55
|
+
stored_time = conn.get(unique_key)
|
56
56
|
if stored_time && stored_time < time
|
57
|
-
if
|
57
|
+
if conn.set(unique_key, time + expires, xx: true, ex: expires)
|
58
58
|
return 1
|
59
59
|
end
|
60
60
|
end
|
@@ -31,9 +31,9 @@ module SidekiqUniqueJobs
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def internal_call(file_name, redis_pool, options = {})
|
34
|
-
connection(redis_pool) do |
|
35
|
-
SCRIPT_SHAS[file_name] =
|
36
|
-
|
34
|
+
connection(redis_pool) do |conn|
|
35
|
+
SCRIPT_SHAS[file_name] = conn.script(:load, script_source(file_name)) if SCRIPT_SHAS[file_name].nil?
|
36
|
+
conn.evalsha(SCRIPT_SHAS[file_name], options)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
data/sidekiq-unique-jobs.gemspec
CHANGED
@@ -13,20 +13,20 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://github.com/mhenrixon/sidekiq-unique-jobs'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.bindir =
|
16
|
+
spec.bindir = 'bin'
|
17
17
|
spec.executables = %w[jobs]
|
18
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
19
|
f.match(%r{^(test|spec|features|gemfiles|pkg|rails_example|tmp)/})
|
20
20
|
end
|
21
21
|
|
22
|
-
spec.require_paths = [
|
22
|
+
spec.require_paths = ['lib']
|
23
23
|
spec.add_dependency 'sidekiq', '>= 4.0', '<= 6.0'
|
24
24
|
spec.add_dependency 'thor', '~> 0'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
27
|
-
spec.add_development_dependency 'rake', '~> 12.0'
|
27
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
28
28
|
spec.add_development_dependency 'timecop', '~> 0.8'
|
29
|
-
spec.add_development_dependency 'yard', '~> 0.9
|
30
|
-
spec.add_development_dependency 'gem-release', '~> 0.7
|
29
|
+
spec.add_development_dependency 'yard', '~> 0.9'
|
30
|
+
spec.add_development_dependency 'gem-release', '~> 0.7'
|
31
31
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.8'
|
32
32
|
end
|
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: 5.0.
|
4
|
+
version: 5.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikael Henriksson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sidekiq
|
@@ -65,9 +65,6 @@ dependencies:
|
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
67
|
version: '12.0'
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0'
|
71
68
|
type: :development
|
72
69
|
prerelease: false
|
73
70
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,9 +72,6 @@ dependencies:
|
|
75
72
|
- - "~>"
|
76
73
|
- !ruby/object:Gem::Version
|
77
74
|
version: '12.0'
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0'
|
81
75
|
- !ruby/object:Gem::Dependency
|
82
76
|
name: timecop
|
83
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,28 +92,28 @@ dependencies:
|
|
98
92
|
requirements:
|
99
93
|
- - "~>"
|
100
94
|
- !ruby/object:Gem::Version
|
101
|
-
version: 0.9
|
95
|
+
version: '0.9'
|
102
96
|
type: :development
|
103
97
|
prerelease: false
|
104
98
|
version_requirements: !ruby/object:Gem::Requirement
|
105
99
|
requirements:
|
106
100
|
- - "~>"
|
107
101
|
- !ruby/object:Gem::Version
|
108
|
-
version: 0.9
|
102
|
+
version: '0.9'
|
109
103
|
- !ruby/object:Gem::Dependency
|
110
104
|
name: gem-release
|
111
105
|
requirement: !ruby/object:Gem::Requirement
|
112
106
|
requirements:
|
113
107
|
- - "~>"
|
114
108
|
- !ruby/object:Gem::Version
|
115
|
-
version: 0.7
|
109
|
+
version: '0.7'
|
116
110
|
type: :development
|
117
111
|
prerelease: false
|
118
112
|
version_requirements: !ruby/object:Gem::Requirement
|
119
113
|
requirements:
|
120
114
|
- - "~>"
|
121
115
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.7
|
116
|
+
version: '0.7'
|
123
117
|
- !ruby/object:Gem::Dependency
|
124
118
|
name: codeclimate-test-reporter
|
125
119
|
requirement: !ruby/object:Gem::Requirement
|