sidekiq 4.2.10 → 7.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +5 -5
  2. data/Changes.md +859 -7
  3. data/LICENSE.txt +9 -0
  4. data/README.md +49 -50
  5. data/bin/multi_queue_bench +271 -0
  6. data/bin/sidekiq +22 -3
  7. data/bin/sidekiqload +212 -119
  8. data/bin/sidekiqmon +11 -0
  9. data/lib/generators/sidekiq/job_generator.rb +59 -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/{worker_test.rb.erb → job_test.rb.erb} +1 -1
  13. data/lib/sidekiq/api.rb +680 -315
  14. data/lib/sidekiq/capsule.rb +132 -0
  15. data/lib/sidekiq/cli.rb +268 -248
  16. data/lib/sidekiq/client.rb +136 -101
  17. data/lib/sidekiq/component.rb +68 -0
  18. data/lib/sidekiq/config.rb +293 -0
  19. data/lib/sidekiq/deploy.rb +64 -0
  20. data/lib/sidekiq/embedded.rb +63 -0
  21. data/lib/sidekiq/fetch.rb +49 -42
  22. data/lib/sidekiq/iterable_job.rb +55 -0
  23. data/lib/sidekiq/job/interrupt_handler.rb +24 -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 +62 -0
  30. data/lib/sidekiq/job_retry.rb +305 -0
  31. data/lib/sidekiq/job_util.rb +109 -0
  32. data/lib/sidekiq/launcher.rb +208 -108
  33. data/lib/sidekiq/logger.rb +131 -0
  34. data/lib/sidekiq/manager.rb +43 -47
  35. data/lib/sidekiq/metrics/query.rb +158 -0
  36. data/lib/sidekiq/metrics/shared.rb +97 -0
  37. data/lib/sidekiq/metrics/tracking.rb +148 -0
  38. data/lib/sidekiq/middleware/chain.rb +113 -56
  39. data/lib/sidekiq/middleware/current_attributes.rb +113 -0
  40. data/lib/sidekiq/middleware/i18n.rb +7 -7
  41. data/lib/sidekiq/middleware/modules.rb +23 -0
  42. data/lib/sidekiq/monitor.rb +147 -0
  43. data/lib/sidekiq/paginator.rb +28 -16
  44. data/lib/sidekiq/processor.rb +188 -98
  45. data/lib/sidekiq/rails.rb +46 -97
  46. data/lib/sidekiq/redis_client_adapter.rb +114 -0
  47. data/lib/sidekiq/redis_connection.rb +71 -73
  48. data/lib/sidekiq/ring_buffer.rb +31 -0
  49. data/lib/sidekiq/scheduled.rb +140 -51
  50. data/lib/sidekiq/sd_notify.rb +149 -0
  51. data/lib/sidekiq/systemd.rb +26 -0
  52. data/lib/sidekiq/testing/inline.rb +6 -5
  53. data/lib/sidekiq/testing.rb +95 -85
  54. data/lib/sidekiq/transaction_aware_client.rb +51 -0
  55. data/lib/sidekiq/version.rb +3 -1
  56. data/lib/sidekiq/web/action.rb +22 -16
  57. data/lib/sidekiq/web/application.rb +230 -86
  58. data/lib/sidekiq/web/csrf_protection.rb +183 -0
  59. data/lib/sidekiq/web/helpers.rb +241 -104
  60. data/lib/sidekiq/web/router.rb +23 -19
  61. data/lib/sidekiq/web.rb +118 -110
  62. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  63. data/lib/sidekiq.rb +96 -185
  64. data/sidekiq.gemspec +26 -27
  65. data/web/assets/images/apple-touch-icon.png +0 -0
  66. data/web/assets/javascripts/application.js +157 -61
  67. data/web/assets/javascripts/base-charts.js +106 -0
  68. data/web/assets/javascripts/chart.min.js +13 -0
  69. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  70. data/web/assets/javascripts/dashboard-charts.js +192 -0
  71. data/web/assets/javascripts/dashboard.js +37 -280
  72. data/web/assets/javascripts/metrics.js +298 -0
  73. data/web/assets/stylesheets/application-dark.css +147 -0
  74. data/web/assets/stylesheets/application-rtl.css +163 -0
  75. data/web/assets/stylesheets/application.css +173 -198
  76. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  77. data/web/assets/stylesheets/bootstrap.css +2 -2
  78. data/web/locales/ar.yml +87 -0
  79. data/web/locales/cs.yml +62 -62
  80. data/web/locales/da.yml +60 -53
  81. data/web/locales/de.yml +65 -53
  82. data/web/locales/el.yml +43 -24
  83. data/web/locales/en.yml +86 -64
  84. data/web/locales/es.yml +70 -53
  85. data/web/locales/fa.yml +65 -64
  86. data/web/locales/fr.yml +83 -62
  87. data/web/locales/gd.yml +99 -0
  88. data/web/locales/he.yml +80 -0
  89. data/web/locales/hi.yml +59 -59
  90. data/web/locales/it.yml +53 -53
  91. data/web/locales/ja.yml +75 -62
  92. data/web/locales/ko.yml +52 -52
  93. data/web/locales/lt.yml +83 -0
  94. data/web/locales/nb.yml +61 -61
  95. data/web/locales/nl.yml +52 -52
  96. data/web/locales/pl.yml +45 -45
  97. data/web/locales/pt-br.yml +83 -55
  98. data/web/locales/pt.yml +51 -51
  99. data/web/locales/ru.yml +68 -63
  100. data/web/locales/sv.yml +53 -53
  101. data/web/locales/ta.yml +60 -60
  102. data/web/locales/tr.yml +101 -0
  103. data/web/locales/uk.yml +62 -61
  104. data/web/locales/ur.yml +80 -0
  105. data/web/locales/vi.yml +83 -0
  106. data/web/locales/zh-cn.yml +43 -16
  107. data/web/locales/zh-tw.yml +42 -8
  108. data/web/views/_footer.erb +21 -3
  109. data/web/views/_job_info.erb +21 -4
  110. data/web/views/_metrics_period_select.erb +12 -0
  111. data/web/views/_nav.erb +5 -19
  112. data/web/views/_paging.erb +3 -1
  113. data/web/views/_poll_link.erb +3 -6
  114. data/web/views/_summary.erb +7 -7
  115. data/web/views/busy.erb +85 -31
  116. data/web/views/dashboard.erb +50 -20
  117. data/web/views/dead.erb +3 -3
  118. data/web/views/filtering.erb +7 -0
  119. data/web/views/layout.erb +17 -6
  120. data/web/views/metrics.erb +91 -0
  121. data/web/views/metrics_for_job.erb +59 -0
  122. data/web/views/morgue.erb +14 -15
  123. data/web/views/queue.erb +34 -24
  124. data/web/views/queues.erb +20 -4
  125. data/web/views/retries.erb +19 -16
  126. data/web/views/retry.erb +3 -3
  127. data/web/views/scheduled.erb +19 -17
  128. metadata +91 -198
  129. data/.github/contributing.md +0 -32
  130. data/.github/issue_template.md +0 -9
  131. data/.gitignore +0 -12
  132. data/.travis.yml +0 -18
  133. data/3.0-Upgrade.md +0 -70
  134. data/4.0-Upgrade.md +0 -53
  135. data/COMM-LICENSE +0 -95
  136. data/Ent-Changes.md +0 -173
  137. data/Gemfile +0 -29
  138. data/LICENSE +0 -9
  139. data/Pro-2.0-Upgrade.md +0 -138
  140. data/Pro-3.0-Upgrade.md +0 -44
  141. data/Pro-Changes.md +0 -628
  142. data/Rakefile +0 -12
  143. data/bin/sidekiqctl +0 -99
  144. data/code_of_conduct.md +0 -50
  145. data/lib/generators/sidekiq/templates/worker_spec.rb.erb +0 -6
  146. data/lib/generators/sidekiq/worker_generator.rb +0 -49
  147. data/lib/sidekiq/core_ext.rb +0 -119
  148. data/lib/sidekiq/exception_handler.rb +0 -31
  149. data/lib/sidekiq/extensions/action_mailer.rb +0 -57
  150. data/lib/sidekiq/extensions/active_record.rb +0 -40
  151. data/lib/sidekiq/extensions/class_methods.rb +0 -40
  152. data/lib/sidekiq/extensions/generic_proxy.rb +0 -25
  153. data/lib/sidekiq/logging.rb +0 -106
  154. data/lib/sidekiq/middleware/server/active_record.rb +0 -13
  155. data/lib/sidekiq/middleware/server/logging.rb +0 -31
  156. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -205
  157. data/lib/sidekiq/util.rb +0 -63
  158. data/lib/sidekiq/worker.rb +0 -121
