sidekiq 3.4.1 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. checksums.yaml +5 -5
  2. data/Changes.md +1118 -4
  3. data/LICENSE.txt +9 -0
  4. data/README.md +55 -47
  5. data/bin/multi_queue_bench +271 -0
  6. data/bin/sidekiq +26 -3
  7. data/bin/sidekiqload +247 -0
  8. data/bin/sidekiqmon +11 -0
  9. data/lib/generators/sidekiq/job_generator.rb +57 -0
  10. data/lib/generators/sidekiq/templates/{worker.rb.erb → job.rb.erb} +2 -2
  11. data/lib/generators/sidekiq/templates/job_spec.rb.erb +6 -0
  12. data/lib/generators/sidekiq/templates/job_test.rb.erb +8 -0
  13. data/lib/sidekiq/api.rb +714 -312
  14. data/lib/sidekiq/capsule.rb +130 -0
  15. data/lib/sidekiq/cli.rb +275 -241
  16. data/lib/sidekiq/client.rb +141 -110
  17. data/lib/sidekiq/component.rb +68 -0
  18. data/lib/sidekiq/config.rb +291 -0
  19. data/lib/sidekiq/deploy.rb +62 -0
  20. data/lib/sidekiq/embedded.rb +61 -0
  21. data/lib/sidekiq/fetch.rb +53 -121
  22. data/lib/sidekiq/iterable_job.rb +53 -0
  23. data/lib/sidekiq/job/interrupt_handler.rb +22 -0
  24. data/lib/sidekiq/job/iterable/active_record_enumerator.rb +53 -0
  25. data/lib/sidekiq/job/iterable/csv_enumerator.rb +47 -0
  26. data/lib/sidekiq/job/iterable/enumerators.rb +135 -0
  27. data/lib/sidekiq/job/iterable.rb +231 -0
  28. data/lib/sidekiq/job.rb +385 -0
  29. data/lib/sidekiq/job_logger.rb +64 -0
  30. data/lib/sidekiq/job_retry.rb +305 -0
  31. data/lib/sidekiq/job_util.rb +107 -0
  32. data/lib/sidekiq/launcher.rb +241 -66
  33. data/lib/sidekiq/logger.rb +131 -0
  34. data/lib/sidekiq/manager.rb +91 -192
  35. data/lib/sidekiq/metrics/query.rb +156 -0
  36. data/lib/sidekiq/metrics/shared.rb +95 -0
  37. data/lib/sidekiq/metrics/tracking.rb +140 -0
  38. data/lib/sidekiq/middleware/chain.rb +114 -56
  39. data/lib/sidekiq/middleware/current_attributes.rb +111 -0
  40. data/lib/sidekiq/middleware/i18n.rb +8 -7
  41. data/lib/sidekiq/middleware/modules.rb +21 -0
  42. data/lib/sidekiq/monitor.rb +146 -0
  43. data/lib/sidekiq/paginator.rb +29 -16
  44. data/lib/sidekiq/processor.rb +248 -112
  45. data/lib/sidekiq/rails.rb +61 -27
  46. data/lib/sidekiq/redis_client_adapter.rb +114 -0
  47. data/lib/sidekiq/redis_connection.rb +68 -48
  48. data/lib/sidekiq/ring_buffer.rb +29 -0
  49. data/lib/sidekiq/scheduled.rb +173 -52
  50. data/lib/sidekiq/sd_notify.rb +149 -0
  51. data/lib/sidekiq/systemd.rb +24 -0
  52. data/lib/sidekiq/testing/inline.rb +7 -5
  53. data/lib/sidekiq/testing.rb +206 -65
  54. data/lib/sidekiq/transaction_aware_client.rb +51 -0
  55. data/lib/sidekiq/version.rb +4 -1
  56. data/lib/sidekiq/web/action.rb +99 -0
  57. data/lib/sidekiq/web/application.rb +479 -0
  58. data/lib/sidekiq/web/csrf_protection.rb +183 -0
  59. data/lib/sidekiq/web/helpers.rb +415 -0
  60. data/lib/sidekiq/web/router.rb +104 -0
  61. data/lib/sidekiq/web.rb +158 -200
  62. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  63. data/lib/sidekiq.rb +100 -132
  64. data/sidekiq.gemspec +27 -23
  65. data/web/assets/images/apple-touch-icon.png +0 -0
  66. data/web/assets/images/favicon.ico +0 -0
  67. data/web/assets/javascripts/application.js +177 -72
  68. data/web/assets/javascripts/base-charts.js +106 -0
  69. data/web/assets/javascripts/chart.min.js +13 -0
  70. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  71. data/web/assets/javascripts/dashboard-charts.js +192 -0
  72. data/web/assets/javascripts/dashboard.js +37 -286
  73. data/web/assets/javascripts/metrics.js +298 -0
  74. data/web/assets/stylesheets/application-dark.css +147 -0
  75. data/web/assets/stylesheets/application-rtl.css +163 -0
  76. data/web/assets/stylesheets/application.css +228 -247
  77. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  78. data/web/assets/stylesheets/bootstrap.css +4 -8
  79. data/web/locales/ar.yml +87 -0
  80. data/web/locales/cs.yml +62 -52
  81. data/web/locales/da.yml +60 -53
  82. data/web/locales/de.yml +65 -53
  83. data/web/locales/el.yml +43 -24
  84. data/web/locales/en.yml +86 -61
  85. data/web/locales/es.yml +70 -53
  86. data/web/locales/fa.yml +80 -0
  87. data/web/locales/fr.yml +86 -56
  88. data/web/locales/gd.yml +99 -0
  89. data/web/locales/he.yml +80 -0
  90. data/web/locales/hi.yml +59 -59
  91. data/web/locales/it.yml +53 -53
  92. data/web/locales/ja.yml +78 -56
  93. data/web/locales/ko.yml +52 -52
  94. data/web/locales/lt.yml +83 -0
  95. data/web/locales/{no.yml → nb.yml} +62 -54
  96. data/web/locales/nl.yml +52 -52
  97. data/web/locales/pl.yml +45 -45
  98. data/web/locales/pt-br.yml +83 -55
  99. data/web/locales/pt.yml +51 -51
  100. data/web/locales/ru.yml +68 -60
  101. data/web/locales/sv.yml +53 -53
  102. data/web/locales/ta.yml +60 -60
  103. data/web/locales/tr.yml +101 -0
  104. data/web/locales/uk.yml +77 -0
  105. data/web/locales/ur.yml +80 -0
  106. data/web/locales/vi.yml +83 -0
  107. data/web/locales/zh-cn.yml +43 -16
  108. data/web/locales/zh-tw.yml +42 -8
  109. data/web/views/_footer.erb +22 -9
  110. data/web/views/_job_info.erb +27 -6
  111. data/web/views/_metrics_period_select.erb +12 -0
  112. data/web/views/_nav.erb +8 -22
  113. data/web/views/_paging.erb +3 -1
  114. data/web/views/_poll_link.erb +4 -0
  115. data/web/views/_summary.erb +7 -7
  116. data/web/views/busy.erb +91 -31
  117. data/web/views/dashboard.erb +52 -22
  118. data/web/views/dead.erb +5 -4
  119. data/web/views/filtering.erb +7 -0
  120. data/web/views/layout.erb +19 -7
  121. data/web/views/metrics.erb +91 -0
  122. data/web/views/metrics_for_job.erb +59 -0
  123. data/web/views/morgue.erb +26 -20
  124. data/web/views/queue.erb +36 -25
  125. data/web/views/queues.erb +24 -7
  126. data/web/views/retries.erb +29 -21
  127. data/web/views/retry.erb +6 -5
  128. data/web/views/scheduled.erb +20 -17
  129. data/web/views/scheduled_job_info.erb +2 -1
  130. metadata +101 -232
  131. data/.gitignore +0 -12
  132. data/.travis.yml +0 -16
  133. data/3.0-Upgrade.md +0 -70
  134. data/COMM-LICENSE +0 -85
  135. data/Contributing.md +0 -32
  136. data/Gemfile +0 -22
  137. data/LICENSE +0 -9
  138. data/Pro-2.0-Upgrade.md +0 -138
  139. data/Pro-Changes.md +0 -412
  140. data/Rakefile +0 -9
  141. data/bin/sidekiqctl +0 -93
  142. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +0 -6
  143. data/lib/generators/sidekiq/templates/worker_test.rb.erb +0 -8
  144. data/lib/generators/sidekiq/worker_generator.rb +0 -49
  145. data/lib/sidekiq/actor.rb +0 -39
  146. data/lib/sidekiq/core_ext.rb +0 -105
  147. data/lib/sidekiq/exception_handler.rb +0 -30
  148. data/lib/sidekiq/extensions/action_mailer.rb +0 -56
  149. data/lib/sidekiq/extensions/active_record.rb +0 -39
  150. data/lib/sidekiq/extensions/class_methods.rb +0 -39
  151. data/lib/sidekiq/extensions/generic_proxy.rb +0 -24
  152. data/lib/sidekiq/logging.rb +0 -104
  153. data/lib/sidekiq/middleware/server/active_record.rb +0 -13
  154. data/lib/sidekiq/middleware/server/logging.rb +0 -35
  155. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -206
  156. data/lib/sidekiq/util.rb +0 -55
  157. data/lib/sidekiq/web_helpers.rb +0 -234
  158. data/lib/sidekiq/worker.rb +0 -89
  159. data/test/config.yml +0 -9
  160. data/test/env_based_config.yml +0 -11
  161. data/test/fake_env.rb +0 -0
  162. data/test/fixtures/en.yml +0 -2
  163. data/test/helper.rb +0 -39
  164. data/test/test_api.rb +0 -494
  165. data/test/test_cli.rb +0 -365
  166. data/test/test_client.rb +0 -269
  167. data/test/test_exception_handler.rb +0 -55
  168. data/test/test_extensions.rb +0 -120
  169. data/test/test_fetch.rb +0 -104
  170. data/test/test_logging.rb +0 -34
  171. data/test/test_manager.rb +0 -164
  172. data/test/test_middleware.rb +0 -159
  173. data/test/test_processor.rb +0 -166
  174. data/test/test_redis_connection.rb +0 -127
  175. data/test/test_retry.rb +0 -373
  176. data/test/test_scheduled.rb +0 -120
  177. data/test/test_scheduling.rb +0 -71
  178. data/test/test_sidekiq.rb +0 -69
  179. data/test/test_testing.rb +0 -82
  180. data/test/test_testing_fake.rb +0 -271
  181. data/test/test_testing_inline.rb +0 -93
  182. data/test/test_web.rb +0 -594
  183. data/test/test_web_helpers.rb +0 -52
  184. data/test/test_worker_generator.rb +0 -17
  185. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  186. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  187. data/web/assets/images/status/active.png +0 -0
  188. data/web/assets/images/status/idle.png +0 -0
  189. data/web/assets/javascripts/locales/README.md +0 -27
  190. data/web/assets/javascripts/locales/jquery.timeago.ar.js +0 -96
  191. data/web/assets/javascripts/locales/jquery.timeago.bg.js +0 -18
  192. data/web/assets/javascripts/locales/jquery.timeago.bs.js +0 -49
  193. data/web/assets/javascripts/locales/jquery.timeago.ca.js +0 -18
  194. data/web/assets/javascripts/locales/jquery.timeago.cs.js +0 -18
  195. data/web/assets/javascripts/locales/jquery.timeago.cy.js +0 -20
  196. data/web/assets/javascripts/locales/jquery.timeago.da.js +0 -18
  197. data/web/assets/javascripts/locales/jquery.timeago.de.js +0 -18
  198. data/web/assets/javascripts/locales/jquery.timeago.el.js +0 -18
  199. data/web/assets/javascripts/locales/jquery.timeago.en-short.js +0 -20
  200. data/web/assets/javascripts/locales/jquery.timeago.en.js +0 -20
  201. data/web/assets/javascripts/locales/jquery.timeago.es.js +0 -18
  202. data/web/assets/javascripts/locales/jquery.timeago.et.js +0 -18
  203. data/web/assets/javascripts/locales/jquery.timeago.fa.js +0 -22
  204. data/web/assets/javascripts/locales/jquery.timeago.fi.js +0 -28
  205. data/web/assets/javascripts/locales/jquery.timeago.fr-short.js +0 -16
  206. data/web/assets/javascripts/locales/jquery.timeago.fr.js +0 -17
  207. data/web/assets/javascripts/locales/jquery.timeago.he.js +0 -18
  208. data/web/assets/javascripts/locales/jquery.timeago.hr.js +0 -49
  209. data/web/assets/javascripts/locales/jquery.timeago.hu.js +0 -18
  210. data/web/assets/javascripts/locales/jquery.timeago.hy.js +0 -18
  211. data/web/assets/javascripts/locales/jquery.timeago.id.js +0 -18
  212. data/web/assets/javascripts/locales/jquery.timeago.it.js +0 -16
  213. data/web/assets/javascripts/locales/jquery.timeago.ja.js +0 -19
  214. data/web/assets/javascripts/locales/jquery.timeago.ko.js +0 -17
  215. data/web/assets/javascripts/locales/jquery.timeago.lt.js +0 -20
  216. data/web/assets/javascripts/locales/jquery.timeago.mk.js +0 -20
  217. data/web/assets/javascripts/locales/jquery.timeago.nl.js +0 -20
  218. data/web/assets/javascripts/locales/jquery.timeago.no.js +0 -18
  219. data/web/assets/javascripts/locales/jquery.timeago.pl.js +0 -31
  220. data/web/assets/javascripts/locales/jquery.timeago.pt-br.js +0 -16
  221. data/web/assets/javascripts/locales/jquery.timeago.pt.js +0 -16
  222. data/web/assets/javascripts/locales/jquery.timeago.ro.js +0 -18
  223. data/web/assets/javascripts/locales/jquery.timeago.rs.js +0 -49
  224. data/web/assets/javascripts/locales/jquery.timeago.ru.js +0 -34
  225. data/web/assets/javascripts/locales/jquery.timeago.sk.js +0 -18
  226. data/web/assets/javascripts/locales/jquery.timeago.sl.js +0 -44
  227. data/web/assets/javascripts/locales/jquery.timeago.sv.js +0 -18
  228. data/web/assets/javascripts/locales/jquery.timeago.th.js +0 -20
  229. data/web/assets/javascripts/locales/jquery.timeago.tr.js +0 -16
  230. data/web/assets/javascripts/locales/jquery.timeago.uk.js +0 -34
  231. data/web/assets/javascripts/locales/jquery.timeago.uz.js +0 -19
  232. data/web/assets/javascripts/locales/jquery.timeago.zh-cn.js +0 -20
  233. data/web/assets/javascripts/locales/jquery.timeago.zh-tw.js +0 -20
  234. data/web/views/_poll.erb +0 -10
  235. /data/web/assets/images/{status-sd8051fd480.png → status.png} +0 -0
