From 19af0137f1bfa57bbb717e488ed5d9967b9cfbe8 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Wed, 5 Mar 2014 15:03:58 -0500 Subject: [PATCH] Running pipeline from workbench works! --- sdk/cli/bin/arv-run-pipeline-instance | 50 +++++++++++++++++++++----- services/api/script/crunch-dispatch.rb | 3 +- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/sdk/cli/bin/arv-run-pipeline-instance b/sdk/cli/bin/arv-run-pipeline-instance index 6e8a64ab1d..fd29a6dab1 100755 --- a/sdk/cli/bin/arv-run-pipeline-instance +++ b/sdk/cli/bin/arv-run-pipeline-instance @@ -2,8 +2,8 @@ # == Synopsis # -# wh-run-pipeline-instance --template pipeline-template-uuid [options] [--] [parameters] -# wh-run-pipeline-instance --instance pipeline-instance-uuid [options] +# arv-run-pipeline-instance --template pipeline-template-uuid [options] [--] [parameters] +# arv-run-pipeline-instance --instance pipeline-instance-uuid [options] # # Satisfy a pipeline template by finding or submitting a mapreduce job # for each pipeline component. @@ -21,7 +21,7 @@ # to finish. Just find out whether jobs are finished, # queued, or running for each component # -# [--create-instance-only] Do not try to satisfy any components. Just +# [--submit] Do not try to satisfy any components. Just # create an instance, print its UUID to # stdout, and exit. # @@ -175,10 +175,14 @@ p = Trollop::Parser.new do "UUID of pipeline instance.", :short => :none, :type => :string) - opt(:create_instance_only, + opt(:submit, "Do not try to satisfy any components. Just create a pipeline instance and output its UUID.", :short => :none, :type => :boolean) + opt(:run_here, + "Manage the pipeline in process.", + :short => :none, + :type => :boolean) stop_on [:'--'] end $options = Trollop::with_standard_exception_handling p do @@ -187,13 +191,17 @@ end $debuglevel = $options[:debug_level] || ($options[:debug] && 1) || 0 if $options[:instance] - if $options[:template] or $options[:create_instance_only] - abort "#{$0}: syntax error: --instance cannot be combined with --template or --create-instance-only." + if $options[:template] or $options[:submit] + abort "#{$0}: syntax error: --instance cannot be combined with --template or --submit." end elsif not $options[:template] abort "#{$0}: syntax error: you must supply a --template or --instance." end +if $options[:run_here] == $options[:submit] + abort "#{$0}: syntax error: you must supply either --run-here or --submit." +end + # Set up the API client. $client ||= Google::APIClient. @@ -500,7 +508,7 @@ class WhRunPipelineInstance end elsif c[:job][:running] || (!c[:job][:started_at] && !c[:job][:cancelled_at]) - moretodo ||= !@options[:no_wait] + moretodo ||= true elsif c[:job][:cancelled_at] debuglog "component #{cname} job #{c[:job][:uuid]} cancelled." end @@ -509,6 +517,11 @@ class WhRunPipelineInstance @instance[:components] = @components @instance[:active] = moretodo report_status + + if @options[:no_wait] + moretodo = false + end + if moretodo begin sleep 10 @@ -518,7 +531,26 @@ class WhRunPipelineInstance end end end - @instance[:success] = @components.reject { |cname,c| c[:job] and c[:job][:success] }.empty? + + ended = 0 + succeeded = 0 + failed = 0 + @components.each do |cname, c| + if c[:job] + if c[:job][:finished_at] + ended += 1 + if c[:job][:success] == true + succeeded += 1 + end + end + end + end + + if ended == @components.length + @instance[:active] = false + @instance[:success] = (succeeded == @components.length) + end + @instance.save end @@ -581,7 +613,7 @@ begin end runner.apply_parameters(p.leftovers) runner.setup_instance - if $options[:create_instance_only] + if $options[:submit] runner.instance.save puts runner.instance[:uuid] else diff --git a/services/api/script/crunch-dispatch.rb b/services/api/script/crunch-dispatch.rb index eeabc16271..41fef386b4 100755 --- a/services/api/script/crunch-dispatch.rb +++ b/services/api/script/crunch-dispatch.rb @@ -315,14 +315,13 @@ class Dispatcher end def update_pipelines - puts @todo_pipelines @todo_pipelines.each do |p| pipe_auth = ApiClientAuthorization. new(user: User.where('uuid=?', p.modified_by_user_uuid).first, api_client_id: 0) pipe_auth.save - puts `export ARVADOS_API_TOKEN=#{pipe_auth.api_token} && arv-run-pipeline-instance --no-wait --instance #{p.uuid}` + puts `export ARVADOS_API_TOKEN=#{pipe_auth.api_token} && arv-run-pipeline-instance --run-here --no-wait --instance #{p.uuid}` end end -- 2.30.2