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."
+ puts "error: you must supply a --template or --instance."
+ p.educate
+ abort
end
if $options[:run_here] == $options[:submit]
end
def self.create(job, create_params)
@cache ||= {}
+
+ jsonified_create_params = {}
+ create_params.each do |k, v|
+ jsonified_create_params[k] = v.to_json unless v.nil?
+ end
+
result = $client.execute(:api_method => $arvados.jobs.create,
:body => {
:job => job.to_json
- }.merge(create_params),
+ }.merge(jsonified_create_params),
:authenticated => false,
:headers => {
authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN']
moretodo = true
interrupted = false
+ job_creation_failed = 0
while moretodo
moretodo = false
@components.each do |cname, c|
:repository => c[:repository],
:nondeterministic => c[:nondeterministic],
:output_is_persistent => c[:output_is_persistent] || false,
+ :runtime_constraints => c[:runtime_constraints],
:owner_uuid => owner_uuid,
- # TODO: Delete the following three attributes when
- # supporting pre-20140418 API servers is no longer
- # important. New API servers take these as flags that
- # control behavior of create, rather than job attributes.
- :minimum_script_version => c[:minimum_script_version],
- :exclude_script_versions => c[:exclude_minimum_script_versions],
- :no_reuse => @options[:no_reuse] || c[:nondeterministic],
}, {
# This is the right place to put these attributes when
# dealing with new API servers.
:minimum_script_version => c[:minimum_script_version],
:exclude_script_versions => c[:exclude_minimum_script_versions],
:find_or_create => !(@options[:no_reuse] || c[:nondeterministic]),
+ :filters => c[:filters]
})
if job
debuglog "component #{cname} new job #{job[:uuid]}"
c[:job] = job
else
- debuglog "component #{cname} new job failed"
+ debuglog "component #{cname} new job failed", 0
+ job_creation_failed += 1
end
end
moretodo = false
end
+ # If job creation fails, just give up on this pipeline instance.
+ if job_creation_failed > 0
+ moretodo = false
+ end
+
if moretodo
begin
sleep 10
ended += 1
if c[:job][:success] == true
succeeded += 1
- elsif c[:job][:success] == false
+ elsif c[:job][:success] == false or c[:job][:cancelled_at]
failed += 1
end
end
success = (succeeded == @components.length)
+ # A job create call failed. Just give up.
+ if job_creation_failed > 0
+ debuglog "job creation failed - giving up on this pipeline instance", 0
+ success = false
+ failed += 1
+ end
+
if interrupted
if success
@instance[:state] = 'Complete'
end
end
+ debuglog "pipeline instance state is #{@instance[:state]}"
+
# set components_summary
components_summary = {"todo" => @components.length - ended, "done" => succeeded, "failed" => failed}
@instance[:components_summary] = components_summary