sidekiq-unique-jobs 7.0.0.beta23 → 7.0.0.beta24
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 +4 -4
- data/README.md +6 -1
- data/lib/sidekiq_unique_jobs.rb +0 -1
- data/lib/sidekiq_unique_jobs/cli.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_args.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_config.rb +4 -4
- data/lib/sidekiq_unique_jobs/logging.rb +2 -2
- data/lib/sidekiq_unique_jobs/middleware/client.rb +4 -4
- data/lib/sidekiq_unique_jobs/middleware/server.rb +2 -2
- data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +2 -4
- data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +7 -1
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/lib/sidekiq_unique_jobs/version_check.rb +22 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cbd7bb8a58fe7319fb013de48e8c3914bb66157bb447b7186adaa9e936d1975e
|
4
|
+
data.tar.gz: 79e21055189827adeb3e8dadffe4ad86b75c464e5261731532e599278c3a154e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83bdc216d7b13aefc6cb168a175e6fda8974ae9fbbe356505889b20f1ed358b297d4fbe1fd8cb67ad5e393a332db764b81d58a9978508fd7cfe6ce0b83f49ff3
|
7
|
+
data.tar.gz: ea3b0d0681a700f434b4204ddad09374b22375365c4bf7532a5a56fe70b9e08d1a4a6bcc38dfae2f91efb60d00553a13c942e0737b5fb1b1fc0124f38c1f9c2b
|
data/README.md
CHANGED
@@ -562,17 +562,22 @@ If you need to perform any additional work after the lock has been released you
|
|
562
562
|
**Exception 1:** UntilExecuting unlocks and uses callback before yielding.
|
563
563
|
**Exception 2:** UntilExpired expires eventually, no after_unlock hook is called.
|
564
564
|
|
565
|
+
**NOTE:** _It is also possible to write this code as a class method._
|
566
|
+
|
565
567
|
```ruby
|
566
568
|
class UniqueJobWithFilterMethod
|
567
569
|
include Sidekiq::Worker
|
568
570
|
sidekiq_options lock: :while_executing,
|
569
571
|
|
572
|
+
def self.after_unlock
|
573
|
+
# block has yielded and lock is released
|
574
|
+
end
|
575
|
+
|
570
576
|
def after_unlock
|
571
577
|
# block has yielded and lock is released
|
572
578
|
end
|
573
579
|
...
|
574
580
|
end.
|
575
|
-
```
|
576
581
|
|
577
582
|
### Logging
|
578
583
|
|
data/lib/sidekiq_unique_jobs.rb
CHANGED
@@ -26,7 +26,6 @@ require "sidekiq_unique_jobs/connection"
|
|
26
26
|
require "sidekiq_unique_jobs/exceptions"
|
27
27
|
require "sidekiq_unique_jobs/script"
|
28
28
|
require "sidekiq_unique_jobs/script/caller"
|
29
|
-
require "sidekiq_unique_jobs/json"
|
30
29
|
require "sidekiq_unique_jobs/normalizer"
|
31
30
|
require "sidekiq_unique_jobs/job"
|
32
31
|
require "sidekiq_unique_jobs/redis"
|
@@ -10,7 +10,7 @@ module SidekiqUniqueJobs
|
|
10
10
|
#
|
11
11
|
class Cli < Thor
|
12
12
|
# :nodoc:
|
13
|
-
def self.banner(command, _namespace = nil, _subcommand = false)
|
13
|
+
def self.banner(command, _namespace = nil, _subcommand = false) # rubocop:disable Style/OptionalBooleanParameter
|
14
14
|
"jobs #{@package_name} #{command.usage}" # rubocop:disable ThreadSafety/InstanceVariableInClassMethod
|
15
15
|
end
|
16
16
|
|
@@ -97,7 +97,7 @@ module SidekiqUniqueJobs
|
|
97
97
|
end
|
98
98
|
|
99
99
|
# The method to use for filtering unique arguments
|
100
|
-
def lock_args_method
|
100
|
+
def lock_args_method # rubocop:disable Metrics/CyclomaticComplexity
|
101
101
|
@lock_args_method ||= worker_options[LOCK_ARGS] || worker_options[UNIQUE_ARGS]
|
102
102
|
@lock_args_method ||= :lock_args if worker_method_defined?(:lock_args)
|
103
103
|
@lock_args_method ||= :unique_args if worker_method_defined?(:unique_args)
|
@@ -59,12 +59,12 @@ module SidekiqUniqueJobs
|
|
59
59
|
def initialize(job_hash = {})
|
60
60
|
@type = job_hash[LOCK]&.to_sym
|
61
61
|
@worker = job_hash[CLASS]
|
62
|
-
@limit = job_hash.fetch(LOCK_LIMIT
|
63
|
-
@timeout = job_hash.fetch(LOCK_TIMEOUT
|
64
|
-
@ttl = job_hash.fetch(LOCK_TTL) { job_hash.fetch(LOCK_EXPIRATION
|
62
|
+
@limit = job_hash.fetch(LOCK_LIMIT, 1)
|
63
|
+
@timeout = job_hash.fetch(LOCK_TIMEOUT, 0)
|
64
|
+
@ttl = job_hash.fetch(LOCK_TTL) { job_hash.fetch(LOCK_EXPIRATION, nil) }.to_i
|
65
65
|
@pttl = ttl * 1_000
|
66
66
|
@lock_info = job_hash.fetch(LOCK_INFO) { SidekiqUniqueJobs.config.lock_info }
|
67
|
-
@on_conflict = job_hash.fetch(ON_CONFLICT
|
67
|
+
@on_conflict = job_hash.fetch(ON_CONFLICT, nil)
|
68
68
|
@errors = job_hash.fetch(ERRORS) { {} }
|
69
69
|
|
70
70
|
@on_client_conflict = job_hash[ON_CLIENT_CONFLICT]
|
@@ -114,8 +114,8 @@ module SidekiqUniqueJobs
|
|
114
114
|
#
|
115
115
|
# @yield
|
116
116
|
#
|
117
|
-
def with_configured_loggers_context
|
118
|
-
logger_method.call(logging_context)
|
117
|
+
def with_configured_loggers_context(&block)
|
118
|
+
logger_method.call(logging_context, &block)
|
119
119
|
end
|
120
120
|
|
121
121
|
#
|
@@ -18,15 +18,15 @@ module SidekiqUniqueJobs
|
|
18
18
|
#
|
19
19
|
# @yield when uniqueness is disable
|
20
20
|
# @yield when the lock is successful
|
21
|
-
def call(
|
22
|
-
lock
|
21
|
+
def call(*, &block)
|
22
|
+
lock(&block)
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
27
|
def lock
|
28
|
-
if (
|
29
|
-
yield
|
28
|
+
if (_token = lock_instance.lock)
|
29
|
+
yield
|
30
30
|
else
|
31
31
|
warn_about_duplicate
|
32
32
|
end
|
@@ -151,7 +151,7 @@ module SidekiqUniqueJobs
|
|
151
151
|
conn.sscan_each("queues", &block)
|
152
152
|
end
|
153
153
|
|
154
|
-
def entries(conn, queue) # rubocop:disable Metrics/MethodLength
|
154
|
+
def entries(conn, queue, &block) # rubocop:disable Metrics/MethodLength
|
155
155
|
queue_key = "queue:#{queue}"
|
156
156
|
initial_size = conn.llen(queue_key)
|
157
157
|
deleted_size = 0
|
@@ -166,9 +166,7 @@ module SidekiqUniqueJobs
|
|
166
166
|
|
167
167
|
break if entries.empty?
|
168
168
|
|
169
|
-
entries.each
|
170
|
-
yield entry
|
171
|
-
end
|
169
|
+
entries.each(&block)
|
172
170
|
|
173
171
|
deleted_size = initial_size - conn.llen(queue_key)
|
174
172
|
end
|
@@ -35,7 +35,13 @@ module SidekiqUniqueJobs
|
|
35
35
|
# The hook to call after a successful unlock
|
36
36
|
# @return [Proc]
|
37
37
|
def after_unlock_hook
|
38
|
-
|
38
|
+
lambda do
|
39
|
+
if @worker_class.respond_to?(:after_unlock)
|
40
|
+
@worker_class.after_unlock # instance method in sidekiq v6
|
41
|
+
elsif worker_class.respond_to?(:after_unlock)
|
42
|
+
worker_class.after_unlock # class method regardless of sidekiq version
|
43
|
+
end
|
44
|
+
end
|
39
45
|
end
|
40
46
|
|
41
47
|
# Attempt to constantize a string worker_class argument, always
|
@@ -7,10 +7,10 @@ module SidekiqUniqueJobs
|
|
7
7
|
# @author Mikael Henriksson <mikael@zoolutions.se>
|
8
8
|
#
|
9
9
|
class VersionCheck
|
10
|
-
PATTERN = /(?<operator1>[<>=]+)?\s?(?<version1>(\d+.?)+)(\s+&&\s+)?(?<operator2>[<>=]+)?\s?(?<version2>(\d+.?)+)?/m.freeze # rubocop:disable Layout/LineLength
|
10
|
+
PATTERN = /(?<operator1>[<>=]+)?\s?(?<version1>(\d+.?)+)(\s+&&\s+)?(?<operator2>[<>=]+)?\s?(?<version2>(\d+.?)+)?/m.freeze # rubocop:disable Layout/LineLength, Lint/MixedRegexpCaptureTypes
|
11
11
|
|
12
12
|
#
|
13
|
-
# Checks if a version is
|
13
|
+
# Checks if a version is constraint is satisfied
|
14
14
|
#
|
15
15
|
# @example A satisfied constraint
|
16
16
|
# VersionCheck.satisfied?("5.0.0", ">= 4.0.0") #=> true
|
@@ -22,12 +22,31 @@ module SidekiqUniqueJobs
|
|
22
22
|
# @param [String] version a version string `5.0.0`
|
23
23
|
# @param [String] constraint a version constraint `>= 5.0.0 <= 5.1.1`
|
24
24
|
#
|
25
|
-
# @return [
|
25
|
+
# @return [true, false] <description>
|
26
26
|
#
|
27
27
|
def self.satisfied?(version, constraint)
|
28
28
|
new(version, constraint).satisfied?
|
29
29
|
end
|
30
30
|
|
31
|
+
#
|
32
|
+
# Checks if a version is constraint is unfulfilled
|
33
|
+
#
|
34
|
+
# @example A satisfied constraint
|
35
|
+
# VersionCheck.unfulfilled?("5.0.0", ">= 4.0.0") #=> false
|
36
|
+
#
|
37
|
+
# @example An unfulfilled constraint
|
38
|
+
# VersionCheck.unfulfilled?("5.0.0", "<= 4.0.0") #=> true
|
39
|
+
#
|
40
|
+
#
|
41
|
+
# @param [String] version a version string `5.0.0`
|
42
|
+
# @param [String] constraint a version constraint `>= 5.0.0 <= 5.1.1`
|
43
|
+
#
|
44
|
+
# @return [true, false] <description>
|
45
|
+
#
|
46
|
+
def self.unfulfilled?(version, constraint)
|
47
|
+
!satisfied?(version, constraint)
|
48
|
+
end
|
49
|
+
|
31
50
|
#
|
32
51
|
# @!attribute [r] version
|
33
52
|
# @return [String] a version string `5.0.0`
|
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.0.0.
|
4
|
+
version: 7.0.0.beta24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mikael Henriksson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: brpoplpush-redis_script
|
@@ -239,7 +239,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
239
239
|
- !ruby/object:Gem::Version
|
240
240
|
version: 1.3.1
|
241
241
|
requirements: []
|
242
|
-
rubygems_version: 3.1.
|
242
|
+
rubygems_version: 3.1.4
|
243
243
|
signing_key:
|
244
244
|
specification_version: 4
|
245
245
|
summary: Sidekiq middleware that prevents duplicates jobs
|