sidekiq-unique-jobs 6.0.23 → 7.1.12

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +922 -41
  3. data/README.md +821 -284
  4. data/lib/sidekiq_unique_jobs/batch_delete.rb +123 -0
  5. data/lib/sidekiq_unique_jobs/changelog.rb +78 -0
  6. data/lib/sidekiq_unique_jobs/cli.rb +34 -31
  7. data/lib/sidekiq_unique_jobs/config.rb +314 -0
  8. data/lib/sidekiq_unique_jobs/connection.rb +6 -5
  9. data/lib/sidekiq_unique_jobs/constants.rb +45 -24
  10. data/lib/sidekiq_unique_jobs/core_ext.rb +80 -0
  11. data/lib/sidekiq_unique_jobs/deprecation.rb +65 -0
  12. data/lib/sidekiq_unique_jobs/digests.rb +70 -102
  13. data/lib/sidekiq_unique_jobs/exceptions.rb +88 -12
  14. data/lib/sidekiq_unique_jobs/job.rb +41 -12
  15. data/lib/sidekiq_unique_jobs/json.rb +47 -0
  16. data/lib/sidekiq_unique_jobs/key.rb +93 -0
  17. data/lib/sidekiq_unique_jobs/lock/base_lock.rb +111 -82
  18. data/lib/sidekiq_unique_jobs/lock/client_validator.rb +28 -0
  19. data/lib/sidekiq_unique_jobs/lock/server_validator.rb +27 -0
  20. data/lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb +40 -15
  21. data/lib/sidekiq_unique_jobs/lock/until_executed.rb +25 -7
  22. data/lib/sidekiq_unique_jobs/lock/until_executing.rb +22 -2
  23. data/lib/sidekiq_unique_jobs/lock/until_expired.rb +26 -16
  24. data/lib/sidekiq_unique_jobs/lock/validator.rb +96 -0
  25. data/lib/sidekiq_unique_jobs/lock/while_executing.rb +23 -12
  26. data/lib/sidekiq_unique_jobs/lock/while_executing_reject.rb +3 -3
  27. data/lib/sidekiq_unique_jobs/lock.rb +325 -0
  28. data/lib/sidekiq_unique_jobs/lock_args.rb +123 -0
  29. data/lib/sidekiq_unique_jobs/lock_config.rb +126 -0
  30. data/lib/sidekiq_unique_jobs/lock_digest.rb +79 -0
  31. data/lib/sidekiq_unique_jobs/lock_info.rb +68 -0
  32. data/lib/sidekiq_unique_jobs/lock_timeout.rb +62 -0
  33. data/lib/sidekiq_unique_jobs/lock_ttl.rb +77 -0
  34. data/lib/sidekiq_unique_jobs/locksmith.rb +275 -102
  35. data/lib/sidekiq_unique_jobs/logging/middleware_context.rb +44 -0
  36. data/lib/sidekiq_unique_jobs/logging.rb +188 -33
  37. data/lib/sidekiq_unique_jobs/lua/delete.lua +51 -0
  38. data/lib/sidekiq_unique_jobs/lua/delete_by_digest.lua +42 -0
  39. data/lib/sidekiq_unique_jobs/lua/delete_job_by_digest.lua +38 -0
  40. data/lib/sidekiq_unique_jobs/lua/find_digest_in_queues.lua +26 -0
  41. data/lib/sidekiq_unique_jobs/lua/lock.lua +93 -0
  42. data/lib/sidekiq_unique_jobs/lua/locked.lua +35 -0
  43. data/lib/sidekiq_unique_jobs/lua/queue.lua +87 -0
  44. data/lib/sidekiq_unique_jobs/lua/reap_orphans.lua +94 -0
  45. data/lib/sidekiq_unique_jobs/lua/shared/_common.lua +40 -0
  46. data/lib/sidekiq_unique_jobs/lua/shared/_current_time.lua +8 -0
  47. data/lib/sidekiq_unique_jobs/lua/shared/_delete_from_queue.lua +22 -0
  48. data/lib/sidekiq_unique_jobs/lua/shared/_delete_from_sorted_set.lua +18 -0
  49. data/lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_process_set.lua +53 -0
  50. data/lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_queues.lua +43 -0
  51. data/lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_sorted_set.lua +24 -0
  52. data/lib/sidekiq_unique_jobs/lua/shared/_hgetall.lua +13 -0
  53. data/lib/sidekiq_unique_jobs/lua/shared/_upgrades.lua +3 -0
  54. data/lib/sidekiq_unique_jobs/lua/unlock.lua +102 -0
  55. data/lib/sidekiq_unique_jobs/lua/update_version.lua +40 -0
  56. data/lib/sidekiq_unique_jobs/lua/upgrade.lua +68 -0
  57. data/lib/sidekiq_unique_jobs/middleware/client.rb +40 -0
  58. data/lib/sidekiq_unique_jobs/middleware/server.rb +29 -0
  59. data/lib/sidekiq_unique_jobs/middleware.rb +29 -31
  60. data/lib/sidekiq_unique_jobs/normalizer.rb +4 -4
  61. data/lib/sidekiq_unique_jobs/on_conflict/log.rb +9 -5
  62. data/lib/sidekiq_unique_jobs/on_conflict/null_strategy.rb +1 -1
  63. data/lib/sidekiq_unique_jobs/on_conflict/raise.rb +1 -1
  64. data/lib/sidekiq_unique_jobs/on_conflict/reject.rb +61 -15
  65. data/lib/sidekiq_unique_jobs/on_conflict/replace.rb +54 -14
  66. data/lib/sidekiq_unique_jobs/on_conflict/reschedule.rb +16 -5
  67. data/lib/sidekiq_unique_jobs/on_conflict/strategy.rb +25 -6
  68. data/lib/sidekiq_unique_jobs/on_conflict.rb +23 -10
  69. data/lib/sidekiq_unique_jobs/options_with_fallback.rb +35 -32
  70. data/lib/sidekiq_unique_jobs/orphans/lua_reaper.rb +29 -0
  71. data/lib/sidekiq_unique_jobs/orphans/manager.rb +248 -0
  72. data/lib/sidekiq_unique_jobs/orphans/null_reaper.rb +24 -0
  73. data/lib/sidekiq_unique_jobs/orphans/observer.rb +42 -0
  74. data/lib/sidekiq_unique_jobs/orphans/reaper.rb +114 -0
  75. data/lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb +170 -0
  76. data/lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb +231 -0
  77. data/lib/sidekiq_unique_jobs/redis/entity.rb +112 -0
  78. data/lib/sidekiq_unique_jobs/redis/hash.rb +56 -0
  79. data/lib/sidekiq_unique_jobs/redis/list.rb +32 -0
  80. data/lib/sidekiq_unique_jobs/redis/set.rb +32 -0
  81. data/lib/sidekiq_unique_jobs/redis/sorted_set.rb +86 -0
  82. data/lib/sidekiq_unique_jobs/redis/string.rb +49 -0
  83. data/lib/sidekiq_unique_jobs/redis.rb +11 -0
  84. data/lib/sidekiq_unique_jobs/reflectable.rb +26 -0
  85. data/lib/sidekiq_unique_jobs/reflections.rb +79 -0
  86. data/lib/sidekiq_unique_jobs/rspec/matchers/have_valid_sidekiq_options.rb +51 -0
  87. data/lib/sidekiq_unique_jobs/rspec/matchers.rb +26 -0
  88. data/lib/sidekiq_unique_jobs/script/caller.rb +127 -0
  89. data/lib/sidekiq_unique_jobs/script.rb +15 -0
  90. data/lib/sidekiq_unique_jobs/server.rb +61 -0
  91. data/lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb +114 -65
  92. data/lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb +241 -35
  93. data/lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb +18 -16
  94. data/lib/sidekiq_unique_jobs/testing.rb +62 -21
  95. data/lib/sidekiq_unique_jobs/timer_task.rb +78 -0
  96. data/lib/sidekiq_unique_jobs/timing.rb +58 -0
  97. data/lib/sidekiq_unique_jobs/unlockable.rb +20 -4
  98. data/lib/sidekiq_unique_jobs/update_version.rb +25 -0
  99. data/lib/sidekiq_unique_jobs/upgrade_locks.rb +155 -0
  100. data/lib/sidekiq_unique_jobs/version.rb +3 -1
  101. data/lib/sidekiq_unique_jobs/version_check.rb +23 -4
  102. data/lib/sidekiq_unique_jobs/web/helpers.rb +128 -13
  103. data/lib/sidekiq_unique_jobs/web/views/_paging.erb +4 -4
  104. data/lib/sidekiq_unique_jobs/web/views/changelogs.erb +54 -0
  105. data/lib/sidekiq_unique_jobs/web/views/lock.erb +108 -0
  106. data/lib/sidekiq_unique_jobs/web/views/locks.erb +54 -0
  107. data/lib/sidekiq_unique_jobs/web.rb +57 -27
  108. data/lib/sidekiq_unique_jobs.rb +52 -7
  109. data/lib/tasks/changelog.rake +15 -15
  110. metadata +124 -184
  111. data/lib/sidekiq_unique_jobs/client/middleware.rb +0 -56
  112. data/lib/sidekiq_unique_jobs/scripts.rb +0 -118
  113. data/lib/sidekiq_unique_jobs/server/middleware.rb +0 -46
  114. data/lib/sidekiq_unique_jobs/timeout/calculator.rb +0 -63
  115. data/lib/sidekiq_unique_jobs/timeout.rb +0 -8
  116. data/lib/sidekiq_unique_jobs/unique_args.rb +0 -150
  117. data/lib/sidekiq_unique_jobs/util.rb +0 -103
  118. data/lib/sidekiq_unique_jobs/web/views/unique_digest.erb +0 -28
  119. data/lib/sidekiq_unique_jobs/web/views/unique_digests.erb +0 -46
  120. data/redis/acquire_lock.lua +0 -21
  121. data/redis/convert_legacy_lock.lua +0 -13
  122. data/redis/delete.lua +0 -14
  123. data/redis/delete_by_digest.lua +0 -23
  124. data/redis/delete_job_by_digest.lua +0 -60
  125. data/redis/lock.lua +0 -62
  126. data/redis/release_stale_locks.lua +0 -90
  127. data/redis/unlock.lua +0 -35
