sidekiq-unique-jobs 6.0.0.rc6 → 6.0.0.rc7

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 (85) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +6 -7
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
  4. data/.reek.yml +17 -48
  5. data/.rubocop.yml +3 -0
  6. data/.yardopts +7 -0
  7. data/CHANGELOG.md +2 -0
  8. data/README.md +65 -23
  9. data/assets/unique_digests_1.png +0 -0
  10. data/assets/unique_digests_2.png +0 -0
  11. data/examples/another_unique_job.rb +4 -2
  12. data/examples/custom_queue_job_with_filter_method.rb +1 -1
  13. data/examples/custom_queue_job_with_filter_proc.rb +1 -1
  14. data/examples/expiring_job.rb +1 -1
  15. data/examples/inline_worker.rb +1 -1
  16. data/examples/just_a_worker.rb +1 -1
  17. data/examples/long_running_job.rb +4 -2
  18. data/examples/main_job.rb +3 -2
  19. data/examples/my_unique_job.rb +4 -5
  20. data/examples/my_unique_job_with_filter_method.rb +3 -3
  21. data/examples/my_unique_job_with_filter_proc.rb +3 -3
  22. data/examples/notify_worker.rb +2 -2
  23. data/examples/simple_worker.rb +2 -2
  24. data/examples/unique_across_workers_job.rb +1 -1
  25. data/examples/unique_job_on_conflict_raise.rb +14 -0
  26. data/examples/unique_job_on_conflict_reject.rb +14 -0
  27. data/examples/unique_job_on_conflict_reschedule.rb +14 -0
  28. data/examples/unique_job_with_conditional_parameter.rb +3 -3
  29. data/examples/unique_job_with_filter_method.rb +5 -2
  30. data/examples/unique_job_with_nil_unique_args.rb +3 -3
  31. data/examples/unique_job_with_no_unique_args_method.rb +3 -3
  32. data/examples/unique_job_withthout_unique_args_parameter.rb +3 -3
  33. data/examples/unique_on_all_queues_job.rb +1 -1
  34. data/examples/until_and_while_executing_job.rb +4 -1
  35. data/examples/until_executed_2_job.rb +5 -5
  36. data/examples/until_executed_job.rb +5 -5
  37. data/examples/until_executing_job.rb +1 -1
  38. data/examples/until_expired_job.rb +1 -1
  39. data/examples/until_global_expired_job.rb +1 -1
  40. data/examples/while_executing_job.rb +2 -2
  41. data/examples/while_executing_reject_job.rb +2 -2
  42. data/examples/without_argument_job.rb +1 -1
  43. data/lib/sidekiq_unique_jobs.rb +30 -0
  44. data/lib/sidekiq_unique_jobs/client/middleware.rb +12 -1
  45. data/lib/sidekiq_unique_jobs/connection.rb +5 -1
  46. data/lib/sidekiq_unique_jobs/constants.rb +3 -0
  47. data/lib/sidekiq_unique_jobs/digests.rb +111 -0
  48. data/lib/sidekiq_unique_jobs/exceptions.rb +15 -16
  49. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +44 -3
  50. data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +13 -3
  51. data/lib/sidekiq_unique_jobs/lock/until_executed.rb +8 -1
  52. data/lib/sidekiq_unique_jobs/lock/until_executing.rb +8 -1
  53. data/lib/sidekiq_unique_jobs/lock/until_expired.rb +14 -2
  54. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +19 -5
  55. data/lib/sidekiq_unique_jobs/lock/while_executing_reject.rb +16 -63
  56. data/lib/sidekiq_unique_jobs/locksmith.rb +36 -13
  57. data/lib/sidekiq_unique_jobs/logging.rb +24 -1
  58. data/lib/sidekiq_unique_jobs/normalizer.rb +6 -0
  59. data/lib/sidekiq_unique_jobs/on_conflict.rb +24 -0
  60. data/lib/sidekiq_unique_jobs/on_conflict/log.rb +20 -0
  61. data/lib/sidekiq_unique_jobs/on_conflict/null_strategy.rb +16 -0
  62. data/lib/sidekiq_unique_jobs/on_conflict/raise.rb +17 -0
  63. data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +72 -0
  64. data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +24 -0
  65. data/lib/sidekiq_unique_jobs/on_conflict/strategy.rb +28 -0
  66. data/lib/sidekiq_unique_jobs/options_with_fallback.rb +19 -4
  67. data/lib/sidekiq_unique_jobs/scripts.rb +31 -0
  68. data/lib/sidekiq_unique_jobs/server/middleware.rb +10 -0
  69. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +15 -1
  70. data/lib/sidekiq_unique_jobs/timeout/calculator.rb +17 -4
  71. data/lib/sidekiq_unique_jobs/unique_args.rb +47 -5
  72. data/lib/sidekiq_unique_jobs/unlockable.rb +10 -0
  73. data/lib/sidekiq_unique_jobs/util.rb +12 -7
  74. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  75. data/lib/sidekiq_unique_jobs/web.rb +51 -0
  76. data/lib/sidekiq_unique_jobs/web/helpers.rb +37 -0
  77. data/lib/sidekiq_unique_jobs/web/views/unique_digest.erb +28 -0
  78. data/lib/sidekiq_unique_jobs/web/views/unique_digests.erb +42 -0
  79. data/redis/create.lua +4 -2
  80. data/redis/delete.lua +3 -1
  81. data/redis/delete_by_digest.lua +22 -0
  82. data/redis/signal.lua +3 -1
  83. data/sidekiq-unique-jobs.gemspec +2 -0
  84. metadata +49 -3
  85. data/lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb +0 -21
