Class: JobWorkflow::TaskDependencyWait

Inherits:
Object
  • Object
show all
Defined in:
lib/job_workflow/task_dependency_wait.rb

Overview

TaskDependencyWait holds configuration for waiting on dependent tasks.

When a task has dependencies (depends_on:), the runner waits for those tasks to complete. This class configures how long to poll before rescheduling the job.

Examples:

Default behavior (polling only, no reschedule)

task :process, depends_on: [:fetch]

Wait up to 30 seconds with polling, then reschedule

task :process, depends_on: [:fetch], dependency_wait: { poll_timeout: 30 }

Wait 60 seconds total, poll every 10 seconds, reschedule after 5 seconds

task :process, depends_on: [:fetch], dependency_wait: { poll_timeout: 60, poll_interval: 10, reschedule_delay: 5 }

Constant Summary collapse

DEFAULT_POLL_TIMEOUT =

: Integer

0
DEFAULT_POLL_INTERVAL =

: Integer

5
DEFAULT_RESCHEDULE_DELAY =

: Integer

5

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(poll_timeout: DEFAULT_POLL_TIMEOUT, poll_interval: DEFAULT_POLL_INTERVAL, reschedule_delay: DEFAULT_RESCHEDULE_DELAY) ⇒ TaskDependencyWait

: (?poll_timeout: Integer, ?poll_interval: Integer, ?reschedule_delay: Integer) -> void



45
46
47
48
49
50
51
52
53
# File 'lib/job_workflow/task_dependency_wait.rb', line 45

def initialize(
  poll_timeout: DEFAULT_POLL_TIMEOUT,
  poll_interval: DEFAULT_POLL_INTERVAL,
  reschedule_delay: DEFAULT_RESCHEDULE_DELAY
)
  @poll_timeout = poll_timeout #: Integer
  @poll_interval = poll_interval #: Integer
  @reschedule_delay = reschedule_delay #: Integer
end

Instance Attribute Details

#poll_intervalObject (readonly)

: Integer



23
24
25
# File 'lib/job_workflow/task_dependency_wait.rb', line 23

def poll_interval
  @poll_interval
end

#poll_timeoutObject (readonly)

: Integer



22
23
24
# File 'lib/job_workflow/task_dependency_wait.rb', line 22

def poll_timeout
  @poll_timeout
end

#reschedule_delayObject (readonly)

: Integer



24
25
26
# File 'lib/job_workflow/task_dependency_wait.rb', line 24

def reschedule_delay
  @reschedule_delay
end

Class Method Details

.from_primitive_value(value) ⇒ Object

: (Integer | Hash[Symbol, untyped] | nil) -> TaskDependencyWait



28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/job_workflow/task_dependency_wait.rb', line 28

def from_primitive_value(value)
  case value
  when Integer
    new(poll_timeout: value)
  when Hash
    new(
      poll_timeout: value[:poll_timeout] || DEFAULT_POLL_TIMEOUT,
      poll_interval: value[:poll_interval] || DEFAULT_POLL_INTERVAL,
      reschedule_delay: value[:reschedule_delay] || DEFAULT_RESCHEDULE_DELAY
    )
  else
    new
  end
end

Instance Method Details

#polling_keep?(started_at) ⇒ Boolean

: (Time) -> bool

Returns:

  • (Boolean)


61
62
63
64
# File 'lib/job_workflow/task_dependency_wait.rb', line 61

def polling_keep?(started_at)
  elapsed = Time.current - started_at
  elapsed < poll_timeout
end

#polling_only?Boolean

: () -> bool

Returns:

  • (Boolean)


56
57
58
# File 'lib/job_workflow/task_dependency_wait.rb', line 56

def polling_only?
  poll_timeout <= 0
end