sidekiq-unique-jobs 5.0.4 → 5.0.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of sidekiq-unique-jobs might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11b1c4aca9391461a5744ff361b1bd1d549a5d1e
4
- data.tar.gz: d336770bd8f907edab6805a2f394b4d2bc26ef08
3
+ metadata.gz: 8f35cb3be6bdca4175e0c98f2a2ea068d2d35b26
4
+ data.tar.gz: b1e359ad759c2db79f8bda05daaf8f04ea392124
5
5
  SHA512:
6
- metadata.gz: 87ac16889831fe0a6c072091cc4becc17e1e988867c8474788bf8f3d369ff2f6b83519b563080761727ffc13e9dd1b1559daf761779019fbcb1a8225c129299e
7
- data.tar.gz: ecc7c5c08bfa9f2aab973e30d6ad3c044de0a8da5bd5a6b39c87273509b758795882c8a1ee0707d5c8fb31c776f725210dbe8029c9c96d8c13ca08478df5b643
6
+ metadata.gz: 9f82651ba910aa23ff9dc5d291a44640290860fd9ef43281fcd4cb41eabad5e997dc495b54547b5341271acd7d3e36c06dc8eaca68015bdb5706468ff234919c
7
+ data.tar.gz: a338ce8b7b65dbca292b0665aadf7fb3df43e00eaf341c2ebb96b13e36c525d033c074648e125c55566ab99c0b4d38cbf0674519b6b9573ec7d38cd3d436e365
data/.gitignore CHANGED
@@ -14,3 +14,5 @@ tmp/
14
14
  rails_example/spec/examples.txt
15
15
 
16
16
  *.sublime-*
17
+
18
+ /sidekiq/
@@ -1,3 +1,6 @@
1
+ ## v5.0.5
2
+ - Use a class level mutex for `while_executing`
3
+
1
4
  ## v5.0.4
2
5
  - Fixes a problem with installing the gem
3
6
 
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: :until_and_while_execution,
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)
@@ -51,7 +51,7 @@ module SidekiqUniqueJobs
51
51
  end
52
52
 
53
53
  def namespace
54
- @namespace ||= connection { |c| c.respond_to?(:namespace) ? c.namespace : nil }
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 { |c| c.info('server')['redis_version'] }
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
- @mutex.lock
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) { |c| c.del @unique_digest }
27
- @mutex.unlock
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 |redis|
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 = redis.get(unique_key)
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 redis.set(unique_key, job_id, nx: true, ex: expires)
27
- redis.hsetnx(SidekiqUniqueJobs::HASH_KEY, job_id, unique_key)
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 |redis|
33
+ connection(redis_pool) do |conn|
34
34
  unique_key = options[:keys][0]
35
35
  job_id = options[:argv][0]
36
- stored_jid = redis.get(unique_key)
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
- redis.del(unique_key)
42
- redis.hdel(SidekiqUniqueJobs::HASH_KEY, job_id)
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 |redis|
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 redis.set(unique_key, time + expires, nx: true, ex: expires)
53
+ return 1 if conn.set(unique_key, time + expires, nx: true, ex: expires)
54
54
 
55
- stored_time = redis.get(unique_key)
55
+ stored_time = conn.get(unique_key)
56
56
  if stored_time && stored_time < time
57
- if redis.set(unique_key, time + expires, xx: true, ex: expires)
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 |redis|
35
- SCRIPT_SHAS[file_name] = redis.script(:load, script_source(file_name)) if SCRIPT_SHAS[file_name].nil?
36
- redis.evalsha(SCRIPT_SHAS[file_name], options)
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
 
@@ -18,7 +18,7 @@ module SidekiqUniqueJobs
18
18
  end
19
19
 
20
20
  def ensure_job_id_removed(jid)
21
- Sidekiq.redis { |redis| redis.hdel(SidekiqUniqueJobs::HASH_KEY, jid) }
21
+ Sidekiq.redis { |conn| conn.hdel(SidekiqUniqueJobs::HASH_KEY, jid) }
22
22
  end
23
23
 
24
24
  def logger
@@ -14,8 +14,8 @@ module SidekiqUniqueJobs
14
14
  end
15
15
 
16
16
  def unique_key(jid)
17
- connection do |redis|
18
- redis.hget(SidekiqUniqueJobs::HASH_KEY, jid)
17
+ connection do |conn|
18
+ conn.hget(SidekiqUniqueJobs::HASH_KEY, jid)
19
19
  end
20
20
  end
21
21
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqUniqueJobs
4
- VERSION = '5.0.4'
4
+ VERSION = '5.0.5'
5
5
  end
@@ -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 = "bin"
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 = ["lib"]
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', '~> 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.8'
30
- spec.add_development_dependency 'gem-release', '~> 0.7.4'
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
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-18 00:00:00.000000000 Z
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.8
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.8
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.4
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.4
116
+ version: '0.7'
123
117
  - !ruby/object:Gem::Dependency
124
118
  name: codeclimate-test-reporter
125
119
  requirement: !ruby/object:Gem::Requirement