@@ -1,17 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqUniqueJobs
4
+ # Utility module to help manage unique keys in redis.
5
+ # Useful for deleting keys that for whatever reason wasn't deleted
6
+ #
7
+ # @author Mikael Henriksson <mikael@zoolutions.se>
4
8
  module Util
5
- COUNT = 'COUNT'
6
9
  DEFAULT_COUNT = 1_000
7
- EXPIRE_BATCH_SIZE = 100
8
- SCAN_METHOD = 'SCAN'
9
10
  SCAN_PATTERN = '*'
10
11
 
11
12
  include SidekiqUniqueJobs::Logging
12
13
  include SidekiqUniqueJobs::Connection
13
14
  extend self # rubocop:disable Style/ModuleFunction
14
15
 
16
+ # Find unique keys in redis
17
+ #
18
+ # @param [String] pattern a pattern to scan for in redis
19
+ # @param [Integer] count the maximum number of keys to delete
20
+ # @return [Array<String>] an array with active unique keys
15
21
  def keys(pattern = SCAN_PATTERN, count = DEFAULT_COUNT)
16
22
  return redis(&:keys) if pattern.nil?
17
23
  redis { |conn| conn.scan_each(match: prefix(pattern), count: count).to_a }
@@ -19,10 +25,9 @@ module SidekiqUniqueJobs
19
25
 
20
26
  # Deletes unique keys from redis
21
27
  #
22
- #
23
- # @param pattern [String] a pattern to scan for in redis
24
- # @param count [Integer] the maximum number of keys to delete
25
- # @return [Boolean] report success
28
+ # @param [String] pattern a pattern to scan for in redis
29
+ # @param [Integer] count the maximum number of keys to delete
30
+ # @return [Integer] the number of keys deleted
26
31
  def del(pattern = SCAN_PATTERN, count = 0)
27
32
  raise ArgumentError, 'Please provide a number of keys to delete greater than zero' if count.zero?
28
33
  pattern = "#{pattern}:*" unless pattern.end_with?(':*')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SidekiqUniqueJobs