@@ -1,60 +1,90 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- begin
4
- require "delegate"
5
- require "rack"
6
- require "sidekiq/web"
7
- rescue LoadError # rubocop:disable Lint/SuppressedException
8
- # client-only usage
9
- end
10
-
11
3
  require_relative "web/helpers"
12
4
 
13
5
  module SidekiqUniqueJobs
14
6
  # Utility module to help manage unique keys in redis.
15
7
  # Useful for deleting keys that for whatever reason wasn't deleted
16
8
  #
17
- # @author Mikael Henriksson <mikael@zoolutions.se>
9
+ # @author Mikael Henriksson <mikael@mhenrixon.com>
18
10
  module Web
19
- def self.registered(app) # rubocop:disable Metrics/MethodLength
11
+ def self.registered(app) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
20
12
  app.helpers do
21
13
  include Web::Helpers
22
14
  end
23
15
 
24
- app.get "/unique_digests" do
16
+ app.get "/changelogs" do
17
+ @filter = params[:filter] || "*"
18
+ @filter = "*" if @filter == ""
19
+ @count = (params[:count] || 100).to_i
20
+ @current_cursor = params[:cursor]
21
+ @prev_cursor = params[:prev_cursor]
22
+ @total_size, @next_cursor, @changelogs = changelog.page(
23
+ cursor: @current_cursor,
24
+ pattern: @filter,
25
+ page_size: @count,
26
+ )
27
+
28
+ erb(unique_template(:changelogs))
29
+ end
30
+
31
+ app.get "/changelogs/delete_all" do
32
+ changelog.clear
33
+ redirect_to :changelogs
34
+ end
35
+
36
+ app.get "/locks" do
25
37
  @filter = params[:filter] || "*"
