aws-flow 1.0.8 → 1.0.9
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.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/Rakefile +18 -31
- data/aws-flow.gemspec +1 -1
- data/lib/aws/decider.rb +1 -2
- data/lib/aws/decider/activity.rb +99 -53
- data/lib/aws/decider/activity_definition.rb +43 -7
- data/lib/aws/decider/async_decider.rb +56 -57
- data/lib/aws/decider/async_retrying_executor.rb +4 -5
- data/lib/aws/decider/data_converter.rb +2 -2
- data/lib/aws/decider/decider.rb +46 -41
- data/lib/aws/decider/decision_context.rb +2 -2
- data/lib/aws/decider/exceptions.rb +6 -6
- data/lib/aws/decider/executor.rb +15 -11
- data/lib/aws/decider/flow_defaults.rb +54 -22
- data/lib/aws/decider/generic_client.rb +7 -7
- data/lib/aws/decider/history_helper.rb +0 -0
- data/lib/aws/decider/implementation.rb +5 -5
- data/lib/aws/decider/options.rb +285 -155
- data/lib/aws/decider/state_machines.rb +10 -10
- data/lib/aws/decider/task_handler.rb +5 -5
- data/lib/aws/decider/task_poller.rb +152 -15
- data/lib/aws/decider/utilities.rb +14 -14
- data/lib/aws/decider/version.rb +1 -1
- data/lib/aws/decider/worker.rb +21 -20
- data/lib/aws/decider/workflow_client.rb +78 -31
- data/lib/aws/decider/workflow_clock.rb +1 -1
- data/lib/aws/decider/workflow_definition.rb +5 -5
- data/lib/aws/decider/workflow_definition_factory.rb +1 -1
- data/lib/aws/decider/workflow_enabled.rb +1 -1
- data/lib/aws/flow/async_backtrace.rb +19 -18
- data/lib/aws/flow/async_scope.rb +32 -16
- data/lib/aws/flow/begin_rescue_ensure.rb +61 -56
- data/lib/aws/flow/fiber.rb +14 -6
- data/lib/aws/flow/flow_utils.rb +9 -6
- data/lib/aws/flow/future.rb +43 -18
- data/lib/aws/flow/implementation.rb +34 -18
- data/lib/aws/flow/simple_dfa.rb +12 -4
- data/lib/aws/flow/tasks.rb +120 -86
- data/{test/aws → spec/aws/integration}/integration_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/async_backtrace_spec.rb +1 -0
- data/{test/aws → spec/aws/unit}/async_scope_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/begin_rescue_ensure_spec.rb +90 -2
- data/{test/aws → spec/aws/unit}/decider_spec.rb +41 -53
- data/{test/aws → spec/aws/unit}/external_task_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/factories.rb +0 -0
- data/{test/aws → spec/aws/unit}/fiber_condition_variable_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/fiber_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/flow_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/future_spec.rb +0 -0
- data/{test/aws → spec/aws/unit}/preinclude_tests.rb +0 -0
- data/{test/aws → spec/aws/unit}/rubyflow.rb +0 -0
- data/{test/aws → spec/aws/unit}/simple_dfa_spec.rb +0 -0
- data/{test/aws → spec}/spec_helper.rb +0 -0
- metadata +30 -30
@@ -47,7 +47,7 @@ module AWS
|
|
47
47
|
method_names.each { |method_name| @option_map[method_name.to_sym] = options }
|
48
48
|
end
|
49
49
|
|
50
|
-
#
|
50
|
+
# @api private
|
51
51
|
def bail_if_external
|
52
52
|
raise "You cannot use this function outside of a workflow definition" if Utilities::is_external
|
53
53
|
end
|
@@ -73,10 +73,10 @@ module AWS
|
|
73
73
|
#
|
74
74
|
def send_async(task, *args, &block)
|
75
75
|
bail_if_external
|
76
|
-
# If there is no block, just make a block for immediate return
|
76
|
+
# If there is no block, just make a block for immediate return.
|
77
77
|
if block.nil?
|
78
78
|
modified_options = Proc.new{ {:return_on_start => true } }
|
79
|
-
# If there is a block, and it doesn't take any arguments, it will evaluate to a hash. Add an option to the hash
|
79
|
+
# If there is a block, and it doesn't take any arguments, it will evaluate to a hash. Add an option to the hash.
|
80
80
|
elsif block.arity == 0
|
81
81
|
modified_options = Proc.new do
|
82
82
|
result = block.call
|
@@ -87,7 +87,7 @@ module AWS
|
|
87
87
|
end
|
88
88
|
# Otherwise, it will expect an options object passed in, and will do
|
89
89
|
# things on that object. So make our new Proc do that, and add an
|
90
|
-
# option
|
90
|
+
# option.
|
91
91
|
else modified_options = Proc.new do |x|
|
92
92
|
result = block.call(x)
|
93
93
|
# Same as the above dup, we'll copy to avoid any possible mutation
|
@@ -110,7 +110,7 @@ module AWS
|
|
110
110
|
|
111
111
|
|
112
112
|
# Used by {#retry}
|
113
|
-
#
|
113
|
+
# @api private
|
114
114
|
def _retry_with_options(lambda_to_execute, retry_function, retry_options, args = NoInput.new)
|
115
115
|
retry_policy = RetryPolicy.new(retry_function, retry_options)
|
116
116
|
output = Utilities::AddressableFuture.new
|
@@ -143,7 +143,7 @@ module AWS
|
|
143
143
|
#
|
144
144
|
# @param (see #retry)
|
145
145
|
#
|
146
|
-
#
|
146
|
+
# @api private
|
147
147
|
def _retry(method_name, retry_function, block, args = NoInput.new)
|
148
148
|
bail_if_external
|
149
149
|
retry_options = Utilities::interpret_block_for_options(ExponentialRetryOptions, block)
|
@@ -157,7 +157,7 @@ module AWS
|
|
157
157
|
# The activity to retry.
|
158
158
|
#
|
159
159
|
# @param retry_function
|
160
|
-
# The retry function to use
|
160
|
+
# The retry function to use.
|
161
161
|
#
|
162
162
|
# @param args
|
163
163
|
# Arguments to send to the method named in the `method_name` parameter.
|
File without changes
|
@@ -16,16 +16,16 @@
|
|
16
16
|
module AWS
|
17
17
|
module Flow
|
18
18
|
|
19
|
-
# Creates a new {WorkflowClient} instance
|
19
|
+
# Creates a new {WorkflowClient} instance.
|
20
20
|
#
|
21
21
|
# @param service
|
22
|
-
#
|
22
|
+
# An {http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow.html Amazon SWF service} reference. This is usually
|
23
23
|
# created with:
|
24
24
|
#
|
25
25
|
# swf = AWS::SimpleWorkflow.new
|
26
26
|
#
|
27
27
|
# @param domain
|
28
|
-
# The SWF {http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/Domain.html Domain} to use for this
|
28
|
+
# The Amazon SWF {http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/Domain.html Domain} to use for this
|
29
29
|
# workflow client. This is usually created on the service object, such as:
|
30
30
|
#
|
31
31
|
# domain = swf.domains.create('my-domain', 10)
|
@@ -68,13 +68,13 @@ module AWS
|
|
68
68
|
|
69
69
|
module_function :with_retry
|
70
70
|
|
71
|
-
#
|
71
|
+
# @api private
|
72
72
|
def self.workflow_client(service = nil, domain = nil, &block)
|
73
73
|
options = Utilities::interpret_block_for_options(StartWorkflowOptions, block)
|
74
74
|
if ! Utilities::is_external
|
75
75
|
service = AWS::SimpleWorkflow.new
|
76
76
|
# So, we probably shouldn't be doing this, but we need to slightly
|
77
|
-
# redesign where this is available from
|
77
|
+
# redesign where this is available from.
|
78
78
|
domain = FlowFiber.current[:decision_context].workflow_context.decision_task.workflow_execution.domain
|
79
79
|
else
|
80
80
|
if service.nil? || domain.nil?
|
data/lib/aws/decider/options.rb
CHANGED
@@ -18,6 +18,8 @@ module AWS
|
|
18
18
|
|
19
19
|
# The base class for option defaults in the AWS Flow Framework for Ruby.
|
20
20
|
class Defaults
|
21
|
+
|
22
|
+
# @api private
|
21
23
|
def method_missing(method_name, *args, &block)
|
22
24
|
return nil
|
23
25
|
end
|
@@ -27,11 +29,14 @@ module AWS
|
|
27
29
|
class Options
|
28
30
|
extend Utilities::UpwardLookups
|
29
31
|
include Utilities::UpwardLookups::InstanceMethods
|
32
|
+
|
33
|
+
# @api private
|
30
34
|
def method_missing(method_name, *args, &block)
|
31
35
|
return nil
|
32
36
|
end
|
33
37
|
|
34
|
-
# Sets the default classes on a child class (a class derived from
|
38
|
+
# Sets the default classes on a child class (a class derived from
|
39
|
+
# {Options}).
|
35
40
|
def self.inherited(child)
|
36
41
|
child.precursors ||= []
|
37
42
|
default_classes = child.ancestors.map do |precursor|
|
@@ -40,23 +45,27 @@ module AWS
|
|
40
45
|
child.instance_variable_set("@default_classes", default_classes)
|
41
46
|
end
|
42
47
|
|
48
|
+
# @api private
|
43
49
|
class << self
|
44
|
-
# The set of default options. These are used when `use_defaults` is set
|
50
|
+
# The set of default options. These are used when `use_defaults` is set
|
51
|
+
# to `true` on {#initialize}.
|
45
52
|
attr_accessor :default_classes
|
46
53
|
end
|
47
54
|
|
48
|
-
# Merges specified options with the set of options already held by the
|
55
|
+
# Merges specified options with the set of options already held by the
|
56
|
+
# class, and returns the result.
|
49
57
|
#
|
50
58
|
# @return [Hash]
|
51
59
|
# The merged set of options, defined as a hash.
|
52
60
|
#
|
53
61
|
# @param [Options] options
|
54
|
-
# An {Options}-derived class containing a set of options to use if this
|
55
|
-
# add to this one if this
|
62
|
+
# An {Options}-derived class containing a set of options to use if this
|
63
|
+
# instance has no options, or options to add to this one if this
|
64
|
+
# instance already has options.
|
56
65
|
#
|
57
66
|
# @param [Hash] extra_to_add
|
58
|
-
# A hash containing extra options to merge with the options held by the
|
59
|
-
#
|
67
|
+
# A hash containing extra options to merge with the options held by the
|
68
|
+
# class and those provided in the `options` parameter.
|
60
69
|
#
|
61
70
|
def get_options(options, extra_to_add = {})
|
62
71
|
options = self.class.held_properties.compact if options.empty?
|
@@ -69,12 +78,14 @@ module AWS
|
|
69
78
|
# Creates a new {Options} instance.
|
70
79
|
#
|
71
80
|
# @param [Hash] hash
|
72
|
-
# A hash of values to use as the default options for this
|
73
|
-
# classes derived from
|
81
|
+
# *Optional*. A hash of values to use as the default options for this
|
82
|
+
# instance. The members of this hash are defined by classes derived from
|
83
|
+
# {Options}.
|
74
84
|
#
|
75
85
|
# @param [true, false] use_defaults
|
76
|
-
# In derived classes, this parameter is used to tell the
|
77
|
-
#
|
86
|
+
# *Optional*. In derived classes, this parameter is used to tell the
|
87
|
+
# constructor to use the set of default options as the runtime options.
|
88
|
+
# This has no effect in the base {Options} class.
|
78
89
|
#
|
79
90
|
def initialize(hash={}, use_defaults = false)
|
80
91
|
@precursors ||= []
|
@@ -91,20 +102,38 @@ module AWS
|
|
91
102
|
|
92
103
|
end
|
93
104
|
|
105
|
+
# Defaults for the {WorkerOptions} class.
|
106
|
+
#
|
94
107
|
class WorkerDefaults < Defaults
|
108
|
+
|
109
|
+
# Whether to use Ruby's `fork` for launching new workers. The default is
|
110
|
+
# `true`. On Windows, you should override this default value and set
|
111
|
+
# `use_forking` to `false`.
|
112
|
+
#
|
113
|
+
# @return [Boolean]
|
114
|
+
# Returns `true`.
|
115
|
+
#
|
95
116
|
def use_forking; true; end
|
96
117
|
end
|
97
118
|
|
98
|
-
# Options for
|
119
|
+
# Options for activity and workflow workers.
|
99
120
|
#
|
100
121
|
# @!attribute logger
|
101
122
|
# The logger to use for the worker.
|
102
123
|
#
|
103
|
-
# @!attribute poller_workers
|
104
|
-
# The logger to use for the worker.
|
105
|
-
#
|
106
124
|
# @!attribute execution_workers
|
107
|
-
# The
|
125
|
+
# The maximum number of execution workers that can be running at once. You
|
126
|
+
# can set this to zero or `nil`, in which case the default value of 20
|
127
|
+
# will be used.
|
128
|
+
#
|
129
|
+
# @!attribute use_forking
|
130
|
+
# Whether to use Ruby's `fork` for launching new workers. The default is
|
131
|
+
# `true`.
|
132
|
+
#
|
133
|
+
# On Windows, this should be set to `false` unless you are running Ruby
|
134
|
+
# under Cygwin. For more information, see [Important
|
135
|
+
# Notes](http://docs.aws.amazon.com/amazonswf/latest/awsrbflowguide/important-notes.html#forking-windows-note)
|
136
|
+
# in the *AWS Flow Framework for Ruby Developer Guide*.
|
108
137
|
#
|
109
138
|
class WorkerOptions < Options
|
110
139
|
property(:logger, [])
|
@@ -115,25 +144,29 @@ module AWS
|
|
115
144
|
default_classes << WorkerDefaults.new
|
116
145
|
end
|
117
146
|
|
118
|
-
# Options for WorkflowClient#signal_workflow_execution.
|
147
|
+
# Options for {WorkflowClient#signal_workflow_execution}.
|
119
148
|
#
|
120
149
|
# @!attribute control
|
121
|
-
# Optional data attached to the signal that can be used by the workflow
|
150
|
+
# Optional data attached to the signal that can be used by the workflow
|
151
|
+
# execution.
|
122
152
|
#
|
123
153
|
# @!attribute domain
|
124
|
-
# *Required*. The name of the domain containing the workflow execution to
|
154
|
+
# *Required*. The name of the domain containing the workflow execution to
|
155
|
+
# signal.
|
125
156
|
#
|
126
157
|
# @!attribute input
|
127
|
-
# Data to attach to the WorkflowExecutionSignaled event in the target
|
158
|
+
# Data to attach to the `WorkflowExecutionSignaled` event in the target
|
159
|
+
# workflow execution's history.
|
128
160
|
#
|
129
161
|
# @!attribute run_id
|
130
162
|
# The runId of the workflow execution to signal.
|
131
163
|
#
|
132
164
|
# @!attribute signal_name
|
133
|
-
# *Required*. The name of the signal. This name must be meaningful to the
|
165
|
+
# *Required*. The name of the signal. This name must be meaningful to the
|
166
|
+
# target workflow.
|
134
167
|
#
|
135
168
|
# @!attribute workflow_id
|
136
|
-
# *Required*. The
|
169
|
+
# *Required*. The workflow ID of the workflow execution to signal.
|
137
170
|
#
|
138
171
|
class SignalWorkflowOptions < Options
|
139
172
|
properties(:input, :signal_name, :run_id, :workflow_id, :control, :domain)
|
@@ -148,21 +181,32 @@ module AWS
|
|
148
181
|
end
|
149
182
|
end
|
150
183
|
|
151
|
-
# Defaults for {RetryOptions}
|
184
|
+
# Defaults for {RetryOptions}.
|
152
185
|
class RetryDefaults < Defaults
|
153
|
-
|
186
|
+
|
187
|
+
# The default maximum number of attempts to make before the task is
|
188
|
+
# marked as failed.
|
154
189
|
def maximum_attempts; FlowConstants.exponential_retry_maximum_attempts; end
|
190
|
+
|
155
191
|
# The default retry function to use.
|
156
192
|
def retry_function; FlowConstants.exponential_retry_function; end
|
193
|
+
|
194
|
+
# The exceptions that will initiate a retry attempt. The default is to
|
195
|
+
# use *all* exceptions.
|
157
196
|
def exceptions_to_include; FlowConstants.exponential_retry_exceptions_to_include; end
|
197
|
+
|
198
|
+
# The exceptions that will *not* initiate a retry attempt. The default is
|
199
|
+
# an empty list; no exceptions are excluded.
|
158
200
|
def exceptions_to_exclude; FlowConstants.exponential_retry_exceptions_to_exclude; end
|
201
|
+
|
159
202
|
def backoff_coefficient; FlowConstants.exponential_retry_backoff_coefficient; end
|
203
|
+
|
160
204
|
def should_jitter; FlowConstants.should_jitter; end
|
161
205
|
def jitter_function; FlowConstants.jitter_function; end
|
162
206
|
def initial_retry_interval; FlowConstants.exponential_retry_initial_retry_interval; end
|
163
207
|
end
|
164
208
|
|
165
|
-
# Retry options used with {GenericClient#retry} and {ActivityClient#exponential_retry}
|
209
|
+
# Retry options used with {GenericClient#retry} and {ActivityClient#exponential_retry}.
|
166
210
|
class RetryOptions < Options
|
167
211
|
property(:is_retryable_function, [])
|
168
212
|
property(:initial_retry_interval, [])
|
@@ -186,7 +230,7 @@ module AWS
|
|
186
230
|
# The function used to test if the activity is retryable.
|
187
231
|
#
|
188
232
|
# @option hash :exceptions_to_allow [Integer]
|
189
|
-
# The number of exceptions to allow
|
233
|
+
# The number of exceptions to allow.
|
190
234
|
#
|
191
235
|
# @option hash :maximum_attempts [Integer]
|
192
236
|
# The maximum number of attempts to make before the task is marked as failed.
|
@@ -216,7 +260,7 @@ module AWS
|
|
216
260
|
super(hash, use_defaults)
|
217
261
|
end
|
218
262
|
|
219
|
-
# Tests whether
|
263
|
+
# Tests whether this activity can be retried based on the `:exceptions_to_retry` and
|
220
264
|
# `:exceptions_to_exclude` options.
|
221
265
|
#
|
222
266
|
# @param [Object] failure
|
@@ -238,16 +282,18 @@ module AWS
|
|
238
282
|
|
239
283
|
# Exponential retry options for the {ActivityClient#exponential_retry} method.
|
240
284
|
class ExponentialRetryOptions < RetryOptions
|
241
|
-
# The backoff coefficient to use. This is a floating point value that is multiplied with the current retry
|
242
|
-
# interval after every retry attempt. The default value is 2.0, which means that each retry will take twice as
|
243
|
-
# long as the previous.
|
244
285
|
default_classes << RetryDefaults.new
|
286
|
+
|
287
|
+
# The backoff coefficient to use. This is a floating point value that is multiplied with the current retry
|
288
|
+
# interval after every retry attempt. The default value is `2.0`, which means that each retry will take twice as
|
289
|
+
# long as the previous one.
|
245
290
|
property(:backoff_coefficient, [lambda(&:to_i)])
|
246
291
|
|
247
292
|
# The retry expiration interval, in seconds. This will be increased after every retry attempt by the factor
|
248
|
-
# provided in
|
293
|
+
# provided in `backoff_coefficient`.
|
249
294
|
property(:retry_expiration_interval_seconds, [lambda(&:to_i)])
|
250
295
|
|
296
|
+
# @api private
|
251
297
|
def next_retry_delay_seconds(first_attempt, recorded_failure, attempts)
|
252
298
|
raise IllegalArgumentException "Attempt number is #{attempts}, when it needs to be greater than 1"
|
253
299
|
if @maximum_attempts
|
@@ -255,82 +301,114 @@ module AWS
|
|
255
301
|
end
|
256
302
|
end
|
257
303
|
|
258
|
-
# Defaults for WorkflowOptions
|
304
|
+
# Defaults for `WorkflowOptions`.
|
259
305
|
class WorkflowDefaults < Defaults
|
260
306
|
|
261
|
-
# The default task start-to-close timeout duration.
|
307
|
+
# The default task start-to-close timeout duration. The default value is
|
308
|
+
# `30`.
|
262
309
|
def task_start_to_close_timeout; 30; end
|
263
310
|
|
264
|
-
# The default child workflow policy
|
311
|
+
# The default child workflow policy. The default value is `TERMINATE`.
|
265
312
|
def child_policy; :TERMINATE; end
|
266
313
|
|
267
|
-
# Returns a list of tags
|
314
|
+
# Returns a list of tags for the workflow. The default value is an empty
|
315
|
+
# array (no tags).
|
268
316
|
def tag_list; []; end
|
269
317
|
|
318
|
+
# The default data converter. By default, this is {YAMLDataConverter}.
|
270
319
|
def data_converter; FlowConstants.default_data_converter; end
|
271
320
|
end
|
272
321
|
|
273
|
-
# Options for workflows
|
322
|
+
# Options for workflows.
|
274
323
|
#
|
275
324
|
# @!attribute child_policy
|
276
|
-
# The optional policy to use for the child workflow executions when a
|
277
|
-
#
|
278
|
-
#
|
279
|
-
#
|
325
|
+
# The optional policy to use for the child workflow executions when a
|
326
|
+
# workflow execution of this type is terminated, by calling the
|
327
|
+
# `TerminateWorkflowExecution` action explicitly or due to an expired
|
328
|
+
# timeout.
|
329
|
+
#
|
330
|
+
# This can be overridden when starting a workflow execution using
|
331
|
+
# {WorkflowClient#start_execution} or the `StartChildWorkflowExecution`
|
332
|
+
# decision.
|
280
333
|
#
|
281
|
-
#
|
282
|
-
# * *REQUEST_CANCEL*: a request to cancel will be attempted for each child execution by recording a
|
283
|
-
# WorkflowExecutionCancelRequested event in its history. It is up to the decider to take appropriate actions
|
284
|
-
# when it receives an execution history with this event.
|
285
|
-
# * *ABANDON*: no action will be taken. The child executions will continue to run.
|
334
|
+
# The supported child policies are:
|
286
335
|
#
|
287
|
-
#
|
336
|
+
# * `TERMINATE`: the child executions will be terminated.
|
337
|
+
# * `REQUEST_CANCEL`: a request to cancel will be attempted for each child
|
338
|
+
# execution by recording a `WorkflowExecutionCancelRequested` event in its
|
339
|
+
# history. It is up to the decider to take appropriate actions when it
|
340
|
+
# receives an execution history with this event.
|
341
|
+
# * `ABANDON`: no action will be taken. The child executions will continue
|
342
|
+
# to run.
|
343
|
+
#
|
344
|
+
# The default is `TERMINATE`.
|
288
345
|
#
|
289
346
|
# @!attribute execution_method
|
290
|
-
# TBD
|
291
347
|
#
|
292
348
|
# @!attribute execution_start_to_close_timeout
|
293
|
-
# The optional maximum duration, specified when registering the workflow
|
294
|
-
# type
|
295
|
-
#
|
349
|
+
# The optional maximum duration, specified when registering the workflow
|
350
|
+
# type, for executions of this workflow type.
|
351
|
+
#
|
352
|
+
# This default can be overridden when starting a workflow execution using
|
353
|
+
# {WorkflowClient#start_execution} or with the
|
354
|
+
# `StartChildWorkflowExecution` decision.
|
296
355
|
#
|
297
|
-
# The valid values are integers greater than or equal to
|
298
|
-
#
|
356
|
+
# The valid values are integers greater than or equal to zero. An integer
|
357
|
+
# value can be used to specify the duration in seconds while `NONE` can be
|
358
|
+
# used to specify unlimited duration.
|
299
359
|
#
|
300
360
|
# @!attribute input
|
301
|
-
# A string of up to 32768 characters
|
361
|
+
# A string of up to 32768 characters to be provided to the workflow
|
362
|
+
# execution. This will be received in the decider when polling for
|
363
|
+
# decision tasks.
|
302
364
|
#
|
303
365
|
# @!attribute tag_list
|
304
|
-
# The list of tags to associate with the child workflow execution.
|
305
|
-
#
|
306
|
-
#
|
366
|
+
# The list of tags to associate with the child workflow execution.
|
367
|
+
#
|
368
|
+
# A maximum of five tags can be specified. You can list workflow
|
369
|
+
# executions with a specific tag by calling
|
370
|
+
# [AWS::SimpleWorkflow::Client#list_open_workflow_executions](http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/Client.html#list_open_workflow_executions-instance_method)
|
371
|
+
# or
|
372
|
+
# [AWS::SimpleWorkflow::Client#list_closed_workflow_executions](http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/Client.html#list_closed_workflow_executions-instance_method)
|
373
|
+
# and specifying a tag to filter on.
|
307
374
|
#
|
308
375
|
# @!attribute task_list
|
309
|
-
# The optional task list, specified when registering the workflow type,
|
310
|
-
#
|
311
|
-
#
|
376
|
+
# The optional task list, specified when registering the workflow type,
|
377
|
+
# for decisions tasks scheduled for workflow executions of this type.
|
378
|
+
#
|
379
|
+
# This default can be overridden when starting a workflow execution using
|
380
|
+
# {WorkflowClient#start_execution} or the `StartChildWorkflowExecution`
|
381
|
+
# decision.
|
312
382
|
#
|
313
383
|
# @!attribute task_start_to_close_timeout
|
314
|
-
# The optional maximum duration, specified when registering the workflow
|
315
|
-
#
|
316
|
-
#
|
317
|
-
# completion or failure, it is ignored. This default can be overridden when starting a workflow execution using
|
318
|
-
# the StartWorkflowExecution action or the StartChildWorkflowExecution Decision.
|
384
|
+
# The optional maximum duration, specified when registering the workflow
|
385
|
+
# type, that a decision task for executions of this workflow type might
|
386
|
+
# take before returning completion or failure.
|
319
387
|
#
|
320
|
-
#
|
321
|
-
#
|
388
|
+
# If the task does not close in the specified time, then the task is
|
389
|
+
# automatically timed out and rescheduled. If the decider eventually
|
390
|
+
# reports a completion or failure, it is ignored. This default can be
|
391
|
+
# overridden when starting a workflow execution using
|
392
|
+
# {WorkflowClient#start_execution} or the `StartChildWorkflowExecution`
|
393
|
+
# decision.
|
322
394
|
#
|
323
|
-
# The
|
395
|
+
# The valid values are integers greater than or equal to 0. An integer
|
396
|
+
# value can be used to specify the duration in seconds while `NONE` can be
|
397
|
+
# used to specify unlimited duration. The default is `30`.
|
324
398
|
#
|
325
399
|
# @!attribute version
|
326
|
-
#
|
400
|
+
# A string that represents the version of the workflow. This can be any
|
401
|
+
# alphanumeric string. If you update any of the other options, you must
|
402
|
+
# also update the version.
|
327
403
|
#
|
328
404
|
# @!attribute workflow_id
|
329
|
-
# *Required*. The workflow
|
405
|
+
# *Required*. The workflow ID of the workflow execution. The workflow ID
|
406
|
+
# must follow these rules:
|
330
407
|
#
|
331
|
-
# The specified string must not start or end with whitespace.
|
332
|
-
#
|
333
|
-
#
|
408
|
+
# * The specified string must not start or end with whitespace.
|
409
|
+
# * It must not contain a `:` (colon), `/` (slash), `|` (vertical bar), or
|
410
|
+
# any control characters (`\u0000`-`\u001f` | `\u007f`-`\u009f`).
|
411
|
+
# * It must not contain the literal string "arn".
|
334
412
|
#
|
335
413
|
class WorkflowOptions < Options
|
336
414
|
properties(:version, :input, :workflow_id, :execution_start_to_close_timeout, :task_start_to_close_timeout, :task_list, :execution_method)
|
@@ -341,7 +419,7 @@ module AWS
|
|
341
419
|
|
342
420
|
# Returns a hash containing the runtime workflow options.
|
343
421
|
#
|
344
|
-
# @return [Hash]
|
422
|
+
# @return [Hash] A hash of options with corresponding values.
|
345
423
|
#
|
346
424
|
def get_full_options
|
347
425
|
result = {}
|
@@ -354,63 +432,84 @@ module AWS
|
|
354
432
|
end
|
355
433
|
end
|
356
434
|
|
435
|
+
# Provides the set of workflow options along with defaults.
|
436
|
+
#
|
437
|
+
# @!attribute default_task_start_to_close_timeout
|
438
|
+
# (see WorkflowDefaults#task_start_to_close_timeout)
|
439
|
+
#
|
440
|
+
# @!attribute default_execution_start_to_close_timeout
|
441
|
+
# (see WorkflowDefaults#execution_start_to_close_timeout)
|
442
|
+
#
|
443
|
+
# @!attribute default_task_list
|
444
|
+
# (see WorkflowOptions#task_list)
|
445
|
+
#
|
446
|
+
# @!attribute default_child_policy
|
447
|
+
# (see WorkflowDefaults#child_policy)
|
448
|
+
#
|
357
449
|
class WorkflowOptionsWithDefaults < WorkflowOptions
|
358
450
|
properties(:default_task_start_to_close_timeout, :default_execution_start_to_close_timeout, :default_task_list)
|
359
451
|
property(:default_child_policy, [lambda(&:to_s), lambda(&:upcase)])
|
360
452
|
end
|
361
453
|
|
362
|
-
# Options for #
|
454
|
+
# Options for {WorkflowClient#start_execution}.
|
363
455
|
#
|
364
456
|
# @!attribute workflow_name
|
365
457
|
# The name of this workflow.
|
366
458
|
#
|
367
459
|
# @!attribute from_class
|
368
|
-
# If present, options from the specified class will be used as the
|
460
|
+
# If present, options from the specified class will be used as the
|
461
|
+
# workflow execution options.
|
369
462
|
#
|
370
463
|
class StartWorkflowOptions < WorkflowOptions
|
371
464
|
properties(:workflow_name, :from_class)
|
372
465
|
end
|
373
466
|
|
374
|
-
# Options for {AsyncDecider#continue_as_new_workflow} and
|
467
|
+
# Options for {AsyncDecider#continue_as_new_workflow} and
|
468
|
+
# {Workflows.InstanceMethods#continue_as_new}.
|
375
469
|
#
|
376
470
|
class ContinueAsNewOptions < WorkflowOptions
|
377
471
|
end
|
378
472
|
|
379
|
-
# Defaults for the {ActivityOptions} class
|
473
|
+
# Defaults for the {ActivityOptions} class.
|
380
474
|
class ActivityDefaults < Defaults
|
381
475
|
|
382
|
-
# The default
|
383
|
-
#
|
476
|
+
# The default schedule-to-close timeout for activity tasks. This timeout
|
477
|
+
# represents the time, in seconds, between when the activity task is first
|
478
|
+
# scheduled to when it is closed (whether due to success, failure, or a
|
479
|
+
# timeout).
|
384
480
|
#
|
385
|
-
# This default can be overridden when scheduling an activity task. You can
|
386
|
-
# timeout value.
|
481
|
+
# This default can be overridden when scheduling an activity task. You can
|
482
|
+
# set this value to "NONE" to imply no timeout value.
|
387
483
|
#
|
388
484
|
def default_task_schedule_to_close_timeout; Float::INFINITY; end
|
389
485
|
|
390
|
-
# The default maximum time in seconds before which a worker processing a
|
391
|
-
#
|
392
|
-
#
|
486
|
+
# The default maximum time, in seconds, before which a worker processing a
|
487
|
+
# task of this type must report progress. If the timeout is exceeded, the
|
488
|
+
# activity task is automatically timed out. If the worker subsequently
|
489
|
+
# attempts to record a heartbeat or returns a result, it will be ignored.
|
393
490
|
#
|
394
|
-
# This default can be overridden when scheduling an activity task. You can
|
395
|
-
# timeout value.
|
491
|
+
# This default can be overridden when scheduling an activity task. You can
|
492
|
+
# set this value to "NONE" to imply no timeout value.
|
396
493
|
#
|
397
494
|
def default_task_heartbeat_timeout; Float::INFINITY; end
|
398
495
|
|
399
|
-
# The default
|
400
|
-
#
|
496
|
+
# The default schedule-to-close timeout. This timeout represents the time
|
497
|
+
# between when the activity task is first scheduled to when it is closed
|
498
|
+
# (whether due to success, failure, or a timeout).
|
401
499
|
#
|
402
|
-
# This default can be overridden when scheduling an activity task. You can
|
403
|
-
# timeout value.
|
500
|
+
# This default can be overridden when scheduling an activity task. You can
|
501
|
+
# set this value to "NONE" to imply no timeout value.
|
404
502
|
#
|
405
503
|
def schedule_to_close_timeout; Float::INFINITY; end
|
406
504
|
|
407
|
-
# The default maximum time before which a worker processing a task of this
|
408
|
-
#
|
409
|
-
#
|
410
|
-
#
|
505
|
+
# The default maximum time before which a worker processing a task of this
|
506
|
+
# type must report progress. If the timeout is exceeded, the activity task
|
507
|
+
# is automatically timed out. If the worker subsequently attempts to
|
508
|
+
# record a heartbeat or returns a result, it will be ignored. This default
|
509
|
+
# can be overridden when scheduling an activity task.
|
411
510
|
#
|
412
|
-
# This default can be overridden when scheduling an activity task. You can
|
413
|
-
# timeout value.
|
511
|
+
# This default can be overridden when scheduling an activity task. You can
|
512
|
+
# set this value to "NONE" to imply no timeout value.
|
414
513
|
#
|
415
514
|
def heartbeat_timeout; Float::INFINITY; end
|
416
515
|
|
@@ -421,47 +520,54 @@ module AWS
|
|
421
520
|
# Options to use on an activity or decider. The following options are defined:
|
422
521
|
#
|
423
522
|
# @!attribute default_task_heartbeat_timeout
|
424
|
-
#
|
425
|
-
#
|
426
|
-
#
|
523
|
+
# The optional default maximum time, specified when registering the
|
524
|
+
# activity type, before which a worker processing a task must report
|
525
|
+
# progress by calling
|
427
526
|
# {http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/ActivityTask.html#record_heartbeat!-instance_method
|
428
|
-
# record_heartbeat} on the ActivityTask
|
527
|
+
# record_heartbeat} on the `ActivityTask`.
|
429
528
|
#
|
430
|
-
# You can override this default when scheduling a task through the
|
431
|
-
#
|
432
|
-
#
|
433
|
-
#
|
529
|
+
# You can override this default when scheduling a task through the
|
530
|
+
# `ScheduleActivityTask` decision. If the activity worker subsequently
|
531
|
+
# attempts to record a heartbeat or returns a result, the activity worker
|
532
|
+
# receives an UnknownResource fault. In this case, Amazon SWF no longer
|
533
|
+
# considers the activity task to be valid; the activity worker should
|
534
|
+
# clean up the activity task.
|
434
535
|
#
|
435
|
-
# The valid values are integers greater than or equal to zero. An integer
|
436
|
-
# duration in seconds while "NONE" can be
|
536
|
+
# The valid values are integers greater than or equal to zero. An integer
|
537
|
+
# value can be used to specify the duration in seconds while "NONE" can be
|
538
|
+
# used to specify unlimited duration.
|
437
539
|
#
|
438
540
|
# @!attribute default_task_list
|
439
|
-
#
|
440
|
-
#
|
441
|
-
#
|
442
|
-
# can override this default when scheduling a task through
|
541
|
+
# The optional default task list specified for this activity type at
|
542
|
+
# registration. This default task list is used if a task list is not
|
543
|
+
# provided when a task is scheduled through the `ScheduleActivityTask`
|
544
|
+
# decision. You can override this default when scheduling a task through
|
545
|
+
# the `ScheduleActivityTask` decision.
|
443
546
|
#
|
444
547
|
# @!attribute default_task_schedule_to_close_timeout
|
548
|
+
# The optional default maximum duration, specified when registering the
|
549
|
+
# activity type, for tasks of this activity type. You can override this
|
550
|
+
# default when scheduling a task through the `ScheduleActivityTask`
|
551
|
+
# decision.
|
445
552
|
#
|
446
|
-
# The
|
447
|
-
#
|
448
|
-
#
|
449
|
-
# The valid values are integers greater than or equal to zero, or the string "NONE". An integer value can be
|
450
|
-
# used to specify the duration in seconds while "NONE" is be used to specify *unlimited* duration.
|
553
|
+
# The valid values are integers greater than or equal to zero, or the
|
554
|
+
# string "NONE". An integer value can be used to specify the duration in
|
555
|
+
# seconds while "NONE" is be used to specify *unlimited* duration.
|
451
556
|
#
|
452
557
|
# @!attribute default_task_schedule_to_start_timeout
|
453
|
-
#
|
454
|
-
#
|
455
|
-
#
|
456
|
-
# through the ScheduleActivityTask decision.
|
558
|
+
# The optional default maximum duration, specified when registering the
|
559
|
+
# activity type, that a task of an activity type can wait before being
|
560
|
+
# assigned to a worker. You can override this default when scheduling a
|
561
|
+
# task through the `ScheduleActivityTask` decision.
|
457
562
|
#
|
458
563
|
# @!attribute default_task_start_to_close_timeout
|
564
|
+
# The optional default maximum duration for tasks of an activity type
|
565
|
+
# specified when registering the activity type. You can override this
|
566
|
+
# default when scheduling a task through the `ScheduleActivityTask`
|
567
|
+
# decision.
|
459
568
|
#
|
460
|
-
# The optional default maximum duration for tasks of an activity type specified when registering the activity
|
461
|
-
# type. You can override this default when scheduling a task through the ScheduleActivityTask decision.
|
462
569
|
class ActivityOptions < Options
|
463
|
-
|
464
|
-
#
|
570
|
+
|
465
571
|
class << self
|
466
572
|
attr_reader :default_options, :runtime_options
|
467
573
|
end
|
@@ -471,55 +577,78 @@ module AWS
|
|
471
577
|
|
472
578
|
default_classes << ActivityDefaults.new
|
473
579
|
|
474
|
-
# Gets the activity prefix name
|
475
|
-
#
|
580
|
+
# Gets the activity prefix name.
|
581
|
+
#
|
582
|
+
# @return [String]
|
583
|
+
# The activity name.
|
584
|
+
#
|
476
585
|
def activity_name
|
477
586
|
@prefix_name
|
478
587
|
end
|
479
588
|
|
480
|
-
# Sets the activity prefix name
|
481
|
-
#
|
589
|
+
# Sets the activity prefix name.
|
590
|
+
#
|
591
|
+
# @param [String] value
|
592
|
+
# The activity name to set.
|
593
|
+
#
|
482
594
|
def activity_name=(value)
|
483
595
|
@prefix_name = value
|
484
596
|
end
|
485
597
|
|
486
|
-
# Creates a new set of ActivityOptions
|
598
|
+
# Creates a new set of `ActivityOptions`.
|
487
599
|
#
|
488
600
|
# @param [Hash] default_options
|
489
|
-
# A set of ActivityOptions to use as the default values.
|
601
|
+
# A set of `ActivityOptions` to use as the default values.
|
490
602
|
#
|
491
603
|
# @option default_options [Integer] :heartbeat_timeout
|
492
|
-
# The optional default maximum time, specified when registering the
|
493
|
-
#
|
494
|
-
#
|
495
|
-
#
|
496
|
-
#
|
497
|
-
# activity
|
604
|
+
# The optional default maximum time, specified when registering the
|
605
|
+
# activity type, before which a worker processing a task must report
|
606
|
+
# progress by calling `RecordActivityTaskHeartbeat`.
|
607
|
+
#
|
608
|
+
# You can override this default when scheduling a task through the
|
609
|
+
# `ScheduleActivityTask` decision. If the activity worker subsequently
|
610
|
+
# attempts to record a heartbeat or returns a result, the activity
|
611
|
+
# worker receives an UnknownResource fault. In this case, Amazon SWF no
|
612
|
+
# longer considers the activity task to be valid; the activity worker
|
613
|
+
# should clean up the activity task.
|
498
614
|
#
|
499
615
|
# @option default_options [Integer] :schedule_to_close_timeout
|
500
|
-
# The optional default maximum duration, specified when registering the
|
501
|
-
# activity type
|
616
|
+
# The optional default maximum duration, specified when registering the
|
617
|
+
# activity type, for tasks of this activity type.
|
618
|
+
#
|
619
|
+
# You can override this default when scheduling a task through the
|
620
|
+
# `ScheduleActivityTask` decision.
|
502
621
|
#
|
503
622
|
# @option default_options [Integer] :schedule_to_start_timeout
|
504
|
-
# The optional default maximum duration, specified when registering the
|
505
|
-
# activity type
|
506
|
-
#
|
623
|
+
# The optional default maximum duration, specified when registering the
|
624
|
+
# activity type, that a task of an activity type can wait before being
|
625
|
+
# assigned to a worker.
|
626
|
+
#
|
627
|
+
# You can override this default when scheduling a task through the
|
628
|
+
# `ScheduleActivityTask` decision.
|
507
629
|
#
|
508
630
|
# @option default_options [Integer] :start_to_close_timeout
|
509
|
-
# The optional default maximum duration for tasks of an activity type
|
510
|
-
#
|
631
|
+
# The optional default maximum duration for tasks of an activity type
|
632
|
+
# specified when registering the activity type.
|
633
|
+
#
|
634
|
+
# You can override this default when scheduling a task through the
|
635
|
+
# `ScheduleActivityTask` decision.
|
511
636
|
#
|
512
637
|
# @option default_options [Array] :task_list
|
513
|
-
# The optional default task list specified for this activity type at
|
514
|
-
#
|
515
|
-
#
|
638
|
+
# The optional default task list specified for this activity type at
|
639
|
+
# registration. This default task list is used if a task list is not
|
640
|
+
# provided when a task is scheduled through the ScheduleActivityTask
|
641
|
+
# decision.
|
642
|
+
#
|
643
|
+
# You can override this default when scheduling a task through the
|
644
|
+
# `ScheduleActivityTask` decision.
|
516
645
|
#
|
517
646
|
# @option default_options [String] :version
|
518
|
-
# The version of this
|
519
|
-
# version.
|
647
|
+
# The version of this activity. If you change any other options on the
|
648
|
+
# activity, you must also change the version.
|
520
649
|
#
|
521
650
|
# @param [true, false] use_defaults
|
522
|
-
# Set to `true` to use the pre-defined
|
651
|
+
# Set to `true` to use the pre-defined {ActivityDefaults}.
|
523
652
|
#
|
524
653
|
def initialize(default_options={}, use_defaults=false)
|
525
654
|
if default_options.keys.include? :exponential_retry
|
@@ -528,7 +657,7 @@ module AWS
|
|
528
657
|
super(default_options, use_defaults)
|
529
658
|
end
|
530
659
|
|
531
|
-
# Retrieves the runtime options for this
|
660
|
+
# Retrieves the runtime options for this activity. The runtime options returned are:
|
532
661
|
#
|
533
662
|
# * :heartbeat_timeout
|
534
663
|
# * :task_list
|
@@ -555,14 +684,14 @@ module AWS
|
|
555
684
|
# Retries the supplied block with exponential retry logic.
|
556
685
|
#
|
557
686
|
# @param [Hash] block
|
558
|
-
# A hash of ExponentialRetryOptions.
|
687
|
+
# A hash of {ExponentialRetryOptions}.
|
559
688
|
#
|
560
689
|
def exponential_retry(&block)
|
561
690
|
retry_options = Utilities::interpret_block_for_options(ExponentialRetryOptions, block)
|
562
691
|
@_exponential_retry = retry_options
|
563
692
|
end
|
564
693
|
|
565
|
-
# Retrieves the runtime options for this
|
694
|
+
# Retrieves the runtime options for this activity.
|
566
695
|
#
|
567
696
|
# @return [Hash]
|
568
697
|
# A hash containing the runtime option names and their current values.
|
@@ -575,7 +704,7 @@ module AWS
|
|
575
704
|
options_hash
|
576
705
|
end
|
577
706
|
|
578
|
-
# Retrieves the default options for this
|
707
|
+
# Retrieves the default options for this activity.
|
579
708
|
#
|
580
709
|
# @return [Hash]
|
581
710
|
# A hash containing the default option names and their current values.
|
@@ -592,16 +721,17 @@ module AWS
|
|
592
721
|
end
|
593
722
|
end
|
594
723
|
|
595
|
-
# Runtime options for an
|
724
|
+
# Runtime options for an activity.
|
596
725
|
class ActivityRuntimeOptions < ActivityOptions
|
597
726
|
|
598
727
|
# Creates a new set of runtime options based on a set of default options.
|
599
728
|
#
|
600
729
|
# @param [ActivityOptions] default_options
|
601
|
-
# The default {ActivityOptions} to use to set the values of the runtime
|
730
|
+
# The default {ActivityOptions} to use to set the values of the runtime
|
731
|
+
# options in this class.
|
602
732
|
#
|
603
733
|
# @param [true, false] use_defaults
|
604
|
-
# Set to `true` to use the default runtime options for the
|
734
|
+
# Set to `true` to use the default runtime options for the activity.
|
605
735
|
#
|
606
736
|
def initialize(default_options = {}, use_defaults=false)
|
607
737
|
super(default_options, use_defaults)
|