data/lib/sidekiq.rb CHANGED
@@ -1,180 +1,148 @@
1
- # encoding: utf-8
2
- require 'sidekiq/version'
3
- fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby 1.9." if RUBY_PLATFORM != 'java' && RUBY_VERSION < '2.0.0'
1
+ # frozen_string_literal: true
4
2
 
5
- require 'sidekiq/logging'
6
- require 'sidekiq/client'
7
- require 'sidekiq/worker'
8
- require 'sidekiq/redis_connection'
3
+ require "sidekiq/version"
4
+ fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.7.0." if RUBY_PLATFORM != "java" && Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.7.0")
9
5
 
10
- require 'json'
6
+ begin
7
+ require "sidekiq-ent/version"
8
+ fail <<~EOM if Gem::Version.new(Sidekiq::Enterprise::VERSION).segments[0] != Sidekiq::MAJOR
11
9
 
12
- module Sidekiq
13
- NAME = 'Sidekiq'
14
- LICENSE = 'See LICENSE and the LGPL-3.0 for licensing details.'
15
-
16
- DEFAULTS = {
17
- queues: [],
18
- labels: [],
19
- concurrency: 25,
20
- require: '.',
21
- environment: nil,
22
- timeout: 8,
23
- poll_interval_average: nil,
24
- average_scheduled_poll_interval: 15,
25
- error_handlers: [],
26
- lifecycle_events: {
27
- startup: [],
28
- quiet: [],
29
- shutdown: [],
30
- },
31
- dead_max_jobs: 10_000,
32
- dead_timeout_in_seconds: 180 * 24 * 60 * 60 # 6 months
33
- }
34
-
35
- DEFAULT_WORKER_OPTIONS = {
36
- 'retry' => true,
37
- 'queue' => 'default'
38
- }
10
+ Sidekiq Enterprise #{Sidekiq::Enterprise::VERSION} does not work with Sidekiq #{Sidekiq::VERSION}.
11
+ Starting with Sidekiq 7, major versions are synchronized so Sidekiq Enterprise 7 works with Sidekiq 7.
12
+ Use `bundle up sidekiq-ent` to upgrade.
39
13
 