26
38
  @filter = "*" if @filter == ""
27
39
  @count = (params[:count] || 100).to_i
28
40
  @current_cursor = params[:cursor]
29
41
  @prev_cursor = params[:prev_cursor]
30
- @total_size, @next_cursor, @unique_digests =
31
- SidekiqUniqueJobs::Digests.page(pattern: @filter, cursor: @current_cursor, page_size: @count)
32
42
 
33
- erb(unique_template(:unique_digests))
43
+ @total_size, @next_cursor, @locks = digests.page(
44
+ cursor: @current_cursor,
45
+ pattern: @filter,
46
+ page_size: @count,
47
+ )
48
+
49
+ erb(unique_template(:locks))
34
50
  end
35
51
 
36
- app.get "/unique_digests/delete_all" do
37
- SidekiqUniqueJobs::Digests.delete_by_pattern("*", count: SidekiqUniqueJobs::Digests.count)
38
- redirect_to :unique_digests
52
+ app.get "/locks/delete_all" do
53
+ digests.delete_by_pattern("*", count: digests.count)
54
+ redirect_to :locks
39
55
  end
40
56
 
41
- app.get "/unique_digests/:digest" do
57
+ app.get "/locks/:digest" do
42
58
  @digest = params[:digest]
43
- @unique_keys = SidekiqUniqueJobs::Util.keys("#{@digest}*", 1000)
59
+ @lock = SidekiqUniqueJobs::Lock.new(@digest)
60
+
61
+ erb(unique_template(:lock))
62
+ end
44
63
 
45
- erb(unique_template(:unique_digest))
64
+ app.get "/locks/:digest/delete" do
65
+ digests.delete_by_digest(params[:digest])
66
+ redirect_to :locks
46
67
  end
47
68
 
48
- app.get "/unique_digests/:digest/delete" do
49
- SidekiqUniqueJobs::Digests.delete_by_digest(params[:digest])
50
- redirect_to :unique_digests
69
+ app.get "/locks/:digest/jobs/:job_id/delete" do
70
+ @digest = params[:digest]
71
+ @lock = SidekiqUniqueJobs::Lock.new(@digest)
72
+ @lock.unlock(params[:job_id])
73
+
74
+ redirect_to "locks/#{@lock.key}"
51
75
  end
52
76
  end
53
77
  end
54
78
  end
55
79
 
