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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +321 -4
- data/README.md +20 -16
- data/lib/sidekiq_unique_jobs/batch_delete.rb +8 -7
- data/lib/sidekiq_unique_jobs/changelog.rb +3 -3
- data/lib/sidekiq_unique_jobs/cli.rb +33 -8
- data/lib/sidekiq_unique_jobs/config.rb +48 -4
- data/lib/sidekiq_unique_jobs/constants.rb +45 -44
- data/lib/sidekiq_unique_jobs/core_ext.rb +1 -1
- data/lib/sidekiq_unique_jobs/deprecation.rb +30 -0
- data/lib/sidekiq_unique_jobs/digests.rb +8 -11
- data/lib/sidekiq_unique_jobs/exceptions.rb +4 -3
- data/lib/sidekiq_unique_jobs/expiring_digests.rb +14 -0
- data/lib/sidekiq_unique_jobs/job.rb +5 -0
- data/lib/sidekiq_unique_jobs/json.rb +7 -0
- data/lib/sidekiq_unique_jobs/key.rb +13 -8
- data/lib/sidekiq_unique_jobs/lock/base_lock.rb +30 -22
- data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +9 -3
- data/lib/sidekiq_unique_jobs/lock/until_executed.rb +15 -4
- data/lib/sidekiq_unique_jobs/lock/until_executing.rb +14 -4
- data/lib/sidekiq_unique_jobs/lock/until_expired.rb +13 -5
- data/lib/sidekiq_unique_jobs/lock/while_executing.rb +10 -6
- data/lib/sidekiq_unique_jobs/lock.rb +27 -10
- data/lib/sidekiq_unique_jobs/lock_args.rb +19 -15
- data/lib/sidekiq_unique_jobs/lock_config.rb +6 -6
- data/lib/sidekiq_unique_jobs/lock_digest.rb +7 -7
- data/lib/sidekiq_unique_jobs/lock_info.rb +2 -2
- data/lib/sidekiq_unique_jobs/lock_timeout.rb +4 -4
- data/lib/sidekiq_unique_jobs/lock_ttl.rb +5 -5
- data/lib/sidekiq_unique_jobs/lock_type.rb +37 -0
- data/lib/sidekiq_unique_jobs/locksmith.rb +41 -10
- data/lib/sidekiq_unique_jobs/logging.rb +23 -0
- data/lib/sidekiq_unique_jobs/lua/lock.lua +18 -12
- data/lib/sidekiq_unique_jobs/lua/lock_until_expired.lua +92 -0
- data/lib/sidekiq_unique_jobs/lua/reap_orphans.lua +31 -3
- data/lib/sidekiq_unique_jobs/lua/shared/_common.lua +1 -1
- data/lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_process_set.lua +1 -1
- data/lib/sidekiq_unique_jobs/lua/unlock.lua +17 -5
- data/lib/sidekiq_unique_jobs/middleware/client.rb +3 -1
- data/lib/sidekiq_unique_jobs/middleware/server.rb +2 -0
- data/lib/sidekiq_unique_jobs/middleware.rb +4 -4
- data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +4 -4
- data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +3 -3
- data/lib/sidekiq_unique_jobs/options_with_fallback.rb +6 -8
- data/lib/sidekiq_unique_jobs/orphans/lua_reaper.rb +1 -1
- data/lib/sidekiq_unique_jobs/orphans/manager.rb +40 -12
- data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +99 -14
- data/lib/sidekiq_unique_jobs/redis/string.rb +3 -1
- data/lib/sidekiq_unique_jobs/reflectable.rb +11 -2
- data/lib/sidekiq_unique_jobs/reflections.rb +12 -1
- data/lib/sidekiq_unique_jobs/script/caller.rb +7 -7
- data/lib/sidekiq_unique_jobs/server.rb +13 -1
- data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +35 -13
- data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +13 -3
- data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +40 -21
- data/lib/sidekiq_unique_jobs/testing.rb +53 -21
- data/lib/sidekiq_unique_jobs/timer_task.rb +266 -45
- data/lib/sidekiq_unique_jobs/timing.rb +1 -1
- data/lib/sidekiq_unique_jobs/upgrade_locks.rb +6 -6
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/lib/sidekiq_unique_jobs/web/helpers.rb +11 -1
- data/lib/sidekiq_unique_jobs/web/views/lock.erb +5 -3
- data/lib/sidekiq_unique_jobs/web.rb +22 -3
- data/lib/sidekiq_unique_jobs.rb +2 -0
- data/lib/tasks/changelog.rake +16 -16
- 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.
|
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
|
-
|
11
|
-
<
|
12
|
-
|
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"]
|
86
|
-
Sidekiq::Web.tabs["
|
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)
|
data/lib/sidekiq_unique_jobs.rb
CHANGED
@@ -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"
|
data/lib/tasks/changelog.rake
CHANGED
@@ -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
|
-
|
6
|
-
CHANGELOG_CMD
|
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.
|
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:
|
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: '
|
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: '
|
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://
|
231
|
+
homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
|
215
232
|
licenses:
|
216
233
|
- MIT
|
217
234
|
metadata:
|
218
|
-
|
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
|
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
|
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.
|
277
|
+
rubygems_version: 3.4.15
|
265
278
|
signing_key:
|
266
279
|
specification_version: 4
|
267
280
|
summary: Sidekiq middleware that prevents duplicates jobs
|