40
- def self.❨╯°□°❩╯︵┻━┻
41
- puts "Calm down, yo."
42
- end
14
+ EOM
15
+ rescue LoadError
16
+ end
43
17
 
44
- def self.options
45
- @options ||= DEFAULTS.dup
46
- end
18
+ begin
19
+ require "sidekiq/pro/version"
20
+ fail <<~EOM if Gem::Version.new(Sidekiq::Pro::VERSION).segments[0] != Sidekiq::MAJOR
47
21
 
48
- def self.options=(opts)
49
- @options = opts
50
- end
22
+ Sidekiq Pro #{Sidekiq::Pro::VERSION} does not work with Sidekiq #{Sidekiq::VERSION}.
23
+ Starting with Sidekiq 7, major versions are synchronized so Sidekiq Pro 7 works with Sidekiq 7.
24
+ Use `bundle up sidekiq-pro` to upgrade.
51
25
 
52
- ##
53
- # Configuration for Sidekiq server, use like:
54
- #
55
- # Sidekiq.configure_server do |config|
56
- # config.redis = { :namespace => 'myapp', :size => 25, :url => 'redis://myhost:8877/0' }
57
- # config.server_middleware do |chain|
58
- # chain.add MyServerHook
59
- # end
60
- # end
61
- def self.configure_server
62
- yield self if server?
63
- end
26
+ EOM
27
+ rescue LoadError
28
+ end
64
29
 