56
- if defined?(Sidekiq::Web)
57
- Sidekiq::Web.register SidekiqUniqueJobs::Web
58
- Sidekiq::Web.tabs["Unique Digests"] = "unique_digests"
59
- # Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), 'locales')
80
+ begin
81
+ require "delegate" unless defined?(DelegateClass)
82
+ require "sidekiq/web" unless defined?(Sidekiq::Web)
83
+
84
+ Sidekiq::Web.register(SidekiqUniqueJobs::Web)
85
+ Sidekiq::Web.tabs["Locks"] = "locks"
86
+ Sidekiq::Web.tabs["Changelogs"] = "changelogs"
87
+ Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "locales")
88
+ rescue NameError, LoadError => ex
89
+ SidekiqUniqueJobs.logger.error(ex)
60
90
  end
@@ -1,25 +1,63 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "forwardable"
3
+ require "brpoplpush/redis_script"
4
+ require "concurrent/future"
5
+ require "concurrent/promises"
6
+ require "concurrent/map"
4
7
  require "concurrent/mutable_struct"
8
+ require "concurrent/timer_task"
9
+ require "concurrent/executor/ruby_single_thread_executor"
10
+ require "digest"
11
+ require "digest/sha1"
12
+ require "erb"
13
+ require "forwardable"
14
+ require "json"
15
+ require "pathname"
16
+ require "sidekiq"
5
17
 
18
+ require "sidekiq_unique_jobs/deprecation"
19
+ require "sidekiq_unique_jobs/reflections"
20
+ require "sidekiq_unique_jobs/reflectable"
21
+ require "sidekiq_unique_jobs/timer_task"
6
22
  require "sidekiq_unique_jobs/version"
7
23
  require "sidekiq_unique_jobs/version_check"
8
24
  require "sidekiq_unique_jobs/constants"
25
+ require "sidekiq_unique_jobs/json"
9
26
  require "sidekiq_unique_jobs/logging"
27
+ require "sidekiq_unique_jobs/logging/middleware_context"
28
+ require "sidekiq_unique_jobs/timing"
10
29
  require "sidekiq_unique_jobs/sidekiq_worker_methods"
11
30
  require "sidekiq_unique_jobs/connection"
12
31
  require "sidekiq_unique_jobs/exceptions"
32
+ require "sidekiq_unique_jobs/script"
33
+ require "sidekiq_unique_jobs/script/caller"
34
+ require "sidekiq_unique_jobs/normalizer"
13
35
  require "sidekiq_unique_jobs/job"
14
- require "sidekiq_unique_jobs/util"
15
- require "sidekiq_unique_jobs/digests"
36
+ require "sidekiq_unique_jobs/redis"
37
+ require "sidekiq_unique_jobs/redis/entity"
38
+ require "sidekiq_unique_jobs/redis/hash"
39
+ require "sidekiq_unique_jobs/redis/list"
40
+ require "sidekiq_unique_jobs/redis/set"
41
+ require "sidekiq_unique_jobs/redis/sorted_set"
42
+ require "sidekiq_unique_jobs/redis/string"
43
+ require "sidekiq_unique_jobs/batch_delete"
44
+ require "sidekiq_unique_jobs/orphans/reaper"
45
+ require "sidekiq_unique_jobs/orphans/observer"
46
+ require "sidekiq_unique_jobs/orphans/manager"
47
+ require "sidekiq_unique_jobs/orphans/reaper_resurrector"
16
48
  require "sidekiq_unique_jobs/cli"
17
49
  require "sidekiq_unique_jobs/core_ext"
18
- require "sidekiq_unique_jobs/timeout"
19
- require "sidekiq_unique_jobs/scripts"
20
- require "sidekiq_unique_jobs/unique_args"
50
+ require "sidekiq_unique_jobs/lock_timeout"
51
+ require "sidekiq_unique_jobs/lock_ttl"
52
+ require "sidekiq_unique_jobs/lock_args"
53
+ require "sidekiq_unique_jobs/lock_digest"
21
54
  require "sidekiq_unique_jobs/unlockable"
55
+ require "sidekiq_unique_jobs/key"
22
56
  require "sidekiq_unique_jobs/locksmith"
57
+ require "sidekiq_unique_jobs/options_with_fallback"
58
+ require "sidekiq_unique_jobs/lock"
59
+ require "sidekiq_unique_jobs/lock_config"
60
+ require "sidekiq_unique_jobs/lock_info"
23
61
  require "sidekiq_unique_jobs/lock/base_lock"
24
62
  require "sidekiq_unique_jobs/lock/until_executed"
25
63
  require "sidekiq_unique_jobs/lock/until_executing"
@@ -27,9 +65,16 @@ require "sidekiq_unique_jobs/lock/until_expired"
27
65
  require "sidekiq_unique_jobs/lock/while_executing"
28
66
  require "sidekiq_unique_jobs/lock/while_executing_reject"
