sidekiq-unique-jobs 7.1.5 → 7.1.30

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +321 -4
  3. data/README.md +20 -16
  4. data/lib/sidekiq_unique_jobs/batch_delete.rb +8 -7
  5. data/lib/sidekiq_unique_jobs/changelog.rb +3 -3
  6. data/lib/sidekiq_unique_jobs/cli.rb +33 -8
  7. data/lib/sidekiq_unique_jobs/config.rb +48 -4
  8. data/lib/sidekiq_unique_jobs/constants.rb +45 -44
  9. data/lib/sidekiq_unique_jobs/core_ext.rb +1 -1
  10. data/lib/sidekiq_unique_jobs/deprecation.rb +30 -0
  11. data/lib/sidekiq_unique_jobs/digests.rb +8 -11
  12. data/lib/sidekiq_unique_jobs/exceptions.rb +4 -3
  13. data/lib/sidekiq_unique_jobs/expiring_digests.rb +14 -0
  14. data/lib/sidekiq_unique_jobs/job.rb +5 -0
  15. data/lib/sidekiq_unique_jobs/json.rb +7 -0
  16. data/lib/sidekiq_unique_jobs/key.rb +13 -8
  17. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +30 -22
  18. data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +9 -3
  19. data/lib/sidekiq_unique_jobs/lock/until_executed.rb +15 -4
  20. data/lib/sidekiq_unique_jobs/lock/until_executing.rb +14 -4
  21. data/lib/sidekiq_unique_jobs/lock/until_expired.rb +13 -5
  22. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +10 -6
  23. data/lib/sidekiq_unique_jobs/lock.rb +27 -10
  24. data/lib/sidekiq_unique_jobs/lock_args.rb +19 -15
  25. data/lib/sidekiq_unique_jobs/lock_config.rb +6 -6
  26. data/lib/sidekiq_unique_jobs/lock_digest.rb +7 -7
  27. data/lib/sidekiq_unique_jobs/lock_info.rb +2 -2
  28. data/lib/sidekiq_unique_jobs/lock_timeout.rb +4 -4
  29. data/lib/sidekiq_unique_jobs/lock_ttl.rb +5 -5
  30. data/lib/sidekiq_unique_jobs/lock_type.rb +37 -0
  31. data/lib/sidekiq_unique_jobs/locksmith.rb +41 -10
  32. data/lib/sidekiq_unique_jobs/logging.rb +23 -0
  33. data/lib/sidekiq_unique_jobs/lua/lock.lua +18 -12
  34. data/lib/sidekiq_unique_jobs/lua/lock_until_expired.lua +92 -0
  35. data/lib/sidekiq_unique_jobs/lua/reap_orphans.lua +31 -3
  36. data/lib/sidekiq_unique_jobs/lua/shared/_common.lua +1 -1
  37. data/lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_process_set.lua +1 -1
  38. data/lib/sidekiq_unique_jobs/lua/unlock.lua +17 -5
  39. data/lib/sidekiq_unique_jobs/middleware/client.rb +3 -1
  40. data/lib/sidekiq_unique_jobs/middleware/server.rb +2 -0
  41. data/lib/sidekiq_unique_jobs/middleware.rb +4 -4
  42. data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +4 -4
  43. data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +3 -3
  44. data/lib/sidekiq_unique_jobs/options_with_fallback.rb +6 -8
  45. data/lib/sidekiq_unique_jobs/orphans/lua_reaper.rb +1 -1
  46. data/lib/sidekiq_unique_jobs/orphans/manager.rb +40 -12
  47. data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +99 -14
  48. data/lib/sidekiq_unique_jobs/redis/string.rb +3 -1
  49. data/lib/sidekiq_unique_jobs/reflectable.rb +11 -2
  50. data/lib/sidekiq_unique_jobs/reflections.rb +12 -1
  51. data/lib/sidekiq_unique_jobs/script/caller.rb +7 -7
  52. data/lib/sidekiq_unique_jobs/server.rb +13 -1
  53. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +35 -13
  54. data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +13 -3
  55. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +40 -21
  56. data/lib/sidekiq_unique_jobs/testing.rb +53 -21
  57. data/lib/sidekiq_unique_jobs/timer_task.rb +266 -45
  58. data/lib/sidekiq_unique_jobs/timing.rb +1 -1
  59. data/lib/sidekiq_unique_jobs/upgrade_locks.rb +6 -6
  60. data/lib/sidekiq_unique_jobs/version.rb +1 -1
  61. data/lib/sidekiq_unique_jobs/web/helpers.rb +11 -1
  62. data/lib/sidekiq_unique_jobs/web/views/lock.erb +5 -3
  63. data/lib/sidekiq_unique_jobs/web.rb +22 -3
  64. data/lib/sidekiq_unique_jobs.rb +2 -0
  65. data/lib/tasks/changelog.rake +16 -16
  66. metadata +26 -13