4
- VERSION = '6.0.0.rc6'
4
+ VERSION = '6.0.0.rc7'
5
5
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'sidekiq/web'
5
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
6
+ # client-only usage
7
+ end
8
+
9
+ require_relative 'web/helpers'
10
+
11
+ module SidekiqUniqueJobs
12
+ # Utility module to help manage unique keys in redis.
13
+ # Useful for deleting keys that for whatever reason wasn't deleted
14
+ #
15
+ # @author Mikael Henriksson <mikael@zoolutions.se>
16
+ module Web
17
+ def self.registered(app) # rubocop:disable Metrics/MethodLength
18
+ app.helpers do
19
+ include Web::Helpers
20
+ end
21
+
22
+ app.get '/unique_digests' do
23
+ @total_size = Digests.count
24
+ @filter = params[:filter] || '*'
25
+ @filter = '*' if @filter == ''
26
+ @count = (params[:count] || 100).to_i
27
+ @unique_digests = Digests.all(pattern: @filter, count: @count)
28
+
29
+ erb(unique_template(:unique_digests))
30
+ end
31
+
32
+ app.get '/unique_digests/:digest' do
33
+ @digest = params[:digest]
34
+ @unique_keys = Util.keys("#{@digest}*", 1000)
35
+
36
+ erb(unique_template(:unique_digest))
37
+ end
38
+
39
+ app.get '/unique_digests/:digest/delete' do
40
+ Digests.del(digest: params[:digest])
41
+ redirect_to :unique_digests
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ if defined?(Sidekiq::Web)
48
+ Sidekiq::Web.register SidekiqUniqueJobs::Web
49
+ Sidekiq::Web.tabs['Unique Digests'] = 'unique_digests'
50
+ # Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), 'locales')
51
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SidekiqUniqueJobs
4
+ module Web
5
+ module Helpers
6
+ VIEW_PATH = File.expand_path('../web/views', __dir__)
7
+
8
+ def filtering(pattern, count)
9
+ SidekiqUniqueJobs::Util.keys(pattern, count)
10
+ end
11
+
12
+ def unique_template(name)
13
+ File.open(File.join(VIEW_PATH, "#{name}.erb")).read
14
+ end
15
+
16
+ def redirect_to(subpath)
17
+ if respond_to?(:to)
18
+ # Sinatra-based web UI
19
+ redirect to(subpath)
20
+ else
21
+ # Non-Sinatra based web UI (Sidekiq 4.2+)
22
+ redirect "#{root_path}#{subpath}"
23
+ end
24
+ end
25
+
26
+ def safe_relative_time(time)
27
+ time = if time.is_a?(Numeric)
28
+ Time.at(time)
29
+ else
30
+ Time.parse(time)
31
+ end
32
+
33
+ relative_time(time)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,28 @@
1
+ <header class="row">
2
+ <div class="col-sm-5">
3
+ <h3><%= t('Unique Digest') %> - <a class="btn btn-default btn-xs" href="<%= root_path %>unique_digests"><%= t('GoBack') %></a></h3>
4
+ </div>
5
+ </header>
6
+
7
+ <% if @unique_keys.size.positive? %>
8
+ <div class="table_container">
9
+ <table class="table table-striped table-bordered table-hover">
10
+ <thead>
11
+ <tr>
12
+ <th>
13
+ <%= t('Keys') %>
14
+ <span class="small text-muted">for (<%= @digest %>)</span>
15
+ </th>
16
+ </tr>
17
+ </thead>
18
+ <% @unique_keys.each do |key| %>
19
+ <tr><td colspan="2"><%= key %></td></tr>
20
+ <% end %>
21
+ </table>
22
+ </div>
23
+ <form action="<%= root_path %>unique_digests/<%= @digest %>/delete" method="get">
24
+ <%= csrf_tag %>
25
+ <a class="btn btn-default btn-xs" href="<%= root_path %>unique_digests"><%= t('GoBack') %></a>
26
+ <input class="btn btn-danger btn-xs flip" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
27
+ </form>
28
+ <% end %>
@@ -0,0 +1,42 @@
1
+ <header class="row">
2
+ <div class="col-sm-5">
3
+ <h3><%= t('Unique Digests') %></h3>
4
+ </div>
5
+ <form action="<%= root_path %>unique_digests" class="form form-inline" method="get">
6
+ <%= csrf_tag %>
7
+ <input name="filter" class="form-control" type="text" value="<%= @filter %>" />
8
+ <button class="btn btn-default" type="submit"><%= t('Filter') %></button>
9
+ </form>
10
+ <% if @unique_digests.size > 0 && @total_size > @count.to_i %>
11
+ <div class="col-sm-4">
12
+ <%= erb :_paging, locals: { url: "#{root_path}unique_digests" } %>
13
+ </div>
14
+ <% end %>
15
+ </header>
16
+
17
+ <% if @unique_digests.size.positive? %>
18
+ <div class="table_container">
19
+ <table class="table table-striped table-bordered table-hover">
20
+ <thead>
21
+ <tr>
22
+ <th><%= t('Delete') %></th>
23
+ <th><%= t('Digest') %></th>
24
+ </tr>
25
+ </thead>
26
+ <% @unique_digests.each do |digest| %>
27
+ <tr>
28
+ <td>
29
+ <form action="<%= root_path %>unique_digests/<%= digest %>/delete" method="get">
30
+ <%= csrf_tag %>
31
+ <input name="digest" value="<%= h digest %>" type="hidden" />
32
+ <input class="btn btn-danger btn-xs" type="submit" name="delete" value="<%= t('Delete') %>" data-confirm="<%= t('AreYouSure') %>" />
33
+ </form>
34
+ </td>
35
+ <td>
36
+ <a href="<%= root_path %>unique_digests/<%= digest %>"><%= digest %></a>
37
+ </td>
38
+ </tr>
39
+ <% end %>
40
+ </table>
41
+ </div>
42
+ <% end %>
data/redis/create.lua CHANGED
@@ -4,7 +4,8 @@ local exists_key = KEYS[1]
4
4
  local grabbed_key = KEYS[2]
5
5
  local available_key = KEYS[3]
6
6
  local version_key = KEYS[4]
