aws-flow 1.0.8 → 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|