class Tengine::Job::Runtime::Jobnet

ジョブの始端から終端までを持ち、VertexとEdgeを組み合わせてジョブネットを構成することができるVertex。 自身もジョブネットを構成するVertexの一部として扱われる。

Constants

VERTEX_CLASSES

Attributes

stop_modified[R]

Public Class Methods

by_name(name) click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 85
def by_name(name)
  where({:name => name}).first
end

Public Instance Methods

ack(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::Runtime::Start#activateから呼ばれます

# File lib/tengine/job/runtime/jobnet.rb, line 142
def ack(signal)
  self.phase_key = :running
end
activate(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ

# File lib/tengine/job/runtime/jobnet.rb, line 118
def activate(signal)
  self.phase_key = :starting
  self.started_at = signal.event.occurred_at
  complete_origin_edge(signal) if prev_edges && !prev_edges.empty?

  signal.call_later do
    signal.cache(parent || signal.execution).ack(signal)
    if root?
      signal.execution.with(safe: safemode(Tengine::Job::Runtime::Execution.collection)).save!
    end

    signal.call_later do
      self.update_with_lock do
        signal.paths << self
        signal.cache(self.start_vertex).transmit(signal)
      end
    end
  end
end
ancestors_until_expansion() click to toggle source

@override

# File lib/tengine/job/runtime/jobnet.rb, line 91
def ancestors_until_expansion
  if (parent = self.parent) && !self.was_expansion?
    parent.ancestors_until_expansion + [parent]
  else
    []
  end
end
chained_box?() click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 36
def chained_box?; jobnet_type_entry[:chained_box]; end
check_stop_modified() click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 68
def check_stop_modified
  @stop_modified = stop_reason_changed? || stopped_at_changed?
  true
end
close(signal) click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 205
def close(signal)
  self.edges.each{|edge| signal.cache(edge).close(signal)}
end
fail(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ

# File lib/tengine/job/runtime/jobnet.rb, line 172
def fail(signal)
  Tengine.logger.info("#{__FILE__}##{__LINE__} #{self.class}#fail")

  return if signal.cache(self.edges).any?(&:alive?)
  self.phase_key = :error
  self.finished_at = signal.event.occurred_at
  signal.fire(self, :"error.jobnet.job.tengine", {
      :target_jobnet_id => self.id,
      :target_jobnet_name_path => self.name_path,
    })
end
finish(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::End#activateから呼ばれます

# File lib/tengine/job/runtime/jobnet.rb, line 150
def finish(signal)

  Tengine.logger.info("#{__FILE__}##{__LINE__} #{self.class}#finish")

  edge = signal.cache(end_vertex.prev_edges.first)
  edge.closed? ?
  self.fail(signal) :
    succeed(signal)
end
fire_stop(signal) click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 185
def fire_stop(signal)
  return if self.phase_key == :initialized
  signal.fire(self, :"stop.jobnet.job.tengine", {
      :target_jobnet_id => self.id,
      :target_jobnet_name_path => self.name_path,
      :stop_reason => signal.event[:stop_reason]
    })
end
reset(signal, &block) click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 210
def reset(signal, &block)
  # children.each{|c| c.reset(signal) }
  self.phase_key = :initialized
  edges.each do |edge|
    signal.paths.push(edge)
    edge.phase_key = :active
  end
  children.each do |child|
    signal.call_later do
      signal.paths.push(child)
      signal.cache(child).reset(signal)
    end
  end

  reset_followings(signal)

rescue Exception => e
  puts "#{self.name_path} [#{e.class}] #{e.message}"
  raise
end
script_executable?() click to toggle source

TODO このメソッドは削除するべき。これを使わないで動くようにする。

# File lib/tengine/job/runtime/jobnet.rb, line 100
def script_executable?
  false
end
stop(signal) click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 194
def stop(signal)
  self.phase_key = :dying
  self.stopped_at = signal.event.occurred_at
  self.stop_reason = signal.event[:stop_reason]
  close(signal)
  children.each do |child|
    child.fire_stop(signal) if child.respond_to?(:fire_stop)
  end
end
succeed(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ

# File lib/tengine/job/runtime/jobnet.rb, line 161
def succeed(signal)
  self.phase_key = :success
  self.finished_at = signal.event.occurred_at
  signal.fire(self, :"success.jobnet.job.tengine", {
      :target_jobnet_id => self.id,
      :target_jobnet_name_path => self.name_path,
    })
end
transmit(signal) click to toggle source

ハンドリングするドライバ: ジョブネット制御ドライバ or ジョブ起動ドライバ

# File lib/tengine/job/runtime/jobnet.rb, line 107
def transmit(signal)
  self.phase_key = :ready
  signal.fire(self, :"start.jobnet.job.tengine", {
      :target_jobnet_id => self.id,
      :target_jobnet_name_path => self.name_path,
    })
end
update_children_stop_modified() click to toggle source
# File lib/tengine/job/runtime/jobnet.rb, line 73
def update_children_stop_modified
  @stop_modified = false
  children.each do |child|
    if child.is_a?(Tengine::Job::Runtime::Stoppable) && child.respond_to?(:chained_box?) && child.chained_box?
      child.stop_reason = stop_reason
      child.stopped_at = stopped_at
      child.save!
    end
  end
end