65
- ##
66
- # Configuration for Sidekiq client, use like:
67
- #
68
- # Sidekiq.configure_client do |config|
69
- # config.redis = { :namespace => 'myapp', :size => 1, :url => 'redis://myhost:8877/0' }
70
- # end
71
- def self.configure_client
72
- yield self unless server?
30
+ require "sidekiq/config"
31
+ require "sidekiq/logger"
32
+ require "sidekiq/client"
33
+ require "sidekiq/transaction_aware_client"
34
+ require "sidekiq/job"
35
+ require "sidekiq/iterable_job"
36
+ require "sidekiq/worker_compatibility_alias"
37
+ require "sidekiq/redis_client_adapter"
38
+
39
+ require "json"
40
+
41
+ module Sidekiq
42
+ NAME = "Sidekiq"
43
+ LICENSE = "See LICENSE and the LGPL-3.0 for licensing details."
44
+
45
+ def self.❨╯°□°❩╯︵┻━┻
46
+ puts "Take a deep breath and count to ten..."
73
47
  end
74
48
 
75
49
  def self.server?
76
50
  defined?(Sidekiq::CLI)
77
51
  end
78
52
 
79
- def self.redis(&block)
80
- raise ArgumentError, "requires a block" unless block
81
- redis_pool.with(&block)
53
+ def self.load_json(string)
54
+ JSON.parse(string)
82
55
  end
