sidekiq 0.10.0 → 7.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. checksums.yaml +7 -0
  2. data/Changes.md +2047 -0
  3. data/LICENSE.txt +9 -0
  4. data/README.md +73 -27
  5. data/bin/sidekiq +25 -9
  6. data/bin/sidekiqload +247 -0
  7. data/bin/sidekiqmon +11 -0
  8. data/lib/generators/sidekiq/job_generator.rb +57 -0
  9. data/lib/generators/sidekiq/templates/job.rb.erb +9 -0
  10. data/lib/generators/sidekiq/templates/job_spec.rb.erb +6 -0
  11. data/lib/generators/sidekiq/templates/job_test.rb.erb +8 -0
  12. data/lib/sidekiq/api.rb +1145 -0
  13. data/lib/sidekiq/capsule.rb +127 -0
  14. data/lib/sidekiq/cli.rb +348 -109
  15. data/lib/sidekiq/client.rb +241 -41
  16. data/lib/sidekiq/component.rb +68 -0
  17. data/lib/sidekiq/config.rb +287 -0
  18. data/lib/sidekiq/deploy.rb +62 -0
  19. data/lib/sidekiq/embedded.rb +61 -0
  20. data/lib/sidekiq/fetch.rb +88 -0
  21. data/lib/sidekiq/job.rb +374 -0
  22. data/lib/sidekiq/job_logger.rb +51 -0
  23. data/lib/sidekiq/job_retry.rb +300 -0
  24. data/lib/sidekiq/job_util.rb +107 -0
  25. data/lib/sidekiq/launcher.rb +271 -0
  26. data/lib/sidekiq/logger.rb +131 -0
  27. data/lib/sidekiq/manager.rb +96 -103
  28. data/lib/sidekiq/metrics/query.rb +153 -0
  29. data/lib/sidekiq/metrics/shared.rb +95 -0
  30. data/lib/sidekiq/metrics/tracking.rb +136 -0
  31. data/lib/sidekiq/middleware/chain.rb +149 -38
  32. data/lib/sidekiq/middleware/current_attributes.rb +95 -0
  33. data/lib/sidekiq/middleware/i18n.rb +42 -0
  34. data/lib/sidekiq/middleware/modules.rb +21 -0
  35. data/lib/sidekiq/monitor.rb +146 -0
  36. data/lib/sidekiq/paginator.rb +55 -0
  37. data/lib/sidekiq/processor.rb +246 -61
  38. data/lib/sidekiq/rails.rb +60 -13
  39. data/lib/sidekiq/redis_client_adapter.rb +95 -0
  40. data/lib/sidekiq/redis_connection.rb +68 -15
  41. data/lib/sidekiq/ring_buffer.rb +29 -0
  42. data/lib/sidekiq/scheduled.rb +236 -0
  43. data/lib/sidekiq/sd_notify.rb +149 -0
  44. data/lib/sidekiq/systemd.rb +24 -0
  45. data/lib/sidekiq/testing/inline.rb +30 -0
  46. data/lib/sidekiq/testing.rb +304 -10
  47. data/lib/sidekiq/transaction_aware_client.rb +44 -0
  48. data/lib/sidekiq/version.rb +4 -1
  49. data/lib/sidekiq/web/action.rb +93 -0
  50. data/lib/sidekiq/web/application.rb +447 -0
  51. data/lib/sidekiq/web/csrf_protection.rb +180 -0
  52. data/lib/sidekiq/web/helpers.rb +370 -0
  53. data/lib/sidekiq/web/router.rb +104 -0
  54. data/lib/sidekiq/web.rb +143 -74
  55. data/lib/sidekiq/worker_compatibility_alias.rb +13 -0
  56. data/lib/sidekiq.rb +120 -73
  57. data/sidekiq.gemspec +26 -23
  58. data/web/assets/images/apple-touch-icon.png +0 -0
  59. data/web/assets/images/favicon.ico +0 -0
  60. data/web/assets/images/logo.png +0 -0
  61. data/web/assets/images/status.png +0 -0
  62. data/web/assets/javascripts/application.js +162 -3
  63. data/web/assets/javascripts/base-charts.js +106 -0
  64. data/web/assets/javascripts/chart.min.js +13 -0
  65. data/web/assets/javascripts/chartjs-plugin-annotation.min.js +7 -0
  66. data/web/assets/javascripts/dashboard-charts.js +168 -0
  67. data/web/assets/javascripts/dashboard.js +59 -0
  68. data/web/assets/javascripts/metrics.js +264 -0
  69. data/web/assets/stylesheets/application-dark.css +147 -0
  70. data/web/assets/stylesheets/application-rtl.css +153 -0
  71. data/web/assets/stylesheets/application.css +720 -7
  72. data/web/assets/stylesheets/bootstrap-rtl.min.css +9 -0
  73. data/web/assets/stylesheets/bootstrap.css +5 -0
  74. data/web/locales/ar.yml +87 -0
  75. data/web/locales/cs.yml +78 -0
  76. data/web/locales/da.yml +75 -0
  77. data/web/locales/de.yml +81 -0
  78. data/web/locales/el.yml +87 -0
  79. data/web/locales/en.yml +101 -0
  80. data/web/locales/es.yml +86 -0
  81. data/web/locales/fa.yml +80 -0
  82. data/web/locales/fr.yml +99 -0
  83. data/web/locales/gd.yml +99 -0
  84. data/web/locales/he.yml +80 -0
  85. data/web/locales/hi.yml +75 -0
  86. data/web/locales/it.yml +69 -0
  87. data/web/locales/ja.yml +91 -0
  88. data/web/locales/ko.yml +68 -0
  89. data/web/locales/lt.yml +83 -0
  90. data/web/locales/nb.yml +77 -0
  91. data/web/locales/nl.yml +68 -0
  92. data/web/locales/pl.yml +59 -0
  93. data/web/locales/pt-br.yml +96 -0
  94. data/web/locales/pt.yml +67 -0
  95. data/web/locales/ru.yml +83 -0
  96. data/web/locales/sv.yml +68 -0
  97. data/web/locales/ta.yml +75 -0
  98. data/web/locales/uk.yml +77 -0
  99. data/web/locales/ur.yml +80 -0
  100. data/web/locales/vi.yml +83 -0
  101. data/web/locales/zh-cn.yml +95 -0
  102. data/web/locales/zh-tw.yml +102 -0
  103. data/web/views/_footer.erb +23 -0
  104. data/web/views/_job_info.erb +105 -0
  105. data/web/views/_metrics_period_select.erb +12 -0
  106. data/web/views/_nav.erb +52 -0
  107. data/web/views/_paging.erb +25 -0
  108. data/web/views/_poll_link.erb +4 -0
  109. data/web/views/_status.erb +4 -0
  110. data/web/views/_summary.erb +40 -0
  111. data/web/views/busy.erb +148 -0
  112. data/web/views/dashboard.erb +115 -0
  113. data/web/views/dead.erb +34 -0
  114. data/web/views/filtering.erb +7 -0
  115. data/web/views/layout.erb +42 -0
  116. data/web/views/metrics.erb +82 -0
  117. data/web/views/metrics_for_job.erb +68 -0
  118. data/web/views/morgue.erb +74 -0
  119. data/web/views/queue.erb +55 -0
  120. data/web/views/queues.erb +40 -0
  121. data/web/views/retries.erb +79 -0
  122. data/web/views/retry.erb +34 -0
  123. data/web/views/scheduled.erb +56 -0
  124. data/web/views/scheduled_job_info.erb +8 -0
  125. metadata +159 -237
  126. data/.gitignore +0 -6
  127. data/.rvmrc +0 -4
  128. data/COMM-LICENSE +0 -75
  129. data/Gemfile +0 -10
  130. data/LICENSE +0 -22
  131. data/Rakefile +0 -9
  132. data/TODO.md +0 -1
  133. data/bin/client +0 -7
  134. data/bin/sidekiqctl +0 -43
  135. data/config.ru +0 -8
  136. data/examples/chef/cookbooks/sidekiq/README.rdoc +0 -11
  137. data/examples/chef/cookbooks/sidekiq/recipes/default.rb +0 -55
  138. data/examples/chef/cookbooks/sidekiq/templates/default/monitrc.conf.erb +0 -8
  139. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.erb +0 -219
  140. data/examples/chef/cookbooks/sidekiq/templates/default/sidekiq.yml.erb +0 -22
  141. data/examples/config.yml +0 -9
  142. data/examples/monitrc.conf +0 -6
  143. data/examples/por.rb +0 -27
  144. data/examples/scheduling.rb +0 -37
  145. data/examples/sinkiq.rb +0 -57
  146. data/examples/web-ui.png +0 -0
  147. data/lib/sidekiq/capistrano.rb +0 -32
  148. data/lib/sidekiq/extensions/action_mailer.rb +0 -26
  149. data/lib/sidekiq/extensions/active_record.rb +0 -27
  150. data/lib/sidekiq/extensions/generic_proxy.rb +0 -21
  151. data/lib/sidekiq/middleware/client/unique_jobs.rb +0 -32
  152. data/lib/sidekiq/middleware/server/active_record.rb +0 -13
  153. data/lib/sidekiq/middleware/server/exception_handler.rb +0 -38
  154. data/lib/sidekiq/middleware/server/failure_jobs.rb +0 -24
  155. data/lib/sidekiq/middleware/server/logging.rb +0 -27
  156. data/lib/sidekiq/middleware/server/retry_jobs.rb +0 -59
  157. data/lib/sidekiq/middleware/server/unique_jobs.rb +0 -15
  158. data/lib/sidekiq/retry.rb +0 -57
  159. data/lib/sidekiq/util.rb +0 -61
  160. data/lib/sidekiq/worker.rb +0 -37
  161. data/myapp/.gitignore +0 -15
  162. data/myapp/Capfile +0 -5
  163. data/myapp/Gemfile +0 -19
  164. data/myapp/Gemfile.lock +0 -143
  165. data/myapp/Rakefile +0 -7
  166. data/myapp/app/controllers/application_controller.rb +0 -3
  167. data/myapp/app/controllers/work_controller.rb +0 -38
  168. data/myapp/app/helpers/application_helper.rb +0 -2
  169. data/myapp/app/mailers/.gitkeep +0 -0
  170. data/myapp/app/mailers/user_mailer.rb +0 -9
  171. data/myapp/app/models/.gitkeep +0 -0
  172. data/myapp/app/models/post.rb +0 -5
  173. data/myapp/app/views/layouts/application.html.erb +0 -14
  174. data/myapp/app/views/user_mailer/greetings.html.erb +0 -3
  175. data/myapp/app/views/work/index.html.erb +0 -1
  176. data/myapp/app/workers/hard_worker.rb +0 -9
  177. data/myapp/config/application.rb +0 -59
  178. data/myapp/config/boot.rb +0 -6
  179. data/myapp/config/database.yml +0 -25
  180. data/myapp/config/deploy.rb +0 -15
  181. data/myapp/config/environment.rb +0 -5
  182. data/myapp/config/environments/development.rb +0 -38
  183. data/myapp/config/environments/production.rb +0 -67
  184. data/myapp/config/environments/test.rb +0 -37
  185. data/myapp/config/initializers/backtrace_silencers.rb +0 -7
  186. data/myapp/config/initializers/inflections.rb +0 -15
  187. data/myapp/config/initializers/mime_types.rb +0 -5
  188. data/myapp/config/initializers/secret_token.rb +0 -7
  189. data/myapp/config/initializers/session_store.rb +0 -8
  190. data/myapp/config/initializers/sidekiq.rb +0 -6
  191. data/myapp/config/initializers/wrap_parameters.rb +0 -14
  192. data/myapp/config/locales/en.yml +0 -5
  193. data/myapp/config/routes.rb +0 -10
  194. data/myapp/config.ru +0 -4
  195. data/myapp/db/migrate/20120123214055_create_posts.rb +0 -10
  196. data/myapp/db/seeds.rb +0 -7
  197. data/myapp/lib/assets/.gitkeep +0 -0
  198. data/myapp/lib/tasks/.gitkeep +0 -0
  199. data/myapp/log/.gitkeep +0 -0
  200. data/myapp/script/rails +0 -6
  201. data/test/config.yml +0 -9
  202. data/test/fake_env.rb +0 -0
  203. data/test/helper.rb +0 -15
  204. data/test/test_cli.rb +0 -168
  205. data/test/test_client.rb +0 -105
  206. data/test/test_extensions.rb +0 -68
  207. data/test/test_manager.rb +0 -43
  208. data/test/test_middleware.rb +0 -92
  209. data/test/test_processor.rb +0 -32
  210. data/test/test_retry.rb +0 -83
  211. data/test/test_stats.rb +0 -78
  212. data/test/test_testing.rb +0 -65
  213. data/test/test_web.rb +0 -61
  214. data/web/assets/images/bootstrap/glyphicons-halflings-white.png +0 -0
  215. data/web/assets/images/bootstrap/glyphicons-halflings.png +0 -0
  216. data/web/assets/javascripts/vendor/bootstrap/bootstrap-alert.js +0 -91
  217. data/web/assets/javascripts/vendor/bootstrap/bootstrap-button.js +0 -98
  218. data/web/assets/javascripts/vendor/bootstrap/bootstrap-carousel.js +0 -154
  219. data/web/assets/javascripts/vendor/bootstrap/bootstrap-collapse.js +0 -136
  220. data/web/assets/javascripts/vendor/bootstrap/bootstrap-dropdown.js +0 -92
  221. data/web/assets/javascripts/vendor/bootstrap/bootstrap-modal.js +0 -210
  222. data/web/assets/javascripts/vendor/bootstrap/bootstrap-popover.js +0 -95
  223. data/web/assets/javascripts/vendor/bootstrap/bootstrap-scrollspy.js +0 -125
  224. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tab.js +0 -130
  225. data/web/assets/javascripts/vendor/bootstrap/bootstrap-tooltip.js +0 -270
  226. data/web/assets/javascripts/vendor/bootstrap/bootstrap-transition.js +0 -51
  227. data/web/assets/javascripts/vendor/bootstrap/bootstrap-typeahead.js +0 -271
  228. data/web/assets/javascripts/vendor/bootstrap.js +0 -12
  229. data/web/assets/javascripts/vendor/jquery.js +0 -9266
  230. data/web/assets/stylesheets/vendor/bootstrap-responsive.css +0 -567
  231. data/web/assets/stylesheets/vendor/bootstrap.css +0 -3365
  232. data/web/views/index.slim +0 -62
  233. data/web/views/layout.slim +0 -24
  234. data/web/views/queue.slim +0 -11
