sidekiq 8.0.6 → 8.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d76e142e5c120dc7d714ae218813bc6d3488064c291a407f0fbddc3b65b03d77
4
- data.tar.gz: db1326f0b7553125f67a9667811cc32e7768343fe2684d3aec2adef107e4e586
3
+ metadata.gz: b6411cfbee23ece1d53e775bf2726c85d236469d655eedfc8bc808277693fa1b
4
+ data.tar.gz: eef531b98d9f9e6fd5dc2fe2d2d59ac4a033134417be773b453dbf159f125156
5
5
  SHA512:
6
- metadata.gz: 99e54bdfb34e9fe257b740917cd675d959eac98566a15d53f65638095d7fe6da2966efbfd9d958c9c580034b4af49adb9cd3c94cd189b39fb7360a021f471714
7
- data.tar.gz: afedc02f36f45de8e65fe58d897ae11f7aaa9f105f9b87c2f47b01dbcc501087d5c9d2dcf3c436bc3427ec801371c43a8f7c92741e30d87cc91fad9dc34ba429
6
+ metadata.gz: 8cd9e7e77116f9a9d07ac4cf9f805ffd58d6d81fe53fa52cf5c293fb33ae6bdaff6fce351527bf87df056225794016157949c6dcb9f1d3ddc37169c105cc15ce
7
+ data.tar.gz: f1b0fceebc6a94e2d4ca441fe834f3e82a1d0702da0cd70d14cf8fb0eb2f9490d6b1842e0e5c34e4a5f4e6a13a193806920826bd8b6f816297db471fc7464313
data/Changes.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
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
4
 