83
56
 
84
- def self.redis_pool
85
- @redis ||= Sidekiq::RedisConnection.create
57
+ def self.dump_json(object)
58
+ JSON.generate(object)
86
59
  end
87
60
 
88
- def self.redis=(hash)
89
- @redis = if hash.is_a?(ConnectionPool)
90
- hash
91
- else
92
- Sidekiq::RedisConnection.create(hash)
93
- end
61
+ def self.pro?
62
+ defined?(Sidekiq::Pro)
94
63
  end
95
64
 
96
- def self.client_middleware
97
- @client_chain ||= Middleware::Chain.new
98
- yield @client_chain if block_given?
99
- @client_chain
65
+ def self.ent?
66
+ defined?(Sidekiq::Enterprise)
100
67
  end
101
68
 
102
- def self.server_middleware
103
- @server_chain ||= Processor.default_middleware
104
- yield @server_chain if block_given?
105
- @server_chain
69
+ def self.redis_pool
70
+ (Thread.current[:sidekiq_capsule] || default_configuration).redis_pool
106
71
  end
107
72
 
108
- def self.default_worker_options=(hash)
109
- @default_worker_options = default_worker_options.merge(hash.stringify_keys)
73
+ def self.redis(&block)
74
+ (Thread.current[:sidekiq_capsule] || default_configuration).redis(&block)
110
75
  end
111
76
 
