sidekiq-unique-jobs 5.0.11 → 6.0.0.rc1
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/.codeclimate.yml +17 -9
- data/.gitignore +1 -3
- data/.reek +105 -0
- data/.rubocop.yml +36 -1
- data/.simplecov +7 -2
- data/.travis.yml +11 -10
- data/Appraisals +3 -7
- data/CHANGELOG.md +17 -0
- data/Gemfile +16 -13
- data/Guardfile +55 -0
- data/README.md +85 -73
- data/examples/another_unique_job.rb +13 -0
- data/examples/custom_queue_job.rb +12 -0
- data/examples/custom_queue_job_with_filter_method.rb +13 -0
- data/examples/custom_queue_job_with_filter_proc.rb +16 -0
- data/examples/expiring_job.rb +12 -0
- data/examples/inline_worker.rb +12 -0
- data/examples/just_a_worker.rb +13 -0
- data/examples/long_running_job.rb +12 -0
- data/examples/main_job.rb +13 -0
- data/examples/my_job.rb +12 -0
- data/examples/my_unique_job.rb +16 -0
- data/examples/my_unique_job_with_filter_method.rb +21 -0
- data/examples/my_unique_job_with_filter_proc.rb +19 -0
- data/examples/notify_worker.rb +14 -0
- data/examples/plain_class.rb +13 -0
- data/examples/simple_worker.rb +15 -0
- data/examples/spawn_simple_worker.rb +12 -0
- data/examples/test_class.rb +9 -0
- data/examples/unique_across_workers_job.rb +20 -0
- data/examples/unique_job_with_conditional_parameter.rb +18 -0
- data/examples/unique_job_with_filter_method.rb +18 -0
- data/examples/unique_job_with_nil_unique_args.rb +20 -0
- data/examples/unique_job_with_no_unique_args_method.rb +16 -0
- data/examples/unique_job_withthout_unique_args_parameter.rb +18 -0
- data/examples/unique_on_all_queues_job.rb +16 -0
- data/examples/until_and_while_executing_job.rb +13 -0
- data/examples/until_executed_2_job.rb +24 -0
- data/examples/until_executed_job.rb +25 -0
- data/examples/until_executing_job.rb +11 -0
- data/examples/until_expired_job.rb +12 -0
- data/examples/until_global_expired_job.rb +12 -0
- data/examples/while_executing_job.rb +15 -0
- data/examples/while_executing_reject_job.rb +14 -0
- data/examples/without_argument_job.rb +13 -0
- data/lib/sidekiq-unique-jobs.rb +1 -91
- data/lib/sidekiq/simulator.rb +15 -16
- data/lib/sidekiq_unique_jobs.rb +79 -0
- data/lib/sidekiq_unique_jobs/cli.rb +9 -18
- data/lib/sidekiq_unique_jobs/client/middleware.rb +16 -18
- data/lib/sidekiq_unique_jobs/connection.rb +18 -0
- data/lib/sidekiq_unique_jobs/constants.rb +13 -17
- data/lib/sidekiq_unique_jobs/core_ext.rb +28 -55
- data/lib/sidekiq_unique_jobs/exceptions.rb +30 -0
- data/lib/sidekiq_unique_jobs/lock/base_lock.rb +84 -0
- data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +11 -6
- data/lib/sidekiq_unique_jobs/lock/until_executed.rb +6 -58
- data/lib/sidekiq_unique_jobs/lock/until_executing.rb +6 -5
- data/lib/sidekiq_unique_jobs/lock/until_expired.rb +17 -0
- data/lib/sidekiq_unique_jobs/lock/while_executing.rb +20 -34
- data/lib/sidekiq_unique_jobs/lock/while_executing_reject.rb +78 -0
- data/lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb +20 -0
- data/lib/sidekiq_unique_jobs/locksmith.rb +149 -0
- data/lib/sidekiq_unique_jobs/logging.rb +30 -0
- data/lib/sidekiq_unique_jobs/options_with_fallback.rb +27 -41
- data/lib/sidekiq_unique_jobs/scripts.rb +25 -24
- data/lib/sidekiq_unique_jobs/server/middleware.rb +12 -20
- data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +5 -5
- data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +42 -0
- data/lib/sidekiq_unique_jobs/testing.rb +40 -50
- data/lib/sidekiq_unique_jobs/timeout.rb +15 -0
- data/lib/sidekiq_unique_jobs/timeout/calculator.rb +49 -0
- data/lib/sidekiq_unique_jobs/unique_args.rb +33 -77
- data/lib/sidekiq_unique_jobs/unlockable.rb +5 -14
- data/lib/sidekiq_unique_jobs/util.rb +28 -90
- data/lib/sidekiq_unique_jobs/version.rb +1 -1
- data/redis/acquire_lock.lua +5 -3
- data/redis/create.lua +58 -0
- data/redis/delete.lua +11 -0
- data/redis/release_stale_locks.lua +90 -0
- data/redis/signal.lua +21 -0
- data/sidekiq-unique-jobs.gemspec +15 -8
- metadata +108 -32
- data/lib/sidekiq_unique_jobs/config.rb +0 -17
- data/lib/sidekiq_unique_jobs/lock.rb +0 -12
- data/lib/sidekiq_unique_jobs/lock/until_timeout.rb +0 -17
- data/lib/sidekiq_unique_jobs/run_lock_failed.rb +0 -3
- data/lib/sidekiq_unique_jobs/script_mock.rb +0 -66
- data/lib/sidekiq_unique_jobs/scripts/acquire_lock.rb +0 -47
- data/lib/sidekiq_unique_jobs/scripts/release_lock.rb +0 -49
- data/lib/sidekiq_unique_jobs/testing/sidekiq_overrides.rb +0 -50
- data/lib/sidekiq_unique_jobs/timeout_calculator.rb +0 -67
- data/redis/synchronize.lua +0 -16
data/redis/create.lua
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
-- redis.replicate_commands();
|
2
|
+
|
3
|
+
local exists_key = KEYS[1]
|
4
|
+
local grabbed_key = KEYS[2]
|
5
|
+
local available_key = KEYS[3]
|
6
|
+
local version_key = KEYS[4]
|
7
|
+
local unique_digest = KEYS[5]
|
8
|
+
|
9
|
+
local job_id = ARGV[1]
|
10
|
+
local expiration = tonumber(ARGV[2])
|
11
|
+
local api_version = ARGV[3]
|
12
|
+
local concurrency = tonumber(ARGV[4])
|
13
|
+
|
14
|
+
local stored_token = redis.call('GETSET', exists_key, job_id)
|
15
|
+
|
16
|
+
redis.log(redis.LOG_DEBUG, "create.lua - starting...")
|
17
|
+
|
18
|
+
if stored_token then
|
19
|
+
redis.log(redis.LOG_DEBUG, "create.lua - stored_token: " .. stored_token)
|
20
|
+
return stored_token
|
21
|
+
end
|
22
|
+
|
23
|
+
----------------------------------------------------------------
|
24
|
+
-- TODO: Legacy support (Remove in v6.1)
|
25
|
+
local old_token = redis.call('GET', unique_digest)
|
26
|
+
if old_token then
|
27
|
+
-- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token)
|
28
|
+
if old_token == job_id or old_token == '2' then
|
29
|
+
-- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token .. " MATCH with " .. job_id)
|
30
|
+
redis.call('DEL', unique_digest)
|
31
|
+
else
|
32
|
+
-- redis.log(redis.LOG_DEBUG, "create.lua - " .. unique_digest .. " with " .. old_token .. " MISMATCH with " .. job_id)
|
33
|
+
return old_token
|
34
|
+
end
|
35
|
+
end
|
36
|
+
----------------------------------------------------------------
|
37
|
+
|
38
|
+
redis.call('EXPIRE', exists_key, 10)
|
39
|
+
redis.call('DEL', grabbed_key)
|
40
|
+
redis.call('DEL', available_key)
|
41
|
+
|
42
|
+
if concurrency and concurrency > 1 then
|
43
|
+
for index = 1, concurrency do
|
44
|
+
redis.call('RPUSH', available_key, index)
|
45
|
+
end
|
46
|
+
else
|
47
|
+
redis.call('RPUSH', available_key, job_id)
|
48
|
+
end
|
49
|
+
redis.call('GETSET', version_key, api_version)
|
50
|
+
redis.call('PERSIST', exists_key)
|
51
|
+
|
52
|
+
if expiration then
|
53
|
+
redis.call('EXPIRE', available_key, expiration)
|
54
|
+
redis.call('EXPIRE', exists_key, expiration)
|
55
|
+
redis.call('EXPIRE', version_key, expiration)
|
56
|
+
end
|
57
|
+
|
58
|
+
return job_id
|
data/redis/delete.lua
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
local exists_key = KEYS[1]
|
2
|
+
local grabbed_key = KEYS[2]
|
3
|
+
local available_key = KEYS[3]
|
4
|
+
local version_key = KEYS[4]
|
5
|
+
local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
|
6
|
+
|
7
|
+
redis.call('DEL', exists_key)
|
8
|
+
redis.call('DEL', grabbed_key)
|
9
|
+
redis.call('DEL', available_key)
|
10
|
+
redis.call('DEL', version_key)
|
11
|
+
redis.call('DEL', unique_digest) -- TODO: Legacy support (Remove in v6.1)
|
@@ -0,0 +1,90 @@
|
|
1
|
+
redis.replicate_commands();
|
2
|
+
|
3
|
+
local exists_key = KEYS[1]
|
4
|
+
local grabbed_key = KEYS[2]
|
5
|
+
local available_key = KEYS[3]
|
6
|
+
local release_key = KEYS[4]
|
7
|
+
local version_key = KEYS[5]
|
8
|
+
|
9
|
+
local expires_in = tonumber(ARGV[1])
|
10
|
+
local stale_client_timeout = tonumber(ARGV[2])
|
11
|
+
local expiration = tonumber(ARGV[3])
|
12
|
+
|
13
|
+
local function current_time()
|
14
|
+
local time = redis.call('time')
|
15
|
+
local s = time[1]
|
16
|
+
local ms = time[2]
|
17
|
+
local number = tonumber((s .. '.' .. ms))
|
18
|
+
|
19
|
+
return number
|
20
|
+
end
|
21
|
+
|
22
|
+
local hgetall = function (key)
|
23
|
+
local bulk = redis.call('HGETALL', key)
|
24
|
+
local result = {}
|
25
|
+
local nextkey
|
26
|
+
for i, v in ipairs(bulk) do
|
27
|
+
if i % 2 == 1 then
|
28
|
+
nextkey = v
|
29
|
+
else
|
30
|
+
result[nextkey] = v
|
31
|
+
end
|
32
|
+
end
|
33
|
+
return result
|
34
|
+
end
|
35
|
+
|
36
|
+
local cached_current_time = current_time()
|
37
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - started at : " .. cached_current_time)
|
38
|
+
|
39
|
+
local my_lock_expires_at = cached_current_time + expires_in + 1
|
40
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - my_lock_expires_at: " .. my_lock_expires_at)
|
41
|
+
|
42
|
+
if not redis.call('SETNX', release_key, my_lock_expires_at) then
|
43
|
+
-- Check if expired
|
44
|
+
local other_lock_expires_at = tonumber(redis.call('GET', release_key))
|
45
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - other_lock_expires_at: " .. other_lock_expires_at)
|
46
|
+
|
47
|
+
if other_lock_expires_at < cached_current_time then
|
48
|
+
local old_expires_at = tonumber(redis.call('GETSET', release_key, my_lock_expires_at))
|
49
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - old_expires_at: " .. old_expires_at)
|
50
|
+
|
51
|
+
-- Check if another client started cleanup yet. If not,
|
52
|
+
-- then we now have the lock.
|
53
|
+
if not old_expires_at == other_lock_expires_at then
|
54
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua -could not retrieve lock: exiting 0")
|
55
|
+
return 0
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
local keys = hgetall(grabbed_key)
|
61
|
+
for key, locked_at in pairs(keys) do
|
62
|
+
local timed_out_at = tonumber(locked_at) + stale_client_timeout
|
63
|
+
redis.log(redis.LOG_DEBUG,
|
64
|
+
"release_stale_locks.lua - processing: " .. grabbed_key .. " key: " .. key .. " locked_at: " .. locked_at
|
65
|
+
)
|
66
|
+
|
67
|
+
if timed_out_at < current_time() then
|
68
|
+
redis.log(redis.LOG_DEBUG, "HDEL " .. grabbed_key .. ":" .. key)
|
69
|
+
redis.call('HDEL', grabbed_key, key)
|
70
|
+
redis.log(redis.LOG_DEBUG, "LPUSH " .. available_key .. ":" .. key)
|
71
|
+
redis.call('LPUSH', available_key, key)
|
72
|
+
|
73
|
+
if expiration then
|
74
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - EXPIRE " .. available_key .. " with " .. expiration)
|
75
|
+
redis.call('EXPIRE', available_key, expiration)
|
76
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - EXPIRE " .. exists_key .. " with " .. expiration)
|
77
|
+
redis.call('EXPIRE', exists_key, expiration)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
-- Make sure not to delete the lock in case someone else already expired
|
83
|
+
-- our lock, with one second in between to account for some lag.
|
84
|
+
if my_lock_expires_at > (current_time() - 1) then
|
85
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - DEL " .. release_key)
|
86
|
+
redis.call('DEL', release_key)
|
87
|
+
end
|
88
|
+
|
89
|
+
redis.log(redis.LOG_DEBUG, "release_stale_locks.lua - comleted at : " .. current_time())
|
90
|
+
return 1
|
data/redis/signal.lua
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
local exists_key = KEYS[1]
|
2
|
+
local grabbed_key = KEYS[2]
|
3
|
+
local available_key = KEYS[3]
|
4
|
+
local version_key = KEYS[4]
|
5
|
+
local unique_digest = KEYS[5] -- TODO: Legacy support (Remove in v6.1)
|
6
|
+
|
7
|
+
local token = ARGV[1]
|
8
|
+
local expiration = tonumber(ARGV[2])
|
9
|
+
|
10
|
+
redis.call('HDEL', grabbed_key, token)
|
11
|
+
local available_count = redis.call('LPUSH', available_key, token)
|
12
|
+
|
13
|
+
if expiration then
|
14
|
+
redis.log(redis.LOG_DEBUG, "signal_locks.lua - expiring stale locks")
|
15
|
+
redis.call('EXPIRE', exists_key, expiration)
|
16
|
+
redis.call('EXPIRE', available_key, expiration)
|
17
|
+
redis.call('EXPIRE', version_key, expiration)
|
18
|
+
redis.call('EXPIRE', unique_digest, expiration) -- TODO: Legacy support (Remove in v6.1)
|
19
|
+
end
|
20
|
+
|
21
|
+
return available_count
|
data/sidekiq-unique-jobs.gemspec
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'sidekiq_unique_jobs/version'
|
4
7
|
|
5
8
|
Gem::Specification.new do |spec|
|
6
9
|
spec.name = 'sidekiq-unique-jobs'
|
@@ -15,18 +18,22 @@ Gem::Specification.new do |spec|
|
|
15
18
|
|
16
19
|
spec.bindir = 'bin'
|
17
20
|
spec.executables = %w[jobs]
|
18
|
-
spec.files =
|
19
|
-
|
21
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
22
|
+
`git ls-files -z`.split("\x0").reject do |file|
|
23
|
+
file.match(%r{^(test|spec|features|gemfiles|pkg|rails_example|tmp)/})
|
24
|
+
end
|
20
25
|
end
|
21
26
|
|
22
27
|
spec.require_paths = ['lib']
|
28
|
+
spec.add_dependency 'concurrent-ruby', '~> 1.0', '>= 1.0.5'
|
23
29
|
spec.add_dependency 'sidekiq', '>= 4.0', '< 6.0'
|
24
|
-
spec.add_dependency 'concurrent-ruby', '>= 1.0.2'
|
25
30
|
spec.add_dependency 'thor', '~> 0'
|
26
31
|
|
27
|
-
spec.add_development_dependency '
|
28
|
-
spec.add_development_dependency '
|
29
|
-
spec.add_development_dependency '
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3.7'
|
34
|
+
spec.add_development_dependency 'rake', '~> 12.3'
|
35
|
+
spec.add_development_dependency 'timecop', '~> 0.9'
|
30
36
|
spec.add_development_dependency 'yard', '~> 0.9'
|
31
|
-
spec.add_development_dependency 'gem-release', '~> 0
|
37
|
+
spec.add_development_dependency 'gem-release', '~> 1.0'
|
38
|
+
spec.add_development_dependency 'awesome_print', '~> 1.8'
|
32
39
|
end
|
metadata
CHANGED
@@ -1,15 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-unique-jobs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 6.0.0.rc1
|
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-
|
11
|
+
date: 2018-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 1.0.5
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 1.0.5
|
13
33
|
- !ruby/object:Gem::Dependency
|
14
34
|
name: sidekiq
|
15
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -31,75 +51,75 @@ dependencies:
|
|
31
51
|
- !ruby/object:Gem::Version
|
32
52
|
version: '6.0'
|
33
53
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
54
|
+
name: thor
|
35
55
|
requirement: !ruby/object:Gem::Requirement
|
36
56
|
requirements:
|
37
|
-
- - "
|
57
|
+
- - "~>"
|
38
58
|
- !ruby/object:Gem::Version
|
39
|
-
version:
|
59
|
+
version: '0'
|
40
60
|
type: :runtime
|
41
61
|
prerelease: false
|
42
62
|
version_requirements: !ruby/object:Gem::Requirement
|
43
63
|
requirements:
|
44
|
-
- - "
|
64
|
+
- - "~>"
|
45
65
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
66
|
+
version: '0'
|
47
67
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
68
|
+
name: bundler
|
49
69
|
requirement: !ruby/object:Gem::Requirement
|
50
70
|
requirements:
|
51
71
|
- - "~>"
|
52
72
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
54
|
-
type: :
|
73
|
+
version: '1.16'
|
74
|
+
type: :development
|
55
75
|
prerelease: false
|
56
76
|
version_requirements: !ruby/object:Gem::Requirement
|
57
77
|
requirements:
|
58
78
|
- - "~>"
|
59
79
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
80
|
+
version: '1.16'
|
61
81
|
- !ruby/object:Gem::Dependency
|
62
82
|
name: rspec
|
63
83
|
requirement: !ruby/object:Gem::Requirement
|
64
84
|
requirements:
|
65
85
|
- - "~>"
|
66
86
|
- !ruby/object:Gem::Version
|
67
|
-
version: '3.
|
87
|
+
version: '3.7'
|
68
88
|
type: :development
|
69
89
|
prerelease: false
|
70
90
|
version_requirements: !ruby/object:Gem::Requirement
|
71
91
|
requirements:
|
72
92
|
- - "~>"
|
73
93
|
- !ruby/object:Gem::Version
|
74
|
-
version: '3.
|
94
|
+
version: '3.7'
|
75
95
|
- !ruby/object:Gem::Dependency
|
76
96
|
name: rake
|
77
97
|
requirement: !ruby/object:Gem::Requirement
|
78
98
|
requirements:
|
79
99
|
- - "~>"
|
80
100
|
- !ruby/object:Gem::Version
|
81
|
-
version: '12.
|
101
|
+
version: '12.3'
|
82
102
|
type: :development
|
83
103
|
prerelease: false
|
84
104
|
version_requirements: !ruby/object:Gem::Requirement
|
85
105
|
requirements:
|
86
106
|
- - "~>"
|
87
107
|
- !ruby/object:Gem::Version
|
88
|
-
version: '12.
|
108
|
+
version: '12.3'
|
89
109
|
- !ruby/object:Gem::Dependency
|
90
110
|
name: timecop
|
91
111
|
requirement: !ruby/object:Gem::Requirement
|
92
112
|
requirements:
|
93
113
|
- - "~>"
|
94
114
|
- !ruby/object:Gem::Version
|
95
|
-
version: '0.
|
115
|
+
version: '0.9'
|
96
116
|
type: :development
|
97
117
|
prerelease: false
|
98
118
|
version_requirements: !ruby/object:Gem::Requirement
|
99
119
|
requirements:
|
100
120
|
- - "~>"
|
101
121
|
- !ruby/object:Gem::Version
|
102
|
-
version: '0.
|
122
|
+
version: '0.9'
|
103
123
|
- !ruby/object:Gem::Dependency
|
104
124
|
name: yard
|
105
125
|
requirement: !ruby/object:Gem::Requirement
|
@@ -120,14 +140,28 @@ dependencies:
|
|
120
140
|
requirements:
|
121
141
|
- - "~>"
|
122
142
|
- !ruby/object:Gem::Version
|
123
|
-
version: '0
|
143
|
+
version: '1.0'
|
144
|
+
type: :development
|
145
|
+
prerelease: false
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
147
|
+
requirements:
|
148
|
+
- - "~>"
|
149
|
+
- !ruby/object:Gem::Version
|
150
|
+
version: '1.0'
|
151
|
+
- !ruby/object:Gem::Dependency
|
152
|
+
name: awesome_print
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - "~>"
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '1.8'
|
124
158
|
type: :development
|
125
159
|
prerelease: false
|
126
160
|
version_requirements: !ruby/object:Gem::Requirement
|
127
161
|
requirements:
|
128
162
|
- - "~>"
|
129
163
|
- !ruby/object:Gem::Version
|
130
|
-
version: '
|
164
|
+
version: '1.8'
|
131
165
|
description: Handles various types of unique jobs for Sidekiq
|
132
166
|
email:
|
133
167
|
- mikael@zoolutions.se
|
@@ -144,6 +178,7 @@ files:
|
|
144
178
|
- ".eslintrc"
|
145
179
|
- ".fasterer.yml"
|
146
180
|
- ".gitignore"
|
181
|
+
- ".reek"
|
147
182
|
- ".rspec"
|
148
183
|
- ".rubocop.yml"
|
149
184
|
- ".simplecov"
|
@@ -152,44 +187,85 @@ files:
|
|
152
187
|
- CHANGELOG.md
|
153
188
|
- CODE_OF_CONDUCT.md
|
154
189
|
- Gemfile
|
190
|
+
- Guardfile
|
155
191
|
- LICENSE.txt
|
156
192
|
- README.md
|
157
193
|
- Rakefile
|
158
194
|
- bin/bench
|
159
195
|
- bin/jobs
|
196
|
+
- examples/another_unique_job.rb
|
197
|
+
- examples/custom_queue_job.rb
|
198
|
+
- examples/custom_queue_job_with_filter_method.rb
|
199
|
+
- examples/custom_queue_job_with_filter_proc.rb
|
200
|
+
- examples/expiring_job.rb
|
201
|
+
- examples/inline_worker.rb
|
202
|
+
- examples/just_a_worker.rb
|
203
|
+
- examples/long_running_job.rb
|
204
|
+
- examples/main_job.rb
|
205
|
+
- examples/my_job.rb
|
206
|
+
- examples/my_unique_job.rb
|
207
|
+
- examples/my_unique_job_with_filter_method.rb
|
208
|
+
- examples/my_unique_job_with_filter_proc.rb
|
209
|
+
- examples/notify_worker.rb
|
210
|
+
- examples/plain_class.rb
|
211
|
+
- examples/simple_worker.rb
|
212
|
+
- examples/spawn_simple_worker.rb
|
213
|
+
- examples/test_class.rb
|
214
|
+
- examples/unique_across_workers_job.rb
|
215
|
+
- examples/unique_job_with_conditional_parameter.rb
|
216
|
+
- examples/unique_job_with_filter_method.rb
|
217
|
+
- examples/unique_job_with_nil_unique_args.rb
|
218
|
+
- examples/unique_job_with_no_unique_args_method.rb
|
219
|
+
- examples/unique_job_withthout_unique_args_parameter.rb
|
220
|
+
- examples/unique_on_all_queues_job.rb
|
221
|
+
- examples/until_and_while_executing_job.rb
|
222
|
+
- examples/until_executed_2_job.rb
|
223
|
+
- examples/until_executed_job.rb
|
224
|
+
- examples/until_executing_job.rb
|
225
|
+
- examples/until_expired_job.rb
|
226
|
+
- examples/until_global_expired_job.rb
|
227
|
+
- examples/while_executing_job.rb
|
228
|
+
- examples/while_executing_reject_job.rb
|
229
|
+
- examples/without_argument_job.rb
|
160
230
|
- lib/sidekiq-unique-jobs.rb
|
161
231
|
- lib/sidekiq/simulator.rb
|
232
|
+
- lib/sidekiq_unique_jobs.rb
|
162
233
|
- lib/sidekiq_unique_jobs/cli.rb
|
163
234
|
- lib/sidekiq_unique_jobs/client/middleware.rb
|
164
|
-
- lib/sidekiq_unique_jobs/
|
235
|
+
- lib/sidekiq_unique_jobs/connection.rb
|
165
236
|
- lib/sidekiq_unique_jobs/constants.rb
|
166
237
|
- lib/sidekiq_unique_jobs/core_ext.rb
|
167
|
-
- lib/sidekiq_unique_jobs/
|
238
|
+
- lib/sidekiq_unique_jobs/exceptions.rb
|
239
|
+
- lib/sidekiq_unique_jobs/lock/base_lock.rb
|
168
240
|
- lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb
|
169
241
|
- lib/sidekiq_unique_jobs/lock/until_executed.rb
|
170
242
|
- lib/sidekiq_unique_jobs/lock/until_executing.rb
|
171
|
-
- lib/sidekiq_unique_jobs/lock/
|
243
|
+
- lib/sidekiq_unique_jobs/lock/until_expired.rb
|
172
244
|
- lib/sidekiq_unique_jobs/lock/while_executing.rb
|
245
|
+
- lib/sidekiq_unique_jobs/lock/while_executing_reject.rb
|
246
|
+
- lib/sidekiq_unique_jobs/lock/while_executing_requeue.rb
|
247
|
+
- lib/sidekiq_unique_jobs/locksmith.rb
|
248
|
+
- lib/sidekiq_unique_jobs/logging.rb
|
173
249
|
- lib/sidekiq_unique_jobs/middleware.rb
|
174
250
|
- lib/sidekiq_unique_jobs/normalizer.rb
|
175
251
|
- lib/sidekiq_unique_jobs/options_with_fallback.rb
|
176
|
-
- lib/sidekiq_unique_jobs/run_lock_failed.rb
|
177
|
-
- lib/sidekiq_unique_jobs/script_mock.rb
|
178
252
|
- lib/sidekiq_unique_jobs/scripts.rb
|
179
|
-
- lib/sidekiq_unique_jobs/scripts/acquire_lock.rb
|
180
|
-
- lib/sidekiq_unique_jobs/scripts/release_lock.rb
|
181
253
|
- lib/sidekiq_unique_jobs/server/middleware.rb
|
182
254
|
- lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb
|
255
|
+
- lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb
|
183
256
|
- lib/sidekiq_unique_jobs/testing.rb
|
184
|
-
- lib/sidekiq_unique_jobs/
|
185
|
-
- lib/sidekiq_unique_jobs/
|
257
|
+
- lib/sidekiq_unique_jobs/timeout.rb
|
258
|
+
- lib/sidekiq_unique_jobs/timeout/calculator.rb
|
186
259
|
- lib/sidekiq_unique_jobs/unique_args.rb
|
187
260
|
- lib/sidekiq_unique_jobs/unlockable.rb
|
188
261
|
- lib/sidekiq_unique_jobs/util.rb
|
189
262
|
- lib/sidekiq_unique_jobs/version.rb
|
190
263
|
- redis/acquire_lock.lua
|
264
|
+
- redis/create.lua
|
265
|
+
- redis/delete.lua
|
191
266
|
- redis/release_lock.lua
|
192
|
-
- redis/
|
267
|
+
- redis/release_stale_locks.lua
|
268
|
+
- redis/signal.lua
|
193
269
|
- sidekiq-unique-jobs.gemspec
|
194
270
|
homepage: https://github.com/mhenrixon/sidekiq-unique-jobs
|
195
271
|
licenses:
|
@@ -206,12 +282,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
282
|
version: '0'
|
207
283
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
208
284
|
requirements:
|
209
|
-
- - "
|
285
|
+
- - ">"
|
210
286
|
- !ruby/object:Gem::Version
|
211
|
-
version:
|
287
|
+
version: 1.3.1
|
212
288
|
requirements: []
|
213
289
|
rubyforge_project:
|
214
|
-
rubygems_version: 2.7.
|
290
|
+
rubygems_version: 2.7.6
|
215
291
|
signing_key:
|
216
292
|
specification_version: 4
|
217
293
|
summary: Uniqueness for Sidekiq Jobs
|