5
+ 8.0.7
6
+ ----------
7
+
8
+ - The `:discard` option for `sidekiq_retries_exhausted` and `sidekiq_retry_in`
9
+ now calls death handlers, otherwise it could break other Sidekiq
10
+ functionality. [#6741]
11
+ - Provide a Plain log formatter which does not colorize output [#6778]
12
+ - Job iteration now exposes `current_object` for easy access within the `around_iteration` callback [#6774]
13
+ - Fix JS race condition which could skip confirmation dialogs when Live Polling [#6768]
14
+ - Fix edge case which could lose CurrentAttributes [#6767]
15
+ - Update UK locale [#6776]
16
+
5
17
  8.0.6
6
18
  ----------
7
19
 
@@ -32,8 +32,14 @@ module Sidekiq
32
32
  @_runtime = 0
33
33
  @_args = nil
34
34
  @_cancelled = nil
35
+ @current_object = nil
35
36
  end
36
37
 
38
+ # Access to the current object while iterating.
39
+ # This value is not reset so the latest element is
40
+ # explicitly available to cleanup/complete callbacks.
41
+ attr_reader :current_object
42
+
37
43
  def arguments
38
44
  @_args
39
45
  end
@@ -203,6 +209,7 @@ module Sidekiq
203
209
  enumerator.each do |object, cursor|
204
210
  found_record = true
205
211
  @_cursor = cursor
212
+ @current_object = object
206
213
 
207
214
  is_interrupted = interrupted?
208
215
  if ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) - state_flushed_at >= STATE_FLUSH_INTERVAL || is_interrupted
@@ -27,7 +27,7 @@ module Sidekiq
27
27
  # attribute to expose the underlying thing.
28
28
  h = {
29
29
  jid: job_hash["jid"],
30
- class: job_hash["display_class"] || job_hash["wrapped"] || job_hash["class"]
30
+ class: job_hash["wrapped"] || job_hash["class"]
31
31
  }
32
32
  h[:bid] = job_hash["bid"] if job_hash.has_key?("bid")
33
33
  h[:tags] = job_hash["tags"] if job_hash.has_key?("tags")
@@ -186,7 +186,7 @@ module Sidekiq
186
186
  strategy, delay = delay_for(jobinst, count, exception, msg)
187
187
  case strategy
188
188
  when :discard
189
- return # poof!
189
+ return run_death_handlers(msg, exception)
190
190
  when :kill
191
191
  return retries_exhausted(jobinst, msg, exception)
192
192
  end
@@ -255,13 +255,16 @@ module Sidekiq
255
255
  handle_exception(e, {context: "Error calling retries_exhausted", job: msg})
256
256
  end
257
257
 
258
- return if rv == :discard # poof!
259
- send_to_morgue(msg) unless msg["dead"] == false
258
+ to_morgue = !(msg["dead"] == false || rv == :discard)
259
+ send_to_morgue(msg) if to_morgue
260
+ run_death_handlers(msg, exception)
261
+ end
260
262
 
263
+ def run_death_handlers(job, exception)
261
264
  @capsule.config.death_handlers.each do |handler|
262
- handler.call(msg, exception)
265
+ handler.call(job, exception)
263
266
  rescue => e
264
- handle_exception(e, {context: "Error calling death handler", job: msg})
267
+ handle_exception(e, {context: "Error calling death handler", job: job})
265
268
  end
266
269
  end
267
270
 
@@ -24,14 +24,15 @@ module Sidekiq
24
24
 
25
25
  class Logger < ::Logger
26
26
  module Formatters
27
- COLORS = {
28
- "DEBUG" => "\e[1;32mDEBUG\e[0m", # green
29
- "INFO" => "\e[1;34mINFO \e[0m", # blue
30
- "WARN" => "\e[1;33mWARN \e[0m", # yellow
31
- "ERROR" => "\e[1;31mERROR\e[0m", # red
32
- "FATAL" => "\e[1;35mFATAL\e[0m" # pink
33
- }
34
27
  class Base < ::Logger::Formatter
28
+ COLORS = {
29
+ "DEBUG" => "\e[1;32mDEBUG\e[0m", # green
30
+ "INFO" => "\e[1;34mINFO \e[0m", # blue
31
+ "WARN" => "\e[1;33mWARN \e[0m", # yellow
32
+ "ERROR" => "\e[1;31mERROR\e[0m", # red
33
+ "FATAL" => "\e[1;35mFATAL\e[0m" # pink
34
+ }
35
+
35
36
  def tid
36
37
  Thread.current["sidekiq_tid"] ||= (Thread.current.object_id ^ ::Process.pid).to_s(36)
37
38
  end
@@ -50,13 +51,19 @@ module Sidekiq
50
51
 
51
52
  class Pretty < Base
52
53
  def call(severity, time, program_name, message)
53
- "#{Formatters::COLORS[severity]} #{time.utc.iso8601(3)} pid=#{::Process.pid} tid=#{tid}#{format_context}: #{message}\n"
54
+ "#{COLORS[severity]} #{time.utc.iso8601(3)} pid=#{::Process.pid} tid=#{tid}#{format_context}: #{message}\n"
55
+ end
56
+ end
57
+
58
+ class Plain < Base
59
+ def call(severity, time, program_name, message)
60
+ "#{severity} #{time.utc.iso8601(3)} pid=#{::Process.pid} tid=#{tid}#{format_context}: #{message}\n"
54
61
  end
55
62
  end
56
63
 
57
64
  class WithoutTimestamp < Pretty
58
65
  def call(severity, time, program_name, message)
59
- "#{Formatters::COLORS[severity]} pid=#{::Process.pid} tid=#{tid} #{format_context}: #{message}\n"
66
+ "#{COLORS[severity]} pid=#{::Process.pid} tid=#{tid}#{format_context}: #{message}\n"
60
67
  end
61
68
  end
62
69
 
@@ -50,7 +50,7 @@ module Sidekiq
50
50
  @cattrs = cattrs
51
51
  end
52
52
 
53
- def call(_, job, _, &block)
53
+ def call(_, job, *, &block)
54
54
  klass_attrs = {}
55
55
 
56
56
  @cattrs.each do |(key, strklass)|
@@ -93,6 +93,7 @@ module Sidekiq
93
93
  def persist(klass_or_array, config = Sidekiq.default_configuration)
94
94
  cattrs = build_cattrs_hash(klass_or_array)
95
95
 
96
+ config.client_middleware.prepend Load, cattrs
96
97
  config.client_middleware.add Save, cattrs
97
98
  config.server_middleware.prepend Load, cattrs
98
99
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sidekiq
4
- VERSION = "8.0.6"
4
+ VERSION = "8.0.7"
5
5
  MAJOR = 8
6
6
 
7
7
  def self.gem_version
File without changes
File without changes
@@ -18,15 +18,6 @@ function addListeners() {
18
18
  })
19
19
  });
20
20
 
21
- document.querySelectorAll("input[data-confirm]").forEach(node => {
22
- node.addEventListener("click", event => {
23
- if (!window.confirm(node.getAttribute("data-confirm"))) {
24
- event.preventDefault();
25
- event.stopPropagation();
26
- }
27
- })
28
- })
29
-
30
21
  document.querySelectorAll("[data-toggle]").forEach(node => {
31
22
  node.addEventListener("click", addDataToggleListeners)
32
23
  })
@@ -178,4 +169,20 @@ function updateLocale(event) {
178
169
 
179
170
  function updateProgressBars() {
180
171
  document.querySelectorAll('.progress-bar').forEach(bar => { bar.style.width = bar.dataset.width + "%"})
181
- }
172
+ }
173
+
174
+ function handleConfirmDialog (event) {
175
+ const target = event.target
176
+
177
+ if (target.localName !== "input") { return }
178
+ if (!target.hasAttribute("data-confirm")) { return }
179
+
180
+ const confirmMessage = target.getAttribute("data-confirm")
181
+
182
+ if (!window.confirm(confirmMessage)) {
183
+ event.preventDefault()
184
+ event.stopPropagation()
185
+ }
186
+ }
187
+
188
+ document.addEventListener("click", handleConfirmDialog)
data/web/locales/uk.yml CHANGED
@@ -14,8 +14,8 @@ uk:
14
14
  CreatedAt: Створено
15
15
  CurrentMessagesInQueue: Поточні задачі у черзі <span class='title'>%{queue}</span>
16
16
  Dashboard: Панель керування
17
- Dead: Вбитих
18
- DeadJobs: Вбиті задачі
17
+ Dead: Зупинених
18
+ DeadJobs: Зупинені задачі
19
19
  Delete: Видалити
20
20
  DeleteAll: Видалити усі
21
21
  Deploy: Деплой
@@ -33,8 +33,8 @@ uk:
33
33
  History: Історія
34
34
  Job: Задача
35
35
  Jobs: Задачі
36
- Kill: Вбити
37
- KillAll: Вбити все
36
+ Kill: Зупинити
37
+ KillAll: Зупинити все
38
38
  LastRetry: Остання спроба
39
39
  Latency: Затримка
40
40
  LivePoll: Постійне опитування
@@ -42,7 +42,7 @@ uk:
42
42
  Name: Назва
43
43
  Namespace: Простір імен
44
44
  NextRetry: Наступна спроба
45
- NoDeadJobsFound: Вбитих задач не знайдено
45
+ NoDeadJobsFound: Зупинених задач не знайдено
46
46
  NoRetriesFound: Спроб не знайдено
47
47
  NoScheduledFound: Запланованих задач не знайдено
48
48
  NotYetEnqueued: Ще не в черзі
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.6
4
+ version: 8.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Perham