sidekiq-unique-jobs 7.0.0.beta25 → 7.0.0.beta26
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 +39 -2
- data/README.md +43 -23
- data/lib/sidekiq_unique_jobs/batch_delete.rb +1 -1
- data/lib/sidekiq_unique_jobs/changelog.rb +1 -1
- data/lib/sidekiq_unique_jobs/cli.rb +1 -1
- data/lib/sidekiq_unique_jobs/connection.rb +1 -1
- data/lib/sidekiq_unique_jobs/constants.rb +1 -1
- data/lib/sidekiq_unique_jobs/digests.rb +1 -1
- data/lib/sidekiq_unique_jobs/exceptions.rb +9 -9
- data/lib/sidekiq_unique_jobs/job.rb +1 -1
- data/lib/sidekiq_unique_jobs/json.rb +1 -1
- data/lib/sidekiq_unique_jobs/key.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/base_lock.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/client_validator.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/server_validator.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/until_executed.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/until_executing.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/until_expired.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/validator.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/while_executing.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock/while_executing_reject.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_args.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_config.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_digest.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_info.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_timeout.rb +1 -1
- data/lib/sidekiq_unique_jobs/lock_ttl.rb +1 -1
- data/lib/sidekiq_unique_jobs/locksmith.rb +1 -1
- data/lib/sidekiq_unique_jobs/logging.rb +1 -1
- data/lib/sidekiq_unique_jobs/logging/middleware_context.rb +2 -2
- data/lib/sidekiq_unique_jobs/middleware.rb +1 -1
- data/lib/sidekiq_unique_jobs/middleware/client.rb +1 -1
- data/lib/sidekiq_unique_jobs/middleware/server.rb +1 -1
- data/lib/sidekiq_unique_jobs/normalizer.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/log.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/null_strategy.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/raise.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/replace.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +1 -1
- data/lib/sidekiq_unique_jobs/on_conflict/strategy.rb +1 -1
- data/lib/sidekiq_unique_jobs/options_with_fallback.rb +1 -1
- data/lib/sidekiq_unique_jobs/orphans/lua_reaper.rb +1 -1
- data/lib/sidekiq_unique_jobs/orphans/manager.rb +35 -4
- data/lib/sidekiq_unique_jobs/orphans/null_reaper.rb +24 -0
- data/lib/sidekiq_unique_jobs/orphans/observer.rb +2 -2
- data/lib/sidekiq_unique_jobs/orphans/reaper.rb +5 -1
- data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +1 -1
- data/lib/sidekiq_unique_jobs/profiler.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/entity.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/hash.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/list.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/set.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/sorted_set.rb +1 -1
- data/lib/sidekiq_unique_jobs/redis/string.rb +1 -1
- data/lib/sidekiq_unique_jobs/rspec/matchers.rb +2 -2
- data/lib/sidekiq_unique_jobs/rspec/matchers/have_valid_sidekiq_options.rb +2 -2
- data/lib/sidekiq_unique_jobs/script.rb +1 -1
- data/lib/sidekiq_unique_jobs/script/caller.rb +2 -2
- data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +5 -5
- data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +1 -1
- data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +1 -1
- data/lib/sidekiq_unique_jobs/timing.rb +1 -1
- data/lib/sidekiq_unique_jobs/unlockable.rb +1 -1
- data/lib/sidekiq_unique_jobs/update_version.rb +1 -1
- data/lib/sidekiq_unique_jobs/upgrade_locks.rb +1 -1
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/lib/sidekiq_unique_jobs/version_check.rb +1 -1
- data/lib/sidekiq_unique_jobs/web.rb +1 -1
- data/lib/sidekiq_unique_jobs/web/helpers.rb +1 -1
- metadata +6 -5
@@ -9,7 +9,7 @@ module SidekiqUniqueJobs
|
|
9
9
|
# See {#lock} for more information about the client.
|
10
10
|
# See {#execute} for more information about the server
|
11
11
|
#
|
12
|
-
# @author Mikael Henriksson <mikael@
|
12
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
13
13
|
class WhileExecuting < BaseLock
|
14
14
|
RUN_SUFFIX ||= ":RUN"
|
15
15
|
|
@@ -9,7 +9,7 @@ module SidekiqUniqueJobs
|
|
9
9
|
# See {#lock} for more information about the client.
|
10
10
|
# See {#execute} for more information about the server
|
11
11
|
#
|
12
|
-
# @author Mikael Henriksson <mikael@
|
12
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
13
13
|
class WhileExecutingReject < WhileExecuting
|
14
14
|
# Overridden with a forced {OnConflict::Reject} strategy
|
15
15
|
# @return [OnConflict::Reject] a reject strategy
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
# Handles uniqueness of sidekiq arguments
|
5
5
|
#
|
6
|
-
# @author Mikael Henriksson <mikael@
|
6
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
7
7
|
class LockArgs
|
8
8
|
include SidekiqUniqueJobs::Logging
|
9
9
|
include SidekiqUniqueJobs::SidekiqWorkerMethods
|
@@ -5,7 +5,7 @@ require "openssl"
|
|
5
5
|
module SidekiqUniqueJobs
|
6
6
|
# Handles uniqueness of sidekiq arguments
|
7
7
|
#
|
8
|
-
# @author Mikael Henriksson <mikael@
|
8
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
9
9
|
class LockDigest
|
10
10
|
include SidekiqUniqueJobs::Logging
|
11
11
|
include SidekiqUniqueJobs::JSON
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
# Calculates timeout and expiration
|
5
5
|
#
|
6
|
-
# @author Mikael Henriksson <mikael@
|
6
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
7
7
|
class LockTimeout
|
8
8
|
# includes "SidekiqUniqueJobs::SidekiqWorkerMethods"
|
9
9
|
# @!parse include SidekiqUniqueJobs::SidekiqWorkerMethods
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
# Calculates timeout and expiration
|
5
5
|
#
|
6
|
-
# @author Mikael Henriksson <mikael@
|
6
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
7
7
|
class LockTTL
|
8
8
|
# includes "SidekiqUniqueJobs::SidekiqWorkerMethods"
|
9
9
|
# @!parse include SidekiqUniqueJobs::SidekiqWorkerMethods
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
# Lock manager class that handles all the various locks
|
5
5
|
#
|
6
|
-
# @author Mikael Henriksson <mikael@
|
6
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
7
7
|
class Locksmith # rubocop:disable Metrics/ClassLength
|
8
8
|
# includes "SidekiqUniqueJobs::Connection"
|
9
9
|
# @!parse include SidekiqUniqueJobs::Connection
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module SidekiqUniqueJobs
|
4
4
|
# Utility module for reducing the number of uses of logger.
|
5
5
|
#
|
6
|
-
# @author Mikael Henriksson <mikael@
|
6
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
7
7
|
module Logging
|
8
8
|
def self.included(base)
|
9
9
|
base.send(:extend, self)
|
@@ -4,13 +4,13 @@ module SidekiqUniqueJobs
|
|
4
4
|
#
|
5
5
|
# Provides the sidekiq middleware that makes the gem work
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
#
|
9
9
|
module Logging
|
10
10
|
#
|
11
11
|
# Context aware logging for Sidekiq Middlewares
|
12
12
|
#
|
13
|
-
# @author Mikael Henriksson <mikael@
|
13
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
14
14
|
#
|
15
15
|
module Middleware
|
16
16
|
include Logging
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
#
|
5
5
|
# Provides the sidekiq middleware that makes the gem work
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
#
|
9
9
|
module Middleware
|
10
10
|
include SidekiqUniqueJobs::Logging::Middleware
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module Middleware
|
5
5
|
# The unique sidekiq middleware for the server processor
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Server
|
9
9
|
prepend SidekiqUniqueJobs::Middleware
|
10
10
|
|
@@ -12,7 +12,7 @@ module SidekiqUniqueJobs
|
|
12
12
|
#
|
13
13
|
# Provides lock conflict resolutions
|
14
14
|
#
|
15
|
-
# @author Mikael Henriksson <mikael@
|
15
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
16
16
|
#
|
17
17
|
module OnConflict
|
18
18
|
# A convenience method for using the configured strategies
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Strategy to log information about conflict
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Log < OnConflict::Strategy
|
9
9
|
include SidekiqUniqueJobs::Logging
|
10
10
|
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Default conflict strategy class that does nothing
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class NullStrategy < OnConflict::Strategy
|
9
9
|
# Do nothing on conflict
|
10
10
|
# @return [nil]
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Strategy to raise an error on conflict
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Raise < OnConflict::Strategy
|
9
9
|
# Raise an error on conflict.
|
10
10
|
# This will cause Sidekiq to retry the job
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Strategy to send jobs to dead queue
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Reject < OnConflict::Strategy
|
9
9
|
include SidekiqUniqueJobs::Timing
|
10
10
|
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Strategy to replace the job on conflict
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Replace < OnConflict::Strategy
|
9
9
|
#
|
10
10
|
# @!attribute [r] queue
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
module OnConflict
|
5
5
|
# Strategy to reschedule job on conflict
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
class Reschedule < OnConflict::Strategy
|
9
9
|
include SidekiqUniqueJobs::SidekiqWorkerMethods
|
10
10
|
include SidekiqUniqueJobs::Logging
|
@@ -5,7 +5,7 @@ module SidekiqUniqueJobs
|
|
5
5
|
# Abstract conflict strategy class
|
6
6
|
#
|
7
7
|
# @abstract
|
8
|
-
# @author Mikael Henriksson <mikael@
|
8
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
9
9
|
class Strategy
|
10
10
|
include SidekiqUniqueJobs::JSON
|
11
11
|
include SidekiqUniqueJobs::Logging
|
@@ -7,7 +7,7 @@ module SidekiqUniqueJobs
|
|
7
7
|
# 1. item (required)
|
8
8
|
# 2. options (can be nil)
|
9
9
|
# 3. worker_class (required, can be anything)
|
10
|
-
# @author Mikael Henriksson <mikael@
|
10
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
11
11
|
module OptionsWithFallback
|
12
12
|
def self.included(base)
|
13
13
|
base.send(:include, SidekiqUniqueJobs::SidekiqWorkerMethods)
|
@@ -5,12 +5,13 @@ module SidekiqUniqueJobs
|
|
5
5
|
#
|
6
6
|
# Manages the orphan reaper
|
7
7
|
#
|
8
|
-
# @author Mikael Henriksson <mikael@
|
8
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
9
9
|
#
|
10
10
|
module Manager
|
11
11
|
module_function
|
12
12
|
|
13
13
|
DRIFT_FACTOR = 0.02
|
14
|
+
REAPERS = [:ruby, :lua].freeze
|
14
15
|
|
15
16
|
include SidekiqUniqueJobs::Connection
|
16
17
|
include SidekiqUniqueJobs::Logging
|
@@ -22,8 +23,8 @@ module SidekiqUniqueJobs
|
|
22
23
|
# @return [Concurrent::TimerTask] the task that was started
|
23
24
|
#
|
24
25
|
def start # rubocop:disable
|
25
|
-
return if registered?
|
26
26
|
return if disabled?
|
27
|
+
return if registered?
|
27
28
|
|
28
29
|
with_logging_context do
|
29
30
|
register_reaper_process
|
@@ -41,6 +42,9 @@ module SidekiqUniqueJobs
|
|
41
42
|
# @return [Boolean]
|
42
43
|
#
|
43
44
|
def stop
|
45
|
+
return if disabled?
|
46
|
+
return if unregistered?
|
47
|
+
|
44
48
|
with_logging_context do
|
45
49
|
log_info("Stopping Reaper")
|
46
50
|
unregister_reaper_process
|
@@ -114,7 +118,7 @@ module SidekiqUniqueJobs
|
|
114
118
|
end
|
115
119
|
|
116
120
|
#
|
117
|
-
# Checks if a reaper is
|
121
|
+
# Checks if a reaper is registered
|
118
122
|
#
|
119
123
|
#
|
120
124
|
# @return [true, false]
|
@@ -125,8 +129,35 @@ module SidekiqUniqueJobs
|
|
125
129
|
end
|
126
130
|
end
|
127
131
|
|
132
|
+
#
|
133
|
+
# Checks if that reapers are not registerd
|
134
|
+
#
|
135
|
+
# @see registered?
|
136
|
+
#
|
137
|
+
# @return [true, false]
|
138
|
+
#
|
139
|
+
def unregistered?
|
140
|
+
!registered?
|
141
|
+
end
|
142
|
+
|
143
|
+
#
|
144
|
+
# Checks if reaping is disabled
|
145
|
+
#
|
146
|
+
# @see enabled?
|
147
|
+
#
|
148
|
+
# @return [true, false]
|
149
|
+
#
|
128
150
|
def disabled?
|
129
|
-
|
151
|
+
!enabled?
|
152
|
+
end
|
153
|
+
|
154
|
+
#
|
155
|
+
# Checks if reaping is enabled
|
156
|
+
#
|
157
|
+
# @return [true, false]
|
158
|
+
#
|
159
|
+
def enabled?
|
160
|
+
REAPERS.include?(reaper)
|
130
161
|
end
|
131
162
|
|
132
163
|
#
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SidekiqUniqueJobs
|
4
|
+
module Orphans
|
5
|
+
#
|
6
|
+
# Class DeleteOrphans provides deletion of orphaned digests
|
7
|
+
#
|
8
|
+
# @note this is a much slower version of the lua script but does not crash redis
|
9
|
+
#
|
10
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
11
|
+
#
|
12
|
+
class NullReaper < Reaper
|
13
|
+
#
|
14
|
+
# Delete orphaned digests
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# @return [Integer] the number of reaped locks
|
18
|
+
#
|
19
|
+
def call
|
20
|
+
# NO OP
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -6,13 +6,13 @@ module SidekiqUniqueJobs
|
|
6
6
|
#
|
7
7
|
# @note this is a much slower version of the lua script but does not crash redis
|
8
8
|
#
|
9
|
-
# @author Mikael Henriksson <mikael@
|
9
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
10
10
|
#
|
11
11
|
module Orphans
|
12
12
|
#
|
13
13
|
# Observes the Orphan::Manager and provides information about each execution
|
14
14
|
#
|
15
|
-
# @author Mikael Henriksson <mikael@
|
15
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
16
16
|
#
|
17
17
|
class Observer
|
18
18
|
include SidekiqUniqueJobs::Logging
|
@@ -7,7 +7,7 @@ module SidekiqUniqueJobs
|
|
7
7
|
#
|
8
8
|
# @note this is a much slower version of the lua script but does not crash redis
|
9
9
|
#
|
10
|
-
# @author Mikael Henriksson <mikael@
|
10
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
11
11
|
#
|
12
12
|
class Reaper
|
13
13
|
include SidekiqUniqueJobs::Connection
|
@@ -17,12 +17,16 @@ module SidekiqUniqueJobs
|
|
17
17
|
|
18
18
|
require_relative "lua_reaper"
|
19
19
|
require_relative "ruby_reaper"
|
20
|
+
require_relative "null_reaper"
|
20
21
|
|
21
22
|
#
|
22
23
|
# @return [Hash<Symbol, SidekiqUniqueJobs::Orphans::Reaper] the current implementation of reapers
|
23
24
|
REAPERS = {
|
24
25
|
lua: SidekiqUniqueJobs::Orphans::LuaReaper,
|
25
26
|
ruby: SidekiqUniqueJobs::Orphans::RubyReaper,
|
27
|
+
none: SidekiqUniqueJobs::Orphans::NullReaper,
|
28
|
+
nil => SidekiqUniqueJobs::Orphans::NullReaper,
|
29
|
+
false => SidekiqUniqueJobs::Orphans::NullReaper,
|
26
30
|
}.freeze
|
27
31
|
|
28
32
|
#
|
@@ -4,7 +4,7 @@ module SidekiqUniqueJobs
|
|
4
4
|
#
|
5
5
|
# Class MethodProfiler provides method level profiling
|
6
6
|
#
|
7
|
-
# @author Mikael Henriksson <mikael@
|
7
|
+
# @author Mikael Henriksson <mikael@mhenrixon.com>
|
8
8
|
#
|
9
9
|
class Profiler
|
10
10
|
def self.patch(klass, methods, name) # rubocop:disable Metrics/MethodLength
|