sidekiq-unique-jobs 5.0.11 → 6.0.0.rc1

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.

Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -9
  3. data/.gitignore +1 -3
  4. data/.reek +105 -0
  5. data/.rubocop.yml +36 -1
  6. data/.simplecov +7 -2
  7. data/.travis.yml +11 -10
  8. data/Appraisals +3 -7
  9. data/CHANGELOG.md +17 -0
  10. data/Gemfile +16 -13
  11. data/Guardfile +55 -0
  12. data/README.md +85 -73
  13. data/examples/another_unique_job.rb +13 -0
  14. data/examples/custom_queue_job.rb +12 -0
  15. data/examples/custom_queue_job_with_filter_method.rb +13 -0
  16. data/examples/custom_queue_job_with_filter_proc.rb +16 -0
  17. data/examples/expiring_job.rb +12 -0
  18. data/examples/inline_worker.rb +12 -0
  19. data/examples/just_a_worker.rb +13 -0
  20. data/examples/long_running_job.rb +12 -0
  21. data/examples/main_job.rb +13 -0
  22. data/examples/my_job.rb +12 -0
  23. data/examples/my_unique_job.rb +16 -0
  24. data/examples/my_unique_job_with_filter_method.rb +21 -0
  25. data/examples/my_unique_job_with_filter_proc.rb +19 -0
  26. data/examples/notify_worker.rb +14 -0
  27. data/examples/plain_class.rb +13 -0
  28. data/examples/simple_worker.rb +15 -0
  29. data/examples/spawn_simple_worker.rb +12 -0
  30. data/examples/test_class.rb +9 -0
  31. data/examples/unique_across_workers_job.rb +20 -0
  32. data/examples/unique_job_with_conditional_parameter.rb +18 -0
  33. data/examples/unique_job_with_filter_method.rb +18 -0
  34. data/examples/unique_job_with_nil_unique_args.rb +20 -0
  35. data/examples/unique_job_with_no_unique_args_method.rb +16 -0
  36. data/examples/unique_job_withthout_unique_args_parameter.rb +18 -0
  37. data/examples/unique_on_all_queues_job.rb +16 -0
  38. data/examples/until_and_while_executing_job.rb +13 -0
  39. data/examples/until_executed_2_job.rb +24 -0
  40. data/examples/until_executed_job.rb +25 -0
  41. data/examples/until_executing_job.rb +11 -0
  42. data/examples/until_expired_job.rb +12 -0
  43. data/examples/until_global_expired_job.rb +12 -0
  44. data/examples/while_executing_job.rb +15 -0
  45. data/examples/while_executing_reject_job.rb +14 -0
  46. data/examples/without_argument_job.rb +13 -0
  47. data/lib/sidekiq-unique-jobs.rb +1 -91
  48. data/lib/sidekiq/simulator.rb +15 -16
  49. data/lib/sidekiq_unique_jobs.rb +79 -0
  50. data/lib/sidekiq_unique_jobs/cli.rb +9 -18
  51. data/lib/sidekiq_unique_jobs/client/middleware.rb +16 -18
  52. data/lib/sidekiq_unique_jobs/connection.rb +18 -0
  53. data/lib/sidekiq_unique_jobs/constants.rb +13 -17
  54. data/lib/sidekiq_unique_jobs/core_ext.rb +28 -55
  55. data/lib/sidekiq_unique_jobs/exceptions.rb +30 -0
  56. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +84 -0
  57. data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +11 -6
  58. data/lib/sidekiq_unique_jobs/lock/until_executed.rb +6 -58
  59. data/lib/sidekiq_unique_jobs/lock/until_executing.rb +6 -5
  60. data/lib/sidekiq_unique_jobs/lock/until_expired.rb +17 -0
  61. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +20 -34
  62. data/lib/sidekiq_unique_jobs/lock/while_executing_reject.rb +78 -0
  63. data/lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb +20 -0
  64. data/lib/sidekiq_unique_jobs/locksmith.rb +149 -0
  65. data/lib/sidekiq_unique_jobs/logging.rb +30 -0
  66. data/lib/sidekiq_unique_jobs/options_with_fallback.rb +27 -41
  67. data/lib/sidekiq_unique_jobs/scripts.rb +25 -24
  68. data/lib/sidekiq_unique_jobs/server/middleware.rb +12 -20
  69. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +5 -5
  70. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +42 -0
  71. data/lib/sidekiq_unique_jobs/testing.rb +40 -50
  72. data/lib/sidekiq_unique_jobs/timeout.rb +15 -0
  73. data/lib/sidekiq_unique_jobs/timeout/calculator.rb +49 -0
  74. data/lib/sidekiq_unique_jobs/unique_args.rb +33 -77
  75. data/lib/sidekiq_unique_jobs/unlockable.rb +5 -14
  76. data/lib/sidekiq_unique_jobs/util.rb +28 -90
  77. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  78. data/redis/acquire_lock.lua +5 -3
  79. data/redis/create.lua +58 -0
  80. data/redis/delete.lua +11 -0
  81. data/redis/release_stale_locks.lua +90 -0
  82. data/redis/signal.lua +21 -0
  83. data/sidekiq-unique-jobs.gemspec +15 -8
  84. metadata +108 -32
  85. data/lib/sidekiq_unique_jobs/config.rb +0 -17
  86. data/lib/sidekiq_unique_jobs/lock.rb +0 -12
  87. data/lib/sidekiq_unique_jobs/lock/until_timeout.rb +0 -17
  88. data/lib/sidekiq_unique_jobs/run_lock_failed.rb +0 -3
  89. data/lib/sidekiq_unique_jobs/script_mock.rb +0 -66
  90. data/lib/sidekiq_unique_jobs/scripts/acquire_lock.rb +0 -47
  91. data/lib/sidekiq_unique_jobs/scripts/release_lock.rb +0 -49
  92. data/lib/sidekiq_unique_jobs/testing/sidekiq_overrides.rb +0 -50
  93. data/lib/sidekiq_unique_jobs/timeout_calculator.rb +0 -67
  94. data/redis/synchronize.lua +0 -16
