Class: Tengine::Job::Runtime::Jobnet
- Inherits:
-
NamedVertex
- Object
- NamedVertex
- Tengine::Job::Runtime::Jobnet
- Includes:
- Core::SafeUpdatable, Core::SelectableAttr, StateTransition, Structure::ElementSelectorNotation, Structure::JobnetBuilder, Structure::JobnetFinder
- Defined in:
- lib/tengine/job/runtime/jobnet.rb
Overview
ジョブの始端から終端までを持ち、VertexとEdgeを組み合わせてジョブネットを構成することができるVertex。 自身もジョブネットを構成するVertexの一部として扱われる。
Direct Known Subclasses
Constant Summary collapse
- VERTEX_CLASSES =
{ vertex: "Vertex", start_vertex: "Start", end_vertex: "End", jobnet: "Jobnet", fork: "Fork", join: "Join", }.freeze
Instance Attribute Summary collapse
-
#stop_modified ⇒ Object
readonly
Returns the value of attribute stop_modified.
Class Method Summary collapse
Instance Method Summary collapse
-
#ack(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::Runtime::Start#activateから呼ばれます.
-
#activate(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ.
- #ancestors_until_expansion ⇒ Object
- #chained_box? ⇒ Boolean
- #check_stop_modified ⇒ Object
- #close(signal) ⇒ Object
-
#fail(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ.
-
#finish(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::End#activateから呼ばれます.
- #fire_stop(signal) ⇒ Object
- #reset(signal, &block) ⇒ Object
-
#script_executable? ⇒ Boolean
TODO このメソッドは削除するべき。これを使わないで動くようにする。.
- #stop(signal) ⇒ Object
-
#succeed(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ.
-
#transmit(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ or ジョブ起動ドライバ.
- #update_children_stop_modified ⇒ Object
Instance Attribute Details
#stop_modified ⇒ Object (readonly)
Returns the value of attribute stop_modified.
65 66 67 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 65 def stop_modified @stop_modified end |
Class Method Details
.by_name(name) ⇒ Object
86 87 88 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 86 def by_name(name) where({:name => name}).first end |
Instance Method Details
#ack(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::Runtime::Start#activateから呼ばれます
143 144 145 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 143 def ack(signal) self.phase_key = :running end |
#activate(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 119 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 ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 92 def ancestors_until_expansion if (parent = self.parent) && !self.was_expansion? parent.ancestors_until_expansion + [parent] else [] end end |
#chained_box? ⇒ Boolean
37 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 37 def chained_box?; jobnet_type_entry[:chained_box]; end |
#check_stop_modified ⇒ Object
69 70 71 72 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 69 def check_stop_modified @stop_modified = stop_reason_changed? || stopped_at_changed? true end |
#close(signal) ⇒ Object
206 207 208 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 206 def close(signal) self.edges.each{|edge| signal.cache(edge).close(signal)} end |
#fail(signal) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 173 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) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ このackは、子要素のTengine::Job::End#activateから呼ばれます
151 152 153 154 155 156 157 158 159 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 151 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) ⇒ Object
186 187 188 189 190 191 192 193 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 186 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) ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 211 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.}" raise end |
#script_executable? ⇒ Boolean
TODO このメソッドは削除するべき。これを使わないで動くようにする。
101 102 103 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 101 def script_executable? false end |
#stop(signal) ⇒ Object
195 196 197 198 199 200 201 202 203 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 195 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) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ
162 163 164 165 166 167 168 169 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 162 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) ⇒ Object
ハンドリングするドライバ: ジョブネット制御ドライバ or ジョブ起動ドライバ
108 109 110 111 112 113 114 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 108 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 ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/tengine/job/runtime/jobnet.rb', line 74 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 |