X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fb35b803418d6f732af4273dff8d0485f02f8290..52cbd3bc6d8b7b2fe0735cb8ccd6e57c89c8d797:/services/api/script/crunch-dispatch.rb diff --git a/services/api/script/crunch-dispatch.rb b/services/api/script/crunch-dispatch.rb index eeabc16271..6df9a19d29 100755 --- a/services/api/script/crunch-dispatch.rb +++ b/services/api/script/crunch-dispatch.rb @@ -145,16 +145,17 @@ class Dispatcher api_client_id: 0) job_auth.save - cmd_args << (ENV['CRUNCH_JOB_BIN'] || `which crunch-job`.strip) + crunch_job_bin = (ENV['CRUNCH_JOB_BIN'] || `which arv-crunch-job`.strip) + if crunch_job_bin == '' + raise "No CRUNCH_JOB_BIN env var, and crunch-job not in path." + end + + cmd_args << crunch_job_bin cmd_args << '--job-api-token' cmd_args << job_auth.api_token cmd_args << '--job' cmd_args << job.uuid - if cmd_args[0] == '' - raise "No CRUNCH_JOB_BIN env var, and crunch-job not in path." - end - commit = Commit.where(sha1: job.script_version).first if commit cmd_args << '--git-dir' @@ -297,7 +298,6 @@ class Dispatcher job_done = j_done[:job] $stderr.puts "dispatch: child #{pid_done} exit" $stderr.puts "dispatch: job #{job_done.uuid} end" - $redis.publish job_done.uuid, "end" # Ensure every last drop of stdout and stderr is consumed read_pipes @@ -308,21 +308,29 @@ class Dispatcher # Wait the thread j_done[:wait_thr].value + jobrecord = Job.find_by_uuid(job_done.uuid) + jobrecord.running = false + jobrecord.finished_at ||= Time.now + # Don't set 'jobrecord.success = false' because if the job failed to run due to an + # issue with crunch-job or slurm, we want the job to stay in the queue. + jobrecord.save! + # Invalidate the per-job auth token j_done[:job_auth].update_attributes expires_at: Time.now + $redis.publish job_done.uuid, "end" + @running.delete job_done.uuid 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 @@ -360,8 +368,6 @@ class Dispatcher end end - - protected def did_recently(thing, min_interval)