Class: Concurrent::Actor::Behaviour::Supervising
- Defined in:
- lib/concurrent-ruby-edge/concurrent/actor/behaviour/supervising.rb
Overview
Note:
TODO missing example
Note:
this will change in next version to support supervision trees better
Handles supervised actors. Handle configures what to do with failed child: :terminate!, :resume!, :reset!, or :restart!. Strategy sets :one_for_one (restarts just failed actor) or :one_for_all (restarts all child actors).
Instance Attribute Summary
Attributes inherited from Abstract
Instance Method Summary collapse
-
#initialize(core, subsequent, core_options, handle, strategy) ⇒ Supervising
constructor
A new instance of Supervising.
- #on_envelope(envelope) ⇒ Object
Methods inherited from Abstract
#broadcast, #on_event, #pass, #reject_envelope
Methods included from InternalDelegations
#behaviour, #behaviour!, #children, #context, #dead_letter_routing, #log, #redirect, #terminate!, #terminated?
Methods included from PublicDelegations
#context_class, #executor, #name, #parent, #path, #reference
Methods included from TypeCheck
#Child!, #Child?, #Match!, #Match?, #Type!, #Type?
Constructor Details
#initialize(core, subsequent, core_options, handle, strategy) ⇒ Supervising
Returns a new instance of Supervising.
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/concurrent-ruby-edge/concurrent/actor/behaviour/supervising.rb', line 12 def initialize(core, subsequent, , handle, strategy) super core, subsequent, @handle = Match! handle, :terminate!, :resume!, :reset!, :restart! @strategy = case @handle when :terminate! Match! strategy, nil when :resume! Match! strategy, :one_for_one when :reset!, :restart! Match! strategy, :one_for_one, :one_for_all end end |
Instance Method Details
#on_envelope(envelope) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/concurrent-ruby-edge/concurrent/actor/behaviour/supervising.rb', line 25 def on_envelope(envelope) case envelope. when Exception, :paused receivers = if @strategy == :one_for_all children else [envelope.sender] end receivers.each { |ch| ch << @handle } else pass envelope end end |