112
- def self.default_worker_options
113
- defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS
77
+ def self.strict_args!(mode = :raise)
78
+ Sidekiq::Config::DEFAULTS[:on_complex_arguments] = mode
114
79
  end
115
80
 
116
- def self.load_json(string)
117
- JSON.parse(string)
81
+ def self.default_job_options=(hash)
82
+ @default_job_options = default_job_options.merge(hash.transform_keys(&:to_s))
118
83
  end
119
84
 
120
- def self.dump_json(object)
121
- JSON.generate(object)
85
+ def self.default_job_options
86
+ @default_job_options ||= {"retry" => true, "queue" => "default"}
122
87
  end
123
88
 
124
- def self.logger
125
- Sidekiq::Logging.logger
89
+ def self.default_configuration
90
+ @config ||= Sidekiq::Config.new
126
91
  end
127
92
 
128
- def self.logger=(log)
129
- Sidekiq::Logging.logger = log
93
+ def self.logger
94
+ default_configuration.logger
130
95
  end
131
96
 
132
- # When set, overrides Sidekiq.options[:average_scheduled_poll_interval] and sets
133
- # the average interval that this process will delay before checking for
134
- # scheduled jobs or job retries that are ready to run.
135
- #
136
- # See sidekiq/scheduled.rb for an in-depth explanation of this value
137
- def self.poll_interval=(interval)
138
- $stderr.puts "DEPRECATION: `config.poll_interval = #{interval}` will be removed in Sidekiq 4. Please update to `config.average_scheduled_poll_interval = #{interval}`."
139
- self.options[:poll_interval_average] = interval
97
+ def self.configure_server(&block)
98
+ (@config_blocks ||= []) << block
99
+ yield default_configuration if server?
140
100
  end
141
101
 
142
- # How frequently Redis should be checked by a random Sidekiq process for
143
- # scheduled and retriable jobs. Each individual process will take turns by
144
- # waiting some multiple of this value.
145
- #
146
- # See sidekiq/scheduled.rb for an in-depth explanation of this value
147
- def self.average_scheduled_poll_interval=(interval)
148
- self.options[:average_scheduled_poll_interval] = interval
102
+ def self.freeze!
103
+ @frozen = true
104
+ @config_blocks = nil
149
105
  end
150
106
 
151
- # Register a proc to handle any error which occurs within the Sidekiq process.
107
+ # Creates a Sidekiq::Config instance that is more tuned for embedding
108
+ # within an arbitrary Ruby process. Notably it reduces concurrency by
109
+ # default so there is less contention for CPU time with other threads.
152
110
  #
153
- # Sidekiq.configure_server do |config|
154
- # config.error_handlers << proc {|ex,ctx_hash| MyErrorService.notify(ex, ctx_hash) }
111
+ # inst = Sidekiq.configure_embed do |config|
112
+ # config.queues = %w[critical default low]
155
113
  # end
114
+ # inst.run
115
+ # sleep 10
116
+ # inst.stop
156
117
  #
157
- # The default error handler logs errors to Sidekiq.logger.
158
- def self.error_handlers
159
- self.options[:error_handlers]
118
+ # NB: it is really easy to overload a Ruby process with threads due to the GIL.
119
+ # I do not recommend setting concurrency higher than 2-3.
120
+ #
121
+ # NB: Sidekiq only supports one instance in memory. You will get undefined behavior
122
+ # if you try to embed Sidekiq twice in the same process.
123
+ def self.configure_embed(&block)
124
+ raise "Sidekiq global configuration is frozen, you must create all embedded instances BEFORE calling `run`" if @frozen
125
+
126
+ require "sidekiq/embedded"
127
+ cfg = default_configuration
128
+ cfg.concurrency = 2
129
+ @config_blocks&.each { |block| block.call(cfg) }
130
+ yield cfg
131
+
132
+ Sidekiq::Embedded.new(cfg)
160
133
  end
161
134
 
162
- # Register a block to run at a point in the Sidekiq lifecycle.
163
- # :startup, :quiet or :shutdown are valid events.
164
- #
165
- # Sidekiq.configure_server do |config|
166
- # config.on(:shutdown) do
167
- # puts "Goodbye cruel world!"
168
- # end
169
- # end
170
- def self.on(event, &block)
171
- raise ArgumentError, "Symbols only please: #{event}" unless event.is_a?(Symbol)
172
- raise ArgumentError, "Invalid event name: #{event}" unless options[:lifecycle_events].key?(event)
173
- options[:lifecycle_events][event] << block
135
+ def self.configure_client
136
+ yield default_configuration unless server?
174
137
  end