29
67
  require "sidekiq_unique_jobs/lock/until_and_while_executing"
30
- require "sidekiq_unique_jobs/options_with_fallback"
31
68
  require "sidekiq_unique_jobs/middleware"
69
+ require "sidekiq_unique_jobs/middleware/client"
70
+ require "sidekiq_unique_jobs/middleware/server"
32
71
  require "sidekiq_unique_jobs/sidekiq_unique_ext"
33
72
  require "sidekiq_unique_jobs/on_conflict"
73
+ require "sidekiq_unique_jobs/changelog"
74
+ require "sidekiq_unique_jobs/digests"
34
75
 
76
+ require "sidekiq_unique_jobs/config"
35
77
  require "sidekiq_unique_jobs/sidekiq_unique_jobs"
78
+ require "sidekiq_unique_jobs/update_version"
79
+ require "sidekiq_unique_jobs/upgrade_locks"
80
+ require "sidekiq_unique_jobs/server"
@@ -1,22 +1,22 @@
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
- -u
9
- mhenrixon
10
- -p
11
- sidekiq-unique-jobs
12
- --no-verbose
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")
19
+ sh("git checkout main")
20
20
  sh(*CHANGELOG_CMD.push(ENV["CHANGELOG_GITHUB_TOKEN"]))
21
21
  sh(ADD_CHANGELOG_CMD)
22
22
  sh(COMMIT_CHANGELOG_CMD)
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: 6.0.23
4
+ version: 7.1.12
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-05 00:00:00.000000000 Z
11
+ date: 2021-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: brpoplpush-redis_script
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.1
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.0.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">"
28
+ - !ruby/object:Gem::Version
29
+ version: 0.1.1
30
+ - - "<="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: concurrent-ruby
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -36,20 +56,20 @@ dependencies:
36
56
  requirements:
37
57
  - - ">="
38
58
  - !ruby/object:Gem::Version
39
- version: '4.0'
59
+ version: '5.0'
40
60
  - - "<"
41
61
  - !ruby/object:Gem::Version
42
- version: '7.0'
62
+ version: '8.0'
43
63
  type: :runtime
44
64
  prerelease: false
45
65
  version_requirements: !ruby/object:Gem::Requirement
46
66
  requirements:
47
67
  - - ">="
48
68
  - !ruby/object:Gem::Version
49
- version: '4.0'
69
+ version: '5.0'
50
70
  - - "<"
51
71
  - !ruby/object:Gem::Version
52
- version: '7.0'
72
+ version: '8.0'
53
73
  - !ruby/object:Gem::Dependency
54
74
  name: thor
55
75
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +79,7 @@ dependencies:
59
79
  version: '0.20'
60
80
  - - "<"
61
81
  - !ruby/object:Gem::Version
62
- version: '2.0'
82
+ version: '3.0'
63
83
  type: :runtime
64
84
  prerelease: false
65
85
  version_requirements: !ruby/object:Gem::Requirement
@@ -68,160 +88,8 @@ dependencies:
68
88
  - !ruby/object:Gem::Version
69
89
  version: '0.20'
70
90
  - - "<"
71
- - !ruby/object:Gem::Version
72
- version: '2.0'
73
- - !ruby/object:Gem::Dependency
74
- name: bundler
75
- requirement: !ruby/object:Gem::Requirement
76
- requirements:
77
- - - "~>"
78
- - !ruby/object:Gem::Version
79
- version: '2.0'
80
- type: :development
81
- prerelease: false
82
- version_requirements: !ruby/object:Gem::Requirement
83
- requirements:
84
- - - "~>"
85
- - !ruby/object:Gem::Version
86
- version: '2.0'
87
- - !ruby/object:Gem::Dependency
88
- name: rack-test
89
- requirement: !ruby/object:Gem::Requirement
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- version: '1.0'
94
- - - "<"
95
- - !ruby/object:Gem::Version
96
- version: '2.0'
97
- type: :development
98
- prerelease: false
99
- version_requirements: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '1.0'
104
- - - "<"
105
- - !ruby/object:Gem::Version
106
- version: '2.0'
107
- - !ruby/object:Gem::Dependency
108
- name: rake
109
- requirement: !ruby/object:Gem::Requirement
110
- requirements:
111
- - - "~>"
112
- - !ruby/object:Gem::Version
113
- version: '12.3'
114
- type: :development
115
- prerelease: false
116
- version_requirements: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - "~>"
119
- - !ruby/object:Gem::Version
120
- version: '12.3'
121
- - !ruby/object:Gem::Dependency
122
- name: rspec
123
- requirement: !ruby/object:Gem::Requirement
124
- requirements:
125
- - - "~>"
126
- - !ruby/object:Gem::Version
127
- version: '3.7'
128
- type: :development
129
- prerelease: false
130
- version_requirements: !ruby/object:Gem::Requirement
131
- requirements:
132
- - - "~>"
133
- - !ruby/object:Gem::Version
134
- version: '3.7'
135
- - !ruby/object:Gem::Dependency
136
- name: sinatra
137
- requirement: !ruby/object:Gem::Requirement
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- version: '2.0'
142
- - - "<"
143
- - !ruby/object:Gem::Version
144
- version: '3.0'
145
- type: :development
146
- prerelease: false
147
- version_requirements: !ruby/object:Gem::Requirement
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- version: '2.0'
152
- - - "<"
153
- - !ruby/object:Gem::Version
154
- version: '3.0'
155
- - !ruby/object:Gem::Dependency
156
- name: timecop
157
- requirement: !ruby/object:Gem::Requirement
158
- requirements:
159
- - - "~>"
160
- - !ruby/object:Gem::Version
161
- version: '0.9'
162
- type: :development
163
- prerelease: false
164
- version_requirements: !ruby/object:Gem::Requirement
165
- requirements:
166
- - - "~>"
167
- - !ruby/object:Gem::Version
168
- version: '0.9'
169
- - !ruby/object:Gem::Dependency
170
- name: github-markup
171
- requirement: !ruby/object:Gem::Requirement
172
- requirements:
173
- - - "~>"
174
- - !ruby/object:Gem::Version
175
- version: '3.0'
176
- type: :development
177
- prerelease: false
178
- version_requirements: !ruby/object:Gem::Requirement
179
- requirements:
180
- - - "~>"
181
91
  - !ruby/object:Gem::Version