@@ -27,7 +27,7 @@ module SidekiqUniqueJobs
27
27
  # @return [String] the file contents of the template
28
28
  #
29
29
  def unique_template(name)
30
- File.open(unique_filename(name)).read
30
+ File.read(unique_filename(name))
31
31
  end
32
32
 
33
33
  #
@@ -51,6 +51,16 @@ module SidekiqUniqueJobs
51
51
  @digests ||= SidekiqUniqueJobs::Digests.new
52
52
  end
53
53
 
54
+ #
55
+ # The collection of digests
56
+ #
57
+ #
58
+ # @return [SidekiqUniqueJobs::ExpiringDigests] the sorted set with expiring digests
59
+ #
60
+ def expiring_digests
61
+ @expiring_digests ||= SidekiqUniqueJobs::ExpiringDigests.new
62
+ end
63
+
54
64
  #
55
65
  # The collection of changelog entries
56
66
  #
@@ -7,9 +7,11 @@
7
7
  <div class="col-sm-7 table-responsive">
8
8
  <% if @lock.info.none? %>
9
9
  <h3>No Lock Information Available</h3>
10
- <p>To use it turn the following setting on:
11
- <code>SidekiqUniqueJobs.config.lock_info = true</code>
12
- </p>
10
+ <% unless SidekiqUniqueJobs.config.lock_info %>
11
+ <p>To use it turn the following setting on:
12
+ <code>SidekiqUniqueJobs.config.lock_info = true</code>
13
+ </p>
14
+ <% end %>
13
15
  <% else %>
14
16
  <table class="table table-striped table-bordered table-white table-hover">
15
17
  <caption>Information about lock</caption>
@@ -8,7 +8,7 @@ module SidekiqUniqueJobs
8
8
  #
9
9
  # @author Mikael Henriksson <mikael@mhenrixon.com>
10
10
  module Web
11
- def self.registered(app) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
11
+ def self.registered(app) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
12
12
  app.helpers do
13
13
  include Web::Helpers
14
14
  end
@@ -49,8 +49,25 @@ module SidekiqUniqueJobs
49
49
  erb(unique_template(:locks))
50
50
  end
51
51
 
52
+ app.get "/expiring_locks" do
53
+ @filter = params[:filter] || "*"
54
+ @filter = "*" if @filter == ""
55
+ @count = (params[:count] || 100).to_i
56
+ @current_cursor = params[:cursor]
57
+ @prev_cursor = params[:prev_cursor]
58
+
59
+ @total_size, @next_cursor, @locks = expiring_digests.page(
60
+ cursor: @current_cursor,
61
+ pattern: @filter,
62
+ page_size: @count,
63
+ )
64
+
65
+ erb(unique_template(:locks))
66
+ end
67
+
52
68
  app.get "/locks/delete_all" do
53
69
  digests.delete_by_pattern("*", count: digests.count)
70
+ expiring_digests.delete_by_pattern("*", count: digests.count)
54
71
  redirect_to :locks
55
72
  end
56
73
 
@@ -63,6 +80,7 @@ module SidekiqUniqueJobs
63
80
 
64
81
  app.get "/locks/:digest/delete" do
65
82
  digests.delete_by_digest(params[:digest])
83
+ expiring_digests.delete_by_digest(params[:digest])
66
84
  redirect_to :locks
67
85
  end
68
86
 
