class Concurrent::Actor::Behaviour::Pausing
Allows to pause actors on errors. When paused all arriving messages are collected and processed after the actor is resumed or reset. Resume will simply continue with next message. Reset also reinitialized context. @note TODO missing example
Public Class Methods
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 13 def initialize(core, subsequent, core_options) super core, subsequent, core_options @paused = false @deferred = [] end
Calls superclass method
Concurrent::Actor::Behaviour::Abstract::new
Public Instance Methods
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 23 def on_envelope(envelope) case envelope.message when :pause! pause! when :paused? paused? when :resume! resume! when :reset! reset! when :restart! restart! else if paused? @deferred << envelope MESSAGE_PROCESSED else pass envelope end end end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 74 def on_event(public, event) event_name, _ = event reject_deferred if event_name == :terminated super public, event end
Calls superclass method
Concurrent::Actor::Behaviour::Abstract#on_event
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 45 def pause!(error = nil) do_pause broadcast true, error || :paused true end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 19 def paused? @paused end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 58 def reset! return false unless paused? broadcast(false, :resetting) do_reset broadcast(true, :reset) true end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 66 def restart! return false unless paused? broadcast(false, :restarting) do_restart broadcast(true, :restarted) true end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 51 def resume! return false unless paused? do_resume broadcast(true, :resumed) true end
Private Instance Methods
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 82 def do_pause @paused = true nil end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 93 def do_reset rebuild_context do_resume reschedule_deferred nil end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 100 def do_restart rebuild_context reject_deferred do_resume nil end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 87 def do_resume @paused = false reschedule_deferred nil end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 107 def rebuild_context core.allocate_context core.build_context nil end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 118 def reject_deferred @deferred.each { |envelope| reject_envelope envelope } @deferred.clear end
Source
# File lib/concurrent-ruby-edge/concurrent/actor/behaviour/pausing.rb, line 113 def reschedule_deferred @deferred.each { |envelope| core.schedule_execution { core.process_envelope envelope } } @deferred.clear end