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
data/lib/aws/flow/async_scope.rb
CHANGED
@@ -13,40 +13,43 @@
|
|
13
13
|
# permissions and limitations under the License.
|
14
14
|
##
|
15
15
|
|
16
|
-
# This module contains the
|
16
|
+
# This module contains the root of the hierarchy for calls into flow.
|
17
17
|
|
18
18
|
module AWS
|
19
19
|
module Flow
|
20
20
|
module Core
|
21
21
|
|
22
|
+
# @api private
|
22
23
|
def gate_by_version(version, method, &block)
|
23
24
|
if RUBY_VERSION.send(method, version)
|
24
25
|
block.call
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
#
|
29
|
+
# @api private
|
29
30
|
class AsyncScope
|
30
31
|
attr_accessor :stackTrace, :root, :failure, :root_context
|
31
32
|
|
33
|
+
# @api private
|
32
34
|
def is_complete?
|
33
35
|
@root_context.complete
|
34
36
|
end
|
35
37
|
|
38
|
+
# @api private
|
36
39
|
def get_closest_containing_scope
|
37
40
|
@root_error_handler
|
38
41
|
end
|
39
42
|
|
43
|
+
# @api private
|
40
44
|
def cancel(error); @root_error_handler.cancel(error); end
|
41
45
|
|
46
|
+
# @api private
|
42
47
|
def initialize(&block)
|
43
48
|
@root_context = RootAsyncScope.new
|
44
49
|
|
45
|
-
|
46
|
-
|
47
50
|
# 1 for the function that skips frames
|
48
51
|
# 1 for the create function
|
49
|
-
# 1 for the
|
52
|
+
# 1 for the initialize of the backtrace
|
50
53
|
|
51
54
|
# "./lib/aws/rubyflow/asyncBacktrace.rb:75:in `caller'"
|
52
55
|
# "./lib/aws/rubyflow/asyncBacktrace.rb:21:in `create'"
|
@@ -62,11 +65,12 @@ module AWS
|
|
62
65
|
end
|
63
66
|
|
64
67
|
# Collects all the heirs of a task for use in async_stack_dump
|
68
|
+
# @api private
|
65
69
|
def get_heirs
|
66
70
|
@root_error_handler.get_heirs
|
67
71
|
end
|
68
72
|
|
69
|
-
# Execute all queued tasks. If execution of those tasks results in addition of new tasks to the queue, execute
|
73
|
+
# Execute all queued tasks. If execution of those tasks results in the addition of new tasks to the queue, execute
|
70
74
|
# them as well.
|
71
75
|
#
|
72
76
|
# Unless there are external dependencies or bugs in the tasks to be executed, a single call to this method
|
@@ -75,6 +79,7 @@ module AWS
|
|
75
79
|
# @note In the presence of external dependencies, it is expected that {AsyncScope#eventLoop} is called every
|
76
80
|
# time after a change in the state in a dependency can unblock asynchronous execution.
|
77
81
|
#
|
82
|
+
# @api private
|
78
83
|
def eventLoop
|
79
84
|
#TODO Figure out when to raise Done raise "Done" if ! @root_task.alive?
|
80
85
|
raise IllegalStateException, "Already complete" if is_complete?
|
@@ -82,7 +87,7 @@ module AWS
|
|
82
87
|
# TODO Does this need to be taken care of? It's supposed to protect
|
83
88
|
# against people having errors that are classes, so like, passing
|
84
89
|
# Exception into cancel. We might want to just catch that at the
|
85
|
-
# entry point
|
90
|
+
# entry point.
|
86
91
|
if @root_context.failure
|
87
92
|
if @root_context.failure.respond_to? :message
|
88
93
|
failure_message = @root_context.failure.message + "\n" +
|
@@ -96,17 +101,19 @@ module AWS
|
|
96
101
|
return is_complete?
|
97
102
|
end
|
98
103
|
|
104
|
+
# @api private
|
99
105
|
def <<(task)
|
100
106
|
@root_context << task
|
101
107
|
task.parent = @root_context
|
102
108
|
end
|
103
109
|
end
|
104
110
|
|
105
|
-
#
|
111
|
+
# @api private
|
106
112
|
class RootAsyncScope < FlowFiber
|
107
113
|
|
108
114
|
attr_accessor :backtrace, :failure, :executor, :complete
|
109
115
|
|
116
|
+
# @api private
|
110
117
|
def initialize(options = {}, &block)
|
111
118
|
@parent = options[:parent_context]
|
112
119
|
@daemon = options[:daemon]
|
@@ -118,7 +125,8 @@ module AWS
|
|
118
125
|
end
|
119
126
|
|
120
127
|
# The only thing that should be removed from the RootAsyncScope is the
|
121
|
-
# root BeginRescueEnsure, so upon removal we are complete
|
128
|
+
# root BeginRescueEnsure, so upon removal we are complete.
|
129
|
+
# @api private
|
122
130
|
def remove(task)
|
123
131
|
@complete = true
|
124
132
|
end
|
@@ -126,21 +134,25 @@ module AWS
|
|
126
134
|
# As with remove, the only thing that is under RootAsyncScope should be
|
127
135
|
# the root BeginRescueEnsure, so upon failure we will be complete. Also
|
128
136
|
# sets failure variable for later raising.
|
137
|
+
# @api private
|
129
138
|
def fail(task, error)
|
130
139
|
@failure = error
|
131
140
|
@complete = true
|
132
141
|
end
|
133
142
|
|
143
|
+
# @api private
|
134
144
|
def <<(this_task)
|
135
145
|
@executor << this_task
|
136
146
|
end
|
137
147
|
|
138
|
-
#
|
148
|
+
# Return self, a RootAsyncScope is the closest containing scope.
|
149
|
+
# @api private
|
139
150
|
def get_closest_containing_scope
|
140
151
|
self
|
141
152
|
end
|
142
153
|
|
143
|
-
# Call out to the AsyncEventLoop
|
154
|
+
# Call out to the AsyncEventLoop.
|
155
|
+
# @api private
|
144
156
|
def eventLoop
|
145
157
|
@executor.executeQueuedTasks
|
146
158
|
end
|
@@ -149,6 +161,7 @@ module AWS
|
|
149
161
|
private
|
150
162
|
DELEGATED_METHODS = [:push, :<<, :enq, :empty?, :length, :size, :delete, :shift]
|
151
163
|
|
164
|
+
# @api private
|
152
165
|
def method_missing(method_name, *args)
|
153
166
|
if DELEGATED_METHODS.include? method_name
|
154
167
|
@executor.send(method_name, *args)
|
@@ -158,30 +171,34 @@ module AWS
|
|
158
171
|
end
|
159
172
|
end
|
160
173
|
|
161
|
-
#
|
174
|
+
# @api private
|
162
175
|
class AsyncEventLoop
|
163
176
|
|
177
|
+
# @api private
|
164
178
|
def initialize
|
165
179
|
@tasks = []
|
166
180
|
end
|
167
181
|
|
182
|
+
# @api private
|
168
183
|
def remove(task)
|
169
184
|
@tasks.delete(task)
|
170
185
|
end
|
171
186
|
# TODO Make sure that it's okay to fail from the AsyncEventLoop, and that
|
172
|
-
# this is the correct behavior
|
187
|
+
# this is the correct behavior.
|
173
188
|
def fail(task, error)
|
174
189
|
raise error
|
175
190
|
end
|
191
|
+
|
192
|
+
# @api private
|
176
193
|
def <<(task)
|
177
194
|
@tasks << task
|
178
195
|
|
179
196
|
end
|
180
197
|
|
181
|
-
|
182
198
|
# TODO should this be synchronized somehow?
|
183
199
|
|
184
|
-
# Actually executes the eventLoop
|
200
|
+
# Actually executes the eventLoop.
|
201
|
+
# @api private
|
185
202
|
def executeQueuedTasks
|
186
203
|
until @tasks.empty?
|
187
204
|
task = @tasks.shift
|
@@ -189,7 +206,6 @@ module AWS
|
|
189
206
|
end
|
190
207
|
end
|
191
208
|
end
|
192
|
-
|
193
209
|
end
|
194
210
|
end
|
195
211
|
end
|
@@ -20,16 +20,17 @@ module AWS
|
|
20
20
|
module Flow
|
21
21
|
module Core
|
22
22
|
|
23
|
-
#
|
24
|
-
#
|
23
|
+
# Enables asynchronous error handling within the AWS Flow Framework for Ruby. Calling {#begin}/{#rescue}/{#ensure}
|
24
|
+
# is similar to Ruby's native `begin`/`rescue`/`end` semantics.
|
25
|
+
#
|
25
26
|
class BeginRescueEnsure < FlowFiber
|
26
27
|
|
27
28
|
extend SimpleDFA
|
28
|
-
attr_accessor :parent, :begin_task, :ensure_task, :
|
29
|
-
|
29
|
+
attr_accessor :parent, :begin_task, :ensure_task, :rescue_hash,
|
30
|
+
:failure, :cancelled, :heirs, :nonDaemonHeirsCount, :executor, :result
|
30
31
|
attr_reader :backtrace, :__context__
|
31
32
|
|
32
|
-
# Create a new BeginRescueEnsure object, with the provided options.
|
33
|
+
# Create a new `BeginRescueEnsure` object, with the provided options.
|
33
34
|
#
|
34
35
|
# @param options
|
35
36
|
# Options to set for the class.
|
@@ -37,13 +38,13 @@ module AWS
|
|
37
38
|
# @option options [Object] :parent
|
38
39
|
# The parent object.
|
39
40
|
#
|
41
|
+
# @api private
|
40
42
|
def initialize(options = {})
|
41
43
|
# We have two different arrays, rather than a hash,
|
42
44
|
# because we want to ensure that we process the rescues in the order
|
43
45
|
# they are written, and because prior to Ruby 1.9, hashes will not
|
44
46
|
# return their elements in the order they were inserted.
|
45
|
-
@
|
46
|
-
@rescue_tasks = []
|
47
|
+
@rescue_hash = {}
|
47
48
|
@parent = options[:parent] || Fiber.current.__context__
|
48
49
|
@current = @parent
|
49
50
|
@executor = @parent.executor
|
@@ -57,16 +58,16 @@ module AWS
|
|
57
58
|
end
|
58
59
|
|
59
60
|
|
60
|
-
#
|
61
|
+
# @api private
|
61
62
|
def is_daemon?
|
62
63
|
false
|
63
64
|
end
|
64
65
|
|
65
66
|
|
66
|
-
#
|
67
|
+
# @api private
|
67
68
|
def <<(async_task)
|
68
69
|
# Not going to include the promise to wait for, as it would appear that
|
69
|
-
#
|
70
|
+
# fibers can wait on futures from their point of origin as part of their
|
70
71
|
# implementation, as opposed to adding the callback here.
|
71
72
|
check_closed
|
72
73
|
if ! @heirs.member? async_task
|
@@ -79,15 +80,15 @@ module AWS
|
|
79
80
|
self
|
80
81
|
end
|
81
82
|
|
82
|
-
#
|
83
|
+
# @api private
|
83
84
|
def get_closest_containing_scope
|
84
|
-
#
|
85
|
-
# created in
|
86
|
-
# correctly and close only when nonDaemonHeirsCount is 0
|
85
|
+
# BeginRescueEnsure's are special in that they act as a containing scope, so that things
|
86
|
+
# created in BeginRescueEnsure's treat it as the parent, so that it can track the heirs
|
87
|
+
# correctly and close only when nonDaemonHeirsCount is 0.
|
87
88
|
self
|
88
89
|
end
|
89
90
|
|
90
|
-
#
|
91
|
+
# @api private
|
91
92
|
def check_closed
|
92
93
|
raise IllegalStateException, @failure if @current_state == :closed
|
93
94
|
end
|
@@ -100,6 +101,7 @@ module AWS
|
|
100
101
|
# @param error
|
101
102
|
# The error associated with the failure.
|
102
103
|
#
|
104
|
+
# @api private
|
103
105
|
def fail(this_task, error)
|
104
106
|
check_closed
|
105
107
|
if ( ! (error.class <= CancellationException) || @failure == nil && !@daemondCausedCancellation)
|
@@ -109,38 +111,39 @@ module AWS
|
|
109
111
|
end
|
110
112
|
task_out = @heirs.delete?(this_task)
|
111
113
|
raise "There was a task attempted to be removed from a BRE, when the BRE did not have that task as an heir" unless task_out
|
112
|
-
@nonDaemonHeirsCount -= 1
|
114
|
+
@nonDaemonHeirsCount -= 1 unless this_task.is_daemon?
|
113
115
|
cancelHeirs
|
114
116
|
update_state
|
115
117
|
end
|
116
118
|
|
117
|
-
# Removes the task and updates the state
|
119
|
+
# Removes the task and updates the state.
|
118
120
|
#
|
119
121
|
# @param this_task
|
120
122
|
# The task to remove.
|
121
123
|
#
|
124
|
+
# @api private
|
122
125
|
def remove(this_task)
|
123
126
|
check_closed
|
124
127
|
|
125
128
|
task_out = @heirs.delete?(this_task)
|
126
129
|
raise "There was a task attempted to be removed from a BRE, when the BRE did not have that task as an heir" unless task_out
|
127
|
-
@nonDaemonHeirsCount -= 1
|
130
|
+
@nonDaemonHeirsCount -= 1 unless this_task.is_daemon?
|
128
131
|
update_state
|
129
132
|
end
|
130
133
|
|
131
|
-
#
|
134
|
+
# @api private
|
132
135
|
def cancelHeirs
|
133
136
|
toCancel = @heirs.dup
|
134
137
|
toCancel.each { |heir| heir.cancel(@failure) }
|
135
138
|
end
|
136
139
|
|
137
|
-
#
|
140
|
+
# @api private
|
138
141
|
def merge_stacktraces(failure, this_backtrace, error)
|
139
142
|
backtrace = AsyncBacktrace.create_from_exception(this_backtrace, error)
|
140
143
|
failure.set_backtrace(backtrace.backtrace) if backtrace
|
141
144
|
end
|
142
145
|
|
143
|
-
#
|
146
|
+
# @api private
|
144
147
|
def cancel(error)
|
145
148
|
if @current_state == :created
|
146
149
|
@current_state = :closed
|
@@ -159,8 +162,8 @@ module AWS
|
|
159
162
|
end
|
160
163
|
end
|
161
164
|
|
162
|
-
# Actually runs the
|
163
|
-
#
|
165
|
+
# Actually runs the BeginRescueEnsure, by going through the data flow analysis with the symbol :run.
|
166
|
+
# @api private
|
164
167
|
def run
|
165
168
|
this_failure = @failure
|
166
169
|
begin
|
@@ -178,13 +181,13 @@ module AWS
|
|
178
181
|
end
|
179
182
|
end
|
180
183
|
|
181
|
-
#
|
184
|
+
# @api private
|
182
185
|
def alive?
|
183
186
|
@current_state != :closed
|
184
187
|
end
|
185
188
|
|
186
|
-
# Updates the state based on the most recent transitions in the
|
187
|
-
#
|
189
|
+
# Updates the state based on the most recent transitions in the data flow analysis.
|
190
|
+
# @api private
|
188
191
|
def update_state
|
189
192
|
#TODO ? Add the ! @executed part
|
190
193
|
#return if @current_state == :closed || ! @executed
|
@@ -199,7 +202,7 @@ module AWS
|
|
199
202
|
end
|
200
203
|
end
|
201
204
|
|
202
|
-
#
|
205
|
+
# @api private
|
203
206
|
def get_heirs
|
204
207
|
# TODO fix this so it returns string instead of printing to stdout
|
205
208
|
str = "I am a BeginRescueEnsure with #{heirs.length} heirs
|
@@ -209,7 +212,7 @@ module AWS
|
|
209
212
|
# (@heirs.each(&:get_heirs) + [self]).flatten
|
210
213
|
end
|
211
214
|
|
212
|
-
#
|
215
|
+
# @api private
|
213
216
|
init(:created)
|
214
217
|
{
|
215
218
|
[:created, :run] => lambda { |bre| bre.current_state = :begin; bre.run },
|
@@ -226,15 +229,15 @@ module AWS
|
|
226
229
|
# Emulates the behavior of the actual Ruby rescue, see
|
227
230
|
# http://Ruby-doc.org/docs/ProgrammingRuby/html/tut_exceptions.html
|
228
231
|
# for more details
|
229
|
-
bre.
|
232
|
+
bre.rescue_hash.each_pair do |exception_class, exception_function|
|
230
233
|
this_failure = bre.failure
|
231
234
|
failure_class = bre.failure.is_a?(Exception) ? bre.failure.class : bre.failure
|
232
|
-
|
235
|
+
# TODO change <= to something more explicit about subclass check
|
236
|
+
unless exception_class.select { |x| failure_class <= x }.empty?
|
233
237
|
bre.result.unset
|
234
238
|
bre.failure = nil
|
235
|
-
task =
|
239
|
+
task = exception_function
|
236
240
|
bre << Task.new(bre) { bre.result.set(task.call(this_failure)) }
|
237
|
-
# bre.rescue_tasks[index].call(this_failure)
|
238
241
|
break
|
239
242
|
end
|
240
243
|
end
|
@@ -257,7 +260,7 @@ module AWS
|
|
257
260
|
# That is, any transition from closed leads back to itself
|
258
261
|
define_general(:closed) { |t| t.current_state = :closed }
|
259
262
|
|
260
|
-
# Binds the block to
|
263
|
+
# Binds the block to a lambda to be called when we get to the begin part of the data flow analysis.
|
261
264
|
#
|
262
265
|
# @param block
|
263
266
|
# The code block to be called when asynchronous *begin* starts.
|
@@ -268,24 +271,24 @@ module AWS
|
|
268
271
|
@begin_task = Task.new(self) { @result.set(block.call) }
|
269
272
|
end
|
270
273
|
|
271
|
-
# Binds the block to
|
274
|
+
# Binds the block to a lambda to be called when we get to the rescue part of the DFA
|
272
275
|
#
|
273
|
-
# @param
|
274
|
-
# The error
|
276
|
+
# @param error_types
|
277
|
+
# The error types.
|
275
278
|
#
|
276
279
|
# @param block
|
277
280
|
# The code block to be called when asynchronous *rescue* starts.
|
278
281
|
#
|
279
|
-
def rescue(
|
282
|
+
def rescue(error_types, block)
|
283
|
+
error_types = [error_types] unless error_types.is_a? Array
|
280
284
|
this_task = lambda { |failure| block.call(failure) }
|
281
|
-
if @
|
282
|
-
raise "You have already registered #{
|
285
|
+
if @rescue_hash.key? error_types
|
286
|
+
raise "You have already registered #{error_types}"
|
283
287
|
end
|
284
|
-
@
|
285
|
-
@rescue_tasks << this_task
|
288
|
+
@rescue_hash[error_types] = this_task
|
286
289
|
end
|
287
290
|
|
288
|
-
# Binds the block to
|
291
|
+
# Binds the block to a lambda to be called when we get to the ensure part of the data flow analysis.
|
289
292
|
#
|
290
293
|
# @param block
|
291
294
|
# The code block to be called when asynchronous *ensure* starts.
|
@@ -300,7 +303,7 @@ module AWS
|
|
300
303
|
end
|
301
304
|
end
|
302
305
|
|
303
|
-
#
|
306
|
+
# Ensures that {BeginRescueEnsure} isn't exposed directly. This function is passed in when {#error_handler} is
|
304
307
|
# called, like this:
|
305
308
|
#
|
306
309
|
# error_handler do |t|
|
@@ -309,21 +312,23 @@ module AWS
|
|
309
312
|
# t.ensure { trace << t.begin_task }
|
310
313
|
# end
|
311
314
|
#
|
312
|
-
#
|
313
|
-
#
|
315
|
+
# In this example, *t* is a {BeginRescueEnsureWrapper} which passes the begin/rescue/ensure calls to the
|
316
|
+
# {BeginRescueEnsure} class itself.
|
314
317
|
#
|
318
|
+
# @api private
|
315
319
|
class BeginRescueEnsureWrapper < FlowFiber
|
316
|
-
# Also has a few methods to ensure
|
320
|
+
# Also has a few methods to ensure fiber-ness, such as get_heirs and cancel.
|
317
321
|
attr_reader :__context__
|
318
322
|
|
319
|
-
# Creates a new BeginRescueEnsureWrapper instance.
|
323
|
+
# Creates a new `BeginRescueEnsureWrapper` instance.
|
320
324
|
#
|
321
325
|
# @param block
|
322
|
-
# A code block to be called.
|
326
|
+
# *Required*. A code block to be called.
|
323
327
|
#
|
324
328
|
# @param begin_rescue_ensure
|
325
329
|
# The {BeginRescueEnsure} instance to wrap.
|
326
330
|
#
|
331
|
+
# @api private
|
327
332
|
def initialize(block, begin_rescue_ensure)
|
328
333
|
@beginRescueEnsure = begin_rescue_ensure
|
329
334
|
@__context__ = @beginRescueEnsure
|
@@ -337,26 +342,24 @@ module AWS
|
|
337
342
|
end
|
338
343
|
end
|
339
344
|
|
340
|
-
#
|
345
|
+
# @api private
|
341
346
|
def get_heirs
|
342
347
|
p "I am a BREWrapper"
|
343
348
|
return
|
344
349
|
end
|
345
350
|
|
351
|
+
# @api private
|
346
352
|
def cancel(error_type)
|
347
353
|
@beginRescueEnsure.parent.cancel(self)
|
348
354
|
end
|
349
355
|
|
350
|
-
#
|
351
|
-
#
|
352
|
-
# @return [false]
|
353
|
-
# Always returns `false`.
|
354
|
-
#
|
356
|
+
# @api private
|
355
357
|
def is_daemon?
|
356
358
|
false
|
357
359
|
end
|
358
360
|
|
359
361
|
# Gets the parent of the {BeginRescueEnsure} instance held by this class.
|
362
|
+
# @api private
|
360
363
|
def get_closest_containing_scope
|
361
364
|
@beginRescueEnsure.parent
|
362
365
|
end
|
@@ -368,15 +371,17 @@ module AWS
|
|
368
371
|
def ensure(&block) @beginRescueEnsure.ensure(block) end
|
369
372
|
|
370
373
|
# (see BeginRescueEnsure#rescue)
|
371
|
-
def rescue(
|
372
|
-
@beginRescueEnsure.rescue(
|
374
|
+
def rescue(*error_types, &block)
|
375
|
+
@beginRescueEnsure.rescue(error_types, block)
|
373
376
|
end
|
374
377
|
|
375
378
|
private
|
376
379
|
attr_accessor :beginRescueEnsure
|
377
380
|
end
|
378
381
|
|
382
|
+
# @api private
|
379
383
|
class DaemonBeginRescueEnsure < BeginRescueEnsure
|
384
|
+
# @api private
|
380
385
|
def is_daemon?
|
381
386
|
true
|
382
387
|
end
|