@@ -82,8 +100,9 @@ begin
82
100
  require "sidekiq/web" unless defined?(Sidekiq::Web)
83
101
 
84
102
  Sidekiq::Web.register(SidekiqUniqueJobs::Web)
85
- Sidekiq::Web.tabs["Locks"] = "locks"
86
- Sidekiq::Web.tabs["Changelogs"] = "changelogs"
103
+ Sidekiq::Web.tabs["Locks"] = "locks"
104
+ Sidekiq::Web.tabs["Expiring Locks"] = "expiring_locks"
105
+ Sidekiq::Web.tabs["Changelogs"] = "changelogs"
87
106
  Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "locales")
88
107
  rescue NameError, LoadError => ex
89
108
  SidekiqUniqueJobs.logger.error(ex)
@@ -27,6 +27,7 @@ require "sidekiq_unique_jobs/logging"
27
27
  require "sidekiq_unique_jobs/logging/middleware_context"
28
28
  require "sidekiq_unique_jobs/timing"
29
29
  require "sidekiq_unique_jobs/sidekiq_worker_methods"
30
+ require "sidekiq_unique_jobs/lock_type"
30
31
  require "sidekiq_unique_jobs/connection"
31
32
  require "sidekiq_unique_jobs/exceptions"
32
33
  require "sidekiq_unique_jobs/script"
@@ -72,6 +73,7 @@ require "sidekiq_unique_jobs/sidekiq_unique_ext"
72
73
  require "sidekiq_unique_jobs/on_conflict"
73
74
  require "sidekiq_unique_jobs/changelog"
74
75
  require "sidekiq_unique_jobs/digests"
76
+ require "sidekiq_unique_jobs/expiring_digests"
75
77
 
76
78
  require "sidekiq_unique_jobs/config"
77
79
  require "sidekiq_unique_jobs/sidekiq_unique_jobs"
@@ -1,23 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Style/MutableConstant
4
+ CHANGELOG_CMD = %w[
5
+ github_changelog_generator
6
+ --no-verbose
7
+ --user
8
+ mhenrixon
9
+ --project
10
+ sidekiq-unique-jobs
11
+ --token
12
+ ]
13
+ ADD_CHANGELOG_CMD = "git add --all"
14
+ COMMIT_CHANGELOG_CMD = "git commit -a -m 'Update changelog'"
15
+ # rubocop:enable Style/MutableConstant
16
+
3
17
  desc "Generate a Changelog"
4
18
  task :changelog do
5
- # rubocop:disable Style/MutableConstant
6
- CHANGELOG_CMD ||= %w[
7
- github_changelog_generator
8
- --no-verbose
9
- --user
10
- mhenrixon
11
- --project
12
- sidekiq-unique-jobs
13
- --token
14
- ]
15
- ADD_CHANGELOG_CMD ||= "git add --all"
16
- COMMIT_CHANGELOG_CMD ||= "git commit -a -m 'Update changelog'"
17
- # rubocop:enable Style/MutableConstant
18
-
19
- sh("git checkout master")
20
- sh(*CHANGELOG_CMD.push(ENV["CHANGELOG_GITHUB_TOKEN"]))
19
+ sh("git checkout main")
20
+ sh(*CHANGELOG_CMD.push(ENV.fetch("CHANGELOG_GITHUB_TOKEN", nil)))
21
21
  sh(ADD_CHANGELOG_CMD)
22
22
  sh(COMMIT_CHANGELOG_CMD)
23
23
  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: 7.1.5
4
+ version: 7.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-28 00:00:00.000000000 Z
11
+ date: 2023-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: brpoplpush-redis_script
@@ -50,6 +50,20 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 1.0.5
53
+ - !ruby/object:Gem::Dependency
54
+ name: redis
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "<"
58
+ - !ruby/object:Gem::Version
59
+ version: '5.0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '5.0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: sidekiq
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -79,7 +93,7 @@ dependencies:
79
93
  version: '0.20'
80
94
  - - "<"
81
95
  - !ruby/object:Gem::Version
82
- version: '2.0'
96
+ version: '3.0'
83
97
  type: :runtime
84
98
  prerelease: false
