class Tengine::Job::Runtime::Edge
Vertexとともにジョブネットを構成するグラフの「辺」を表すモデル Tengine::Job::Runtime::Jobnetにembeddedされます。
Public Instance Methods
alive?()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 38 def alive?; !!phase_entry[:alive]; end
alive_or_closing?()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 39 def alive_or_closing?; alive? || closing?; end
alive_or_closing_or_closed?()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 40 def alive_or_closing_or_closed?; alive? || closing? || closed?; end
close(signal)
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 124 def close(signal) case phase_key when :active, :suspended, :keeping, :transmitting then self.phase_key = :closing when :closing, :closed then # ignored else Tengine.logger.warn "#{object_id} #{inspect} wasn't closed" end end
close_followings(signal, options = {})
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 135 def close_followings(signal, options = {}) v = Tengine::Job::Runtime::Edge::Closer.new(signal, options) accept_visitor(v) v.closed_edges end
close_followings_and_trasmit(signal)
click to toggle source
ownerのupdate_with_lockを使っています。
# File lib/tengine/job/runtime/edge.rb, line 142 def close_followings_and_trasmit(signal) jobnet = signal.cache(self.owner) closing_edges = nil closed_edges = [] jobnet.update_with_lock do closing_edges = self.close_followings(signal) closing_edges.each do |e| next unless e.owner.id == jobnet.id je = signal.cache(e) # jobnet単位で保存するので、jobnetオブエジェクトに紐付けられたものを見つける je.close(nil) closed_edges << e end # jobnetオブジェクトのedgesに含まれないエッジについては、そのowner毎にまとめて保存する self.transmit(signal) Tengine.logger.debug "<" * 100 Tengine.logger.debug "#{__FILE__}##{__LINE__}" jobnet.edges.each do |edge| Tengine.logger.debug "#{edge.object_id} #{edge.inspect} BEFORE end of block for update_with_lock" end end # signal.cache_list signal.changed_vertecs.each(&:save!) end
complete(signal)
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 97 def complete(signal) case phase_key when :transmitting then self.phase_key = :transmitted when :active, :closed then # IG when :suspended, :keeping then # N/A raise Tengine::Job::Runtime::Edge::StatusError, "#{self.class.name}#complete not available on #{phase_key.inspect} at #{self.inspect}" end end
destination()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 52 def destination owner.children.detect{|c| c.id == destination_id} end
inspect()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 60 def inspect "#<#{self.class.name} #{phase_key.inspect} #{name_for_message}>" end
name_for_message()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 56 def name_for_message "edge(#{id.to_s}) from #{origin ? origin.name_path : 'no origin'} to #{destination ? destination.name_path : 'no destination'}" end
origin()
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 48 def origin owner.children.detect{|c| c.id == origin_id} end
phase_key=(phase_key)
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 167 def phase_key=(phase_key) # Tengine.logger.debug("edge phase changed. <#{self.id.to_s}> #{self.phase_name} -> #{Tengine::Job::Runtime::Edge.phase_name_by_key(phase_key)}") Tengine.logger.debug("#{object_id} edge phase changed. <#{inspect}> #{self.phase_name} -> #{Tengine::Job::Runtime::Edge.phase_name_by_key(phase_key)}") self.write_attribute(:phase_cd, Tengine::Job::Runtime::Edge.phase_id_by_key(phase_key)) end
reset(signal)
click to toggle source
# File lib/tengine/job/runtime/edge.rb, line 109 def reset(signal) # 全てのステータスから遷移する if d = destination if signal.execution.in_scope?(d) self.phase_key = :active signal.call_later do d.reset(signal) end end else raise "destination not found: #{destination_id.inspect} from #{origin.inspect}" end end
transmit(signal)
click to toggle source
cacoo.com/diagrams/hdLgrzYsTBBpV3Wj#3E9EA
# File lib/tengine/job/runtime/edge.rb, line 65 def transmit(signal) case phase_key when :active then d = destination if signal.execution.in_scope?(d) self.phase_key = :transmitting signal.leave(self) else Tengine.logger.info("#{d.name_path} will not be executed, becauase it is out of execution scope.") end when :suspended then self.phase_key = :keeping when :closing then Tengine.logger.debug "c" * 100 Tengine.logger.debug "#{object_id} #{inspect}" # Tengine.logger.debug caller[0, 20].join("\n ") # binding.pry self.phase_key = :closed signal.paths << self signal.with_paths_backup do if destination.is_a?(Tengine::Job::Runtime::NamedVertex) signal.cache(destination.next_edges.first).transmit(signal) else signal.leave(self) end end end end