Working on having crunch-dispatch manage pipelines.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 4 Mar 2014 16:50:19 +0000 (11:50 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 4 Mar 2014 16:50:19 +0000 (11:50 -0500)
apps/workbench/app/controllers/keep_disks_controller.rb
apps/workbench/app/controllers/pipeline_instances_controller.rb
apps/workbench/app/helpers/application_helper.rb
services/api/app/models/pipeline_instance.rb
services/api/script/crunch-dispatch.rb

index 482a2d33be0e67f5f2c480cd56958e859179f605..cc8922883283fcafe5f99a56ee669283dfaffa40 100644 (file)
@@ -1,2 +1,7 @@
 class KeepDisksController < ApplicationController
+  def create
+    defaults = { is_readable: true, is_writable: true }
+    @object = KeepDisk.new defaults.merge(params[:keep_disk] || {})
+    super
+  end
 end
index b477223b81d9041c7eb69e416b73b8f62290a510..83746289e437d96914437bde9c3510689f78ac41 100644 (file)
@@ -59,7 +59,7 @@ class PipelineInstancesController < ApplicationController
                   pipeline[component_name][:script_parameters][param_name] = param_value[:value]
                 elsif param_value[:default]
                   pipeline[component_name][:script_parameters][param_name] = param_value[:default]
-                elsif param_value[:optional] != nil or param_value[:required] != nil
+                elsif param_value[:optional] != nil or param_value[:required] != nil or param_value[:dataclass] != nil
                     pipeline[component_name][:script_parameters][param_name] = ""
                 else
                   pipeline[component_name][:script_parameters][param_name] = param_value
index 6de96e8995638aa3c4525ebe489218ff5680df31..01569ebd58325e6d02c86d5ba2844f7d1bbe8397 100644 (file)
@@ -137,7 +137,12 @@ module ApplicationHelper
 
     return attrvalue if !object.attribute_editable? attr
 
-    if not dataclass
+    if dataclass
+      begin
+        dataclass = dataclass.constantize
+      rescue NameError
+      end
+    else
       rsc = template
       if template.is_a? Hash
         if template[:value]
index 43497da6f4b4e133865e0492b57e73ce918d2c77..ad96b771a4de32c0c3ab00741ccc2becfae73fb6 100644 (file)
@@ -61,6 +61,10 @@ class PipelineInstance < ArvadosModel
     t.collect { |r| r[2] }.inject(0.0) { |sum,a| sum += a } / t.size
   end
 
+  def self.queue
+    self.where('active = true')
+  end
+
   protected
   def bootstrap_components
     if pipeline_template and (!components or components.empty?)
index 59ea162c0e44a8fda87f70d9c2257ec6a3eac7c3..3b2d5bae0fffafa512960fca2fffbbcd8a869392 100755 (executable)
@@ -38,6 +38,7 @@ class Dispatcher
 
   def refresh_todo
     @todo = Job.queue
+    @todo_pipelines = PipelineInstance.queue
   end
 
   def sinfo
@@ -313,6 +314,15 @@ class Dispatcher
     @running.delete job_done.uuid
   end
 
+  def update_pipelines
+    puts @todo_pipelines
+    @todo_pipelines.each do |p|
+      puts "arv-run-pipeline-instance --no-wait --instance #{p.uuid}"
+      puts `env`
+      `arv-run-pipeline-instance --no-wait --instance #{p.uuid}`
+    end
+  end
+
   def run
     act_as_system_user
     @running ||= {}
@@ -337,6 +347,9 @@ class Dispatcher
         unless @todo.empty? or did_recently(:start_jobs, 1.0) or $signal[:term]
           start_jobs
         end
+        unless @todo_pipelines.empty? or did_recently(:update_pipelines, 5.0)
+          update_pipelines
+        end
       end
       reap_children
       select(@running.values.collect { |j| [j[:stdout], j[:stderr]] }.flatten,
@@ -344,6 +357,8 @@ class Dispatcher
     end
   end
 
+
+
   protected
 
   def did_recently(thing, min_interval)