inst-jobs 3.1.7 → 3.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0475c3b076cb2d06a380ab5439899071d7b242f0b984efc656c07cdac42a30ef
4
- data.tar.gz: 6b327fe5fa9e90ff3e0a9cc6fbbf3bf141fac324999c7b3fe4b86c60196ddab0
3
+ metadata.gz: 4ecc79cbf0af3c0205febacfb4124bf1b86183132fd28f1330b0fb9c097efe62
4
+ data.tar.gz: 31f7cb19c7ecc6b71833dcc31b998642fec44e06d1bfbaefc2ed868fe331688a
5
5
  SHA512:
6
- metadata.gz: fc255ab122c9744ba5222125898d43d12e668d091c5ad7f034693e5ce6d224be21c107caf67261d3bdef03b55f481baa4d0d3912e3c9bff8e1039d8ff12f3f35
7
- data.tar.gz: 6a7d73a994637c0241d54da38e98a8c25008345622b9410a867da603740c6eb8133e7bb1d36e8dd62d479148e7bf43bc5e0ea0f1a59f63dd1f0b8a7763467e19
6
+ metadata.gz: 1d76db82af500258ac736d6b3819fffcccc0afe81a4c44cf01c540252695f3a3b2d120c00576f4ee02459e0808ddcb1d19c25ddb16c41945fc103718fa8011e3
7
+ data.tar.gz: 6f6efc00e1a707f5e984455db881281f56eac2b06fd17ee75a5a574c883fcdcb7c99b1483d3d3cadb6d501d6ee4c98b031b997e285bdf598bbc257cf6fb83364
@@ -62,6 +62,9 @@ module Delayed
62
62
  kwargs[:singleton] = singleton
63
63
 
64
64
  raise ArgumentError, "Only one of strand or n_strand can be used" if strand && n_strand
65
+ if (strand || n_strand) && run_at && run_at > Job.db_time_now + Settings.stranded_run_at_grace_period
66
+ raise ArgumentError, "Do not use run_at with strand; you may inadvertently clog the strand"
67
+ end
65
68
 
66
69
  # If two parameters are given to n_strand, the first param is used
67
70
  # as the strand name for looking up the Setting, while the second
@@ -1,7 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
- PerformableMethod = Struct.new(:object, :method, :args, :kwargs, :fail_cb, :permanent_fail_cb, :sender) do # rubocop:disable Lint/StructNewOverride
4
+ PerformableMethod = Struct.new(:object,
5
+ :method, # rubocop:disable Lint/StructNewOverride
6
+ :args,
7
+ :kwargs,
8
+ :fail_cb,
9
+ :permanent_fail_cb,
10
+ :sender,
11
+ :sender_is_object,
12
+ :sender_is_class) do
5
13
  def initialize(object, method, args: [], kwargs: {}, on_failure: nil, on_permanent_failure: nil, sender: nil)
6
14
  raise NoMethodError, "undefined method `#{method}' for #{object.inspect}" unless object.respond_to?(method, true)
7
15
 
@@ -11,13 +19,8 @@ module Delayed
11
19
  self.method = method.to_sym
12
20
  self.fail_cb = on_failure
13
21
  self.permanent_fail_cb = on_permanent_failure
14
- self.sender = sender
15
- begin
16
- YAML.load(YAML.dump(sender))
17
- rescue
18
- # if for some reason you can't dump the sender, just drop it
19
- self.sender = nil
20
- end
22
+ self.sender_is_object = sender.equal?(object)
23
+ self.sender_is_class = sender.is_a?(object.class)
21
24
  end
22
25
 
23
26
  def display_name
@@ -32,14 +35,15 @@ module Delayed
32
35
  def perform
33
36
  kwargs = self.kwargs || {}
34
37
 
35
- sender_is_object = sender == object
36
- sender_is_class = sender.is_a?(object.class)
38
+ # back-compat for jobs queued before we assigned these in initialize
39
+ self.sender_is_object = sender == object if sender_is_object.nil?
40
+ self.sender_is_class = sender.is_a?(object.class) if sender_is_class.nil?
37
41
 
38
- if sender.nil? || sender_is_object || (sender_is_class && object.protected_methods.include?(method))
42
+ if sender_is_object || (sender_is_class && object.protected_methods.include?(method))
39
43
  if kwargs.empty?
40
- object.send(method, *args)
44
+ object.__send__(method, *args)
41
45
  else
42
- object.send(method, *args, **kwargs)
46
+ object.__send__(method, *args, **kwargs)
43
47
  end
44
48
  elsif kwargs.empty?
45
49
  object.public_send(method, *args)
@@ -26,6 +26,7 @@ module Delayed
26
26
  :sleep_delay,
27
27
  :sleep_delay_stagger,
28
28
  :slow_exit_timeout,
29
+ :stranded_run_at_grace_period,
29
30
  :worker_health_check_type,
30
31
  :worker_health_check_config,
31
32
  :worker_procname_prefix
@@ -132,6 +133,7 @@ module Delayed
132
133
  self.fetch_batch_size = 5
133
134
  self.select_random_from_batch = false
134
135
  self.silence_periodic_log = false
136
+ self.stranded_run_at_grace_period = 10
135
137
 
136
138
  self.num_strands = ->(_strand_name) {}
137
139
  self.default_job_options = -> { {} }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delayed
4
- VERSION = "3.1.7"
4
+ VERSION = "3.1.8"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-jobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.7
4
+ version: 3.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2023-01-13 00:00:00.000000000 Z
13
+ date: 2023-04-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord