lib/pallets/workflow.rb in pallets-0.7.0 vs lib/pallets/workflow.rb in pallets-0.8.0
- old
+ new
@@ -18,24 +18,34 @@
def run
raise WorkflowError, "#{self.class.name} has no tasks. Workflows "\
"must contain at least one task" if self.class.graph.empty?
- backend.run_workflow(id, jobs_with_order, serializer.dump_context(context.buffer))
+ backend.run_workflow(id, *prepare_jobs, serializer.dump_context(context.buffer))
id
end
def id
@id ||= "P#{Pallets::Util.generate_id(self.class.name)}".upcase
end
private
- def jobs_with_order
- self.class.graph.sorted_with_order.map do |task_alias, order|
- job = serializer.dump(construct_job(task_alias))
- [order, job]
+ def prepare_jobs
+ jobs = []
+ jobmasks = Hash.new { |h, k| h[k] = [] }
+ acc = {}
+
+ self.class.graph.each do |task_alias, dependencies|
+ job_hash = construct_job(task_alias)
+ acc[task_alias] = job_hash['jid']
+ job = serializer.dump(job_hash)
+
+ jobs << [dependencies.size, job]
+ dependencies.each { |d| jobmasks[acc[d]] << [-1, job] }
end
+
+ [jobs, jobmasks]
end
def construct_job(task_alias)
Hash[self.class.task_config[task_alias]].tap do |job|
job['wfid'] = id