class Flor::TransientExecutor
Public Class Methods
new(conf={})
click to toggle source
Calls superclass method
Flor::Executor::new
# File lib/flor/core/texecutor.rb, line 84 def initialize(conf={}) conf = Flor::Conf.prepare(conf, {}) super( TransientUnit.new(conf), [], # no hooks [], # no traps { 'exid' => Flor.generate_exid('eval', 'u0'), 'nodes' => {}, 'counters' => {}, 'start' => Flor.tstamp }) @unit.archive = {} if conf['archive'] end
Public Instance Methods
archive()
click to toggle source
# File lib/flor/core/texecutor.rb, line 101 def archive; @unit.archive[exid]; end
clone()
click to toggle source
Used in specs when testing multiple message arrival order on a “suite” of transient executors
# File lib/flor/core/texecutor.rb, line 163 def clone c = TransientExecutor.allocate c.instance_variable_set(:@unit, @unit) c.instance_variable_set(:@traps, []) # not useful for a TransientEx clone c.instance_variable_set(:@execution, Flor.dup(@execution)) c end
journal()
click to toggle source
# File lib/flor/core/texecutor.rb, line 100 def journal; @unit.journal; end
launch(tree, opts={})
click to toggle source
# File lib/flor/core/texecutor.rb, line 103 def launch(tree, opts={}) @unit.opts = opts @unit.archive ||= {} if opts[:archive] @unit.logger.log_src(tree, opts) messages = [ Flor.make_launch_msg(@execution['exid'], tree, opts) ] @unit.logger.log_tree(messages.first['tree'], '0', opts) walk(messages, opts) end
step(message)
click to toggle source
# File lib/flor/core/texecutor.rb, line 155 def step(message) process(message) end
walk(messages, opts={})
click to toggle source
# File lib/flor/core/texecutor.rb, line 117 def walk(messages, opts={}) loop do message = messages.shift return nil unless message if message['point'] == 'terminated' && messages.any? # # try to handle 'terminated' last # messages << message message = messages.shift end msgs = process(message) messages.concat(msgs) return messages \ if message_match?(message, opts[:until_after]) return messages \ if message_match?(messages, opts[:until]) # # Walk is suspended if options :until_after or :until # are satisfied. # Returns the remaining messages. return message \ if message['point'] == 'terminated' return message \ if message['point'] == 'failed' && message['on_error'] == nil # # Walk exits when execution terminates or fails (without on_error). # Returns the last message end end
Protected Instance Methods
message_match?(msg_s, ountil)
click to toggle source
TODO eventually merge with Waiter.parse_serie
# File lib/flor/core/texecutor.rb, line 178 def message_match?(msg_s, ountil) return false unless ountil ms = msg_s; ms = [ ms ] if ms.is_a?(Hash) nid, point = ountil.split(' ') ms.find { |m| m['nid'] == nid && m['point'] == point } end