85
99
  version_requirements: !ruby/object:Gem::Requirement
@@ -89,7 +103,7 @@ dependencies:
89
103
  version: '0.20'
90
104
  - - "<"
91
105
  - !ruby/object:Gem::Version
92
- version: '2.0'
106
+ version: '3.0'
93
107
  description: |
94
108
  Prevents simultaneous Sidekiq jobs with the same unique arguments to run.
95
109
  Highly configurable to suite your specific needs.
@@ -116,6 +130,7 @@ files:
116
130
  - lib/sidekiq_unique_jobs/deprecation.rb
117
131
  - lib/sidekiq_unique_jobs/digests.rb
118
132
  - lib/sidekiq_unique_jobs/exceptions.rb
133
+ - lib/sidekiq_unique_jobs/expiring_digests.rb
119
134
  - lib/sidekiq_unique_jobs/job.rb
120
135
  - lib/sidekiq_unique_jobs/json.rb
121
136
  - lib/sidekiq_unique_jobs/key.rb
@@ -136,6 +151,7 @@ files:
136
151
  - lib/sidekiq_unique_jobs/lock_info.rb
137
152
  - lib/sidekiq_unique_jobs/lock_timeout.rb
138
153
  - lib/sidekiq_unique_jobs/lock_ttl.rb
154
+ - lib/sidekiq_unique_jobs/lock_type.rb
139
155
  - lib/sidekiq_unique_jobs/locksmith.rb
140
156
  - lib/sidekiq_unique_jobs/logging.rb
141
157
  - lib/sidekiq_unique_jobs/logging/middleware_context.rb
@@ -144,6 +160,7 @@ files:
144
160
  - lib/sidekiq_unique_jobs/lua/delete_job_by_digest.lua
145
161
  - lib/sidekiq_unique_jobs/lua/find_digest_in_queues.lua
146
162
  - lib/sidekiq_unique_jobs/lua/lock.lua
163
+ - lib/sidekiq_unique_jobs/lua/lock_until_expired.lua
147
164
  - lib/sidekiq_unique_jobs/lua/locked.lua
148
165
  - lib/sidekiq_unique_jobs/lua/queue.lua
149
166
  - lib/sidekiq_unique_jobs/lua/reap_orphans.lua
@@ -211,19 +228,15 @@ files:
211
228
  - lib/sidekiq_unique_jobs/web/views/lock.erb
212
229
  - lib/sidekiq_unique_jobs/web/views/locks.erb
213
230
  - lib/tasks/changelog.rake
214
- homepage: https://mhenrixon.github.io/sidekiq-unique-jobs
231
+ homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
215
232
  licenses:
216
233
  - MIT
217
234
  metadata:
218
- homepage_uri: https://mhenrixon.github.io/sidekiq-unique-jobs
219
- bug_tracker_uri: https://github.com/mhenrixon/sidekiq-unique-jobs/issues
220
- documentation_uri: https://mhenrixon.github.io/sidekiq-unique-jobs
221
- source_code_uri: https://github.com/mhenrixon/sidekiq-unique-jobs
222
- changelog_uri: https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/CHANGELOG.md
235
+ rubygems_mfa_required: 'true'
223
236
  post_install_message: |
224
237
  IMPORTANT!
225
238
 
226
- Automatic configuration of the sidekiq middelware is no longer done.
239
+ Automatic configuration of the sidekiq middleware is no longer done.
227
240
  Please see: https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/README.md#add-the-middleware
228
241
 
229
242
  This version deprecated the following sidekiq_options
@@ -254,14 +267,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
254
267
  requirements:
255
268
  - - ">="
256
269
  - !ruby/object:Gem::Version
257
- version: 2.5.0
270
+ version: '2.5'
258
271
  required_rubygems_version: !ruby/object:Gem::Requirement
259
272
  requirements:
260
273
  - - ">="
261
274
  - !ruby/object:Gem::Version
262
275
  version: '0'
263
276
  requirements: []
264
- rubygems_version: 3.2.24
277
+ rubygems_version: 3.4.15
265
278
  signing_key:
266
279
  specification_version: 4
267
280
  summary: Sidekiq middleware that prevents duplicates jobs