Skip to content

Commit

Permalink
[SQUASH] Prefix max_job_runtime class attr
Browse files Browse the repository at this point in the history
  • Loading branch information
sambostock committed Jul 4, 2022
1 parent 667fdd1 commit 642cd89
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 18 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

- [241](https://github.com/Shopify/job-iteration/pull/241) - Require Ruby 2.7+, dropping 2.6 support
- [241](https://github.com/Shopify/job-iteration/pull/241) - Require Rails 6.0+, dropping 5.2 support
- [240](https://github.com/Shopify/job-iteration/pull/240) - Allow setting inheritable per-job `max_job_runtime`
- [240](https://github.com/Shopify/job-iteration/pull/240) - Allow setting inheritable per-job `job_iteration_max_job_runtime`

## v1.3.6 (Mar 9, 2022)

Expand Down
4 changes: 2 additions & 2 deletions guides/best-practices.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,13 @@ Use this accessor to tweak how often you'd like the job to interrupt itself.

### Per job max job runtime

For more granular control, `max_job_runtime` can be set **per-job class**. This allows both incremental adoption, as well as using a conservative global setting, and an aggressive setting on a per-job basis.
For more granular control, `job_iteration_max_job_runtime` can be set **per-job class**. This allows both incremental adoption, as well as using a conservative global setting, and an aggressive setting on a per-job basis.

```ruby
class MyJob < ApplicationJob
include JobIteration::Iteration

self.max_job_runtime = 3.minutes
self.job_iteration_max_job_runtime = 3.minutes

# ...
```
Expand Down
11 changes: 6 additions & 5 deletions lib/job-iteration/iteration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def inspected_cursor
define_callbacks :complete

class_attribute(
:max_job_runtime,
:job_iteration_max_job_runtime,
instance_writer: false,
instance_predicate: false,
default: JobIteration.max_job_runtime,
Expand All @@ -51,15 +51,16 @@ def inspected_cursor
end

module PrependedClassMethods
def max_job_runtime=(new)
existing = max_job_runtime
def job_iteration_max_job_runtime=(new)
existing = job_iteration_max_job_runtime

if existing && (!new || new > existing)
existing_label = existing.inspect
new_label = new ? new.inspect : "#{new.inspect} (no limit)"
raise(
ArgumentError,
"max_job_runtime may only decrease; #{self} tried to increase it from #{existing_label} to #{new_label}",
"job_iteration_max_job_runtime may only decrease; " \
"#{self} tried to increase it from #{existing_label} to #{new_label}",
)
end

Expand Down Expand Up @@ -288,7 +289,7 @@ def output_interrupt_summary
end

def job_should_exit?
if max_job_runtime && start_time && (Time.now.utc - start_time) > max_job_runtime
if job_iteration_max_job_runtime && start_time && (Time.now.utc - start_time) > job_iteration_max_job_runtime
return true
end

Expand Down
21 changes: 11 additions & 10 deletions test/unit/iteration_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ def test_per_class_max_job_runtime_with_default_global
freeze_time
parent = build_slow_job_class(iterations: 3, iteration_duration: 30.seconds)
child = Class.new(parent) do
self.max_job_runtime = 1.minute
self.job_iteration_max_job_runtime = 1.minute
end

parent.perform_now
Expand All @@ -270,7 +270,7 @@ def test_per_class_max_job_runtime_with_global_set_to_nil
with_global_max_job_runtime(nil) do
parent = build_slow_job_class(iterations: 3, iteration_duration: 30.seconds)
child = Class.new(parent) do
self.max_job_runtime = 1.minute
self.job_iteration_max_job_runtime = 1.minute
end

parent.perform_now
Expand All @@ -286,7 +286,7 @@ def test_per_class_max_job_runtime_with_global_set
with_global_max_job_runtime(1.minute) do
parent = build_slow_job_class(iterations: 3, iteration_duration: 30.seconds)
child = Class.new(parent) do
self.max_job_runtime = 30.seconds
self.job_iteration_max_job_runtime = 30.seconds
end

parent.perform_now
Expand All @@ -305,11 +305,12 @@ def test_max_job_runtime_cannot_unset_global
end

error = assert_raises(ArgumentError) do
klass.max_job_runtime = nil
klass.job_iteration_max_job_runtime = nil
end

assert_equal(
"max_job_runtime may only decrease; #{klass} tried to increase it from 30 seconds to nil (no limit)",
"job_iteration_max_job_runtime may only decrease; " \
"#{klass} tried to increase it from 30 seconds to nil (no limit)",
error.message,
)
end
Expand All @@ -322,11 +323,11 @@ def test_max_job_runtime_cannot_be_higher_than_global
end

error = assert_raises(ArgumentError) do
klass.max_job_runtime = 1.minute
klass.job_iteration_max_job_runtime = 1.minute
end

assert_equal(
"max_job_runtime may only decrease; #{klass} tried to increase it from 30 seconds to 1 minute",
"job_iteration_max_job_runtime may only decrease; #{klass} tried to increase it from 30 seconds to 1 minute",
error.message,
)
end
Expand All @@ -336,16 +337,16 @@ def test_max_job_runtime_cannot_be_higher_than_parent
with_global_max_job_runtime(1.minute) do
parent = Class.new(ActiveJob::Base) do
include JobIteration::Iteration
self.max_job_runtime = 30.seconds
self.job_iteration_max_job_runtime = 30.seconds
end
child = Class.new(parent)

error = assert_raises(ArgumentError) do
child.max_job_runtime = 45.seconds
child.job_iteration_max_job_runtime = 45.seconds
end

assert_equal(
"max_job_runtime may only decrease; #{child} tried to increase it from 30 seconds to 45 seconds",
"job_iteration_max_job_runtime may only decrease; #{child} tried to increase it from 30 seconds to 45 seconds",
error.message,
)
end
Expand Down

0 comments on commit 642cd89

Please sign in to comment.