Class: ActiveJob::Continuation::Step
Relationships & Source Files | |
Inherits: | Object |
Defined in: | activejob/lib/active_job/continuation/step.rb |
Overview
Represents a step within a continuable job.
When a step is completed, it is recorded in the job’s continuation state. If the job is interrupted, it will be resumed from after the last completed step.
Steps also have an optional cursor that can be used to track progress within the step. If a job is interrupted during a step, the cursor will be saved and passed back when the job is resumed.
It is the responsibility of the code in the step to use the cursor correctly to resume from where it left off.
Class Method Summary
- .new(name, cursor, job:, resumed:) ⇒ Step constructor
Instance Attribute Summary
-
#advanced? ⇒ Boolean
readonly
Has the cursor been advanced during this job execution?
-
#cursor
readonly
The cursor for the step.
-
#name
readonly
The name of the step.
-
#resumed? ⇒ Boolean
readonly
Has this step been resumed from a previous job execution?
- #initial_cursor readonly private
- #job readonly private
Instance Method Summary
-
#advance!(from: nil)
Advance the cursor from the current or supplied value.
-
#checkpoint!
Check if the job should be interrupted, and if so raise an
Interrupt
exception. - #description
-
#set!(cursor)
Set the cursor and interrupt the job if necessary.
- #to_a
Constructor Details
.new(name, cursor, job:, resumed:) ⇒ Step
Instance Attribute Details
#advanced? ⇒ Boolean
(readonly)
Has the cursor been advanced during this job execution?
# File 'activejob/lib/active_job/continuation/step.rb', line 67
def advanced? initial_cursor != cursor end
#cursor (readonly)
The cursor for the step.
# File 'activejob/lib/active_job/continuation/step.rb', line 23
attr_reader :cursor
#initial_cursor (readonly, private)
[ GitHub ]# File 'activejob/lib/active_job/continuation/step.rb', line 80
attr_reader :initial_cursor, :job
#job (readonly, private)
[ GitHub ]# File 'activejob/lib/active_job/continuation/step.rb', line 80
attr_reader :initial_cursor, :job
#name (readonly)
The name of the step.
# File 'activejob/lib/active_job/continuation/step.rb', line 20
attr_reader :name
#resumed? ⇒ Boolean
(readonly)
Has this step been resumed from a previous job execution?
# File 'activejob/lib/active_job/continuation/step.rb', line 62
def resumed? @resumed end
Instance Method Details
#advance!(from: nil)
Advance the cursor from the current or supplied value
The cursor will be advanced by calling the succ
method on the cursor. An UnadvanceableCursorError error will be raised if the cursor does not implement succ
.
# File 'activejob/lib/active_job/continuation/step.rb', line 49
def advance!(from: nil) from = cursor if from.nil? begin to = from.succ rescue NoMethodError raise UnadvanceableCursorError, "Cursor class '#{from.class}' does not implement 'succ'" end set! to end
#checkpoint!
Check if the job should be interrupted, and if so raise an Interrupt
exception. The job will be requeued for retry.
# File 'activejob/lib/active_job/continuation/step.rb', line 35
def checkpoint! job.checkpoint! end
#description
[ GitHub ]#set!(cursor)
Set the cursor and interrupt the job if necessary.
# File 'activejob/lib/active_job/continuation/step.rb', line 40
def set!(cursor) @cursor = cursor checkpoint! end