X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1c5176d87df0dbd25db6ff1fb2ab82ae17472145..d455c8373cf39f4310d2b0e13e7a9d02aca0b2ab:/sdk/cli/bin/arv-run-pipeline-instance diff --git a/sdk/cli/bin/arv-run-pipeline-instance b/sdk/cli/bin/arv-run-pipeline-instance index 3e8bdbfcae..b86b217194 100755 --- a/sdk/cli/bin/arv-run-pipeline-instance +++ b/sdk/cli/bin/arv-run-pipeline-instance @@ -413,15 +413,24 @@ class WhRunPipelineInstance end def setup_instance - @instance ||= PipelineInstance. - create(:components => @components, + if $options[:submit] + @instance ||= PipelineInstance. + create(:components => @components, + :pipeline_template_uuid => @template[:uuid], + :state => 'New') + else + @instance ||= PipelineInstance. + create(:components => @components, :pipeline_template_uuid => @template[:uuid], - :active => true) + :state => 'RunningOnClient') + end self end def run moretodo = true + interrupted = false + while moretodo moretodo = false @components.each do |cname, c| @@ -437,7 +446,7 @@ class WhRunPipelineInstance # No job yet associated with this component and is component inputs # are fully specified (any output_of script_parameters are resolved # to real value) - job = JobCache.create { + job = JobCache.create({ :script => c[:script], :script_parameters => c[:script_parameters], :script_version => c[:script_version], @@ -457,7 +466,7 @@ class WhRunPipelineInstance :minimum_script_version => c[:minimum_script_version], :exclude_script_versions => c[:exclude_minimum_script_versions], :find_or_create => !(@options[:no_reuse] || c[:nondeterministic]), - } + }) if job debuglog "component #{cname} new job #{job[:uuid]}" c[:job] = job @@ -532,7 +541,6 @@ class WhRunPipelineInstance end end @instance[:components] = @components - @instance[:active] = moretodo report_status if @options[:no_wait] @@ -544,7 +552,8 @@ class WhRunPipelineInstance sleep 10 rescue Interrupt debuglog "interrupt", 0 - abort + interrupted = true + break end end end @@ -565,17 +574,30 @@ class WhRunPipelineInstance end end - if ended == @components.length or failed > 0 - @instance[:active] = false - @instance[:success] = (succeeded == @components.length) + success = (succeeded == @components.length) + + if interrupted + if success + @instance[:state] = 'Complete' + else + @instance[:state] = 'Paused' + end + else + if ended == @components.length or failed > 0 + @instance[:state] = success ? 'Complete' : 'Failed' + end end + # set components_summary + components_summary = {"todo" => @components.length - ended, "done" => succeeded, "failed" => failed} + @instance[:components_summary] = components_summary + @instance.save end def cleanup - if @instance - @instance[:active] = false + if @instance and @instance[:state] == 'RunningOnClient' + @instance[:state] = 'Paused' @instance.save end end