class Concurrent::Actor::Behaviour::Supervising
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). @note TODO missing example @note this will change in next version to support supervision trees better
Public Class Methods
new(core, subsequent, core_options, handle, strategy)
click to toggle source
Calls superclass method
Concurrent::Actor::Behaviour::Abstract.new
# File lib/concurrent/actor/behaviour/supervising.rb, line 10 def initialize(core, subsequent, core_options, handle, strategy) super core, subsequent, core_options @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
Public Instance Methods
on_envelope(envelope)
click to toggle source
# File lib/concurrent/actor/behaviour/supervising.rb, line 23 def on_envelope(envelope) case envelope.message when Exception, :paused receivers = if @strategy == :one_for_all children else [envelope.sender] end receivers.each { |ch| ch << @handle } else pass envelope end end