182
92
  version: '3.0'
183
- - !ruby/object:Gem::Dependency
184
- name: github_changelog_generator
185
- requirement: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: '1.14'
190
- type: :development
191
- prerelease: false
192
- version_requirements: !ruby/object:Gem::Requirement
193
- requirements:
194
- - - "~>"
195
- - !ruby/object:Gem::Version
196
- version: '1.14'
197
- - !ruby/object:Gem::Dependency
198
- name: yard
199
- requirement: !ruby/object:Gem::Requirement
200
- requirements:
201
- - - "~>"
202
- - !ruby/object:Gem::Version
203
- version: 0.9.18
204
- type: :development
205
- prerelease: false
206
- version_requirements: !ruby/object:Gem::Requirement
207
- requirements:
208
- - - "~>"
209
- - !ruby/object:Gem::Version
210
- version: 0.9.18
211
- - !ruby/object:Gem::Dependency
212
- name: gem-release
213
- requirement: !ruby/object:Gem::Requirement
214
- requirements:
215
- - - "~>"
216
- - !ruby/object:Gem::Version
217
- version: '2.0'
218
- type: :development
219
- prerelease: false
220
- version_requirements: !ruby/object:Gem::Requirement
221
- requirements:
222
- - - "~>"
223
- - !ruby/object:Gem::Version
224
- version: '2.0'
225
93
  description: |
226
94
  Prevents simultaneous Sidekiq jobs with the same unique arguments to run.
227
95
  Highly configurable to suite your specific needs.
@@ -238,24 +106,62 @@ files:
238
106
  - bin/uniquejobs
239
107
  - lib/sidekiq-unique-jobs.rb
240
108
  - lib/sidekiq_unique_jobs.rb
109
+ - lib/sidekiq_unique_jobs/batch_delete.rb
110
+ - lib/sidekiq_unique_jobs/changelog.rb
241
111
  - lib/sidekiq_unique_jobs/cli.rb
242
- - lib/sidekiq_unique_jobs/client/middleware.rb
112
+ - lib/sidekiq_unique_jobs/config.rb
243
113
  - lib/sidekiq_unique_jobs/connection.rb
244
114
  - lib/sidekiq_unique_jobs/constants.rb
245
115
  - lib/sidekiq_unique_jobs/core_ext.rb
116
+ - lib/sidekiq_unique_jobs/deprecation.rb
246
117
  - lib/sidekiq_unique_jobs/digests.rb
247
118
  - lib/sidekiq_unique_jobs/exceptions.rb
248
119
  - lib/sidekiq_unique_jobs/job.rb
120
+ - lib/sidekiq_unique_jobs/json.rb
121
+ - lib/sidekiq_unique_jobs/key.rb
122
+ - lib/sidekiq_unique_jobs/lock.rb
249
123
  - lib/sidekiq_unique_jobs/lock/base_lock.rb
124
+ - lib/sidekiq_unique_jobs/lock/client_validator.rb
125
+ - lib/sidekiq_unique_jobs/lock/server_validator.rb
250
126
  - lib/sidekiq_unique_jobs/lock/until_and_while_executing.rb
251
127
  - lib/sidekiq_unique_jobs/lock/until_executed.rb
252
128
  - lib/sidekiq_unique_jobs/lock/until_executing.rb
253
129
  - lib/sidekiq_unique_jobs/lock/until_expired.rb
