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 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