Merge branch '2051-nondeterministic-jobs'
[arvados.git] / services / api / app / models / job_task.rb
index dde1b2f9f9648bbd0bd4e139b91bd2703bf62829..7d568e952a6c20eb69781708db5d0627bab11080 100644 (file)
@@ -1,8 +1,36 @@
-class JobTask < OrvosModel
+class JobTask < ArvadosModel
   include AssignUuid
   include KindAndEtag
   include CommonApiTemplate
+  serialize :parameters, Hash
+  after_update :delete_created_job_tasks_if_failed
+  after_update :assign_created_job_tasks_qsequence_if_succeeded
 
-  api_accessible :superuser, :extend => :common do |t|
+  api_accessible :user, extend: :common do |t|
+    t.add :job_uuid
+    t.add :created_by_job_task_uuid
+    t.add :sequence
+    t.add :qsequence
+    t.add :parameters
+    t.add :output
+    t.add :progress
+    t.add :success
+  end
+
+  protected
+
+  def delete_created_job_tasks_if_failed
+    if self.success == false and self.success != self.success_was
+      JobTask.delete_all ['created_by_job_task_uuid = ?', self.uuid]
+    end
+  end
+
+  def assign_created_job_tasks_qsequence_if_succeeded
+    if self.success == false and self.success != self.success_was
+      # xxx qsequence should be sequential as advertised; for now at
+      # least it's non-decreasing.
+      JobTask.update_all(['qsequence = ?', (Time.now.to_f*10000000).to_i],
+                         ['created_by_job_task_uuid = ?', self.uuid])
+    end
   end
 end