data/Changes.md CHANGED
@@ -1,6 +1,858 @@
1
1
  # Sidekiq Changes
2
2
 
3
- HEAD
3
+ [Sidekiq Changes](https://github.com/sidekiq/sidekiq/blob/main/Changes.md) | [Sidekiq Pro Changes](https://github.com/sidekiq/sidekiq/blob/main/Pro-Changes.md) | [Sidekiq Enterprise Changes](https://github.com/sidekiq/sidekiq/blob/main/Ent-Changes.md)
4
+
5
+ 7.3.2
6
+ ----------
7
+
8
+ - Adjust ActiveRecord batch iteration to restart an interrupted batch from the beginning.
9
+ Each batch should be processed as a single transaction in order to be idempotent. [#6405]
10
+ - Fix typo in S::DeadSet#kill [#6397]
11
+ - Fix CSS issue with bottom bar in Web UI [#6414]
12
+
13
+ 7.3.1
14
+ ----------
15
+
16
+ - Don't count job interruptions as failures in metrics [#6386]
17
+ - Add frozen string literal to a number of .rb files.
18
+ - Fix frozen string error with style_tag and script_tag [#6371]
19
+ - Fix an error on Ruby 2.7 because of usage of `Hash#except` [#6376]
20
+
21
+ 7.3.0
22
+ ----------
23
+
24
+ - **NEW FEATURE** Add `Sidekiq::IterableJob`, iteration support for long-running jobs. [#6286, fatkodima]
25
+ Iterable jobs are interruptible and can restart quickly if
26
+ running during a deploy. You must ensure that `each_iteration`
27
+ doesn't take more than Sidekiq's `-t` timeout (default: 25 seconds). Iterable jobs must not implement `perform`.
28
+ ```ruby
29
+ class ProcessArrayJob
30
+ include Sidekiq::IterableJob
31
+ def build_enumerator(*args, **kwargs)
32
+ array_enumerator(args, **kwargs)
33
+ end
34
+ def each_iteration(arg)
35
+ puts arg
36
+ end
37
+ end
38
+ ProcessArrayJob.perform_async(1, 2, 3)
39
+ ```
40
+ See the [Iteration](//github.com/sidekiq/sidekiq/wiki/Iteration) wiki page and the RDoc in `Sidekiq::IterableJob`.
41
+ This feature should be considered BETA until the next minor release.
42
+ - **SECURITY** The Web UI no longer allows extensions to use `<script>`.
43
+ Adjust CSP to disallow inline scripts within the Web UI. Please see
44
+ `examples/webui-ext` for how to register Web UI extensions and use
45
+ dynamic CSS and JS. This will make Sidekiq immune to XSS attacks. [#6270]
46
+ - Add config option, `:skip_default_job_logging` to disable Sidekiq's default
47
+ start/finish job logging. [#6200]
48
+ - Allow `Sidekiq::Limiter.redis` to use Redis Cluster [#6288]
49
+ - Retain CurrentAttributeѕ after inline execution [#6307]
50
+ - Ignore non-existent CurrentAttributes attributes when restoring [#6341]
51
+ - Raise default Redis {read,write,connect} timeouts from 1 to 3 seconds
52
+ to minimize ReadTimeoutErrors [#6162]
53
+ - Add `logger` as a dependency since it will become bundled in Ruby 3.5 [#6320]
54
+ - Ignore unsupported locales in the Web UI [#6313]
55
+
56
+ 7.2.4
57
+ ----------
58
+
59
+ - Fix XSS in metrics filtering introduced in 7.2.0, CVE-2024-32887
60
+ Thanks to @UmerAdeemCheema for the security report.
61
+
62
+ 7.2.3
63
+ ----------
64
+
65
+ - [Support Dragonfly.io](https://www.mikeperham.com/2024/02/01/supporting-dragonfly/) as an alternative Redis implementation
66
+ - Fix error unpacking some compressed error backtraces [#6241]
67
+ - Fix potential heartbeat data leak [#6227]
68
+ - Add ability to find a currently running work by jid [#6212, fatkodima]
69
+
70
+ 7.2.2
71
+ ----------
72
+
73
+ - Add `Process.warmup` call in Ruby 3.3+
74
+ - Batch jobs now skip transactional push [#6160]
75
+
76
+ 7.2.1
77
+ ----------
78
+
79
+ - Add `Sidekiq::Work` type which replaces the raw Hash as the third parameter in
80
+ `Sidekiq::WorkSet#each { |pid, tid, hash| ... }` [#6145]
81
+ - **DEPRECATED**: direct access to the attributes within the `hash` block parameter above.
82
+ The `Sidekiq::Work` instance contains accessor methods to get at the same data, e.g.
83
+ ```ruby
84
+ work["queue"] # Old
85
+ work.queue # New
86
+ ```
87
+ - Fix Ruby 3.3 warnings around `base64` gem [#6151, earlopain]
88
+
89
+ 7.2.0
90
+ ----------
91
+
92
+ - `sidekiq_retries_exhausted` can return `:discard` to avoid the deadset
93
+ and all death handlers [#6091]
94
+ - Metrics filtering by job class in Web UI [#5974]
95
+ - Better readability and formatting for numbers within the Web UI [#6080]
96
+ - Add explicit error if user code tries to nest test modes [#6078]
97
+ ```ruby
98
+ Sidekiq::Testing.inline! # global setting
99
+ Sidekiq::Testing.fake! do # override within block
100
+ # ok
101
+ Sidekiq::Testing.inline! do # can't override the override
102
+ # not ok, nested
103
+ end
104
+ end
105
+ ```
106
+ - **SECURITY** Forbid inline JavaScript execution in Web UI [#6074]
107
+ - Adjust redis-client adapter to avoid `method_missing` [#6083]
108
+ This can result in app code breaking if your app's Redis API usage was
109
+ depending on Sidekiq's adapter to correct invalid redis-client API usage.
110
+ One example:
111
+ ```ruby
112
+ # bad, not redis-client native
113
+ # Unsupported command argument type: TrueClass (TypeError)
114
+ Sidekiq.redis { |c| c.set("key", "value", nx: true, ex: 15) }
115
+ # good
116
+ Sidekiq.redis { |c| c.set("key", "value", "nx", "ex", 15) }
117
+ ```
118
+
119
+ 7.1.6
120
+ ----------
121
+
122
+ - The block forms of testing modes (inline, fake) are now thread-safe so you can have
123
+ a multithreaded test suite which uses different modes for different tests. [#6069]
124
+ - Fix breakage with non-Proc error handlers [#6065]
125
+
126
+ 7.1.5
127
+ ----------
128
+
129
+ - **FEATURE**: Job filtering within the Web UI. This feature has been open
130
+ sourced from Sidekiq Pro. [#6052]
131
+ - **API CHANGE** Error handlers now take three arguments `->(ex, context, config)`.
132
+ The previous calling convention will work until Sidekiq 8.0 but will print
133
+ out a deprecation warning. [#6051]
134
+ - Fix issue with the `batch_size` and `at` options in `S::Client.push_bulk` [#6040]
135
+ - Fix inline testing firing batch callbacks early [#6057]
136
+ - Use new log broadcast API in Rails 7.1 [#6054]
137
+ - Crash if user tries to use RESP2 `protocol: 2` [#6061]
138
+
139
+ 7.1.4
140
+ ----------
141
+
142
+ - Fix empty `retry_for` logic [#6035]
143
+
144
+ 7.1.3
145
+ ----------
146
+
147
+ - Add `sidekiq_options retry_for: 48.hours` to allow time-based retry windows [#6029]
148
+ - Support sidekiq_retry_in and sidekiq_retries_exhausted_block in ActiveJobs (#5994)
149
+ - Lowercase all Rack headers for Rack 3.0 [#5951]
150
+ - Validate Sidekiq::Web page refresh delay to avoid potential DoS,
151
+ CVE-2023-26141, thanks for reporting Keegan!
152
+
153
+ 7.1.2
154
+ ----------
155
+
156
+ - Mark Web UI assets as private so CDNs won't cache them [#5936]
157
+ - Fix stackoverflow when using Oj and the JSON log formatter [#5920]
158
+ - Remove spurious `enqueued_at` from scheduled ActiveJobs [#5937]
159
+
160
+ 7.1.1
161
+ ----------
162
+
163
+ - Support multiple CurrentAttributes [#5904]
164
+ - Speed up latency fetch with large queues on Redis <7 [#5910]
165
+ - Allow a larger default client pool [#5886]
166
+ - Ensure Sidekiq.options[:environment] == RAILS_ENV [#5932]
167
+
168
+ 7.1.0
169
+ ----------
170
+
171
+ - Improve display of ActiveJob arguments in Web UI [#5825, cover]
172
+ - Update `push_bulk` to push `batch_size` jobs at a time and allow laziness [#5827, fatkodima]
173
+ This allows Sidekiq::Client to push unlimited jobs as long as it has enough memory for the batch_size.
174
+ - Update `perform_bulk` to use `push_bulk` internally.
175
+ - Change return value of `push_bulk` to map 1-to-1 with arguments.
176
+ If you call `push_bulk(args: [[1], [2], [3]])`, you will now always get
177
+ an array of 3 values as the result: `["jid1", nil, "jid3"]` where nil means
178
+ that particular job did not push successfully (possibly due to middleware
179
+ stopping it). Previously nil values were removed so it was impossible to tell
180
+ which jobs pushed successfully and which did not.
181
+ - Migrate away from all deprecated Redis commands [#5788]
182
+ Sidekiq will now print a warning if you use one of those deprecated commands.
183
+ - Prefix all Sidekiq thread names [#5872]
184
+
185
+ 7.0.9
186
+ ----------
187
+
188
+ - Restore confirmation dialogs in Web UI [#5881, shevaun]
189
+ - Increase fetch timeout to minimize ReadTimeoutError [#5874]
190
+ - Reverse histogram tooltip ordering [#5868]
191
+ - Add Scottish Gaelic (gd) locale [#5867, GunChleoc]
192
+
193
+ 7.0.8
194
+ ----------
195
+
196
+ - **SECURITY** Sanitize `period` input parameter on Metrics pages.
197
+ Specially crafted values can lead to XSS. This functionality
198
+ was introduced in 7.0.4. Thank you to spercex @ huntr.dev [#5694]
199
+ - Add job hash as 3rd parameter to the `sidekiq_retry_in` block.
200
+
201
+ 7.0.7
202
+ ----------
203
+
204
+ - Fix redis-client API usage which could result in stuck Redis
205
+ connections [#5823]
206
+ - Fix AS::Duration with `sidekiq_retry_in` [#5806]
207
+ - Restore dumping config options on startup with `-v` [#5822]
208
+
209
+ 7.0.5,7.0.6
210
+ ----------
211
+
212
+ - More context for debugging json unsafe errors [#5787]
213
+
214
+ 7.0.4
215
+ ----------
216
+
217
+ - Performance and memory optimizations [#5768, fatkodima]
218
+ - Add 1-8 hour period selector to Metrics pages [#5694]
219
+ - Fix process display with `sidekiqmon` [#5733]
220
+
221
+ 7.0.3
222
+ ----------
223
+
224
+ - Don't warn about memory policy on Redis Enterprise [#5712]
225
+ - Don't allow Quiet/Stop on embedded Sidekiq instances [#5716]
226
+ - Fix `size: X` for configuring the default Redis pool size [#5702]
227
+ - Improve the display of queue weights on Busy page [#5642]
228
+ - Freeze CurrentAttributes on a job once initially set [#5692]
229
+
230
+ 7.0.2
231
+ ----------
232
+
233
+ - Improve compatibility with custom loggers [#5673]
234
+ - Add queue weights on Busy page [#5640]
235
+ - Add BID link on job_info page if job is part of a Batch [#5623]
236
+ - Allow custom extensions to add rows/links within Job detail pages [#5624]
237
+ ```ruby
238
+ Sidekiq::Web.custom_job_info_rows << AddAccountLink.new
239
+
240
+ class AddAccountLink
241
+ include CGI::Util
242
+ def add_pair(job)
243
+ # yield a (name, value) pair
244
+ # You can include HTML tags and CSS, Sidekiq does not do any
245
+ # escaping so beware user data injection! Note how we use CGI's
246
+ # `h` escape helper.
247
+ aid = job["account_id"]
248
+ yield "Account", "<a href='/accounts/#{h aid}'>#{h aid}</a>" if aid
249
+ end
250
+ end
251
+ ```
252
+
253
+ 7.0.1
254
+ ----------
255
+
256
+ - Allow an embedding process to reuse its own heartbeat thread
257
+ - Update zh-cn localization
258
+
259
+ 7.0.0
260
+ ----------
261
+
262
+ - Embedded mode!
263
+ - Capsules!!
264
+ - Job Execution metrics!!!
265
+ - See `docs/7.0-Upgrade.md` for release notes
266
+
267
+ 6.5.{10,11,12}
268
+ ----------
269
+
270
+ - Fixes for Rails 7.1 [#6067, #6070]
271
+
272
+ 6.5.9
273
+ ----------
274
+
275
+ - Ensure Sidekiq.options[:environment] == RAILS_ENV [#5932]
276
+
277
+ 6.5.8
278
+ ----------
279
+
280
+ - Fail if using a bad version of scout_apm [#5616]
281
+ - Add pagination to Busy page [#5556]
282
+ - Speed up WorkSet#each [#5559]
283
+ - Adjust CurrentAttributes to work with the String class name so we aren't referencing the Class within a Rails initializer [#5536]
284
+
285
+ 6.5.7
286
+ ----------
287
+
288
+ - Updates for JA and ZH locales
289
+ - Further optimizations for scheduled polling [#5513]
290
+
291
+ 6.5.6
292
+ ----------
293
+
294
+ - Fix deprecation warnings with redis-rb 4.8.0 [#5484]
295
+ - Lock redis-rb to < 5.0 as we are moving to redis-client in Sidekiq 7.0
296
+
297
+ 6.5.5
298
+ ----------
299
+
300
+ - Fix require issue with job_retry.rb [#5462]
301
+ - Improve Sidekiq::Web compatibility with Rack 3.x
302
+
303
+ 6.5.4
304
+ ----------
305
+
306
+ - Fix invalid code on Ruby 2.5 [#5460]
307
+ - Fix further metrics dependency issues [#5457]
308
+
309
+ 6.5.3
310
+ ----------
311
+
312
+ - Don't require metrics code without explicit opt-in [#5456]
313
+
314
+ 6.5.2
315
+ ----------
316
+
317
+ - [Job Metrics are under active development, help wanted!](https://github.com/sidekiq/sidekiq/wiki/Metrics#contributing) **BETA**
318
+ - Add `Context` column on queue page which shows any CurrentAttributes [#5450]
319
+ - `sidekiq_retry_in` may now return `:discard` or `:kill` to dynamically stop job retries [#5406]
320
+ - Smarter sorting of processes in /busy Web UI [#5398]
321
+ - Fix broken hamburger menu in mobile UI [#5428]
322
+ - Require redis-rb 4.5.0. Note that Sidekiq will break if you use the
323
+ [`Redis.exists_returns_integer = false`](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md#450) flag. [#5394]
324
+
325
+ 6.5.1
326
+ ----------
327
+
328
+ - Fix `push_bulk` breakage [#5387]
329
+
330
+ 6.5.0
331
+ ---------
332
+
333
+ - Substantial refactoring of Sidekiq server internals, part of a larger effort
334
+ to reduce Sidekiq's internal usage of global methods and data, see [docs/global_to_local.md](docs/global_to_local.md) and [docs/middleware.md](docs/middleware.md).
335
+ - **Add beta support for the `redis-client` gem**. This will become the default Redis driver in Sidekiq 7.0. [#5298]
336
+ Read more: https://github.com/sidekiq/sidekiq/wiki/Using-redis-client
337
+ - **Add beta support for DB transaction-aware client** [#5291]
338
+ Add this line to your initializer and any jobs created during a transaction
339
+ will only be pushed to Redis **after the transaction commits**. You will need to add the
340
+ `after_commit_everywhere` gem to your Gemfile.
341
+ ```ruby
342
+ Sidekiq.transactional_push!
343
+ ```
344
+ This feature does not have a lot of production usage yet; please try it out and let us
345
+ know if you have any issues. It will be fully supported in Sidekiq 7.0 or removed if it
346
+ proves problematic.
347
+ - Fix regression with middleware arguments [#5312]
348
+
349
+ 6.4.2
350
+ ---------
351
+
352
+ - Strict argument checking now runs after client-side middleware [#5246]
353
+ - Fix page events with live polling [#5184]
354
+ - Many under-the-hood changes to remove all usage of the term "worker"
355
+ from the Sidekiq codebase and APIs. This mostly involved RDoc and local
356
+ variable names but a few constants and public APIs were changed. The old
357
+ APIs will be removed in Sidekiq 7.0.
358
+ ```
359
+ Sidekiq::DEFAULT_WORKER_OPTIONS -> Sidekiq.default_job_options
360
+ Sidekiq.default_worker_options -> Sidekiq.default_job_options
361
+ Sidekiq::Queues["default"].jobs_by_worker(HardJob) -> Sidekiq::Queues["default"].jobs_by_class(HardJob)
362
+ ```
363
+
364
+ 6.4.1
365
+ ---------
366
+
367
+ - Fix pipeline/multi deprecations in redis-rb 4.6
368
+ - Fix sidekiq.yml YAML load errors on Ruby 3.1 [#5141]
369
+ - Sharding support for `perform_bulk` [#5129]
370
+ - Refactor job logger for SPEEEEEEED
371
+
372
+ 6.4.0
373
+ ---------
374
+
375
+ - **SECURITY**: Validate input to avoid possible DoS in Web UI.
376
+ - Add **strict argument checking** [#5071]
377
+ Sidekiq will now log a warning if JSON-unsafe arguments are passed to `perform_async`.
378
+ Add `Sidekiq.strict_args!(false)` to your initializer to disable this warning.
379
+ This warning will switch to an exception in Sidekiq 7.0.
380
+ - Note that Delayed Extensions will be removed in Sidekiq 7.0 [#5076]
381
+ - Add `perform_{inline,sync}` in Sidekiq::Job to run a job synchronously [#5061, hasan-ally]
382
+ ```ruby
383
+ SomeJob.perform_async(args...)
384
+ SomeJob.perform_sync(args...)
385
+ SomeJob.perform_inline(args...)
386
+ ```
387
+ You can also dynamically redirect a job to run synchronously:
388
+ ```ruby
389
+ SomeJob.set("sync": true).perform_async(args...) # will run via perform_inline
390
+ ```
391
+ - Replace Sidekiq::Worker `app/workers` generator with Sidekiq::Job `app/sidekiq` generator [#5055]
392
+ ```
393
+ bin/rails generate sidekiq:job ProcessOrderJob
394
+ ```
395
+ - Fix job retries losing CurrentAttributes [#5090]
396
+ - Tweak shutdown to give long-running threads time to cleanup [#5095]
397
+
398
+ 6.3.1
399
+ ---------
400
+
401
+ - Fix keyword arguments error with CurrentAttributes on Ruby 3.0 [#5048]
402
+
403
+ 6.3.0
404
+ ---------
405
+
406
+ - **BREAK**: The Web UI has been refactored to remove jQuery. Any UI extensions
407
+ which use jQuery will break.
408
+ - **FEATURE**: Sidekiq.logger has been enhanced so any `Rails.logger`
409
+ output in jobs now shows up in the Sidekiq console. Remove any logger
410
+ hacks in your initializer and see if it Just Works™ now. [#5021]
411
+ - **FEATURE**: Add `Sidekiq::Job` alias for `Sidekiq::Worker`, to better
412
+ reflect industry standard terminology. You can now do this:
413
+ ```ruby
414
+ class MyJob
415
+ include Sidekiq::Job
416
+ sidekiq_options ...
417
+ def perform(args)
418
+ end
419
+ end
420
+ ```
421
+ - **FEATURE**: Support for serializing ActiveSupport::CurrentAttributes into each job. [#4982]
422
+ ```ruby
423
+ # config/initializers/sidekiq.rb
424
+ require "sidekiq/middleware/current_attributes"
425
+ Sidekiq::CurrentAttributes.persist(Myapp::Current) # Your AS::CurrentAttributes singleton
426
+ ```
427
+ - **FEATURE**: Add `Sidekiq::Worker.perform_bulk` for enqueuing jobs in bulk,
428
+ similar to `Sidekiq::Client.push_bulk` [#5042]
429
+ ```ruby
430
+ MyJob.perform_bulk([[1], [2], [3]])
431
+ ```
432
+ - Implement `queue_as`, `wait` and `wait_until` for ActiveJob compatibility [#5003]
433
+ - Scheduler now uses Lua to reduce Redis load and network roundtrips [#5044]
434
+ - Retry Redis operation if we get an `UNBLOCKED` Redis error [#4985]
435
+ - Run existing signal traps, if any, before running Sidekiq's trap [#4991]
436
+ - Fix fetch bug when using weighted queues which caused Sidekiq to stop
437
+ processing queues randomly [#5031]
438
+
439
+ 6.2.2
440
+ ---------
441
+
442
+ - Reduce retry jitter, add jitter to `sidekiq_retry_in` values [#4957]
443
+ - Minimize scheduler load on Redis at scale [#4882]
444
+ - Improve logging of delay jobs [#4904, BuonOno]
445
+ - Minor CSS improvements for buttons and tables, design PRs always welcome!
446
+ - Tweak Web UI `Cache-Control` header [#4966]
447
+ - Rename internal API class `Sidekiq::Job` to `Sidekiq::JobRecord` [#4955]
448
+
449
+ 6.2.1
450
+ ---------
451
+
452
+ - Update RTT warning logic to handle transient RTT spikes [#4851]
453
+ - Fix very low priority CVE on unescaped queue name [#4852]
454
+ - Add note about sessions and Rails apps in API mode
455
+
456
+ 6.2.0
457
+ ---------
458
+
459
+ - Store Redis RTT and log if poor [#4824]
460
+ - Add process/thread stats to Busy page [#4806]
461
+ - Improve Web UI on mobile devices [#4840]
462
+ - **Refactor Web UI session usage** [#4804]
463
+ Numerous people have hit "Forbidden" errors and struggled with Sidekiq's
464
+ Web UI session requirement. If you have code in your initializer for
465
+ Web sessions, it's quite possible it will need to be removed. Here's
466
+ an overview:
467
+ ```
468
+ Sidekiq::Web needs a valid Rack session for CSRF protection. If this is a Rails app,
469
+ make sure you mount Sidekiq::Web *inside* your routes in `config/routes.rb` so
470
+ Sidekiq can reuse the Rails session:
471
+
472
+ Rails.application.routes.draw do
473
+ mount Sidekiq::Web => "/sidekiq"
474
+ ....
475
+ end
476
+
477
+ If this is a bare Rack app, use a session middleware before Sidekiq::Web:
478
+
479
+ # first, use IRB to create a shared secret key for sessions and commit it
480
+ require 'securerandom'; File.open(".session.key", "w") {|f| f.write(SecureRandom.hex(32)) }
481
+
482
+ # now, update your Rack app to include the secret with a session cookie middleware
483
+ use Rack::Session::Cookie, secret: File.read(".session.key"), same_site: true, max_age: 86400
484
+ run Sidekiq::Web
485
+
486
+ If this is a Rails app in API mode, you need to enable sessions.
487
+
488
+ https://guides.rubyonrails.org/api_app.html#using-session-middlewares
489
+ ```
490
+
491
+ 6.1.3
492
+ ---------
493
+
494
+ - Warn if Redis is configured to evict data under memory pressure [#4752]
495
+ - Add process RSS on the Busy page [#4717]
496
+
497
+ 6.1.2
498
+ ---------
499
+
500
+ - Improve readability in dark mode Web UI [#4674]
501
+ - Fix Web UI crash with corrupt session [#4672]
502
+ - Allow middleware to yield arguments [#4673, @eugeneius]
503
+ - Migrate CI from CircleCI to GitHub Actions [#4677]
504
+
505
+ 6.1.1
506
+ ---------
507
+
508
+ - Jobs are now sorted by age in the Busy Workers table. [#4641]
509
+ - Fix "check all" JS logic in Web UI [#4619]
510
+
511
+ 6.1.0
512
+ ---------
513
+
514
+ - Web UI - Dark Mode fixes [#4543, natematykiewicz]
515
+ - Ensure `Rack::ContentLength` is loaded as middleware for correct Web UI responses [#4541]
516
+ - Avoid exception dumping SSL store in Redis connection logging [#4532]
517
+ - Better error messages in Sidekiq::Client [#4549]
518
+ - Remove rack-protection, reimplement CSRF protection [#4588]
519
+ - Require redis-rb 4.2 [#4591]
520
+ - Update to jquery 1.12.4 [#4593]
521
+ - Refactor internal fetch logic and API [#4602]
522
+
523
+ 6.0.7
524
+ ---------
525
+
526
+ - Refactor systemd integration to work better with custom binaries [#4511]
527
+ - Don't connect to Redis at process exit if not needed [#4502]
528
+ - Remove Redis connection naming [#4479]
529
+ - Fix Redis Sentinel password redaction [#4499]
530
+ - Add Vietnamese locale (vi) [#4528]
531
+
532
+ 6.0.6
533
+ ---------
534
+
535
+ - **Integrate with systemd's watchdog and notification features** [#4488]
536
+ Set `Type=notify` in [sidekiq.service](https://github.com/sidekiq/sidekiq/blob/4b8a8bd3ae42f6e48ae1fdaf95ed7d7af18ed8bb/examples/systemd/sidekiq.service#L30-L39). The integration works automatically.
537
+ - Use `setTimeout` rather than `setInterval` to avoid thundering herd [#4480]
538
+ - Fix edge case where a job can be pushed without a queue.
539
+ - Flush job stats at exit [#4498]
540
+ - Check RAILS_ENV before RACK_ENV [#4493]
541
+ - Add Lithuanian locale [#4476]
542
+
543
+ 6.0.5
544
+ ---------
545
+
546
+ - Fix broken Web UI response when using NewRelic and Rack 2.1.2+. [#4440]
547
+ - Update APIs to use `UNLINK`, not `DEL`. [#4449]
548
+ - Fix Ruby 2.7 warnings [#4412]
549
+ - Add support for `APP_ENV` [[95fa5d9]](https://github.com/sidekiq/sidekiq/commit/95fa5d90192148026e52ca2902f1b83c70858ce8)
550
+
551
+ 6.0.4
552
+ ---------
553
+
554
+ - Fix ActiveJob's `sidekiq_options` integration [#4404]
555
+ - Sidekiq Pro users will now see a Pause button next to each queue in
556
+ the Web UI, allowing them to pause queues manually [#4374, shayonj]
557
+ - Fix Sidekiq::Workers API unintentional change in 6.0.2 [#4387]
558
+
559
+
560
+ 6.0.3
561
+ ---------
562
+
563
+ - Fix `Sidekiq::Client.push_bulk` API which was erroneously putting
564
+ invalid `at` values in the job payloads [#4321]
565
+
566
+ 6.0.2
567
+ ---------
568
+
569
+ - Fix Sidekiq Enterprise's rolling restart functionality, broken by refactoring in 6.0.0. [#4334]
570
+ - More internal refactoring and performance tuning [fatkodima]
571
+
572
+ 6.0.1
573
+ ---------
574
+
575
+ - **Performance tuning**, Sidekiq should be 10-15% faster now [#4303, 4299,
576
+ 4269, fatkodima]
577
+ - **Dark Mode support in Web UI** (further design polish welcome!) [#4227, mperham,
578
+ fatkodima, silent-e]
579
+ - **Job-specific log levels**, allowing you to turn on debugging for
580
+ problematic workers. [fatkodima, #4287]
581
+ ```ruby
582
+ MyWorker.set(log_level: :debug).perform_async(...)
583
+ ```
584
+ - **Ad-hoc job tags**. You can tag your jobs with, e.g, subdomain, tenant, country,
585
+ locale, application, version, user/client, "alpha/beta/pro/ent", types of jobs,
586
+ teams/people responsible for jobs, additional metadata, etc.
587
+ Tags are shown on different pages with job listings. Sidekiq Pro users
588
+ can filter based on them [fatkodima, #4280]
589
+ ```ruby
590
+ class MyWorker
591
+ include Sidekiq::Worker
592
+ sidekiq_options tags: ['bank-ops', 'alpha']
593
+ ...
594
+ end
595
+ ```
596
+ - Fetch scheduled jobs in batches before pushing into specific queues.
597
+ This will decrease enqueueing time of scheduled jobs by a third. [fatkodima, #4273]
598
+ ```
599
+ ScheduledSet with 10,000 jobs
600
+ Before: 56.6 seconds
601
+ After: 39.2 seconds
602
+ ```
603
+ - Compress error backtraces before pushing into Redis, if you are
604
+ storing error backtraces, this will halve the size of your RetrySet
605
+ in Redis [fatkodima, #4272]
606
+ ```
607
+ RetrySet with 100,000 jobs
608
+ Before: 261 MB
609
+ After: 129 MB
610
+ ```
611
+ - Support display of ActiveJob 6.0 payloads in the Web UI [#4263]
612
+ - Add `SortedSet#scan` for pattern based scanning. For large sets this API will be **MUCH** faster
613
+ than standard iteration using each. [fatkodima, #4262]
614
+ ```ruby
615
+ Sidekiq::DeadSet.new.scan("UnreliableApi") do |job|
616
+ job.retry
617
+ end
618
+ ```
619
+ - Dramatically speed up SortedSet#find\_job(jid) by using Redis's ZSCAN
620
+ support, approx 10x faster. [fatkodima, #4259]
621
+ ```
622
+ zscan 0.179366 0.047727 0.227093 ( 1.161376)
623
+ enum 8.522311 0.419826 8.942137 ( 9.785079)
624
+ ```
625
+ - Respect rails' generators `test_framework` option and gracefully handle extra `worker` suffix on generator [fatkodima, #4256]
626
+ - Add ability to sort 'Enqueued' page on Web UI by position in the queue [fatkodima, #4248]
627
+ - Support `Client.push_bulk` with different delays [fatkodima, #4243]
628
+ ```ruby
629
+ Sidekiq::Client.push_bulk("class" => FooJob, "args" => [[1], [2]], "at" => [1.minute.from_now.to_f, 5.minutes.from_now.to_f])
630
+ ```
631
+ - Easier way to test enqueuing specific ActionMailer and ActiveRecord delayed jobs. Instead of manually
632
+ parsing embedded class, you can now test by fetching jobs for specific classes. [fatkodima, #4292]
633
+ ```ruby
634
+ assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs_for(FooMailer).size
635
+ ```
636
+ - Add `sidekiqmon` to gemspec executables [#4242]
637
+ - Gracefully handle `Sidekiq.logger = nil` [#4240]
638
+ - Inject Sidekiq::LogContext module if user-supplied logger does not include it [#4239]
639
+
640
+ 6.0
641
+ ---------
642
+
643
+ This release has major breaking changes. Read and test carefully in production.
644
+
645
+ - With Rails 6.0.2+, ActiveJobs can now use `sidekiq_options` directly to configure Sidekiq
646
+ features/internals like the retry subsystem. [#4213, pirj]
647
+ ```ruby
648
+ class MyJob < ActiveJob::Base
649
+ queue_as :myqueue
650
+ sidekiq_options retry: 10, backtrace: 20
651
+ def perform(...)
652
+ end
653
+ end
654
+ ```
655
+ - Logging has been redesigned to allow for pluggable log formatters:
656
+ ```ruby
657
+ Sidekiq.configure_server do |config|
658
+ config.log_formatter = Sidekiq::Logger::Formatters::JSON.new
659
+ end
660
+ ```
661
+ See the [Logging wiki page](https://github.com/sidekiq/sidekiq/wiki/Logging) for more details.
662
+ - **BREAKING CHANGE** Validate proper usage of the `REDIS_PROVIDER`
663
+ variable. This variable is meant to hold the name of the environment
664
+ variable which contains your Redis URL, so that you can switch Redis
665
+ providers quickly and easily with a single variable change. It is not
666
+ meant to hold the actual Redis URL itself. If you want to manually set
667
+ the Redis URL (not recommended as it implies you have no failover),
668
+ then you may set `REDIS_URL` directly. [#3969]
669
+ - **BREAKING CHANGE** Increase default shutdown timeout from 8 seconds
670
+ to 25 seconds. Both Heroku and ECS now use 30 second shutdown timeout
671
+ by default and we want Sidekiq to take advantage of this time. If you
672
+ have deployment scripts which depend on the old default timeout, use `-t 8` to
673
+ get the old behavior. [#3968]
674
+ - **BREAKING CHANGE** Remove the daemonization, logfile and pidfile
675
+ arguments to Sidekiq. Use a proper process supervisor (e.g. systemd or
676
+ foreman) to manage Sidekiq. See the Deployment wiki page for links to
677
+ more resources.
678
+ - Integrate the StandardRB code formatter to ensure consistent code
679
+ styling. [#4114, gearnode]
680
+
681
+ 5.2.10
682
+ ---------
683
+
684
+ - Backport fix for CVE-2022-23837.
685
+ - Migrate to `exists?` for redis-rb.
686
+ - Lock redis-rb to <4.6 to avoid deprecations.
687
+
688
+ 5.2.9
689
+ ---------
690
+
691
+ - Release Rack lock due to a cascade of CVEs. [#4566]
692
+ Pro-tip: don't lock Rack.
693
+
694
+ 5.2.8
695
+ ---------
696
+
697
+ - Lock to Rack 2.0.x to prevent future incompatibilities
698
+ - Fix invalid reference in `sidekiqctl`
699
+
700
+ 5.2.7
701
+ ---------
702
+
703
+ - Fix stale `enqueued_at` when retrying [#4149]
704
+ - Move build to [Circle CI](https://circleci.com/gh/mperham/sidekiq) [#4120]
705
+
706
+ 5.2.6
707
+ ---------
708
+
709
+ - Fix edge case where a job failure during Redis outage could result in a lost job [#4141]
710
+ - Better handling of malformed job arguments in payload [#4095]
711
+ - Restore bootstap's dropdown css component [#4099, urkle]
712
+ - Display human-friendly time diff for longer queue latencies [#4111, interlinked]
713
+ - Allow `Sidekiq::Worker#set` to be chained
714
+
715
+ 5.2.5
716
+ ---------
717
+
718
+ - Fix default usage of `config/sidekiq.yml` [#4077, Tensho]
719
+
720
+ 5.2.4
721
+ ---------
722
+
723
+ - Add warnings for various deprecations and changes coming in Sidekiq 6.0.
724
+ See the 6-0 branch. [#4056]
725
+ - Various improvements to the Sidekiq test suite and coverage [#4026, #4039, Tensho]
726
+
727
+ 5.2.3
728
+ ---------
729
+
730
+ - Warning message on invalid REDIS\_PROVIDER [#3970]
731
+ - Add `sidekiqctl status` command [#4003, dzunk]
732
+ - Update elapsed time calculatons to use monotonic clock [#3999]
733
+ - Fix a few issues with mobile Web UI styling [#3973, navied]
734
+ - Jobs with `retry: false` now go through the global `death_handlers`,
735
+ meaning you can take action on failed ephemeral jobs. [#3980, Benjamin-Dobell]
736
+ - Fix race condition in defining Workers. [#3997, mattbooks]
737
+
738
+ 5.2.2
739
+ ---------
740
+
741
+ - Raise error for duplicate queue names in config to avoid unexpected fetch algorithm change [#3911]
742
+ - Fix concurrency bug on JRuby [#3958, mattbooks]
743
+ - Add "Kill All" button to the retries page [#3938]
744
+
745
+ 5.2.1
746
+ -----------
747
+
748
+ - Fix concurrent modification error during heartbeat [#3921]
749
+
750
+ 5.2.0
751
+ -----------
752
+
753
+ - **Decrease default concurrency from 25 to 10** [#3892]
754
+ - Verify connection pool sizing upon startup [#3917]
755
+ - Smoother scheduling for large Sidekiq clusters [#3889]
756
+ - Switch Sidekiq::Testing impl from alias\_method to Module#prepend, for resiliency [#3852]
757
+ - Update Sidekiq APIs to use SCAN for scalability [#3848, ffiller]
758
+ - Remove concurrent-ruby gem dependency [#3830]
759
+ - Optimize Web UI's bootstrap.css [#3914]
760
+
761
+ 5.1.3
762
+ -----------
763
+
764
+ - Fix version comparison so Ruby 2.2.10 works. [#3808, nateberkopec]
765
+
766
+ 5.1.2
767
+ -----------
768
+
769
+ - Add link to docs in Web UI footer
770
+ - Fix crash on Ctrl-C in Windows [#3775, Bernica]
771
+ - Remove `freeze` calls on String constants. This is superfluous with Ruby
772
+ 2.3+ and `frozen_string_literal: true`. [#3759]
773
+ - Fix use of AR middleware outside of Rails [#3787]
774
+ - Sidekiq::Worker `sidekiq_retry_in` block can now return nil or 0 to use
775
+ the default backoff delay [#3796, dsalahutdinov]
776
+
777
+ 5.1.1
778
+ -----------
779
+
780
+ - Fix Web UI incompatibility with Redis 3.x gem [#3749]
781
+
782
+ 5.1.0
783
+ -----------
784
+
785
+ - **NEW** Global death handlers - called when your job exhausts all
786
+ retries and dies. Now you can take action when a job fails permanently. [#3721]
787
+ - **NEW** Enable ActiveRecord query cache within jobs by default [#3718, sobrinho]
788
+ This will prevent duplicate SELECTS; cache is cleared upon any UPDATE/INSERT/DELETE.
789
+ See the issue for how to bypass the cache or disable it completely.
790
+ - Scheduler timing is now more accurate, 15 -> 5 seconds [#3734]
791
+ - Exceptions during the :startup event will now kill the process [#3717]
792
+ - Make `Sidekiq::Client.via` reentrant [#3715]
793
+ - Fix use of Sidekiq logger outside of the server process [#3714]
794
+ - Tweak `constantize` to better match Rails class lookup. [#3701, caffeinated-tech]
795
+
796
+ 5.0.5
797
+ -----------
798
+
799
+ - Update gemspec to allow newer versions of the Redis gem [#3617]
800
+ - Refactor Worker.set so it can be memoized [#3602]
801
+ - Fix display of Redis URL in web footer, broken in 5.0.3 [#3560]
802
+ - Update `Sidekiq::Job#display_args` to avoid mutation [#3621]
803
+
804
+ 5.0.4
805
+ -----------
806
+
807
+ - Fix "slow startup" performance regression from 5.0.2. [#3525]
808
+ - Allow users to disable ID generation since some redis providers disable the CLIENT command. [#3521]
809
+
810
+ 5.0.3
811
+ -----------
812
+
813
+ - Fix overriding `class_attribute` core extension from ActiveSupport with Sidekiq one [PikachuEXE, #3499]
814
+ - Allow job logger to be overridden [AlfonsoUceda, #3502]
815
+ - Set a default Redis client identifier for debugging [#3516]
816
+ - Fix "Uninitialized constant" errors on startup with the delayed extensions [#3509]
817
+
818
+ 5.0.2
819
+ -----------
820
+
821
+ - fix broken release, thanks @nateberkopec
822
+
823
+ 5.0.1
824
+ -----------
825
+
826
+ - Fix incorrect server identity when daemonizing [jwilm, #3496]
827
+ - Work around error running Web UI against Redis Cluster [#3492]
828
+ - Remove core extensions, Sidekiq is now monkeypatch-free! [#3474]
829
+ - Reimplement Web UI's HTTP\_ACCEPT\_LANGUAGE parsing because the spec is utterly
830
+ incomprehensible for various edge cases. [johanlunds, natematykiewicz, #3449]
831
+ - Update `class_attribute` core extension to avoid warnings
832
+ - Expose `job_hash_context` from `Sidekiq::Logging` to support log customization
833
+
834
+ 5.0.0
835
+ -----------
836
+
837
+ - **BREAKING CHANGE** Job dispatch was refactored for safer integration with
838
+ Rails 5. The **Logging** and **RetryJobs** server middleware were removed and
839
+ functionality integrated directly into Sidekiq::Processor. These aren't
840
+ commonly used public APIs so this shouldn't impact most users.
841
+ ```
842
+ Sidekiq::Middleware::Server::RetryJobs -> Sidekiq::JobRetry
843
+ Sidekiq::Middleware::Server::Logging -> Sidekiq::JobLogger
844
+ ```
845
+ - Quieting Sidekiq is now done via the TSTP signal, the USR1 signal is deprecated.
846
+ - The `delay` extension APIs are no longer available by default, you
847
+ must opt into them.
848
+ - The Web UI is now BiDi and can render RTL languages like Arabic, Farsi and Hebrew.
849
+ - Rails 3.2 and Ruby 2.0 and 2.1 are no longer supported.
850
+ - The `SomeWorker.set(options)` API was re-written to avoid thread-local state. [#2152]
851
+ - Sidekiq Enterprise's encrypted jobs now display "[encrypted data]" in the Web UI instead
852
+ of random hex bytes.
853
+ - Please see the [5.0 Upgrade notes](docs/5.0-Upgrade.md) for more detail.
854
+
855
+ 4.2.10
4
856
  -----------
5
857
 
6
858
  - Scheduled jobs can now be moved directly to the Dead queue via API [#3390]
@@ -216,7 +1068,7 @@ Sidekiq::Queues.clear_all
216
1068
  - Sidekiq's internals have been completely overhauled for performance
217
1069
  and to remove dependencies. This has resulted in major speedups, as
218
1070
  [detailed on my blog](http://www.mikeperham.com/2015/10/14/optimizing-sidekiq/).
219
- - See the [4.0 upgrade notes](4.0-Upgrade.md) for more detail.
1071
+ - See the [4.0 upgrade notes](docs/4.0-Upgrade.md) for more detail.
220
1072
 
221
1073
  3.5.4
222
1074
  -----------
@@ -253,7 +1105,7 @@ Sidekiq::Queues.clear_all
253
1105
  - **FIX MEMORY LEAK** Under rare conditions, threads may leak [#2598, gazay]
254
1106
  - Add Ukrainian locale [#2561, elrakita]
255
1107
  - Disconnect and retry Redis operations if we see a READONLY error [#2550]
256
- - Add server middleware testing harness; see [wiki](https://github.com/mperham/sidekiq/wiki/Testing#testing-server-middleware) [#2534, ryansch]
1108
+ - Add server middleware testing harness; see [wiki](https://github.com/sidekiq/sidekiq/wiki/Testing#testing-server-middleware) [#2534, ryansch]
257
1109
 
258
1110
  3.5.0
259
1111
  -----------
@@ -271,7 +1123,7 @@ Sidekiq::Queues.clear_all
271
1123
  - Fix CSRF vulnerability in Web UI, thanks to Egor Homakov for
272
1124
  reporting. [#2422] If you are running the Web UI as a standalone Rack app,
273
1125
  ensure you have a [session middleware
274
- configured](https://github.com/mperham/sidekiq/wiki/Monitoring#standalone):
1126
+ configured](https://github.com/sidekiq/sidekiq/wiki/Monitoring#standalone):
275
1127
  ```ruby
276
1128
  use Rack::Session::Cookie, :secret => "some unique secret string here"
277
1129
  ```
@@ -483,7 +1335,7 @@ sidekiq_options :dead => false, :retry => 5
483
1335
  3.0.0
484
1336
  -----------
485
1337
 
486
- Please see [3.0-Upgrade.md](3.0-Upgrade.md) for more comprehensive upgrade notes.
1338
+ Please see [3.0-Upgrade.md](docs/3.0-Upgrade.md) for more comprehensive upgrade notes.
487
1339
 
488
1340
  - **Dead Job Queue** - jobs which run out of retries are now moved to a dead
489
1341
  job queue. These jobs must be retried manually or they will expire
@@ -527,7 +1379,7 @@ Sidekiq::Client.via(ConnectionPool.new { Redis.new }) do
527
1379
  end
528
1380
  ```
529
1381
  **Sharding support does require a breaking change to client-side
530
- middleware, see 3.0-Upgrade.md.**
1382
+ middleware, see docs/3.0-Upgrade.md.**
531
1383
  - New Chinese, Greek, Swedish and Czech translations for the Web UI.
532
1384
  - Updated most languages translations for the new UI features.
533
1385
  - **Remove official Capistrano integration** - this integration has been
@@ -655,7 +1507,7 @@ middleware, see 3.0-Upgrade.md.**
655
1507
  appear to be doing any work. [#1194]
656
1508
  - Sidekiq's testing behavior is now dynamic. You can choose between
657
1509
  `inline` and `fake` behavior in your tests. See
658
- [Testing](https://github.com/mperham/sidekiq/wiki/Testing) for detail. [#1193]
1510
+ [Testing](https://github.com/sidekiq/sidekiq/wiki/Testing) for detail. [#1193]
659
1511
  - The Retries table has a new column for the error message.
660
1512
  - The Web UI topbar now contains the status and live poll button.
661
1513
  - Orphaned worker records are now auto-vacuumed when you visit the