130
+ - lib/sidekiq_unique_jobs/lock/validator.rb
254
131
  - lib/sidekiq_unique_jobs/lock/while_executing.rb
255
132
  - lib/sidekiq_unique_jobs/lock/while_executing_reject.rb
133
+ - lib/sidekiq_unique_jobs/lock_args.rb
134
+ - lib/sidekiq_unique_jobs/lock_config.rb
135
+ - lib/sidekiq_unique_jobs/lock_digest.rb
136
+ - lib/sidekiq_unique_jobs/lock_info.rb
137
+ - lib/sidekiq_unique_jobs/lock_timeout.rb
138
+ - lib/sidekiq_unique_jobs/lock_ttl.rb
256
139
  - lib/sidekiq_unique_jobs/locksmith.rb
257
140
  - lib/sidekiq_unique_jobs/logging.rb
141
+ - lib/sidekiq_unique_jobs/logging/middleware_context.rb
142
+ - lib/sidekiq_unique_jobs/lua/delete.lua
143
+ - lib/sidekiq_unique_jobs/lua/delete_by_digest.lua
144
+ - lib/sidekiq_unique_jobs/lua/delete_job_by_digest.lua
145
+ - lib/sidekiq_unique_jobs/lua/find_digest_in_queues.lua
146
+ - lib/sidekiq_unique_jobs/lua/lock.lua
147
+ - lib/sidekiq_unique_jobs/lua/locked.lua
148
+ - lib/sidekiq_unique_jobs/lua/queue.lua
149
+ - lib/sidekiq_unique_jobs/lua/reap_orphans.lua
150
+ - lib/sidekiq_unique_jobs/lua/shared/_common.lua
151
+ - lib/sidekiq_unique_jobs/lua/shared/_current_time.lua
152
+ - lib/sidekiq_unique_jobs/lua/shared/_delete_from_queue.lua
153
+ - lib/sidekiq_unique_jobs/lua/shared/_delete_from_sorted_set.lua
154
+ - lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_process_set.lua
155
+ - lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_queues.lua
156
+ - lib/sidekiq_unique_jobs/lua/shared/_find_digest_in_sorted_set.lua
157
+ - lib/sidekiq_unique_jobs/lua/shared/_hgetall.lua
158
+ - lib/sidekiq_unique_jobs/lua/shared/_upgrades.lua
159
+ - lib/sidekiq_unique_jobs/lua/unlock.lua
160
+ - lib/sidekiq_unique_jobs/lua/update_version.lua
161
+ - lib/sidekiq_unique_jobs/lua/upgrade.lua
258
162
  - lib/sidekiq_unique_jobs/middleware.rb
163
+ - lib/sidekiq_unique_jobs/middleware/client.rb
164
+ - lib/sidekiq_unique_jobs/middleware/server.rb
259
165
  - lib/sidekiq_unique_jobs/normalizer.rb
260
166
  - lib/sidekiq_unique_jobs/on_conflict.rb
261
167
  - lib/sidekiq_unique_jobs/on_conflict/log.rb
@@ -266,43 +172,77 @@ files:
266
172
  - lib/sidekiq_unique_jobs/on_conflict/reschedule.rb
267
173
  - lib/sidekiq_unique_jobs/on_conflict/strategy.rb
268
174
  - lib/sidekiq_unique_jobs/options_with_fallback.rb
269
- - lib/sidekiq_unique_jobs/scripts.rb
270
- - lib/sidekiq_unique_jobs/server/middleware.rb
175
+ - lib/sidekiq_unique_jobs/orphans/lua_reaper.rb
176
+ - lib/sidekiq_unique_jobs/orphans/manager.rb
177
+ - lib/sidekiq_unique_jobs/orphans/null_reaper.rb
178
+ - lib/sidekiq_unique_jobs/orphans/observer.rb
179
+ - lib/sidekiq_unique_jobs/orphans/reaper.rb
180
+ - lib/sidekiq_unique_jobs/orphans/reaper_resurrector.rb
181
+ - lib/sidekiq_unique_jobs/orphans/ruby_reaper.rb
182
+ - lib/sidekiq_unique_jobs/redis.rb
183
+ - lib/sidekiq_unique_jobs/redis/entity.rb
184
+ - lib/sidekiq_unique_jobs/redis/hash.rb
185
+ - lib/sidekiq_unique_jobs/redis/list.rb
186
+ - lib/sidekiq_unique_jobs/redis/set.rb
187
+ - lib/sidekiq_unique_jobs/redis/sorted_set.rb
188
+ - lib/sidekiq_unique_jobs/redis/string.rb
189
+ - lib/sidekiq_unique_jobs/reflectable.rb
190
+ - lib/sidekiq_unique_jobs/reflections.rb
191
+ - lib/sidekiq_unique_jobs/rspec/matchers.rb
192
+ - lib/sidekiq_unique_jobs/rspec/matchers/have_valid_sidekiq_options.rb
193
+ - lib/sidekiq_unique_jobs/script.rb
194
+ - lib/sidekiq_unique_jobs/script/caller.rb
195
+ - lib/sidekiq_unique_jobs/server.rb
271
196
  - lib/sidekiq_unique_jobs/sidekiq_unique_ext.rb