data/redis/create.lua ADDED
@@ -0,0 +1,58 @@
1
+ -- redis.replicate_commands();
2
+
3
+ local exists_key = KEYS[1]
4
+ local grabbed_key = KEYS[2]
5
+ local available_key = KEYS[3]
6
+ local version_key = KEYS[4]
7
+ local unique_digest = KEYS[5]
8
+
9
+ local job_id = ARGV[1]
10
+ local expiration = tonumber(ARGV[2])
11
+ local api_version = ARGV[3]
12
+ local concurrency = tonumber(ARGV[4])
13
+
14
+ local stored_token = redis.call('GETSET', exists_key, job_id)
15
+
16
+ redis.log(redis.LOG_DEBUG, "create.lua - starting...")
17
+
18
+ if stored_token then
19
+ redis.log(redis.LOG_DEBUG, "create.lua - stored_token: " .. stored_token)
20
+ return stored_token
21
+ end
22
+
23
+ ----------------------------------------------------------------
24
+ -- TODO: Legacy support (Remove in v6.1)
25
+ local old_token = redis.call('GET', unique_digest)
26
+ if old_token then
27
+ -- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token)
28
+ if old_token == job_id or old_token == '2' then
29
+ -- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token .. " MATCH with " .. job_id)
30
+ redis.call('DEL', unique_digest)
31
+ else
32
+ -- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token .. " MISMATCH with " .. job_id)
33
+ return old_token
34
+ end
35
+ end
36
+ ----------------------------------------------------------------
37
+
38
+ redis.call('EXPIRE', exists_key, 10)
39
+ redis.call('DEL', grabbed_key)
40
+ redis.call('DEL', available_key)
41
+
42
+ if concurrency and concurrency > 1 then
43
+ for index = 1, concurrency do
44
+ redis.call('RPUSH', available_key, index)
45
+ end
46
+ else
47
+ redis.call('RPUSH', available_key, job_id)
48
+ end
49
+ redis.call('GETSET', version_key, api_version)
50
+ redis.call('PERSIST', exists_key)
51
+
52
+ if expiration then
53
+ redis.call('EXPIRE', available_key, expiration)
54
+ redis.call('EXPIRE', exists_key, expiration)
55
+ redis.call('EXPIRE', version_key, expiration)
56
+ end
57
+
58
+ return job_id
data/redis/delete.lua ADDED
@@ -0,0 +1,11 @@
1
+ local exists_key = KEYS[1]
2
+ local grabbed_key = KEYS[2]
3
+ local available_key = KEYS[3]
4
+ local version_key = KEYS[4]
5
+ local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
6
+
7
+ redis.call('DEL', exists_key)
8
+ redis.call('DEL', grabbed_key)
9
+ redis.call('DEL', available_key)
10
+ redis.call('DEL', version_key)
11
+ redis.call('DEL', unique_digest) -- TODO: Legacy support (Remove in v6.1)
@@ -0,0 +1,90 @@
1
+ redis.replicate_commands();
2
+
3
+ local exists_key = KEYS[1]
4
+ local grabbed_key = KEYS[2]
5
+ local available_key = KEYS[3]
6
+ local release_key = KEYS[4]
7
+ local version_key = KEYS[5]
8
+
9
+ local expires_in = tonumber(ARGV[1])
10
+ local stale_client_timeout = tonumber(ARGV[2])
11
+ local expiration = tonumber(ARGV[3])
12
+
13
+ local function current_time()
14
+ local time = redis.call('time')
15
+ local s = time[1]
16
+ local ms = time[2]
17
+ local number = tonumber((s .. '.' .. ms))
18
+
19
+ return number
20
+ end
21
+
22
+ local hgetall = function (key)
23
+ local bulk = redis.call('HGETALL', key)
24
+ local result = {}
25
+ local nextkey
26
+ for i, v in ipairs(bulk) do
27
+ if i % 2 == 1 then
28
+ nextkey = v
29
+ else
30
+ result[nextkey] = v
31
+ end
32
+ end
33
+ return result
34
+ end
35
+
36
+ local cached_current_time = current_time()
37
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - started at : " .. cached_current_time)
38
+
39
+ local my_lock_expires_at = cached_current_time + expires_in + 1
40
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - my_lock_expires_at: " .. my_lock_expires_at)
41
+
42
+ if not redis.call('SETNX', release_key, my_lock_expires_at) then
43
+ -- Check if expired
44
+ local other_lock_expires_at = tonumber(redis.call('GET', release_key))
45
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - other_lock_expires_at: " .. other_lock_expires_at)
46
+
47
+ if other_lock_expires_at < cached_current_time then
48
+ local old_expires_at = tonumber(redis.call('GETSET', release_key, my_lock_expires_at))
49
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - old_expires_at: " .. old_expires_at)
50
+
51
+ -- Check if another client started cleanup yet. If not,
52
+ -- then we now have the lock.
53
+ if not old_expires_at == other_lock_expires_at then
54
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua -could not retrieve lock: exiting 0")
55
+ return 0
56
+ end
57
+ end
58
+ end
59
+
60
+ local keys = hgetall(grabbed_key)
61
+ for key, locked_at in pairs(keys) do
62
+ local timed_out_at = tonumber(locked_at) + stale_client_timeout
63
+ redis.log(redis.LOG_DEBUG,
64
+ "release_stale_locks.lua - processing: " .. grabbed_key .. " key: " .. key .. " locked_at: " .. locked_at
65
+ )
66
+
67
+ if timed_out_at < current_time() then
68
+ redis.log(redis.LOG_DEBUG, "HDEL " .. grabbed_key .. ":" .. key)
69
+ redis.call('HDEL', grabbed_key, key)
70
+ redis.log(redis.LOG_DEBUG, "LPUSH " .. available_key .. ":" .. key)
71
+ redis.call('LPUSH', available_key, key)
72
+
73
+ if expiration then
74
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - EXPIRE " .. available_key .. " with " .. expiration)
75
+ redis.call('EXPIRE', available_key, expiration)
76
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - EXPIRE " .. exists_key .. " with " .. expiration)
77
+ redis.call('EXPIRE', exists_key, expiration)
78
+ end
79
+ end
80
+ end
81
+
82
+ -- Make sure not to delete the lock in case someone else already expired
83
+ -- our lock, with one second in between to account for some lag.
84
+ if my_lock_expires_at > (current_time() - 1) then
85
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - DEL " .. release_key)
86
+ redis.call('DEL', release_key)
87
+ end
88
+
89
+ redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - comleted at : " .. current_time())
90
+ return 1
data/redis/signal.lua ADDED
@@ -0,0 +1,21 @@
1
+ local exists_key = KEYS[1]
2
+ local grabbed_key = KEYS[2]
3
+ local available_key = KEYS[3]
4
+ local version_key = KEYS[4]
5
+ local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
6
+
7
+ local token = ARGV[1]
8
+ local expiration = tonumber(ARGV[2])
9
+
10
+ redis.call('HDEL', grabbed_key, token)
11
+ local available_count = redis.call('LPUSH', available_key, token)
12
+
13
+ if expiration then
14
+ redis.log(redis.LOG_DEBUG, "signal_locks.lua - expiring stale locks")
15
+ redis.call('EXPIRE', exists_key, expiration)
16
+ redis.call('EXPIRE', available_key, expiration)
17
+ redis.call('EXPIRE', version_key, expiration)
18
+ redis.call('EXPIRE', unique_digest, expiration) -- TODO: Legacy support (Remove in v6.1)
19
+ end
20
+
21
+ return available_count
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require File.expand_path('../lib/sidekiq_unique_jobs/version', __FILE__)
3
+ lib = File.expand_path("../lib", __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'sidekiq_unique_jobs/version'
4
7
 
5
8
  Gem::Specification.new do |spec|
6
9
  spec.name = 'sidekiq-unique-jobs'
@@ -15,18 +18,22 @@ Gem::Specification.new do |spec|
15
18
 
16
19
  spec.bindir = 'bin'
17
20
  spec.executables = %w[jobs]
18
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
- f.match(%r{^(test|spec|features|gemfiles|pkg|rails_example|tmp)/})
21
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ `git ls-files -z`.split("\x0").reject do |file|
23
+ file.match(%r{^(test|spec|features|gemfiles|pkg|rails_example|tmp)/})
24
+ end
20
25
  end
21
26
 
22
27
  spec.require_paths = ['lib']
28
+ spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.0.5'
23
29
  spec.add_dependency 'sidekiq', '>= 4.0', '< 6.0'
24
- spec.add_dependency 'concurrent-ruby', '>= 1.0.2'
25
30
  spec.add_dependency 'thor', '~> 0'
26
31
 
27
- spec.add_development_dependency 'rspec', '~> 3.1'
28
- spec.add_development_dependency 'rake', '~> 12.0'
29
- spec.add_development_dependency 'timecop', '~> 0.8'
32
+ spec.add_development_dependency 'bundler', '~> 1.16'
33
+ spec.add_development_dependency 'rspec', '~> 3.7'
34
+ spec.add_development_dependency 'rake', '~> 12.3'
35
+ spec.add_development_dependency 'timecop', '~> 0.9'
30
36
  spec.add_development_dependency 'yard', '~> 0.9'
31
- spec.add_development_dependency 'gem-release', '~> 0.7'
37
+ spec.add_development_dependency 'gem-release', '~> 1.0'
38
+ spec.add_development_dependency 'awesome_print', '~> 1.8'
32
39
  end
metadata CHANGED
@@ -1,15 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq-unique-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.11
4
+ version: 6.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-19 00:00:00.000000000 Z
11
+ date: 2018-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: concurrent-ruby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.5
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.5
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: sidekiq
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -31,75 +51,75 @@ dependencies:
31
51
  - !ruby/object:Gem::Version
32
52
  version: '6.0'
33
53
  - !ruby/object:Gem::Dependency
34
- name: concurrent-ruby
54
+ name: thor
35
55
  requirement: !ruby/object:Gem::Requirement
36
56
  requirements:
37
- - - ">="
57
+ - - "~>"
38
58
  - !ruby/object:Gem::Version
39
- version: 1.0.2
59
+ version: '0'
40
60
  type: :runtime
41
61
  prerelease: false
42
62
  version_requirements: !ruby/object:Gem::Requirement
43
63
  requirements:
44
- - - ">="
64
+ - - "~>"
45
65
  - !ruby/object:Gem::Version
46
- version: 1.0.2
66
+ version: '0'
47
67
  - !ruby/object:Gem::Dependency
48
- name: thor
68
+ name: bundler
49
69
  requirement: !ruby/object:Gem::Requirement
50
70
  requirements:
51
71
  - - "~>"
52
72
  - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
73
+ version: '1.16'
74
+ type: :development
55
75
  prerelease: false
56
76
  version_requirements: !ruby/object:Gem::Requirement
57
77
  requirements:
58
78
  - - "~>"
59
79
  - !ruby/object:Gem::Version
60
- version: '0'
80
+ version: '1.16'
61
81
  - !ruby/object:Gem::Dependency
62
82
  name: rspec
63
83
  requirement: !ruby/object:Gem::Requirement
64
84
  requirements:
65
85
  - - "~>"
66
86
  - !ruby/object:Gem::Version
67
- version: '3.1'
87
+ version: '3.7'
68
88
  type: :development
69
89
  prerelease: false
70
90
  version_requirements: !ruby/object:Gem::Requirement
71
91
  requirements:
72
92
  - - "~>"
73
93
  - !ruby/object:Gem::Version
74
- version: '3.1'
94
+ version: '3.7'
75
95
  - !ruby/object:Gem::Dependency
76
96
  name: rake
77
97
  requirement: !ruby/object:Gem::Requirement
78
98
  requirements:
79
99
  - - "~>"
80
100
  - !ruby/object:Gem::Version
81
- version: '12.0'
101
+ version: '12.3'
82
102
  type: :development
83
103
  prerelease: false
84
104
  version_requirements: !ruby/object:Gem::Requirement
85
105
  requirements:
86
106
  - - "~>"
87
107
  - !ruby/object:Gem::Version
88
- version: '12.0'
108
+ version: '12.3'
89
109
  - !ruby/object:Gem::Dependency
90
110
  name: timecop
91
111
  requirement: !ruby/object:Gem::Requirement
92
112
  requirements:
93
113
  - - "~>"
94
114
  - !ruby/object:Gem::Version
95
- version: '0.8'
115
+ version: '0.9'
96
116
  type: :development
97
117
  prerelease: false
98
118
  version_requirements: !ruby/object:Gem::Requirement
99
119
  requirements:
100
120
  - - "~>"
101
121
  - !ruby/object:Gem::Version
102
- version: '0.8'
122
+ version: '0.9'
103
123
  - !ruby/object:Gem::Dependency
104
124
  name: yard
105
125
  requirement: !ruby/object:Gem::Requirement
@@ -120,14 +140,28 @@ dependencies:
120
140
  requirements:
121
141
  - - "~>"
122
142
  - !ruby/object:Gem::Version
123
- version: '0.7'
143
+ version: '1.0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '1.0'
151
+ - !ruby/object:Gem::Dependency
152
+ name: awesome_print
153
+ requirement: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: '1.8'
124
158
  type: :development
125
159
  prerelease: false
126
160
  version_requirements: !ruby/object:Gem::Requirement
127
161
  requirements:
128
162
  - - "~>"
129
163
  - !ruby/object:Gem::Version
130
- version: '0.7'
164
+ version: '1.8'
131
165
  description: Handles various types of unique jobs for Sidekiq
132
166
  email:
133
167
  - mikael@zoolutions.se
@@ -144,6 +178,7 @@ files:
144
178
  - ".eslintrc"
145
179
  - ".fasterer.yml"
146
180
  - ".gitignore"
181
+ - ".reek"
147
182
  - ".rspec"
148
183
  - ".rubocop.yml"
149
184
  - ".simplecov"
@@ -152,44 +187,85 @@ files:
152
187
  - CHANGELOG.md
153
188
  - CODE_OF_CONDUCT.md
154
189
  - Gemfile
190
+ - Guardfile
155
191
  - LICENSE.txt
156
192
  - README.md
157
193
  - Rakefile
158
194
  - bin/bench
159
195
  - bin/jobs
196
+ - examples/another_unique_job.rb
197
+ - examples/custom_queue_job.rb
198
+ - examples/custom_queue_job_with_filter_method.rb
199
+ - examples/custom_queue_job_with_filter_proc.rb
200
+ - examples/expiring_job.rb
201
+ - examples/inline_worker.rb
202
+ - examples/just_a_worker.rb
203
+ - examples/long_running_job.rb
204
+ - examples/main_job.rb
205
+ - examples/my_job.rb
206
+ - examples/my_unique_job.rb
207
+ - examples/my_unique_job_with_filter_method.rb
208
+ - examples/my_unique_job_with_filter_proc.rb
209
+ - examples/notify_worker.rb
210
+ - examples/plain_class.rb
211
+ - examples/simple_worker.rb
212
+ - examples/spawn_simple_worker.rb
213
+ - examples/test_class.rb
214
+ - examples/unique_across_workers_job.rb
215
+ - examples/unique_job_with_conditional_parameter.rb
216
+ - examples/unique_job_with_filter_method.rb
217
+ - examples/unique_job_with_nil_unique_args.rb
218
+ - examples/unique_job_with_no_unique_args_method.rb
219
+ - examples/unique_job_withthout_unique_args_parameter.rb
220
+ - examples/unique_on_all_queues_job.rb
221
+ - examples/until_and_while_executing_job.rb
222
+ - examples/until_executed_2_job.rb
223
+ - examples/until_executed_job.rb
224
+ - examples/until_executing_job.rb
225
+ - examples/until_expired_job.rb
226
+ - examples/until_global_expired_job.rb
227
+ - examples/while_executing_job.rb
228
+ - examples/while_executing_reject_job.rb
229
+ - examples/without_argument_job.rb
160
230
  - lib/sidekiq-unique-jobs.rb
161
231
  - lib/sidekiq/simulator.rb
232
+ - lib/sidekiq_unique_jobs.rb
162
233
  - lib/sidekiq_unique_jobs/cli.rb
163
234
  - lib/sidekiq_unique_jobs/client/middleware.rb
164
- - lib/sidekiq_unique_jobs/config.rb
235
+ - lib/sidekiq_unique_jobs/connection.rb
165
236
  - lib/sidekiq_unique_jobs/constants.rb
166
237
  - lib/sidekiq_unique_jobs/core_ext.rb
167
- - lib/sidekiq_unique_jobs/lock.rb
238
+ - lib/sidekiq_unique_jobs/exceptions.rb
239
+ - lib/sidekiq_unique_jobs/lock/base_lock.rb
168
240
  - lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb
169
241
  - lib/sidekiq_unique_jobs/lock/until_executed.rb
170
242
  - lib/sidekiq_unique_jobs/lock/until_executing.rb
171
- - lib/sidekiq_unique_jobs/lock/until_timeout.rb
243
+ - lib/sidekiq_unique_jobs/lock/until_expired.rb
172
244
  - lib/sidekiq_unique_jobs/lock/while_executing.rb
245
+ - lib/sidekiq_unique_jobs/lock/while_executing_reject.rb
246
+ - lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb
247
+ - lib/sidekiq_unique_jobs/locksmith.rb
248
+ - lib/sidekiq_unique_jobs/logging.rb
173
249
  - lib/sidekiq_unique_jobs/middleware.rb
174
250
  - lib/sidekiq_unique_jobs/normalizer.rb
175
251
  - lib/sidekiq_unique_jobs/options_with_fallback.rb
176
- - lib/sidekiq_unique_jobs/run_lock_failed.rb
177
- - lib/sidekiq_unique_jobs/script_mock.rb
178
252
  - lib/sidekiq_unique_jobs/scripts.rb
179
- - lib/sidekiq_unique_jobs/scripts/acquire_lock.rb
180
- - lib/sidekiq_unique_jobs/scripts/release_lock.rb
181
253
  - lib/sidekiq_unique_jobs/server/middleware.rb
182
254
  - lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb
255
+ - lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb
183
256
  - lib/sidekiq_unique_jobs/testing.rb
184
- - lib/sidekiq_unique_jobs/testing/sidekiq_overrides.rb
185
- - lib/sidekiq_unique_jobs/timeout_calculator.rb
257
+ - lib/sidekiq_unique_jobs/timeout.rb
258
+ - lib/sidekiq_unique_jobs/timeout/calculator.rb
186
259
  - lib/sidekiq_unique_jobs/unique_args.rb
187
260
  - lib/sidekiq_unique_jobs/unlockable.rb
188
261
  - lib/sidekiq_unique_jobs/util.rb
189
262
  - lib/sidekiq_unique_jobs/version.rb
190
263
  - redis/acquire_lock.lua
264
+ - redis/create.lua
265
+ - redis/delete.lua
191
266
  - redis/release_lock.lua
192
- - redis/synchronize.lua
267
+ - redis/release_stale_locks.lua
268
+ - redis/signal.lua
193
269
  - sidekiq-unique-jobs.gemspec
194
270
  homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
195
271
  licenses:
@@ -206,12 +282,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
282
  version: '0'
207
283
  required_rubygems_version: !ruby/object:Gem::Requirement
208
284
  requirements:
209
- - - ">="
285
+ - - ">"
210
286
  - !ruby/object:Gem::Version
211
- version: '0'
287
+ version: 1.3.1
212
288
  requirements: []
213
289
  rubyforge_project:
214
- rubygems_version: 2.7.7
290
+ rubygems_version: 2.7.6
215
291
  signing_key:
216
292
  specification_version: 4
217
293
  summary: Uniqueness for Sidekiq Jobs