7
- local unique_digest = KEYS[5]
7
+ local unique_keys = KEYS[5]
8
+ local unique_digest = KEYS[6]
8
9
 
9
10
  local job_id = ARGV[1]
10
11
  local expiration = tonumber(ARGV[2])
@@ -29,7 +30,8 @@ if old_token then
29
30
  end
30
31
  ----------------------------------------------------------------
31
32
 
32
- redis.call('EXPIRE', exists_key, 10)
33
+ redis.call('SADD', unique_keys, unique_digest)
34
+ redis.call('EXPIRE', exists_key, 5)
33
35
  redis.call('DEL', grabbed_key)
34
36
  redis.call('DEL', available_key)
35
37
 
data/redis/delete.lua CHANGED
@@ -2,9 +2,11 @@ local exists_key = KEYS[1]
2
2
  local grabbed_key = KEYS[2]
3
3
  local available_key = KEYS[3]
4
4
  local version_key = KEYS[4]
5
- local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
5
+ local unique_keys = KEYS[5]
6
+ local unique_digest = KEYS[6] -- TODO: Legacy support (Remove in v6.1)
6
7
 
7
8
  redis.call('DEL', exists_key)
9
+ redis.call('SREM', unique_keys, unique_digest)
8
10
  redis.call('DEL', grabbed_key)
9
11
  redis.call('DEL', available_key)
10
12
  redis.call('DEL', version_key)
@@ -0,0 +1,22 @@
1
+ -- redis.replicate_commands();
2
+ local unique_keys = KEYS[1]
3
+ local unique_digest = KEYS[2]
4
+
5
+ local exists_key = unique_digest .. ':EXISTS'
6
+ local grabbed_key = unique_digest .. ':GRABBED'
7
+ local available_key = unique_digest .. ':AVAILABLE'
8
+ local version_key = unique_digest .. ':VERSION'
9
+ local run_exists_key = unique_digest .. ':RUN:EXISTS'
10
+ local run_grabbed_key = unique_digest .. ':RUN:GRABBED'
11
+ local run_available_key = unique_digest .. ':RUN:AVAILABLE'
12
+ local run_version_key = unique_digest .. ':RUN:VERSION'
13
+
14
+ redis.call('SREM', unique_keys, unique_digest)
15
+ redis.call('DEL', exists_key)
16
+ redis.call('DEL', grabbed_key)
17
+ redis.call('DEL', available_key)
18
+ redis.call('DEL', version_key)
19
+ redis.call('DEL', run_exists_key)
20
+ redis.call('DEL', run_grabbed_key)
21
+ redis.call('DEL', run_available_key)
22
+ redis.call('DEL', run_version_key)
data/redis/signal.lua CHANGED
@@ -2,12 +2,14 @@ local exists_key = KEYS[1]
2
2
  local grabbed_key = KEYS[2]
3
3
  local available_key = KEYS[3]
4
4
  local version_key = KEYS[4]
5
- local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
5
+ local unique_keys = KEYS[5]
6
+ local unique_digest = KEYS[6] -- TODO: Legacy support (Remove in v6.1)
6
7
 
7
8
  local token = ARGV[1]
8
9
  local expiration = tonumber(ARGV[2])
9
10
 
10
11
  redis.call('HDEL', grabbed_key, token)
12
+ redis.call('SREM', unique_keys, token)
11
13
  local available_count = redis.call('LPUSH', available_key, token)
12
14
 
13
15
  if expiration then
@@ -37,4 +37,6 @@ Gem::Specification.new do |spec|
37
37
  spec.add_development_dependency 'yard', '~> 0.9'
38
38
  spec.add_development_dependency 'gem-release', '~> 1.0'
39
39
  spec.add_development_dependency 'awesome_print', '~> 1.8'
40
+ spec.add_development_dependency 'rack-test'
41
+ spec.add_development_dependency 'sinatra'
40
42
  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: 6.0.0.rc6
4
+ version: 6.0.0.rc7
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-07-15 00:00:00.000000000 Z
11
+ date: 2018-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -162,6 +162,34 @@ dependencies:
162
162
  - - "~>"
163
163
  - !ruby/object:Gem::Version
164
164
  version: '1.8'
165
+ - !ruby/object:Gem::Dependency
166
+ name: rack-test
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ type: :development
173
+ prerelease: false
174
+ version_requirements: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ - !ruby/object:Gem::Dependency
180
+ name: sinatra
181
+ requirement: !ruby/object:Gem::Requirement
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ version: '0'
186
+ type: :development
187
+ prerelease: false
188
+ version_requirements: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
165
193
  description: Handles various types of unique jobs for Sidekiq
