lib/pione/agent/task-worker.rb in pione-0.3.0 vs lib/pione/agent/task-worker.rb in pione-0.3.1
- old
+ new
@@ -72,11 +72,18 @@
def transit_to_execute_task(task)
# setup rule engine
engine = make_engine(task)
# start the engine
- @execution_thread = Thread.new {engine.handle}
+ @execution_thread = Thread.new do
+ begin
+ engine.handle
+ rescue RuleEngine::ActionError => e
+ write(TupleSpace::CommandTuple.new("terminate", [System::Status.error(e)]))
+ terminate
+ end
+ end
# spawn child task worker if flow
if engine.rule_definition.rule_type == "flow"
spawn_child_task_worker(task)
end
@@ -133,10 +140,10 @@
foreground = TupleSpace::ForegroundTuple.new(task.domain_id, task.digest)
# child worker loop
while @execution_thread.alive? do
if @execution_thread.status == "sleep"
- if child_agent.nil? or not(child_agent.terminated?)
+ if child_agent.nil? or child_agent.terminated?
# when there isn't active child agent
child_agent = self.class.new(tuple_space_server, @features, @env)
child_agent.once = true
# make log record