data/Changes.md CHANGED
@@ -1,3 +1,2050 @@
1
+ # Sidekiq Changes
2
+
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.1.6
6
+ ----------
7
+
8
+ - The block forms of testing modes (inline, fake) are now thread-safe so you can have
9
+ a multithreaded test suite which uses different modes for different tests. [#6069]
10
+ - Fix breakage with non-Proc error handlers [#6065]
11
+
12
+ 7.1.5
13
+ ----------
14
+
15
+ - **FEATURE**: Job filtering within the Web UI. This feature has been open
16
+ sourced from Sidekiq Pro. [#6052]
17
+ - **API CHANGE** Error handlers now take three arguments `->(ex, context, config)`.
18
+ The previous calling convention will work until Sidekiq 8.0 but will print
19
+ out a deprecation warning. [#6051]
20
+ - Fix issue with the `batch_size` and `at` options in `S::Client.push_bulk` [#6040]
21
+ - Fix inline testing firing batch callbacks early [#6057]
22
+ - Use new log broadcast API in Rails 7.1 [#6054]
23
+ - Crash if user tries to use RESP2 `protocol: 2` [#6061]
24
+
25
+ 7.1.4
26
+ ----------
27
+
28
+ - Fix empty `retry_for` logic [#6035]
29
+
30
+ 7.1.3
31
+ ----------
32
+
33
+ - Add `sidekiq_options retry_for: 48.hours` to allow time-based retry windows [#6029]
34
+ - Support sidekiq_retry_in and sidekiq_retries_exhausted_block in ActiveJobs (#5994)
35
+ - Lowercase all Rack headers for Rack 3.0 [#5951]
36
+ - Validate Sidekiq::Web page refresh delay to avoid potential DoS,
37
+ CVE-2023-26141, thanks for reporting Keegan!
38
+
39
+ 7.1.2
40
+ ----------
41
+
42
+ - Mark Web UI assets as private so CDNs won't cache them [#5936]
43
+ - Fix stackoverflow when using Oj and the JSON log formatter [#5920]
44
+ - Remove spurious `enqueued_at` from scheduled ActiveJobs [#5937]
45
+
46
+ 7.1.1
47
+ ----------
48
+
49
+ - Support multiple CurrentAttributes [#5904]
50
+ - Speed up latency fetch with large queues on Redis <7 [#5910]
51
+ - Allow a larger default client pool [#5886]
52
+ - Ensure Sidekiq.options[:environment] == RAILS_ENV [#5932]
53
+
54
+ 7.1.0
55
+ ----------
56
+
57
+ - Improve display of ActiveJob arguments in Web UI [#5825, cover]
58
+ - Update `push_bulk` to push `batch_size` jobs at a time and allow laziness [#5827, fatkodima]
59
+ This allows Sidekiq::Client to push unlimited jobs as long as it has enough memory for the batch_size.
60
+ - Update `perform_bulk` to use `push_bulk` internally.
61
+ - Change return value of `push_bulk` to map 1-to-1 with arguments.
62
+ If you call `push_bulk(args: [[1], [2], [3]])`, you will now always get
63
+ an array of 3 values as the result: `["jid1", nil, "jid3"]` where nil means
64
+ that particular job did not push successfully (possibly due to middleware
65
+ stopping it). Previously nil values were removed so it was impossible to tell
66
+ which jobs pushed successfully and which did not.
67
+ - Migrate away from all deprecated Redis commands [#5788]
68
+ Sidekiq will now print a warning if you use one of those deprecated commands.
69
+ - Prefix all Sidekiq thread names [#5872]
70
+
71
+ 7.0.9
72
+ ----------
73
+
74
+ - Restore confirmation dialogs in Web UI [#5881, shevaun]
75
+ - Increase fetch timeout to minimize ReadTimeoutError [#5874]
76
+ - Reverse histogram tooltip ordering [#5868]
77
+ - Add Scottish Gaelic (gd) locale [#5867, GunChleoc]
78
+
79
+ 7.0.8
80
+ ----------
81
+
82
+ - **SECURITY** Sanitize `period` input parameter on Metrics pages.
83
+ Specially crafted values can lead to XSS. This functionality
84
+ was introduced in 7.0.4. Thank you to spercex @ huntr.dev [#5694]
85
+ - Add job hash as 3rd parameter to the `sidekiq_retry_in` block.
86
+
87
+ 7.0.7
88
+ ----------
89
+
90
+ - Fix redis-client API usage which could result in stuck Redis
91
+ connections [#5823]
92
+ - Fix AS::Duration with `sidekiq_retry_in` [#5806]
93
+ - Restore dumping config options on startup with `-v` [#5822]
94
+
95
+ 7.0.5,7.0.6
96
+ ----------
97
+
98
+ - More context for debugging json unsafe errors [#5787]
99
+
100
+ 7.0.4
101
+ ----------
102
+
103
+ - Performance and memory optimizations [#5768, fatkodima]
104
+ - Add 1-8 hour period selector to Metrics pages [#5694]
105
+ - Fix process display with `sidekiqmon` [#5733]
106
+
107
+ 7.0.3
108
+ ----------
109
+
110
+ - Don't warn about memory policy on Redis Enterprise [#5712]
111
+ - Don't allow Quiet/Stop on embedded Sidekiq instances [#5716]
112
+ - Fix `size: X` for configuring the default Redis pool size [#5702]
113
+ - Improve the display of queue weights on Busy page [#5642]
114
+ - Freeze CurrentAttributes on a job once initially set [#5692]
115
+
116
+ 7.0.2
117
+ ----------
118
+
119
+ - Improve compatibility with custom loggers [#5673]
120
+ - Add queue weights on Busy page [#5640]
121
+ - Add BID link on job_info page if job is part of a Batch [#5623]
122
+ - Allow custom extensions to add rows/links within Job detail pages [#5624]
123
+ ```ruby
124
+ Sidekiq::Web.custom_job_info_rows << AddAccountLink.new
125
+
126
+ class AddAccountLink
127
+ include CGI::Util
128
+ def add_pair(job)
129
+ # yield a (name, value) pair
130
+ # You can include HTML tags and CSS, Sidekiq does not do any
131
+ # escaping so beware user data injection! Note how we use CGI's
132
+ # `h` escape helper.
133
+ aid = job["account_id"]
134
+ yield "Account", "<a href='/accounts/#{h aid}'>#{h aid}</a>" if aid
135
+ end
136
+ end
137
+ ```
138
+
139
+ 7.0.1
140
+ ----------
141
+
142
+ - Allow an embedding process to reuse its own heartbeat thread
143
+ - Update zh-cn localization
144
+
145
+ 7.0.0
146
+ ----------
147
+
148
+ - Embedded mode!
149
+ - Capsules!!
150
+ - Job Execution metrics!!!
151
+ - See `docs/7.0-Upgrade.md` for release notes
152
+
153
+ 6.5.9
154
+ ----------
155
+
156
+ - Ensure Sidekiq.options[:environment] == RAILS_ENV [#5932]
157
+
158
+ 6.5.8
159
+ ----------
160
+
161
+ - Fail if using a bad version of scout_apm [#5616]
162
+ - Add pagination to Busy page [#5556]
163
+ - Speed up WorkSet#each [#5559]
164
+ - Adjust CurrentAttributes to work with the String class name so we aren't referencing the Class within a Rails initializer [#5536]
165
+
166
+ 6.5.7
167
+ ----------
168
+
169
+ - Updates for JA and ZH locales
170
+ - Further optimizations for scheduled polling [#5513]
171
+
172
+ 6.5.6
173
+ ----------
174
+
175
+ - Fix deprecation warnings with redis-rb 4.8.0 [#5484]
176
+ - Lock redis-rb to < 5.0 as we are moving to redis-client in Sidekiq 7.0
177
+
178
+ 6.5.5
179
+ ----------
180
+
181
+ - Fix require issue with job_retry.rb [#5462]
182
+ - Improve Sidekiq::Web compatibility with Rack 3.x
183
+
184
+ 6.5.4
185
+ ----------
186
+
187
+ - Fix invalid code on Ruby 2.5 [#5460]
188
+ - Fix further metrics dependency issues [#5457]
189
+
190
+ 6.5.3
191
+ ----------
192
+
193
+ - Don't require metrics code without explicit opt-in [#5456]
194
+
195
+ 6.5.2
196
+ ----------
197
+
198
+ - [Job Metrics are under active development, help wanted!](https://github.com/sidekiq/sidekiq/wiki/Metrics#contributing) **BETA**
199
+ - Add `Context` column on queue page which shows any CurrentAttributes [#5450]
200
+ - `sidekiq_retry_in` may now return `:discard` or `:kill` to dynamically stop job retries [#5406]
201
+ - Smarter sorting of processes in /busy Web UI [#5398]
202
+ - Fix broken hamburger menu in mobile UI [#5428]
203
+ - Require redis-rb 4.5.0. Note that Sidekiq will break if you use the
204
+ [`Redis.exists_returns_integer = false`](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md#450) flag. [#5394]
205
+
206
+ 6.5.1
207
+ ----------
208
+
209
+ - Fix `push_bulk` breakage [#5387]
210
+
211
+ 6.5.0
212
+ ---------
213
+
214
+ - Substantial refactoring of Sidekiq server internals, part of a larger effort
215
+ 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).
216
+ - **Add beta support for the `redis-client` gem**. This will become the default Redis driver in Sidekiq 7.0. [#5298]
217
+ Read more: https://github.com/sidekiq/sidekiq/wiki/Using-redis-client
218
+ - **Add beta support for DB transaction-aware client** [#5291]
219
+ Add this line to your initializer and any jobs created during a transaction
220
+ will only be pushed to Redis **after the transaction commits**. You will need to add the
221
+ `after_commit_everywhere` gem to your Gemfile.
222
+ ```ruby
223
+ Sidekiq.transactional_push!
224
+ ```
225
+ This feature does not have a lot of production usage yet; please try it out and let us
226
+ know if you have any issues. It will be fully supported in Sidekiq 7.0 or removed if it
227
+ proves problematic.
228
+ - Fix regression with middleware arguments [#5312]
229
+
230
+ 6.4.2
231
+ ---------
232
+
233
+ - Strict argument checking now runs after client-side middleware [#5246]
234
+ - Fix page events with live polling [#5184]
235
+ - Many under-the-hood changes to remove all usage of the term "worker"
236
+ from the Sidekiq codebase and APIs. This mostly involved RDoc and local
237
+ variable names but a few constants and public APIs were changed. The old
238
+ APIs will be removed in Sidekiq 7.0.
239
+ ```
240
+ Sidekiq::DEFAULT_WORKER_OPTIONS -> Sidekiq.default_job_options
241
+ Sidekiq.default_worker_options -> Sidekiq.default_job_options
242
+ Sidekiq::Queues["default"].jobs_by_worker(HardJob) -> Sidekiq::Queues["default"].jobs_by_class(HardJob)
243
+ ```
244
+
245
+ 6.4.1
246
+ ---------
247
+
248
+ - Fix pipeline/multi deprecations in redis-rb 4.6
249
+ - Fix sidekiq.yml YAML load errors on Ruby 3.1 [#5141]
250
+ - Sharding support for `perform_bulk` [#5129]
251
+ - Refactor job logger for SPEEEEEEED
252
+
253
+ 6.4.0
254
+ ---------
255
+
256
+ - **SECURITY**: Validate input to avoid possible DoS in Web UI.
257
+ - Add **strict argument checking** [#5071]
258
+ Sidekiq will now log a warning if JSON-unsafe arguments are passed to `perform_async`.
259
+ Add `Sidekiq.strict_args!(false)` to your initializer to disable this warning.
260
+ This warning will switch to an exception in Sidekiq 7.0.
261
+ - Note that Delayed Extensions will be removed in Sidekiq 7.0 [#5076]
262
+ - Add `perform_{inline,sync}` in Sidekiq::Job to run a job synchronously [#5061, hasan-ally]
263
+ ```ruby
264
+ SomeJob.perform_async(args...)
265
+ SomeJob.perform_sync(args...)
266
+ SomeJob.perform_inline(args...)
267
+ ```
268
+ You can also dynamically redirect a job to run synchronously:
269
+ ```ruby
270
+ SomeJob.set("sync": true).perform_async(args...) # will run via perform_inline
271
+ ```
272
+ - Replace Sidekiq::Worker `app/workers` generator with Sidekiq::Job `app/sidekiq` generator [#5055]
273
+ ```
274
+ bin/rails generate sidekiq:job ProcessOrderJob
275
+ ```
276
+ - Fix job retries losing CurrentAttributes [#5090]
277
+ - Tweak shutdown to give long-running threads time to cleanup [#5095]
278
+
279
+ 6.3.1
280
+ ---------
281
+
282
+ - Fix keyword arguments error with CurrentAttributes on Ruby 3.0 [#5048]
283
+
284
+ 6.3.0
285
+ ---------
286
+
287
+ - **BREAK**: The Web UI has been refactored to remove jQuery. Any UI extensions
288
+ which use jQuery will break.
289
+ - **FEATURE**: Sidekiq.logger has been enhanced so any `Rails.logger`
290
+ output in jobs now shows up in the Sidekiq console. Remove any logger
291
+ hacks in your initializer and see if it Just Works™ now. [#5021]
292
+ - **FEATURE**: Add `Sidekiq::Job` alias for `Sidekiq::Worker`, to better
293
+ reflect industry standard terminology. You can now do this:
294
+ ```ruby
295
+ class MyJob
296
+ include Sidekiq::Job
297
+ sidekiq_options ...
298
+ def perform(args)
299
+ end
300
+ end
301
+ ```
302
+ - **FEATURE**: Support for serializing ActiveSupport::CurrentAttributes into each job. [#4982]
303
+ ```ruby
304
+ # config/initializers/sidekiq.rb
305
+ require "sidekiq/middleware/current_attributes"
306
+ Sidekiq::CurrentAttributes.persist(Myapp::Current) # Your AS::CurrentAttributes singleton
307
+ ```
308
+ - **FEATURE**: Add `Sidekiq::Worker.perform_bulk` for enqueuing jobs in bulk,
309
+ similar to `Sidekiq::Client.push_bulk` [#5042]
310
+ ```ruby
311
+ MyJob.perform_bulk([[1], [2], [3]])
312
+ ```
313
+ - Implement `queue_as`, `wait` and `wait_until` for ActiveJob compatibility [#5003]
314
+ - Scheduler now uses Lua to reduce Redis load and network roundtrips [#5044]
315
+ - Retry Redis operation if we get an `UNBLOCKED` Redis error [#4985]
316
+ - Run existing signal traps, if any, before running Sidekiq's trap [#4991]
317
+ - Fix fetch bug when using weighted queues which caused Sidekiq to stop
318
+ processing queues randomly [#5031]
319
+
320
+ 6.2.2
321
+ ---------
322
+
323
+ - Reduce retry jitter, add jitter to `sidekiq_retry_in` values [#4957]
324
+ - Minimize scheduler load on Redis at scale [#4882]
325
+ - Improve logging of delay jobs [#4904, BuonOno]
326
+ - Minor CSS improvements for buttons and tables, design PRs always welcome!
327
+ - Tweak Web UI `Cache-Control` header [#4966]
328
+ - Rename internal API class `Sidekiq::Job` to `Sidekiq::JobRecord` [#4955]
329
+
330
+ 6.2.1
331
+ ---------
332
+
333
+ - Update RTT warning logic to handle transient RTT spikes [#4851]
334
+ - Fix very low priority CVE on unescaped queue name [#4852]
335
+ - Add note about sessions and Rails apps in API mode
336
+
337
+ 6.2.0
338
+ ---------
339
+
340
+ - Store Redis RTT and log if poor [#4824]
341
+ - Add process/thread stats to Busy page [#4806]
342
+ - Improve Web UI on mobile devices [#4840]
343
+ - **Refactor Web UI session usage** [#4804]
344
+ Numerous people have hit "Forbidden" errors and struggled with Sidekiq's
345
+ Web UI session requirement. If you have code in your initializer for
346
+ Web sessions, it's quite possible it will need to be removed. Here's
347
+ an overview:
348
+ ```
349
+ Sidekiq::Web needs a valid Rack session for CSRF protection. If this is a Rails app,
350
+ make sure you mount Sidekiq::Web *inside* your routes in `config/routes.rb` so
351
+ Sidekiq can reuse the Rails session:
352
+
353
+ Rails.application.routes.draw do
354
+ mount Sidekiq::Web => "/sidekiq"
355
+ ....
356
+ end
357
+
358
+ If this is a bare Rack app, use a session middleware before Sidekiq::Web:
359
+
360
+ # first, use IRB to create a shared secret key for sessions and commit it
361
+ require 'securerandom'; File.open(".session.key", "w") {|f| f.write(SecureRandom.hex(32)) }
362
+
363
+ # now, update your Rack app to include the secret with a session cookie middleware
364
+ use Rack::Session::Cookie, secret: File.read(".session.key"), same_site: true, max_age: 86400
365
+ run Sidekiq::Web
366
+
367
+ If this is a Rails app in API mode, you need to enable sessions.
368
+
369
+ https://guides.rubyonrails.org/api_app.html#using-session-middlewares
370
+ ```
371
+
372
+ 6.1.3
373
+ ---------
374
+
375
+ - Warn if Redis is configured to evict data under memory pressure [#4752]
376
+ - Add process RSS on the Busy page [#4717]
377
+
378
+ 6.1.2
379
+ ---------
380
+
381
+ - Improve readability in dark mode Web UI [#4674]
382
+ - Fix Web UI crash with corrupt session [#4672]
383
+ - Allow middleware to yield arguments [#4673, @eugeneius]
384
+ - Migrate CI from CircleCI to GitHub Actions [#4677]
385
+
386
+ 6.1.1
387
+ ---------
388
+
389
+ - Jobs are now sorted by age in the Busy Workers table. [#4641]
390
+ - Fix "check all" JS logic in Web UI [#4619]
391
+
392
+ 6.1.0
393
+ ---------
394
+
395
+ - Web UI - Dark Mode fixes [#4543, natematykiewicz]
396
+ - Ensure `Rack::ContentLength` is loaded as middleware for correct Web UI responses [#4541]
397
+ - Avoid exception dumping SSL store in Redis connection logging [#4532]
398
+ - Better error messages in Sidekiq::Client [#4549]
399
+ - Remove rack-protection, reimplement CSRF protection [#4588]
400
+ - Require redis-rb 4.2 [#4591]
401
+ - Update to jquery 1.12.4 [#4593]
402
+ - Refactor internal fetch logic and API [#4602]
403
+
404
+ 6.0.7
405
+ ---------
406
+
407
+ - Refactor systemd integration to work better with custom binaries [#4511]
408
+ - Don't connect to Redis at process exit if not needed [#4502]
409
+ - Remove Redis connection naming [#4479]
410
+ - Fix Redis Sentinel password redaction [#4499]
411
+ - Add Vietnamese locale (vi) [#4528]
412
+
413
+ 6.0.6
414
+ ---------
415
+
416
+ - **Integrate with systemd's watchdog and notification features** [#4488]
417
+ Set `Type=notify` in [sidekiq.service](https://github.com/sidekiq/sidekiq/blob/4b8a8bd3ae42f6e48ae1fdaf95ed7d7af18ed8bb/examples/systemd/sidekiq.service#L30-L39). The integration works automatically.
418
+ - Use `setTimeout` rather than `setInterval` to avoid thundering herd [#4480]
419
+ - Fix edge case where a job can be pushed without a queue.
420
+ - Flush job stats at exit [#4498]
421
+ - Check RAILS_ENV before RACK_ENV [#4493]
422
+ - Add Lithuanian locale [#4476]
423
+
424
+ 6.0.5
425
+ ---------
426
+
427
+ - Fix broken Web UI response when using NewRelic and Rack 2.1.2+. [#4440]
428
+ - Update APIs to use `UNLINK`, not `DEL`. [#4449]
429
+ - Fix Ruby 2.7 warnings [#4412]
430
+ - Add support for `APP_ENV` [[95fa5d9]](https://github.com/sidekiq/sidekiq/commit/95fa5d90192148026e52ca2902f1b83c70858ce8)
431
+
432
+ 6.0.4
433
+ ---------
434
+
435
+ - Fix ActiveJob's `sidekiq_options` integration [#4404]
436
+ - Sidekiq Pro users will now see a Pause button next to each queue in
437
+ the Web UI, allowing them to pause queues manually [#4374, shayonj]
438
+ - Fix Sidekiq::Workers API unintentional change in 6.0.2 [#4387]
439
+
440
+
441
+ 6.0.3
442
+ ---------
443
+
444
+ - Fix `Sidekiq::Client.push_bulk` API which was erroneously putting
445
+ invalid `at` values in the job payloads [#4321]
446
+
447
+ 6.0.2
448
+ ---------
449
+
450
+ - Fix Sidekiq Enterprise's rolling restart functionality, broken by refactoring in 6.0.0. [#4334]
451
+ - More internal refactoring and performance tuning [fatkodima]
452
+
453
+ 6.0.1
454
+ ---------
455
+
456
+ - **Performance tuning**, Sidekiq should be 10-15% faster now [#4303, 4299,
457
+ 4269, fatkodima]
458
+ - **Dark Mode support in Web UI** (further design polish welcome!) [#4227, mperham,
459
+ fatkodima, silent-e]
460
+ - **Job-specific log levels**, allowing you to turn on debugging for
461
+ problematic workers. [fatkodima, #4287]
462
+ ```ruby
463
+ MyWorker.set(log_level: :debug).perform_async(...)
464
+ ```
465
+ - **Ad-hoc job tags**. You can tag your jobs with, e.g, subdomain, tenant, country,
466
+ locale, application, version, user/client, "alpha/beta/pro/ent", types of jobs,
467
+ teams/people responsible for jobs, additional metadata, etc.
468
+ Tags are shown on different pages with job listings. Sidekiq Pro users
469
+ can filter based on them [fatkodima, #4280]
470
+ ```ruby
471
+ class MyWorker
472
+ include Sidekiq::Worker
473
+ sidekiq_options tags: ['bank-ops', 'alpha']
474
+ ...
475
+ end
476
+ ```
477
+ - Fetch scheduled jobs in batches before pushing into specific queues.
478
+ This will decrease enqueueing time of scheduled jobs by a third. [fatkodima, #4273]
479
+ ```
480
+ ScheduledSet with 10,000 jobs
481
+ Before: 56.6 seconds
482
+ After: 39.2 seconds
483
+ ```
484
+ - Compress error backtraces before pushing into Redis, if you are
485
+ storing error backtraces, this will halve the size of your RetrySet
486
+ in Redis [fatkodima, #4272]
487
+ ```
488
+ RetrySet with 100,000 jobs
489
+ Before: 261 MB
490
+ After: 129 MB
491
+ ```
492
+ - Support display of ActiveJob 6.0 payloads in the Web UI [#4263]
493
+ - Add `SortedSet#scan` for pattern based scanning. For large sets this API will be **MUCH** faster
494
+ than standard iteration using each. [fatkodima, #4262]
495
+ ```ruby
496
+ Sidekiq::DeadSet.new.scan("UnreliableApi") do |job|
497
+ job.retry
498
+ end
499
+ ```
500
+ - Dramatically speed up SortedSet#find\_job(jid) by using Redis's ZSCAN
501
+ support, approx 10x faster. [fatkodima, #4259]
502
+ ```
503
+ zscan 0.179366 0.047727 0.227093 ( 1.161376)
504
+ enum 8.522311 0.419826 8.942137 ( 9.785079)
505
+ ```
506
+ - Respect rails' generators `test_framework` option and gracefully handle extra `worker` suffix on generator [fatkodima, #4256]
507
+ - Add ability to sort 'Enqueued' page on Web UI by position in the queue [fatkodima, #4248]
508
+ - Support `Client.push_bulk` with different delays [fatkodima, #4243]
509
+ ```ruby
510
+ Sidekiq::Client.push_bulk("class" => FooJob, "args" => [[1], [2]], "at" => [1.minute.from_now.to_f, 5.minutes.from_now.to_f])
511
+ ```
512
+ - Easier way to test enqueuing specific ActionMailer and ActiveRecord delayed jobs. Instead of manually
513
+ parsing embedded class, you can now test by fetching jobs for specific classes. [fatkodima, #4292]
514
+ ```ruby
515
+ assert_equal 1, Sidekiq::Extensions::DelayedMailer.jobs_for(FooMailer).size
516
+ ```
517
+ - Add `sidekiqmon` to gemspec executables [#4242]
518
+ - Gracefully handle `Sidekiq.logger = nil` [#4240]
519
+ - Inject Sidekiq::LogContext module if user-supplied logger does not include it [#4239]
520
+
521
+ 6.0
522
+ ---------
523
+
524
+ This release has major breaking changes. Read and test carefully in production.
525
+
526
+ - With Rails 6.0.2+, ActiveJobs can now use `sidekiq_options` directly to configure Sidekiq
527
+ features/internals like the retry subsystem. [#4213, pirj]
528
+ ```ruby
529
+ class MyJob < ActiveJob::Base
530
+ queue_as :myqueue
531
+ sidekiq_options retry: 10, backtrace: 20
532
+ def perform(...)
533
+ end
534
+ end
535
+ ```
536
+ - Logging has been redesigned to allow for pluggable log formatters:
537
+ ```ruby
538
+ Sidekiq.configure_server do |config|
539
+ config.log_formatter = Sidekiq::Logger::Formatters::JSON.new
540
+ end
541
+ ```
542
+ See the [Logging wiki page](https://github.com/sidekiq/sidekiq/wiki/Logging) for more details.
543
+ - **BREAKING CHANGE** Validate proper usage of the `REDIS_PROVIDER`
544
+ variable. This variable is meant to hold the name of the environment
545
+ variable which contains your Redis URL, so that you can switch Redis
546
+ providers quickly and easily with a single variable change. It is not
547
+ meant to hold the actual Redis URL itself. If you want to manually set
548
+ the Redis URL (not recommended as it implies you have no failover),
549
+ then you may set `REDIS_URL` directly. [#3969]
550
+ - **BREAKING CHANGE** Increase default shutdown timeout from 8 seconds
551
+ to 25 seconds. Both Heroku and ECS now use 30 second shutdown timeout
552
+ by default and we want Sidekiq to take advantage of this time. If you
553
+ have deployment scripts which depend on the old default timeout, use `-t 8` to
554
+ get the old behavior. [#3968]
555
+ - **BREAKING CHANGE** Remove the daemonization, logfile and pidfile
556
+ arguments to Sidekiq. Use a proper process supervisor (e.g. systemd or
557
+ foreman) to manage Sidekiq. See the Deployment wiki page for links to
558
+ more resources.
559
+ - Integrate the StandardRB code formatter to ensure consistent code
560
+ styling. [#4114, gearnode]
561
+
562
+ 5.2.10
563
+ ---------
564
+
565
+ - Backport fix for CVE-2022-23837.
566
+ - Migrate to `exists?` for redis-rb.
567
+ - Lock redis-rb to <4.6 to avoid deprecations.
568
+
569
+ 5.2.9
570
+ ---------
571
+
572
+ - Release Rack lock due to a cascade of CVEs. [#4566]
573
+ Pro-tip: don't lock Rack.
574
+
575
+ 5.2.8
576
+ ---------
577
+
578
+ - Lock to Rack 2.0.x to prevent future incompatibilities
579
+ - Fix invalid reference in `sidekiqctl`
580
+
581
+ 5.2.7
582
+ ---------
583
+
584
+ - Fix stale `enqueued_at` when retrying [#4149]
585
+ - Move build to [Circle CI](https://circleci.com/gh/mperham/sidekiq) [#4120]
586
+
587
+ 5.2.6
588
+ ---------
589
+
590
+ - Fix edge case where a job failure during Redis outage could result in a lost job [#4141]
591
+ - Better handling of malformed job arguments in payload [#4095]
592
+ - Restore bootstap's dropdown css component [#4099, urkle]
593
+ - Display human-friendly time diff for longer queue latencies [#4111, interlinked]
594
+ - Allow `Sidekiq::Worker#set` to be chained
595
+
596
+ 5.2.5
597
+ ---------
598
+
599
+ - Fix default usage of `config/sidekiq.yml` [#4077, Tensho]
600
+
601
+ 5.2.4
602
+ ---------
603
+
604
+ - Add warnings for various deprecations and changes coming in Sidekiq 6.0.
605
+ See the 6-0 branch. [#4056]
606
+ - Various improvements to the Sidekiq test suite and coverage [#4026, #4039, Tensho]
607
+
608
+ 5.2.3
609
+ ---------
610
+
611
+ - Warning message on invalid REDIS\_PROVIDER [#3970]
612
+ - Add `sidekiqctl status` command [#4003, dzunk]
613
+ - Update elapsed time calculatons to use monotonic clock [#3999]
614
+ - Fix a few issues with mobile Web UI styling [#3973, navied]
615
+ - Jobs with `retry: false` now go through the global `death_handlers`,
616
+ meaning you can take action on failed ephemeral jobs. [#3980, Benjamin-Dobell]
617
+ - Fix race condition in defining Workers. [#3997, mattbooks]
618
+
619
+ 5.2.2
620
+ ---------
621
+
622
+ - Raise error for duplicate queue names in config to avoid unexpected fetch algorithm change [#3911]
623
+ - Fix concurrency bug on JRuby [#3958, mattbooks]
624
+ - Add "Kill All" button to the retries page [#3938]
625
+
626
+ 5.2.1
627
+ -----------
628
+
629
+ - Fix concurrent modification error during heartbeat [#3921]
630
+
631
+ 5.2.0
632
+ -----------
633
+
634
+ - **Decrease default concurrency from 25 to 10** [#3892]
635
+ - Verify connection pool sizing upon startup [#3917]
636
+ - Smoother scheduling for large Sidekiq clusters [#3889]
637
+ - Switch Sidekiq::Testing impl from alias\_method to Module#prepend, for resiliency [#3852]
638
+ - Update Sidekiq APIs to use SCAN for scalability [#3848, ffiller]
639
+ - Remove concurrent-ruby gem dependency [#3830]
640
+ - Optimize Web UI's bootstrap.css [#3914]
641
+
642
+ 5.1.3
643
+ -----------
644
+
645
+ - Fix version comparison so Ruby 2.2.10 works. [#3808, nateberkopec]
646
+
647
+ 5.1.2
648
+ -----------
649
+
650
+ - Add link to docs in Web UI footer
651
+ - Fix crash on Ctrl-C in Windows [#3775, Bernica]
652
+ - Remove `freeze` calls on String constants. This is superfluous with Ruby
653
+ 2.3+ and `frozen_string_literal: true`. [#3759]
654
+ - Fix use of AR middleware outside of Rails [#3787]
655
+ - Sidekiq::Worker `sidekiq_retry_in` block can now return nil or 0 to use
656
+ the default backoff delay [#3796, dsalahutdinov]
657
+
658
+ 5.1.1
659
+ -----------
660
+
661
+ - Fix Web UI incompatibility with Redis 3.x gem [#3749]
662
+
663
+ 5.1.0
664
+ -----------
665
+
666
+ - **NEW** Global death handlers - called when your job exhausts all
667
+ retries and dies. Now you can take action when a job fails permanently. [#3721]
668
+ - **NEW** Enable ActiveRecord query cache within jobs by default [#3718, sobrinho]
669
+ This will prevent duplicate SELECTS; cache is cleared upon any UPDATE/INSERT/DELETE.
670
+ See the issue for how to bypass the cache or disable it completely.
671
+ - Scheduler timing is now more accurate, 15 -> 5 seconds [#3734]
672
+ - Exceptions during the :startup event will now kill the process [#3717]
673
+ - Make `Sidekiq::Client.via` reentrant [#3715]
674
+ - Fix use of Sidekiq logger outside of the server process [#3714]
675
+ - Tweak `constantize` to better match Rails class lookup. [#3701, caffeinated-tech]
676
+
677
+ 5.0.5
678
+ -----------
679
+
680
+ - Update gemspec to allow newer versions of the Redis gem [#3617]
681
+ - Refactor Worker.set so it can be memoized [#3602]
682
+ - Fix display of Redis URL in web footer, broken in 5.0.3 [#3560]
683
+ - Update `Sidekiq::Job#display_args` to avoid mutation [#3621]
684
+
685
+ 5.0.4
686
+ -----------
687
+
688
+ - Fix "slow startup" performance regression from 5.0.2. [#3525]
689
+ - Allow users to disable ID generation since some redis providers disable the CLIENT command. [#3521]
690
+
691
+ 5.0.3
692
+ -----------
693
+
694
+ - Fix overriding `class_attribute` core extension from ActiveSupport with Sidekiq one [PikachuEXE, #3499]
695
+ - Allow job logger to be overridden [AlfonsoUceda, #3502]
696
+ - Set a default Redis client identifier for debugging [#3516]
697
+ - Fix "Uninitialized constant" errors on startup with the delayed extensions [#3509]
698
+
699
+ 5.0.2
700
+ -----------
701
+
702
+ - fix broken release, thanks @nateberkopec
703
+
704
+ 5.0.1
705
+ -----------
706
+
707
+ - Fix incorrect server identity when daemonizing [jwilm, #3496]
708
+ - Work around error running Web UI against Redis Cluster [#3492]
709
+ - Remove core extensions, Sidekiq is now monkeypatch-free! [#3474]
710
+ - Reimplement Web UI's HTTP\_ACCEPT\_LANGUAGE parsing because the spec is utterly
711
+ incomprehensible for various edge cases. [johanlunds, natematykiewicz, #3449]
712
+ - Update `class_attribute` core extension to avoid warnings
713
+ - Expose `job_hash_context` from `Sidekiq::Logging` to support log customization
714
+
715
+ 5.0.0
716
+ -----------
717
+
718
+ - **BREAKING CHANGE** Job dispatch was refactored for safer integration with
719
+ Rails 5. The **Logging** and **RetryJobs** server middleware were removed and
720
+ functionality integrated directly into Sidekiq::Processor. These aren't
721
+ commonly used public APIs so this shouldn't impact most users.
722
+ ```
723
+ Sidekiq::Middleware::Server::RetryJobs -> Sidekiq::JobRetry
724
+ Sidekiq::Middleware::Server::Logging -> Sidekiq::JobLogger
725
+ ```
726
+ - Quieting Sidekiq is now done via the TSTP signal, the USR1 signal is deprecated.
727
+ - The `delay` extension APIs are no longer available by default, you
728
+ must opt into them.
729
+ - The Web UI is now BiDi and can render RTL languages like Arabic, Farsi and Hebrew.
730
+ - Rails 3.2 and Ruby 2.0 and 2.1 are no longer supported.
731
+ - The `SomeWorker.set(options)` API was re-written to avoid thread-local state. [#2152]
732
+ - Sidekiq Enterprise's encrypted jobs now display "[encrypted data]" in the Web UI instead
733
+ of random hex bytes.
734
+ - Please see the [5.0 Upgrade notes](docs/5.0-Upgrade.md) for more detail.
735
+
736
+ 4.2.10
737
+ -----------
738
+
739
+ - Scheduled jobs can now be moved directly to the Dead queue via API [#3390]
740
+ - Fix edge case leading to job duplication when using Sidekiq Pro's
741
+ reliability feature [#3388]
742
+ - Fix error class name display on retry page [#3348]
743
+ - More robust latency calculation [#3340]
744
+
745
+ 4.2.9
746
+ -----------
747
+
748
+ - Rollback [#3303] which broke Heroku Redis users [#3311]
749
+ - Add support for TSTP signal, for Sidekiq 5.0 forward compatibility. [#3302]
750
+
751
+ 4.2.8
752
+ -----------
753
+
754
+ - Fix rare edge case with Redis driver that can create duplicate jobs [#3303]
755
+ - Fix Rails 5 loading issue [#3275]
756
+ - Restore missing tooltips to timestamps in Web UI [#3310]
757
+ - Work on **Sidekiq 5.0** is now active! [#3301]
758
+
759
+ 4.2.7
760
+ -----------
761
+
762
+ - Add new integration testing to verify code loading and job execution
763
+ in development and production modes with Rails 4 and 5 [#3241]
764
+ - Fix delayed extensions in development mode [#3227, DarthSim]
765
+ - Use Worker's `retry` default if job payload does not have a retry
766
+ attribute [#3234, mlarraz]
767
+
768
+ 4.2.6
769
+ -----------
770
+
771
+ - Run Rails Executor when in production [#3221, eugeneius]
772
+
773
+ 4.2.5
774
+ -----------
775
+
776
+ - Re-enable eager loading of all code when running non-development Rails 5. [#3203]
777
+ - Better root URL handling for zany web servers [#3207]
778
+
779
+ 4.2.4
780
+ -----------
781
+
782
+ - Log errors coming from the Rails 5 reloader. [#3212, eugeneius]
783
+ - Clone job data so middleware changes don't appear in Busy tab
784
+
785
+ 4.2.3
786
+ -----------
787
+
788
+ - Disable use of Rails 5's Reloader API in non-development modes, it has proven
789
+ to be unstable under load [#3154]
790
+ - Allow disabling of Sidekiq::Web's cookie session to handle the
791
+ case where the app provides a session already [#3180, inkstak]
792
+ ```ruby
793
+ Sidekiq::Web.set :sessions, false
794
+ ```
795
+ - Fix Web UI sharding support broken in 4.2.2. [#3169]
796
+ - Fix timestamps not updating during UI polling [#3193, shaneog]
797
+ - Relax rack-protection version to >= 1.5.0
798
+ - Provide consistent interface to exception handlers, changing the structure of the context hash. [#3161]
799
+
800
+ 4.2.2
801
+ -----------
802
+
803
+ - Fix ever-increasing cookie size with nginx [#3146, cconstantine]
804
+ - Fix so Web UI works without trailing slash [#3158, timdorr]
805
+
806
+ 4.2.1
807
+ -----------
808
+
809
+ - Ensure browser does not cache JSON/AJAX responses. [#3136]
810
+ - Support old Sinatra syntax for setting config [#3139]
811
+
812
+ 4.2.0
813
+ -----------
814
+
815
+ - Enable development-mode code reloading. **With Rails 5.0+, you don't need
816
+ to restart Sidekiq to pick up your Sidekiq::Worker changes anymore!** [#2457]
817
+ - **Remove Sinatra dependency**. Sidekiq's Web UI now uses Rack directly.
818
+ Thank you to Sidekiq's newest committer, **badosu**, for writing the code
819
+ and doing a lot of testing to ensure compatibility with many different
820
+ 3rd party plugins. If your Web UI works with 4.1.4 but fails with
821
+ 4.2.0, please open an issue. [#3075]
822
+ - Allow tuning of concurrency with the `RAILS_MAX_THREADS` env var. [#2985]
823
+ This is the same var used by Puma so you can tune all of your systems
824
+ the same way:
825
+ ```sh
826
+ web: RAILS_MAX_THREADS=5 bundle exec puma ...
827
+ worker: RAILS_MAX_THREADS=10 bundle exec sidekiq ...
828
+ ```
829
+ Using `-c` or `config/sidekiq.yml` overrides this setting. I recommend
830
+ adjusting your `config/database.yml` to use it too so connections are
831
+ auto-scaled:
832
+ ```yaml
833
+ pool: <%= ENV['RAILS_MAX_THREADS'] || 5 %>
834
+ ```
835
+
836
+ 4.1.4
837
+ -----------
838
+
839
+ - Unlock Sinatra so a Rails 5.0 compatible version may be used [#3048]
840
+ - Fix race condition on startup with JRuby [#3043]
841
+
842
+
843
+ 4.1.3
844
+ -----------
845
+
846
+ - Please note the Redis 3.3.0 gem has a [memory leak](https://github.com/redis/redis-rb/issues/612),
847
+ Redis 3.2.2 is recommended until that issue is fixed.
848
+ - Sinatra 1.4.x is now a required dependency, avoiding cryptic errors
849
+ and old bugs due to people not upgrading Sinatra for years. [#3042]
850
+ - Fixed race condition in heartbeat which could rarely lead to lingering
851
+ processes on the Busy tab. [#2982]
852
+ ```ruby
853
+ # To clean up lingering processes, modify this as necessary to connect to your Redis.
854
+ # After 60 seconds, lingering processes should disappear from the Busy page.
855
+
856
+ require 'redis'
857
+ r = Redis.new(url: "redis://localhost:6379/0")
858
+ # uncomment if you need a namespace
859
+ #require 'redis-namespace'
860
+ #r = Redis::Namespace.new("foo", r)
861
+ r.smembers("processes").each do |pro|
862
+ r.expire(pro, 60)
863
+ r.expire("#{pro}:workers", 60)
864
+ end
865
+ ```
866
+
867
+
868
+ 4.1.2
869
+ -----------
870
+
871
+ - Fix Redis data leak with worker data when a busy Sidekiq process
872
+ crashes. You can find and expire leaked data in Redis with this
873
+ script:
874
+ ```bash
875
+ $ redis-cli keys "*:workers" | while read LINE ; do TTL=`redis-cli expire "$LINE" 60`; echo "$LINE"; done;
876
+ ```
877
+ Please note that `keys` can be dangerous to run on a large, busy Redis. Caveat runner.
878
+ - Freeze all string literals with Ruby 2.3. [#2741]
879
+ - Client middleware can now stop bulk job push. [#2887]
880
+
881
+ 4.1.1
882
+ -----------
883
+
884
+ - Much better behavior when Redis disappears and comes back. [#2866]
885
+ - Update FR locale [dbachet]
886
+ - Don't fill logfile in case of Redis downtime [#2860]
887
+ - Allow definition of a global retries_exhausted handler. [#2807]
888
+ ```ruby
889
+ Sidekiq.configure_server do |config|
890
+ config.default_retries_exhausted = -> (job, ex) do
891
+ Sidekiq.logger.info "#{job['class']} job is now dead"
892
+ end
893
+ end
894
+ ```
895
+
896
+ 4.1.0
897
+ -----------
898
+
899
+ - Tag quiet processes in the Web UI [#2757, jcarlson]
900
+ - Pass last exception to sidekiq\_retries\_exhausted block [#2787, Nowaker]
901
+ ```ruby
902
+ class MyWorker
903
+ include Sidekiq::Worker
904
+ sidekiq_retries_exhausted do |job, exception|
905
+ end
906
+ end
907
+ ```
908
+ - Add native support for ActiveJob's `set(options)` method allowing
909
+ you to override worker options dynamically. This should make it
910
+ even easier to switch between ActiveJob and Sidekiq's native APIs [#2780]
911
+ ```ruby
912
+ class MyWorker
913
+ include Sidekiq::Worker
914
+ sidekiq_options queue: 'default', retry: true
915
+
916
+ def perform(*args)
917
+ # do something
918
+ end
919
+ end
920
+
921
+ MyWorker.set(queue: 'high', retry: false).perform_async(1)
922
+ ```
923
+
924
+ 4.0.2
925
+ -----------
926
+
927
+ - Better Japanese translations
928
+ - Remove `json` gem dependency from gemspec. [#2743]
929
+ - There's a new testing API based off the `Sidekiq::Queues` namespace. All
930
+ assertions made against the Worker class still work as expected.
931
+ [#2676, brandonhilkert]
932
+ ```ruby
933
+ assert_equal 0, Sidekiq::Queues["default"].size
934
+ HardWorker.perform_async("log")
935
+ assert_equal 1, Sidekiq::Queues["default"].size
936
+ assert_equal "log", Sidekiq::Queues["default"].first['args'][0]
937
+ Sidekiq::Queues.clear_all
938
+ ```
939
+
940
+ 4.0.1
941
+ -----------
942
+
943
+ - Yank new queue-based testing API [#2663]
944
+ - Fix invalid constant reference in heartbeat
945
+
946
+ 4.0.0
947
+ -----------
948
+
949
+ - Sidekiq's internals have been completely overhauled for performance
950
+ and to remove dependencies. This has resulted in major speedups, as
951
+ [detailed on my blog](http://www.mikeperham.com/2015/10/14/optimizing-sidekiq/).
952
+ - See the [4.0 upgrade notes](docs/4.0-Upgrade.md) for more detail.
953
+
954
+ 3.5.4
955
+ -----------
956
+
957
+ - Ensure exception message is a string [#2707]
958
+ - Revert racy Process.kill usage in sidekiqctl
959
+
960
+ 3.5.3
961
+ -----------
962
+
963
+ - Adjust shutdown event to run in parallel with the rest of system shutdown. [#2635]
964
+
965
+ 3.5.2
966
+ -----------
967
+
968
+ - **Sidekiq 3 is now in maintenance mode**, only major bugs will be fixed.
969
+ - The exception triggering a retry is now passed into `sidekiq_retry_in`,
970
+ allowing you to retry more frequently for certain types of errors.
971
+ [#2619, kreynolds]
972
+ ```ruby
973
+ sidekiq_retry_in do |count, ex|
974
+ case ex
975
+ when RuntimeError
976
+ 5 * count
977
+ else
978
+ 10 * count
979
+ end
980
+ end
981
+ ```
982
+
983
+ 3.5.1
984
+ -----------
985
+
986
+ - **FIX MEMORY LEAK** Under rare conditions, threads may leak [#2598, gazay]
987
+ - Add Ukrainian locale [#2561, elrakita]
988
+ - Disconnect and retry Redis operations if we see a READONLY error [#2550]
989
+ - Add server middleware testing harness; see [wiki](https://github.com/sidekiq/sidekiq/wiki/Testing#testing-server-middleware) [#2534, ryansch]
990
+
991
+ 3.5.0
992
+ -----------
993
+
994
+ - Polished new banner! [#2522, firedev]
995
+ - Upgrade to Celluloid 0.17. [#2420, digitalextremist]
996
+ - Activate sessions in Sinatra for CSRF protection, requires Rails
997
+ monkeypatch due to rails/rails#15843. [#2460, jc00ke]
998
+
999
+ 3.4.2
1000
+ -----------
1001
+
1002
+ - Don't allow `Sidekiq::Worker` in ActiveJob::Base classes. [#2424]
1003
+ - Safer display of job data in Web UI [#2405]
1004
+ - Fix CSRF vulnerability in Web UI, thanks to Egor Homakov for
1005
+ reporting. [#2422] If you are running the Web UI as a standalone Rack app,
1006
+ ensure you have a [session middleware
1007
+ configured](https://github.com/sidekiq/sidekiq/wiki/Monitoring#standalone):
1008
+ ```ruby
1009
+ use Rack::Session::Cookie, :secret => "some unique secret string here"
1010
+ ```
1011
+
1012
+ 3.4.1
1013
+ -----------
1014
+
1015
+ - Lock to Celluloid 0.16
1016
+
1017
+
1018
+ 3.4.0
1019
+ -----------
1020
+
1021
+ - Set a `created_at` attribute when jobs are created, set `enqueued_at` only
1022
+ when they go into a queue. Fixes invalid latency calculations with scheduled jobs.
1023
+ [#2373, mrsimo]
1024
+ - Don't log timestamp on Heroku [#2343]
1025
+ - Run `shutdown` event handlers in reverse order of definition [#2374]
1026
+ - Rename and rework `poll_interval` to be simpler, more predictable [#2317, cainlevy]
1027
+ The new setting is `average_scheduled_poll_interval`. To configure
1028
+ Sidekiq to look for scheduled jobs every 5 seconds, just set it to 5.
1029
+ ```ruby
1030
+ Sidekiq.configure_server do |config|
1031
+ config.average_scheduled_poll_interval = 5
1032
+ end
1033
+ ```
1034
+
1035
+ 3.3.4
1036
+ -----------
1037
+
1038
+ - **Improved ActiveJob integration** - Web UI now shows ActiveJobs in a
1039
+ nicer format and job logging shows the actual class name, requires
1040
+ Rails 4.2.2+ [#2248, #2259]
1041
+ - Add Sidekiq::Process#dump\_threads API to trigger TTIN output [#2247]
1042
+ - Web UI polling now uses Ajax to avoid page reload [#2266, davydovanton]
1043
+ - Several Web UI styling improvements [davydovanton]
1044
+ - Add Tamil, Hindi translations for Web UI [ferdinandrosario, tejasbubane]
1045
+ - Fix Web UI to work with country-specific locales [#2243]
1046
+ - Handle circular error causes [#2285, eugenk]
1047
+
1048
+ 3.3.3
1049
+ -----------
1050
+
1051
+ - Fix crash on exit when Redis is down [#2235]
1052
+ - Fix duplicate logging on startup
1053
+ - Undeprecate delay extension for ActionMailer 4.2+ . [#2186]
1054
+
1055
+ 3.3.2
1056
+ -----------
1057
+
1058
+ - Add Sidekiq::Stats#queues back
1059
+ - Allows configuration of dead job set size and timeout [#2173, jonhyman]
1060
+ - Refactor scheduler enqueuing so Sidekiq Pro can override it. [#2159]
1061
+
1062
+ 3.3.1
1063
+ -----------
1064
+
1065
+ - Dumb down ActionMailer integration so it tries to deliver if possible [#2149]
1066
+ - Stringify Sidekiq.default\_worker\_options's keys [#2126]
1067
+ - Add random integer to process identity [#2113, michaeldiscala]
1068
+ - Log Sidekiq Pro's Batch ID if available [#2076]
1069
+ - Refactor Processor Redis usage to avoid redis/redis-rb#490 [#2094]
1070
+ - Move /dashboard/stats to /stats. Add /stats/queues. [moserke, #2099]
1071
+ - Add processes count to /stats [ismaelga, #2141]
1072
+ - Greatly improve speed of Sidekiq::Stats [ismaelga, #2142]
1073
+ - Add better usage text for `sidekiqctl`.
1074
+ - `Sidekiq::Logging.with_context` is now a stack so you can set your
1075
+ own job context for logging purposes [grosser, #2110]
1076
+ - Remove usage of Google Fonts in Web UI so it loads in China [#2144]
1077
+
1078
+ 3.3.0
1079
+ -----------
1080
+
1081
+ - Upgrade to Celluloid 0.16 [#2056]
1082
+ - Fix typo for generator test file name [dlackty, #2016]
1083
+ - Add Sidekiq::Middleware::Chain#prepend [seuros, #2029]
1084
+
1085
+ 3.2.6
1086
+ -----------
1087
+
1088
+ - Deprecate delay extension for ActionMailer 4.2+ . [seuros, #1933]
1089
+ - Poll interval tuning now accounts for dead processes [epchris, #1984]
1090
+ - Add non-production environment to Web UI page titles [JacobEvelyn, #2004]
1091
+
1092
+ 3.2.5
1093
+ -----------
1094
+
1095
+ - Lock Celluloid to 0.15.2 due to bugs in 0.16.0. This prevents the
1096
+ "hang on shutdown" problem with Celluloid 0.16.0.
1097
+
1098
+ 3.2.4
1099
+ -----------
1100
+
1101
+ - Fix issue preventing ActionMailer sends working in some cases with
1102
+ Rails 4. [pbhogan, #1923]
1103
+
1104
+ 3.2.3
1105
+ -----------
1106
+
1107
+ - Clean invalid bytes from error message before converting to JSON (requires Ruby 2.1+) [#1705]
1108
+ - Add queues list for each process to the Busy page. [davetoxa, #1897]
1109
+ - Fix for crash caused by empty config file. [jordan0day, #1901]
1110
+ - Add Rails Worker generator, `rails g sidekiq:worker User` will create `app/workers/user_worker.rb`. [seuros, #1909]
1111
+ - Fix Web UI rendering with huge job arguments [jhass, #1918]
1112
+ - Minor refactoring of Sidekiq::Client internals, for Sidekiq Pro. [#1919]
1113
+
1114
+ 3.2.2
1115
+ -----------
1116
+
1117
+ - **This version of Sidekiq will no longer start on Ruby 1.9.** Sidekiq
1118
+ 3 does not support MRI 1.9 but we've allowed it to run before now.
1119
+ - Fix issue which could cause Sidekiq workers to disappear from the Busy
1120
+ tab while still being active [#1884]
1121
+ - Add "Back to App" button in Web UI. You can set the button link via
1122
+ `Sidekiq::Web.app_url = 'http://www.mysite.com'` [#1875, seuros]
1123
+ - Add process tag (`-g tag`) to the Busy page so you can differentiate processes at a glance. [seuros, #1878]
1124
+ - Add "Kill" button to move retries directly to the DJQ so they don't retry. [seuros, #1867]
1125
+
1126
+ 3.2.1
1127
+ -----------
1128
+
1129
+ - Revert eager loading change for Rails 3.x apps, as it broke a few edge
1130
+ cases.
1131
+
1132
+ 3.2.0
1133
+ -----------
1134
+
1135
+ - **Fix issue which caused duplicate job execution in Rails 3.x**
1136
+ This issue is caused by [improper exception handling in ActiveRecord](https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb#L281) which changes Sidekiq's Shutdown exception into a database
1137
+ error, making Sidekiq think the job needs to be retried. **The fix requires Ruby 2.1**. [#1805]
1138
+ - Update how Sidekiq eager loads Rails application code [#1791, jonleighton]
1139
+ - Change logging timestamp to show milliseconds.
1140
+ - Reverse sorting of Dead tab so newer jobs are listed first [#1802]
1141
+
1142
+ 3.1.4
1143
+ -----------
1144
+
1145
+ - Happy π release!
1146
+ - Self-tuning Scheduler polling, we use heartbeat info to better tune poll\_interval [#1630]
1147
+ - Remove all table column width rules, hopefully get better column formatting [#1747]
1148
+ - Handle edge case where YAML can't be decoded in dev mode [#1761]
1149
+ - Fix lingering jobs in Busy page on Heroku [#1764]
1150
+
1151
+ 3.1.3
1152
+ -----------
1153
+
1154
+ - Use ENV['DYNO'] on Heroku for hostname display, rather than an ugly UUID. [#1742]
1155
+ - Show per-process labels on the Busy page, for feature tagging [#1673]
1156
+
1157
+
1158
+ 3.1.2
1159
+ -----------
1160
+
1161
+ - Suitably chastised, @mperham reverts the Bundler change.
1162
+
1163
+
1164
+ 3.1.1
1165
+ -----------
1166
+
1167
+ - Sidekiq::CLI now runs `Bundler.require(:default, environment)` to boot all gems
1168
+ before loading any app code.
1169
+ - Sort queues by name in Web UI [#1734]
1170
+
1171
+
1172
+ 3.1.0
1173
+ -----------
1174
+
1175
+ - New **remote control** feature: you can remotely trigger Sidekiq to quiet
1176
+ or terminate via API, without signals. This is most useful on JRuby
1177
+ or Heroku which does not support the USR1 'quiet' signal. Now you can
1178
+ run a rake task like this at the start of your deploy to quiet your
1179
+ set of Sidekiq processes. [#1703]
1180
+ ```ruby
1181
+ namespace :sidekiq do
1182
+ task :quiet => :environment do
1183
+ Sidekiq::ProcessSet.new.each(&:quiet!)
1184
+ end
1185
+ end
1186
+ ```
1187
+ - The Web UI can use the API to quiet or stop all processes via the Busy page.
1188
+ - The Web UI understands and hides the `Sidekiq::Extensions::Delay*`
1189
+ classes, instead showing `Class.method` as the Job. [#1718]
1190
+ - Polish the Dashboard graphs a bit, update Rickshaw [brandonhilkert, #1725]
1191
+ - The poll interval is now configurable in the Web UI [madebydna, #1713]
1192
+ - Delay extensions can be removed so they don't conflict with
1193
+ DelayedJob: put `Sidekiq.remove_delay!` in your initializer. [devaroop, #1674]
1194
+
1195
+
1196
+ 3.0.2
1197
+ -----------
1198
+
1199
+ - Revert gemfile requirement of Ruby 2.0. JRuby 1.7 calls itself Ruby
1200
+ 1.9.3 and broke with this requirement.
1201
+
1202
+ 3.0.1
1203
+ -----------
1204
+
1205
+ - Revert pidfile behavior from 2.17.5: Sidekiq will no longer remove its own pidfile
1206
+ as this is a race condition when restarting. [#1470, #1677]
1207
+ - Show warning on the Queues page if a queue is paused [#1672]
1208
+ - Only activate the ActiveRecord middleware if ActiveRecord::Base is defined on boot. [#1666]
1209
+ - Add ability to disable jobs going to the DJQ with the `dead` option.
1210
+ ```ruby
1211
+ sidekiq_options :dead => false, :retry => 5
1212
+ ```
1213
+ - Minor fixes
1214
+
1215
+
1216
+ 3.0.0
1217
+ -----------
1218
+
1219
+ Please see [3.0-Upgrade.md](docs/3.0-Upgrade.md) for more comprehensive upgrade notes.
1220
+
1221
+ - **Dead Job Queue** - jobs which run out of retries are now moved to a dead
1222
+ job queue. These jobs must be retried manually or they will expire
1223
+ after 6 months or 10,000 jobs. The Web UI contains a "Dead" tab
1224
+ exposing these jobs. Use `sidekiq_options :retry => false` if you
1225
+ don't wish jobs to be retried or put in the DJQ. Use
1226
+ `sidekiq_options :retry => 0` if you don't want jobs to retry but go
1227
+ straight to the DJQ.
1228
+ - **Process Lifecycle Events** - you can now register blocks to run at
1229
+ certain points during the Sidekiq process lifecycle: startup, quiet and
1230
+ shutdown.
1231
+ ```ruby
1232
+ Sidekiq.configure_server do |config|
1233
+ config.on(:startup) do
1234
+ # do something
1235
+ end
1236
+ end
1237
+ ```
1238
+ - **Global Error Handlers** - blocks of code which handle errors that
1239
+ occur anywhere within Sidekiq, not just within middleware.
1240
+ ```ruby
1241
+ Sidekiq.configure_server do |config|
1242
+ config.error_handlers << proc {|ex,ctx| ... }
1243
+ end
1244
+ ```
1245
+ - **Process Heartbeat** - each Sidekiq process will ping Redis every 5
1246
+ seconds to give a summary of the Sidekiq population at work.
1247
+ - The Workers tab is now renamed to Busy and contains a list of live
1248
+ Sidekiq processes and jobs in progress based on the heartbeat.
1249
+ - **Shardable Client** - Sidekiq::Client instances can use a custom
1250
+ Redis connection pool, allowing very large Sidekiq installations to scale by
1251
+ sharding: sending different jobs to different Redis instances.
1252
+ ```ruby
1253
+ client = Sidekiq::Client.new(ConnectionPool.new { Redis.new })
1254
+ client.push(...)
1255
+ ```
1256
+ ```ruby
1257
+ Sidekiq::Client.via(ConnectionPool.new { Redis.new }) do
1258
+ FooWorker.perform_async
1259
+ BarWorker.perform_async
1260
+ end
1261
+ ```
1262
+ **Sharding support does require a breaking change to client-side
1263
+ middleware, see docs/3.0-Upgrade.md.**
1264
+ - New Chinese, Greek, Swedish and Czech translations for the Web UI.
1265
+ - Updated most languages translations for the new UI features.
1266
+ - **Remove official Capistrano integration** - this integration has been
1267
+ moved into the [capistrano-sidekiq](https://github.com/seuros/capistrano-sidekiq) gem.
1268
+ - **Remove official support for MRI 1.9** - Things still might work but
1269
+ I no longer actively test on it.
1270
+ - **Remove built-in support for Redis-to-Go**.
1271
+ Heroku users: `heroku config:set REDIS_PROVIDER=REDISTOGO_URL`
1272
+ - **Remove built-in error integration for Airbrake, Honeybadger, ExceptionNotifier and Exceptional**.
1273
+ Each error gem should provide its own Sidekiq integration. Update your error gem to the latest
1274
+ version to pick up Sidekiq support.
1275
+ - Upgrade to connection\_pool 2.0 which now creates connections lazily.
1276
+ - Remove deprecated Sidekiq::Client.registered\_\* APIs
1277
+ - Remove deprecated support for the old Sidekiq::Worker#retries\_exhausted method.
1278
+ - Removed 'sidekiq/yaml\_patch', this was never documented or recommended.
1279
+ - Removed --profile option, #1592
1280
+ - Remove usage of the term 'Worker' in the UI for clarity. Users would call both threads and
1281
+ processes 'workers'. Instead, use "Thread", "Process" or "Job".
1282
+
1283
+ 2.17.7
1284
+ -----------
1285
+
1286
+ - Auto-prune jobs older than one hour from the Workers page [#1508]
1287
+ - Add Sidekiq::Workers#prune which can perform the auto-pruning.
1288
+ - Fix issue where a job could be lost when an exception occurs updating
1289
+ Redis stats before the job executes [#1511]
1290
+
1291
+ 2.17.6
1292
+ -----------
1293
+
1294
+ - Fix capistrano integration due to missing pidfile. [#1490]
1295
+
1296
+ 2.17.5
1297
+ -----------
1298
+
1299
+ - Automatically use the config file found at `config/sidekiq.yml`, if not passed `-C`. [#1481]
1300
+ - Store 'retried\_at' and 'failed\_at' timestamps as Floats, not Strings. [#1473]
1301
+ - A `USR2` signal will now reopen _all_ logs, using IO#reopen. Thus, instead of creating a new Logger object,
1302
+ Sidekiq will now just update the existing Logger's file descriptor [#1163].
1303
+ - Remove pidfile when shutting down if started with `-P` [#1470]
1304
+
1305
+ 2.17.4
1306
+ -----------
1307
+
1308
+ - Fix JID support in inline testing, #1454
1309
+ - Polish worker arguments display in UI, #1453
1310
+ - Marshal arguments fully to avoid worker mutation, #1452
1311
+ - Support reverse paging sorted sets, #1098
1312
+
1313
+
1314
+ 2.17.3
1315
+ -----------
1316
+
1317
+ - Synchronously terminates the poller and fetcher to fix a race condition in bulk requeue during shutdown [#1406]
1318
+
1319
+ 2.17.2
1320
+ -----------
1321
+
1322
+ - Fix bug where strictly prioritized queues might be processed out of
1323
+ order [#1408]. A side effect of this change is that it breaks a queue
1324
+ declaration syntax that worked, although only because of a bug—it was
1325
+ never intended to work and never supported. If you were declaring your
1326
+ queues as a comma-separated list, e.g. `sidekiq -q critical,default,low`,
1327
+ you must now use the `-q` flag before each queue, e.g.
1328
+ `sidekiq -q critical -q default -q low`.
1329
+
1330
+ 2.17.1
1331
+ -----------
1332
+
1333
+ - Expose `delay` extension as `sidekiq_delay` also. This allows you to
1334
+ run Delayed::Job and Sidekiq in the same process, selectively porting
1335
+ `delay` calls to `sidekiq_delay`. You just need to ensure that
1336
+ Sidekiq is required **before** Delayed::Job in your Gemfile. [#1393]
1337
+ - Bump redis client required version to 3.0.6
1338
+ - Minor CSS fixes for Web UI
1339
+
1340
+ 2.17.0
1341
+ -----------
1342
+
1343
+ - Change `Sidekiq::Client#push_bulk` to return an array of pushed `jid`s. [#1315, barelyknown]
1344
+ - Web UI refactoring to use more API internally (yummy dogfood!)
1345
+ - Much faster Sidekiq::Job#delete performance for larger queue sizes
1346
+ - Further capistrano 3 fixes
1347
+ - Many misc minor fixes
1348
+
1349
+ 2.16.1
1350
+ -----------
1351
+
1352
+ - Revert usage of `resolv-replace`. MRI's native DNS lookup releases the GIL.
1353
+ - Fix several Capistrano 3 issues
1354
+ - Escaping dynamic data like job args and error messages in Sidekiq Web UI. [#1299, lian]
1355
+
1356
+ 2.16.0
1357
+ -----------
1358
+
1359
+ - Deprecate `Sidekiq::Client.registered_workers` and `Sidekiq::Client.registered_queues`
1360
+ - Refactor Sidekiq::Client to be instance-based [#1279]
1361
+ - Pass all Redis options to the Redis driver so Unix sockets
1362
+ can be fully configured. [#1270, salimane]
1363
+ - Allow sidekiq-web extensions to add locale paths so extensions
1364
+ can be localized. [#1261, ondrejbartas]
1365
+ - Capistrano 3 support [#1254, phallstrom]
1366
+ - Use Ruby's `resolv-replace` to enable pure Ruby DNS lookups.
1367
+ This ensures that any DNS resolution that takes place in worker
1368
+ threads won't lock up the entire VM on MRI. [#1258]
1369
+
1370
+ 2.15.2
1371
+ -----------
1372
+
1373
+ - Iterating over Sidekiq::Queue and Sidekiq::SortedSet will now work as
1374
+ intended when jobs are deleted [#866, aackerman]
1375
+ - A few more minor Web UI fixes [#1247]
1376
+
1377
+ 2.15.1
1378
+ -----------
1379
+
1380
+ - Fix several Web UI issues with the Bootstrap 3 upgrade.
1381
+
1382
+ 2.15.0
1383
+ -----------
1384
+
1385
+ - The Core Sidekiq actors are now monitored. If any crash, the
1386
+ Sidekiq process logs the error and exits immediately. This is to
1387
+ help prevent "stuck" Sidekiq processes which are running but don't
1388
+ appear to be doing any work. [#1194]
1389
+ - Sidekiq's testing behavior is now dynamic. You can choose between
1390
+ `inline` and `fake` behavior in your tests. See
1391
+ [Testing](https://github.com/sidekiq/sidekiq/wiki/Testing) for detail. [#1193]
1392
+ - The Retries table has a new column for the error message.
1393
+ - The Web UI topbar now contains the status and live poll button.
1394
+ - Orphaned worker records are now auto-vacuumed when you visit the
1395
+ Workers page in the Web UI.
1396
+ - Sidekiq.default\_worker\_options allows you to configure default
1397
+ options for all Sidekiq worker types.
1398
+
1399
+ ```ruby
1400
+ Sidekiq.default_worker_options = { 'queue' => 'default', 'backtrace' => true }
1401
+ ```
1402
+ - Added two Sidekiq::Client class methods for compatibility with resque-scheduler:
1403
+ `enqueue_to_in` and `enqueue_in` [#1212]
1404
+ - Upgrade Web UI to Bootstrap 3.0. [#1211, jeffboek]
1405
+
1406
+ 2.14.1
1407
+ -----------
1408
+
1409
+ - Fix misc Web UI issues due to ERB conversion.
1410
+ - Bump redis-namespace version due to security issue.
1411
+
1412
+ 2.14.0
1413
+ -----------
1414
+
1415
+ - Removed slim gem dependency, Web UI now uses ERB [Locke23rus, #1120]
1416
+ - Fix more race conditions in Web UI actions
1417
+ - Don't reset Job enqueued\_at when retrying
1418
+ - Timestamp tooltips in the Web UI should use UTC
1419
+ - Fix invalid usage of handle\_exception causing issues in Airbrake
1420
+ [#1134]
1421
+
1422
+
1423
+ 2.13.1
1424
+ -----------
1425
+
1426
+ - Make Sidekiq::Middleware::Chain Enumerable
1427
+ - Make summary bar and graphs responsive [manishval, #1025]
1428
+ - Adds a job status page for scheduled jobs [jonhyman]
1429
+ - Handle race condition in retrying and deleting jobs in the Web UI
1430
+ - The Web UI relative times are now i18n. [MadRabbit, #1088]
1431
+ - Allow for default number of retry attempts to be set for
1432
+ `Sidekiq::Middleware::Server::RetryJobs` middleware. [czarneckid] [#1091]
1433
+
1434
+ ```ruby
1435
+ Sidekiq.configure_server do |config|
1436
+ config.server_middleware do |chain|
1437
+ chain.add Sidekiq::Middleware::Server::RetryJobs, :max_retries => 10
1438
+ end
1439
+ end
1440
+ ```
1441
+
1442
+
1443
+ 2.13.0
1444
+ -----------
1445
+
1446
+ - Adding button to move scheduled job to main queue [guiceolin, #1020]
1447
+ - fix i18n support resetting saved locale when job is retried [#1011]
1448
+ - log rotation via USR2 now closes the old logger [#1008]
1449
+ - Add ability to customize retry schedule, like so [jmazzi, #1027]
1450
+
1451
+ ```ruby
1452
+ class MyWorker
1453
+ include Sidekiq::Worker
1454
+ sidekiq_retry_in { |count| count * 2 }
1455
+ end
1456
+ ```
1457
+ - Redesign Worker#retries\_exhausted callback to use same form as above [jmazzi, #1030]
1458
+
1459
+ ```ruby
1460
+ class MyWorker
1461
+ include Sidekiq::Worker
1462
+ sidekiq_retries_exhausted do |msg|
1463
+ Rails.logger.error "Failed to process #{msg['class']} with args: #{msg['args']}"
1464
+ end
1465
+ end
1466
+ ```
1467
+
1468
+ 2.12.4
1469
+ -----------
1470
+
1471
+ - Fix error in previous release which crashed the Manager when a
1472
+ Processor died.
1473
+
1474
+ 2.12.3
1475
+ -----------
1476
+
1477
+ - Revert back to Celluloid's TaskFiber for job processing which has proven to be more
1478
+ stable than TaskThread. [#985]
1479
+ - Avoid possible lockup during hard shutdown [#997]
1480
+
1481
+ At this point, if you are experiencing stability issues with Sidekiq in
1482
+ Ruby 1.9, please try Ruby 2.0. It seems to be more stable.
1483
+
1484
+ 2.12.2
1485
+ -----------
1486
+
1487
+ - Relax slim version requirement to >= 1.1.0
1488
+ - Refactor historical stats to use TTL, not explicit cleanup. [grosser, #971]
1489
+
1490
+ 2.12.1
1491
+ -----------
1492
+
1493
+ - Force Celluloid 0.14.1 as 0.14.0 has a serious bug. [#954]
1494
+ - Scheduled and Retry jobs now use Sidekiq::Client to push
1495
+ jobs onto the queue, so they use client middleware. [dimko, #948]
1496
+ - Record the timestamp when jobs are enqueued. Add
1497
+ Sidekiq::Job#enqueued\_at to query the time. [mariovisic, #944]
1498
+ - Add Sidekiq::Queue#latency - calculates diff between now and
1499
+ enqueued\_at for the oldest job in the queue.
1500
+ - Add testing method `perform_one` that dequeues and performs a single job.
1501
+ This is mainly to aid testing jobs that spawn other jobs. [fumin, #963]
1502
+
1503
+ 2.12.0
1504
+ -----------
1505
+
1506
+ - Upgrade to Celluloid 0.14, remove the use of Celluloid's thread
1507
+ pool. This should halve the number of threads in each Sidekiq
1508
+ process, thus requiring less resources. [#919]
1509
+ - Abstract Celluloid usage to Sidekiq::Actor for testing purposes.
1510
+ - Better handling for Redis downtime when fetching jobs and shutting
1511
+ down, don't print exceptions every second and print success message
1512
+ when Redis is back.
1513
+ - Fix unclean shutdown leading to duplicate jobs [#897]
1514
+ - Add Korean locale [#890]
1515
+ - Upgrade test suite to Minitest 5
1516
+ - Remove usage of `multi_json` as `json` is now robust on all platforms.
1517
+
1518
+ 2.11.2
1519
+ -----------
1520
+
1521
+ - Fix Web UI when used without Rails [#886]
1522
+ - Add Sidekiq::Stats#reset [#349]
1523
+ - Add Norwegian locale.
1524
+ - Updates for the JA locale.
1525
+
1526
+ 2.11.1
1527
+ -----------
1528
+
1529
+ - Fix timeout warning.
1530
+ - Add Dutch web UI locale.
1531
+
1532
+ 2.11.0
1533
+ -----------
1534
+
1535
+ - Upgrade to Celluloid 0.13. [#834]
1536
+ - Remove **timeout** support from `sidekiq_options`. Ruby's timeout
1537
+ is inherently unsafe in a multi-threaded application and was causing
1538
+ stability problems for many. See http://bit.ly/OtYpK
1539
+ - Add Japanese locale for Web UI [#868]
1540
+ - Fix a few issues with Web UI i18n.
1541
+
1542
+ 2.10.1
1543
+ -----------
1544
+
1545
+ - Remove need for the i18n gem. (brandonhilkert)
1546
+ - Improve redis connection info logging on startup for debugging
1547
+ purposes [#858]
1548
+ - Revert sinatra/slim as runtime dependencies
1549
+ - Add `find_job` method to sidekiq/api
1550
+
1551
+
1552
+ 2.10.0
1553
+ -----------
1554
+
1555
+ - Refactor algorithm for putting scheduled jobs onto the queue [#843]
1556
+ - Fix scheduler thread dying due to incorrect error handling [#839]
1557
+ - Fix issue which left stale workers if Sidekiq wasn't shutdown while
1558
+ quiet. [#840]
1559
+ - I18n for web UI. Please submit translations of `web/locales/en.yml` for
1560
+ your own language. [#811]
1561
+ - 'sinatra', 'slim' and 'i18n' are now gem dependencies for Sidekiq.
1562
+
1563
+
1564
+ 2.9.0
1565
+ -----------
1566
+
1567
+ - Update 'sidekiq/testing' to work with any Sidekiq::Client call. It
1568
+ also serializes the arguments as using Redis would. [#713]
1569
+ - Raise a Sidekiq::Shutdown error within workers which don't finish within the hard
1570
+ timeout. This is to prevent unwanted database transaction commits. [#377]
1571
+ - Lazy load Redis connection pool, you no longer need to specify
1572
+ anything in Passenger or Unicorn's after_fork callback [#794]
1573
+ - Add optional Worker#retries_exhausted hook after max retries failed. [jkassemi, #780]
1574
+ - Fix bug in pagination link to last page [pitr, #774]
1575
+ - Upstart scripts for multiple Sidekiq instances [dariocravero, #763]
1576
+ - Use select via pipes instead of poll to catch signals [mrnugget, #761]
1577
+
1578
+ 2.8.0
1579
+ -----------
1580
+
1581
+ - I18n support! Sidekiq can optionally save and restore the Rails locale
1582
+ so it will be properly set when your jobs execute. Just include
1583
+ `require 'sidekiq/middleware/i18n'` in your sidekiq initializer. [#750]
1584
+ - Fix bug which could lose messages when using namespaces and the message
1585
+ needs to be requeued in Redis. [#744]
1586
+ - Refactor Redis namespace support [#747]. The redis namespace can no longer be
1587
+ passed via the config file, the only supported way is via Ruby in your
1588
+ initializer:
1589
+
1590
+ ```ruby
1591
+ sidekiq_redis = { :url => 'redis://localhost:3679', :namespace => 'foo' }
1592
+ Sidekiq.configure_server { |config| config.redis = sidekiq_redis }
1593
+ Sidekiq.configure_client { |config| config.redis = sidekiq_redis }
1594
+ ```
1595
+
1596
+ A warning is printed out to the log if a namespace is found in your sidekiq.yml.
1597
+
1598
+
1599
+ 2.7.5
1600
+ -----------
1601
+
1602
+ - Capistrano no longer uses daemonization in order to work with JRuby [#719]
1603
+ - Refactor signal handling to work on Ruby 2.0 [#728, #730]
1604
+ - Fix dashboard refresh URL [#732]
1605
+
1606
+ 2.7.4
1607
+ -----------
1608
+
1609
+ - Fixed daemonization, was broken by some internal refactoring in 2.7.3 [#727]
1610
+
1611
+ 2.7.3
1612
+ -----------
1613
+
1614
+ - Real-time dashboard is now the default web page
1615
+ - Make config file optional for capistrano
1616
+ - Fix Retry All button in the Web UI
1617
+
1618
+ 2.7.2
1619
+ -----------
1620
+
1621
+ - Remove gem signing infrastructure. It was causing Sidekiq to break
1622
+ when used via git in Bundler. This is why we can't have nice things. [#688]
1623
+
1624
+
1625
+ 2.7.1
1626
+ -----------
1627
+
1628
+ - Fix issue with hard shutdown [#680]
1629
+
1630
+
1631
+ 2.7.0
1632
+ -----------
1633
+
1634
+ - Add -d daemonize flag, capistrano recipe has been updated to use it [#662]
1635
+ - Support profiling via `ruby-prof` with -p. When Sidekiq is stopped
1636
+ via Ctrl-C, it will output `profile.html`. You must add `gem 'ruby-prof'` to your Gemfile for it to work.
1637
+ - Dynamically update Redis stats on dashboard [brandonhilkert]
1638
+ - Add Sidekiq::Workers API giving programmatic access to the current
1639
+ set of active workers.
1640
+
1641
+ ```
1642
+ workers = Sidekiq::Workers.new
1643
+ workers.size => 2
1644
+ workers.each do |name, work|
1645
+ # name is a unique identifier per Processor instance
1646
+ # work is a Hash which looks like:
1647
+ # { 'queue' => name, 'run_at' => timestamp, 'payload' => msg }
1648
+ end
1649
+ ```
1650
+
1651
+ - Allow environment-specific sections within the config file which
1652
+ override the global values [dtaniwaki, #630]
1653
+
1654
+ ```
1655
+ ---
1656
+ :concurrency: 50
1657
+ :verbose: false
1658
+ staging:
1659
+ :verbose: true
1660
+ :concurrency: 5
1661
+ ```
1662
+
1663
+
1664
+ 2.6.5
1665
+ -----------
1666
+
1667
+ - Several reliability fixes for job requeueing upon termination [apinstein, #622, #624]
1668
+ - Fix typo in capistrano recipe
1669
+ - Add `retry_queue` option so retries can be given lower priority [ryanlower, #620]
1670
+
1671
+ ```ruby
1672
+ sidekiq_options queue: 'high', retry_queue: 'low'
1673
+ ```
1674
+
1675
+ 2.6.4
1676
+ -----------
1677
+
1678
+ - Fix crash upon empty queue [#612]
1679
+
1680
+ 2.6.3
1681
+ -----------
1682
+
1683
+ - sidekiqctl exits with non-zero exit code upon error [jmazzi]
1684
+ - better argument validation in Sidekiq::Client [karlfreeman]
1685
+
1686
+ 2.6.2
1687
+ -----------
1688
+
1689
+ - Add Dashboard beacon indicating when stats are updated. [brandonhilkert, #606]
1690
+ - Revert issue with capistrano restart. [#598]
1691
+
1692
+ 2.6.1
1693
+ -----------
1694
+
1695
+ - Dashboard now live updates summary stats also. [brandonhilkert, #605]
1696
+ - Add middleware chain APIs `insert_before` and `insert_after` for fine
1697
+ tuning the order of middleware. [jackrg, #595]
1698
+
1699
+ 2.6.0
1700
+ -----------
1701
+
1702
+ - Web UI much more mobile friendly now [brandonhilkert, #573]
1703
+ - Enable live polling for every section in Web UI [brandonhilkert, #567]
1704
+ - Add Stats API [brandonhilkert, #565]
1705
+ - Add Stats::History API [brandonhilkert, #570]
1706
+ - Add Dashboard to Web UI with live and historical stat graphs [brandonhilkert, #580]
1707
+ - Add option to log output to a file, reopen log file on USR2 signal [mrnugget, #581]
1708
+
1709
+ 2.5.4
1710
+ -----------
1711
+
1712
+ - `Sidekiq::Client.push` now accepts the worker class as a string so the
1713
+ Sidekiq client does not have to load your worker classes at all. [#524]
1714
+ - `Sidekiq::Client.push_bulk` now works with inline testing.
1715
+ - **Really** fix status icon in Web UI this time.
1716
+ - Add "Delete All" and "Retry All" buttons to Retries in Web UI
1717
+
1718
+
1719
+ 2.5.3
1720
+ -----------
1721
+
1722
+ - Small Web UI fixes
1723
+ - Add `delay_until` so you can delay jobs until a specific timestamp:
1724
+
1725
+ ```ruby
1726
+ Auction.delay_until(@auction.ends_at).close(@auction.id)
1727
+ ```
1728
+
1729
+ This is identical to the existing Sidekiq::Worker method, `perform_at`.
1730
+
1731
+ 2.5.2
1732
+ -----------
1733
+
1734
+ - Remove asset pipeline from Web UI for much faster, simpler runtime. [#499, #490, #481]
1735
+ - Add -g option so the procline better identifies a Sidekiq process, defaults to File.basename(Rails.root). [#486]
1736
+
1737
+ sidekiq 2.5.1 myapp [0 of 25 busy]
1738
+
1739
+ - Add splay to retry time so groups of failed jobs don't fire all at once. [#483]
1740
+
1741
+ 2.5.1
1742
+ -----------
1743
+
1744
+ - Fix issues with core\_ext
1745
+
1746
+ 2.5.0
1747
+ -----------
1748
+
1749
+ - REDESIGNED WEB UI! [unity, cavneb]
1750
+ - Support Honeybadger for error delivery
1751
+ - Inline testing runs the client middleware before executing jobs [#465]
1752
+ - Web UI can now remove jobs from queue. [#466, dleung]
1753
+ - Web UI can now show the full message, not just 100 chars [#464, dleung]
1754
+ - Add APIs for manipulating the retry and job queues. See sidekiq/api. [#457]
1755
+
1756
+
1757
+ 2.4.0
1758
+ -----------
1759
+
1760
+ - ActionMailer.delay.method now only tries to deliver if method returns a valid message.
1761
+ - Logging now uses "MSG-#{Job ID}", not a random msg ID
1762
+ - Allow generic Redis provider as environment variable. [#443]
1763
+ - Add ability to customize sidekiq\_options with delay calls [#450]
1764
+
1765
+ ```ruby
1766
+ Foo.delay(:retry => false).bar
1767
+ Foo.delay(:retry => 10).bar
1768
+ Foo.delay(:timeout => 10.seconds).bar
1769
+ Foo.delay_for(5.minutes, :timeout => 10.seconds).bar
1770
+ ```
1771
+
1772
+ 2.3.3
1773
+ -----------
1774
+
1775
+ - Remove option to disable Rails hooks. [#401]
1776
+ - Allow delay of any module class method
1777
+
1778
+ 2.3.2
1779
+ -----------
1780
+
1781
+ - Fix retry. 2.3.1 accidentally disabled it.
1782
+
1783
+ 2.3.1
1784
+ -----------
1785
+
1786
+ - Add Sidekiq::Client.push\_bulk for bulk adding of jobs to Redis.
1787
+ My own simple test case shows pushing 10,000 jobs goes from 5 sec to 1.5 sec.
1788
+ - Add support for multiple processes per host to Capistrano recipe
1789
+ - Re-enable Celluloid::Actor#defer to fix stack overflow issues [#398]
1790
+
1791
+ 2.3.0
1792
+ -----------
1793
+
1794
+ - Upgrade Celluloid to 0.12
1795
+ - Upgrade Twitter Bootstrap to 2.1.0
1796
+ - Rescue more Exceptions
1797
+ - Change Job ID to be Hex, rather than Base64, for HTTP safety
1798
+ - Use `Airbrake#notify_or_ignore`
1799
+
1800
+ 2.2.1
1801
+ -----------
1802
+
1803
+ - Add support for custom tabs to Sidekiq::Web [#346]
1804
+ - Change capistrano recipe to run 'quiet' before deploy:update\_code so
1805
+ it is run upon both 'deploy' and 'deploy:migrations'. [#352]
1806
+ - Rescue Exception rather than StandardError to catch and log any sort
1807
+ of Processor death.
1808
+
1809
+ 2.2.0
1810
+ -----------
1811
+
1812
+ - Roll back Celluloid optimizations in 2.1.0 which caused instability.
1813
+ - Add extension to delay any arbitrary class method to Sidekiq.
1814
+ Previously this was limited to ActiveRecord classes.
1815
+
1816
+ ```ruby
1817
+ SomeClass.delay.class_method(1, 'mike', Date.today)
1818
+ ```
1819
+
1820
+ - Sidekiq::Client now generates and returns a random, 128-bit Job ID 'jid' which
1821
+ can be used to track the processing of a Job, e.g. for calling back to a webhook
1822
+ when a job is finished.
1823
+
1824
+ 2.1.1
1825
+ -----------
1826
+
1827
+ - Handle networking errors causing the scheduler thread to die [#309]
1828
+ - Rework exception handling to log all Processor and actor death (#325, subelsky)
1829
+ - Clone arguments when calling worker so modifications are discarded. (#265, hakanensari)
1830
+
1831
+ 2.1.0
1832
+ -----------
1833
+
1834
+ - Tune Celluloid to no longer run message processing within a Fiber.
1835
+ This gives us a full Thread stack and also lowers Sidekiq's memory
1836
+ usage.
1837
+ - Add pagination within the Web UI [#253]
1838
+ - Specify which Redis driver to use: *hiredis* or *ruby* (default)
1839
+ - Remove FailureJobs and UniqueJobs, which were optional middleware
1840
+ that I don't want to support in core. [#302]
1841
+
1842
+ 2.0.3
1843
+ -----------
1844
+ - Fix sidekiq-web's navbar on mobile devices and windows under 980px (ezkl)
1845
+ - Fix Capistrano task for first deploys [#259]
1846
+ - Worker subclasses now properly inherit sidekiq\_options set in
1847
+ their superclass [#221]
1848
+ - Add random jitter to scheduler to spread polls across POLL\_INTERVAL
1849
+ window. [#247]
1850
+ - Sidekiq has a new mailing list: sidekiq@librelist.org See README.
1851
+
1852
+ 2.0.2
1853
+ -----------
1854
+
1855
+ - Fix "Retry Now" button on individual retry page. (ezkl)
1856
+
1857
+ 2.0.1
1858
+ -----------
1859
+
1860
+ - Add "Clear Workers" button to UI. If you kill -9 Sidekiq, the workers
1861
+ set can fill up with stale entries.
1862
+ - Update sidekiq/testing to support new scheduled jobs API:
1863
+
1864
+ ```ruby
1865
+ require 'sidekiq/testing'
1866
+ DirectWorker.perform_in(10.seconds, 1, 2)
1867
+ assert_equal 1, DirectWorker.jobs.size
1868
+ assert_in_delta 10.seconds.from_now.to_f, DirectWorker.jobs.last['at'], 0.01
1869
+ ```
1870
+
1871
+ 2.0.0
1872
+ -----------
1873
+
1874
+ - **SCHEDULED JOBS**!
1875
+
1876
+ You can now use `perform_at` and `perform_in` to schedule jobs
1877
+ to run at arbitrary points in the future, like so:
1878
+
1879
+ ```ruby
1880
+ SomeWorker.perform_in(5.days, 'bob', 13)
1881
+ SomeWorker.perform_at(5.days.from_now, 'bob', 13)
1882
+ ```
1883
+
1884
+ It also works with the delay extensions:
1885
+
1886
+ ```ruby
1887
+ UserMailer.delay_for(5.days).send_welcome_email(user.id)
1888
+ ```
1889
+
1890
+ The time is approximately when the job will be placed on the queue;
1891
+ it is not guaranteed to run at precisely at that moment in time.
1892
+
1893
+ This functionality is meant for one-off, arbitrary jobs. I still
1894
+ recommend `whenever` or `clockwork` if you want cron-like,
1895
+ recurring jobs. See `examples/scheduling.rb`
1896
+
1897
+ I want to specially thank @yabawock for his work on sidekiq-scheduler.
1898
+ His extension for Sidekiq 1.x filled an obvious functional gap that I now think is
1899
+ useful enough to implement in Sidekiq proper.
1900
+
1901
+ - Fixed issues due to Redis 3.x API changes. Sidekiq now requires
1902
+ the Redis 3.x client.
1903
+ - Inline testing now round trips arguments through JSON to catch
1904
+ serialization issues (betelgeuse)
1905
+
1906
+ 1.2.1
1907
+ -----------
1908
+
1909
+ - Sidekiq::Worker now has access to Sidekiq's standard logger
1910
+ - Fix issue with non-StandardErrors leading to Processor exhaustion
1911
+ - Fix issue with Fetcher slowing Sidekiq shutdown
1912
+ - Print backtraces for all threads upon TTIN signal [#183]
1913
+ - Overhaul retries Web UI with new index page and bulk operations [#184]
1914
+
1915
+ 1.2.0
1916
+ -----------
1917
+
1918
+ - Full or partial error backtraces can optionally be stored as part of the retry
1919
+ for display in the web UI if you aren't using an error service. [#155]
1920
+
1921
+ ```ruby
1922
+ class Worker
1923
+ include Sidekiq::Worker
1924
+ sidekiq_options :backtrace => [true || 10]
1925
+ end
1926
+ ```
1927
+ - Add timeout option to kill a worker after N seconds (blackgold9)
1928
+
1929
+ ```ruby
1930
+ class HangingWorker
1931
+ include Sidekiq::Worker
1932
+ sidekiq_options :timeout => 600
1933
+ def perform
1934
+ # will be killed if it takes longer than 10 minutes
1935
+ end
1936
+ end
1937
+ ```
1938
+
1939
+ - Fix delayed extensions not available in workers [#152]
1940
+ - In test environments add the `#drain` class method to workers. This method
1941
+ executes all previously queued jobs. (panthomakos)
1942
+ - Sidekiq workers can be run inline during tests, just `require 'sidekiq/testing/inline'` (panthomakos)
1943
+ - Queues can now be deleted from the Sidekiq web UI [#154]
1944
+ - Fix unnecessary shutdown delay due to Retry Poller [#174]
1945
+
1946
+ 1.1.4
1947
+ -----------
1948
+
1949
+ - Add 24 hr expiry for basic keys set in Redis, to avoid any possible leaking.
1950
+ - Only register workers in Redis while working, to avoid lingering
1951
+ workers [#156]
1952
+ - Speed up shutdown significantly.
1953
+
1954
+ 1.1.3
1955
+ -----------
1956
+
1957
+ - Better network error handling when fetching jobs from Redis.
1958
+ Sidekiq will retry once per second until it can re-establish
1959
+ a connection. (ryanlecompte)
1960
+ - capistrano recipe now uses `bundle_cmd` if set [#147]
1961
+ - handle multi\_json API changes (sferik)
1962
+
1963
+ 1.1.2
1964
+ -----------
1965
+
1966
+ - Fix double restart with cap deploy [#137]
1967
+
1968
+ 1.1.1
1969
+ -----------
1970
+
1971
+ - Set procline for easy monitoring of Sidekiq status via "ps aux"
1972
+ - Fix race condition on shutdown [#134]
1973
+ - Fix hang with cap sidekiq:start [#131]
1974
+
1975
+ 1.1.0
1976
+ -----------
1977
+
1978
+ - The Sidekiq license has switched from GPLv3 to LGPLv3!
1979
+ - Sidekiq::Client.push now returns whether the actual Redis
1980
+ operation succeeded or not. [#123]
1981
+ - Remove UniqueJobs from the default middleware chain. Its
1982
+ functionality, while useful, is unexpected for new Sidekiq
1983
+ users. You can re-enable it with the following config.
1984
+ Read #119 for more discussion.
1985
+
1986
+ ```ruby
1987
+ Sidekiq.configure_client do |config|
1988
+ require 'sidekiq/middleware/client/unique_jobs'
1989
+ config.client_middleware do |chain|
1990
+ chain.add Sidekiq::Middleware::Client::UniqueJobs
1991
+ end
1992
+ end
1993
+ Sidekiq.configure_server do |config|
1994
+ require 'sidekiq/middleware/server/unique_jobs'
1995
+ config.server_middleware do |chain|
1996
+ chain.add Sidekiq::Middleware::Server::UniqueJobs
1997
+ end
1998
+ end
1999
+ ```
2000
+
2001
+ 1.0.0
2002
+ -----------
2003
+
2004
+ Thanks to all Sidekiq users and contributors for helping me
2005
+ get to this big milestone!
2006
+
2007
+ - Default concurrency on client-side to 5, not 25 so we don't
2008
+ create as many unused Redis connections, same as ActiveRecord's
2009
+ default pool size.
2010
+ - Ensure redis= is given a Hash or ConnectionPool.
2011
+
2012
+ 0.11.2
2013
+ -----------
2014
+
2015
+ - Implement "safe shutdown". The messages for any workers that
2016
+ are still busy when we hit the TERM timeout will be requeued in
2017
+ Redis so the messages are not lost when the Sidekiq process exits.
2018
+ [#110]
2019
+ - Work around Celluloid's small 4kb stack limit [#115]
2020
+ - Add support for a custom Capistrano role to limit Sidekiq to
2021
+ a set of machines. [#113]
2022
+
2023
+ 0.11.1
2024
+ -----------
2025
+
2026
+ - Fix fetch breaking retry when used with Redis namespaces. [#109]
2027
+ - Redis connection now just a plain ConnectionPool, not CP::Wrapper.
2028
+ - Capistrano initial deploy fix [#106]
2029
+ - Re-implemented weighted queues support (ryanlecompte)
2030
+
2031
+ 0.11.0
2032
+ -----------
2033
+
2034
+ - Client-side API changes, added sidekiq\_options for Sidekiq::Worker.
2035
+ As a side effect of this change, the client API works on Ruby 1.8.
2036
+ It's not officially supported but should work [#103]
2037
+ - NO POLL! Sidekiq no longer polls Redis, leading to lower network
2038
+ utilization and lower latency for message processing.
2039
+ - Add --version CLI option
2040
+
2041
+ 0.10.1
2042
+ -----------
2043
+
2044
+ - Add details page for jobs in retry queue (jcoene)
2045
+ - Display relative timestamps in web interface (jcoene)
2046
+ - Capistrano fixes (hinrik, bensie)
2047
+
1
2048
  0.10.0
2
2049
  -----------
3
2050