272
197
  - lib/sidekiq_unique_jobs/sidekiq_unique_jobs.rb
273
198
  - lib/sidekiq_unique_jobs/sidekiq_worker_methods.rb
274
199
  - lib/sidekiq_unique_jobs/testing.rb
275
- - lib/sidekiq_unique_jobs/timeout.rb
276
- - lib/sidekiq_unique_jobs/timeout/calculator.rb
277
- - lib/sidekiq_unique_jobs/unique_args.rb
200
+ - lib/sidekiq_unique_jobs/timer_task.rb
201
+ - lib/sidekiq_unique_jobs/timing.rb
278
202
  - lib/sidekiq_unique_jobs/unlockable.rb
279
- - lib/sidekiq_unique_jobs/util.rb
203
+ - lib/sidekiq_unique_jobs/update_version.rb
204
+ - lib/sidekiq_unique_jobs/upgrade_locks.rb
280
205
  - lib/sidekiq_unique_jobs/version.rb
281
206
  - lib/sidekiq_unique_jobs/version_check.rb
282
207
  - lib/sidekiq_unique_jobs/web.rb
283
208
  - lib/sidekiq_unique_jobs/web/helpers.rb
284
209
  - lib/sidekiq_unique_jobs/web/views/_paging.erb
285
- - lib/sidekiq_unique_jobs/web/views/unique_digest.erb
286
- - lib/sidekiq_unique_jobs/web/views/unique_digests.erb
210
+ - lib/sidekiq_unique_jobs/web/views/changelogs.erb
211
+ - lib/sidekiq_unique_jobs/web/views/lock.erb
212
+ - lib/sidekiq_unique_jobs/web/views/locks.erb
287
213
  - lib/tasks/changelog.rake
288
- - redis/acquire_lock.lua
289
- - redis/convert_legacy_lock.lua
290
- - redis/delete.lua
291
- - redis/delete_by_digest.lua
292
- - redis/delete_job_by_digest.lua
293
- - redis/lock.lua
294
- - redis/release_stale_locks.lua
295
- - redis/unlock.lua
296
214
  homepage: https://mhenrixon.github.io/sidekiq-unique-jobs
297
215
  licenses:
298
216
  - MIT
299
217
  metadata:
300
- homepage_uri: https://mhenrixon.github.io/sidekiq-unique-jobs
301
- bug_tracker_uri: https://github.com/mhenrixon/sidekiq-unique-jobs/issues
302
- documentation_uri: https://mhenrixon.github.io/sidekiq-unique-jobs
303
- source_code_uri: https://github.com/mhenrixon/sidekiq-unique-jobs
304
- changelog_uri: https://github.com/mhenrixon/sidekiq-unique-jobs/CHANGELOG.md
305
- post_install_message:
218
+ rubygems_mfa_required: 'true'
219
+ post_install_message: |
220
+ IMPORTANT!
221
+
222
+ Automatic configuration of the sidekiq middleware is no longer done.
223
+ Please see: https://github.com/mhenrixon/sidekiq-unique-jobs/blob/master/README.md#add-the-middleware
224
+
225
+ This version deprecated the following sidekiq_options
226
+
227
+ - sidekiq_options lock_args: :method_name
228
+
229
+ It is now configured with:
230
+
231
+ - sidekiq_options lock_args_method: :method_name
232
+
233
+ This is also true for `Sidekiq.default_worker_options`
234
+
235
+ We also deprecated the global configuration options:
236
+ - default_lock_ttl
237
+ - default_lock_ttl=
238
+ - default_lock_timeout
239
+ - default_lock_timeout=
240
+
241
+ The new methods to use are:
242
+ - lock_ttl
243
+ - lock_ttl=
244
+ - lock_timeout
245
+ - lock_timeout=
306
246
  rdoc_options: []
307
247
  require_paths:
308
248
  - lib
@@ -310,14 +250,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
310
250
  requirements:
311
251
  - - ">="
312
252
  - !ruby/object:Gem::Version
313
- version: '0'
253
+ version: '2.5'
314
254
  required_rubygems_version: !ruby/object:Gem::Requirement
315
255
  requirements:
316
256
  - - ">="
317
257
  - !ruby/object:Gem::Version
318
258
  version: '0'
319
259
  requirements: []
320
- rubygems_version: 3.1.2
260
+ rubygems_version: 3.2.32
321
261
  signing_key:
322
262
  specification_version: 4
323
263
  summary: Sidekiq middleware that prevents duplicates jobs