166
194
  email:
167
195
  - mikael@zoolutions.se
@@ -185,6 +213,7 @@ files:
185
213
  - ".rubocop.yml"
186
214
  - ".simplecov"
187
215
  - ".travis.yml"
216
+ - ".yardopts"
188
217
  - Appraisals
189
218
  - CHANGELOG.md
190
219
  - CODE_OF_CONDUCT.md
@@ -194,6 +223,8 @@ files:
194
223
  - README.md
195
224
  - Rakefile
196
225
  - _config.yml
226
+ - assets/unique_digests_1.png
227
+ - assets/unique_digests_2.png
197
228
  - bin/bench
198
229
  - bin/uniquejobs
199
230
  - examples/another_unique_job.rb
@@ -215,6 +246,9 @@ files:
215
246
  - examples/spawn_simple_worker.rb
216
247
  - examples/test_class.rb
217
248
  - examples/unique_across_workers_job.rb
249
+ - examples/unique_job_on_conflict_raise.rb
250
+ - examples/unique_job_on_conflict_reject.rb
251
+ - examples/unique_job_on_conflict_reschedule.rb
218
252
  - examples/unique_job_with_conditional_parameter.rb
219
253
  - examples/unique_job_with_filter_method.rb
220
254
  - examples/unique_job_with_nil_unique_args.rb
@@ -237,6 +271,7 @@ files:
237
271
  - lib/sidekiq_unique_jobs/connection.rb
238
272
  - lib/sidekiq_unique_jobs/constants.rb
239
273
  - lib/sidekiq_unique_jobs/core_ext.rb
274
+ - lib/sidekiq_unique_jobs/digests.rb
240
275
  - lib/sidekiq_unique_jobs/exceptions.rb
241
276
  - lib/sidekiq_unique_jobs/lock/base_lock.rb
242
277
  - lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb
@@ -245,11 +280,17 @@ files:
245
280
  - lib/sidekiq_unique_jobs/lock/until_expired.rb
246
281
  - lib/sidekiq_unique_jobs/lock/while_executing.rb
247
282
  - lib/sidekiq_unique_jobs/lock/while_executing_reject.rb
248
- - lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb
249
283
  - lib/sidekiq_unique_jobs/locksmith.rb
250
284
  - lib/sidekiq_unique_jobs/logging.rb
251
285
  - lib/sidekiq_unique_jobs/middleware.rb
252
286
  - lib/sidekiq_unique_jobs/normalizer.rb
287
+ - lib/sidekiq_unique_jobs/on_conflict.rb
288
+ - lib/sidekiq_unique_jobs/on_conflict/log.rb
289
+ - lib/sidekiq_unique_jobs/on_conflict/null_strategy.rb
290
+ - lib/sidekiq_unique_jobs/on_conflict/raise.rb
291
+ - lib/sidekiq_unique_jobs/on_conflict/reject.rb
292
+ - lib/sidekiq_unique_jobs/on_conflict/reschedule.rb
293
+ - lib/sidekiq_unique_jobs/on_conflict/strategy.rb
253
294
  - lib/sidekiq_unique_jobs/options_with_fallback.rb
254
295
  - lib/sidekiq_unique_jobs/scripts.rb
255
296
  - lib/sidekiq_unique_jobs/server/middleware.rb
@@ -262,9 +303,14 @@ files:
262
303
  - lib/sidekiq_unique_jobs/unlockable.rb
263
304
  - lib/sidekiq_unique_jobs/util.rb
264
305
  - lib/sidekiq_unique_jobs/version.rb
306
+ - lib/sidekiq_unique_jobs/web.rb
307
+ - lib/sidekiq_unique_jobs/web/helpers.rb
308
+ - lib/sidekiq_unique_jobs/web/views/unique_digest.erb
309
+ - lib/sidekiq_unique_jobs/web/views/unique_digests.erb
265
310
  - redis/acquire_lock.lua
266
311
  - redis/create.lua
267
312
  - redis/delete.lua
313
+ - redis/delete_by_digest.lua
268
314
  - redis/release_lock.lua
269
315
  - redis/release_stale_locks.lua
270
316
  - redis/signal.lua
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SidekiqUniqueJobs
4
- class Lock
5
- class WhileExecutingRequeue < WhileExecuting
6
- def lock
7
- true
8
- end
9
-
10
- def execute
11
- locksmith.lock(item[LOCK_TIMEOUT_KEY], raise: true) do
12
- yield if block_given?
13
- end
14
-
15
- unlock
16
-
17
- Sidekiq::Client.push(item) unless locksmith.locked?
18
- end
19
- end
20
- end
21
- end