138
+
139
+ # We are shutting down Sidekiq but what about threads that
140
+ # are working on some long job? This error is
141
+ # raised in jobs that have not finished within the hard
142
+ # timeout limit. This is needed to rollback db transactions,
143
+ # otherwise Ruby's Thread#kill will commit. See #377.
144
+ # DO NOT RESCUE THIS ERROR IN YOUR JOBS
145
+ class Shutdown < Interrupt; end
175
146
  end
176
147
 
177
- require 'sidekiq/extensions/class_methods'
178
- require 'sidekiq/extensions/action_mailer'
179
- require 'sidekiq/extensions/active_record'
180
- require 'sidekiq/rails' if defined?(::Rails::Engine)
148
+ require "sidekiq/rails" if defined?(::Rails::Engine)
data/sidekiq.gemspec CHANGED
@@ -1,27 +1,31 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/sidekiq/version', __FILE__)
1
+ require_relative "lib/sidekiq/version"
3
2
 
4
3
  Gem::Specification.new do |gem|
5
- gem.authors = ["Mike Perham"]
6
- gem.email = ["mperham@gmail.com"]
7
- gem.description = gem.summary = "Simple, efficient background processing for Ruby"
8
- gem.homepage = "http://sidekiq.org"
9
- gem.license = "LGPL-3.0"
4
+ gem.authors = ["Mike Perham"]
5
+ gem.email = ["info@contribsys.com"]
6
+ gem.summary = "Simple, efficient background processing for Ruby"
7
+ gem.description = "Simple, efficient background processing for Ruby."
8
+ gem.homepage = "https://sidekiq.org"
9
+ gem.license = "LGPL-3.0"
10
10
 
11
- gem.executables = ['sidekiq', 'sidekiqctl']
12
- gem.files = `git ls-files | grep -Ev '^(myapp|examples)'`.split("\n")
13
- gem.test_files = `git ls-files -- test/*`.split("\n")
14
- gem.name = "sidekiq"
15
- gem.require_paths = ["lib"]
16
- gem.version = Sidekiq::VERSION
17
- gem.add_dependency 'redis', '>= 3.0.6'
18
- gem.add_dependency 'redis-namespace', '>= 1.3.1'
19
- gem.add_dependency 'connection_pool', '>= 2.1.1'
20
- gem.add_dependency 'celluloid', '~> 0.16.0'
21
- gem.add_dependency 'json'
22
- gem.add_development_dependency 'sinatra'
23
- gem.add_development_dependency 'minitest', '~> 5.3.3'
24
- gem.add_development_dependency 'rake'
25
- gem.add_development_dependency 'rails', '~> 4.1.1'
26
- gem.add_development_dependency 'coveralls'
11
+ gem.executables = ["sidekiq", "sidekiqmon"]
12
+ gem.files = %w[sidekiq.gemspec README.md Changes.md LICENSE.txt] + `git ls-files | grep -E '^(bin|lib|web)'`.split("\n")
13
+ gem.name = "sidekiq"
14
+ gem.version = Sidekiq::VERSION
15
+ gem.required_ruby_version = ">= 2.7.0"
16
+
17
+ gem.metadata = {
18
+ "homepage_uri" => "https://sidekiq.org",
19
+ "bug_tracker_uri" => "https://github.com/sidekiq/sidekiq/issues",
20
+ "documentation_uri" => "https://github.com/sidekiq/sidekiq/wiki",
21
+ "changelog_uri" => "https://github.com/sidekiq/sidekiq/blob/main/Changes.md",
22
+ "source_code_uri" => "https://github.com/sidekiq/sidekiq",
23
+ "rubygems_mfa_required" => "true"
24
+ }
25
+
26
+ gem.add_dependency "redis-client", ">= 0.22.2"
27
+ gem.add_dependency "connection_pool", ">= 2.3.0"
28
+ gem.add_dependency "rack", ">= 2.2.4"
29
+ gem.add_dependency "concurrent-ruby", "< 2"
30
+ gem.add_dependency "logger"
27
31
  end
Binary file