ntswf 2.0.4 → 2.0.5

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.
@@ -21,8 +21,10 @@ module Ntswf
21
21
  # Processing result. The following keys are interpreted accordingly:
22
22
  # :error:: Fails the task with the given error details.
23
23
  # :outcome:: Completes the task, storing the outcome's value (as JSON).
24
+ # :seconds_until_restart::
25
+ # Starts the task as new, after the given delay.
24
26
  # :seconds_until_retry::
25
- # Re-schedules the task after the given delay.
27
+ # Re-schedules the task, after the given delay.
26
28
  # In combination with an *:error*: Marks the task for immediate re-scheduling,
27
29
  # ignoring the value.
28
30
  # Please note that the behaviour is undefined if an *:interval* option has been set.
@@ -36,7 +36,7 @@ module Ntswf
36
36
  log("processing event #{event.inspect}")
37
37
  case event.event_type
38
38
  when 'WorkflowExecutionStarted' then schedule(task, event)
39
- when 'TimerFired' then retry_or_continue_as_new(task, task.events.first)
39
+ when 'TimerFired' then retry_or_continue_as_new(task, event)
40
40
  when 'ActivityTaskCompleted' then activity_task_completed(task, event)
41
41
  when 'ActivityTaskFailed' then activity_task_failed(task, event)
42
42
  when 'ActivityTaskTimedOut' then activity_task_timed_out(task, event)
@@ -45,8 +45,7 @@ module Ntswf
45
45
 
46
46
  def activity_task_completed(task, event)
47
47
  result = parse_result(event.attributes.result)
48
- start_timer(task, result["seconds_until_retry"]) or task.complete_workflow_execution(
49
- result: event.attributes.result)
48
+ start_timer(task, result) or task.complete_workflow_execution(result: event.attributes.result)
50
49
  end
51
50
 
52
51
  def activity_task_failed(task, event)
@@ -64,18 +63,19 @@ module Ntswf
64
63
  start_timer(task) or task.cancel_workflow_execution(details: 'activity task timeout')
65
64
  end
66
65
 
67
- def start_timer(task, interval = nil)
66
+ def start_timer(task, result = {})
67
+ interval = result["seconds_until_retry"] || result["seconds_until_restart"]
68
68
  unless interval
69
69
  options = parse_input(task.events.first.attributes.input)
70
70
  interval = options['interval']
71
71
  end
72
- task.start_timer(interval.to_i) if interval
72
+ task.start_timer(interval.to_i, control: result.to_json) if interval
73
73
  interval
74
74
  end
75
75
 
76
- def retry_or_continue_as_new(task, original_event)
77
- options = parse_input(original_event.attributes.input)
78
- if options['interval']
76
+ def retry_or_continue_as_new(task, event)
77
+ original_event = task.events.first
78
+ if to_be_continued?(task, event)
79
79
  keys = [
80
80
  :child_policy,
81
81
  :execution_start_to_close_timeout,
@@ -118,6 +118,14 @@ module Ntswf
118
118
 
119
119
  private
120
120
 
121
+ def to_be_continued?(task, event)
122
+ options = parse_input(task.events.first.attributes.input)
123
+ return true if options["interval"]
124
+ started_event = task.events.find { |e| e.event_id == event.attributes.started_event_id }
125
+ result = parse_result(started_event.attributes.to_h[:control])
126
+ result["seconds_until_restart"] || result["perform_again"]
127
+ end
128
+
121
129
  # transitional, until all apps speak the input options protocol
122
130
  def guess_app_from(data_providing_event)
123
131
  data_providing_event.workflow_execution.workflow_type.name[/\w+/]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntswf
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-12 00:00:00.000000000 Z
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk