X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/24742cd39eff59df5d4ac17d7d39c437c79a456b..64b24877bdb4b35938e8b691463b78073a4fd31d:/services/api/script/crunch-dispatch.rb diff --git a/services/api/script/crunch-dispatch.rb b/services/api/script/crunch-dispatch.rb index 0835e1fa5b..d9db69f650 100755 --- a/services/api/script/crunch-dispatch.rb +++ b/services/api/script/crunch-dispatch.rb @@ -150,27 +150,32 @@ class Dispatcher raise "No CRUNCH_JOB_BIN env var, and crunch-job not in path." end + require 'shellwords' + + arvados_internal = Rails.configuration.git_internal_dir + if not File.exists? arvados_internal + $stderr.puts `mkdir -p #{arvados_internal.shellescape} && cd #{arvados_internal.shellescape} && git init --bare` + end + + src_repo = File.join(Rails.configuration.git_repositories_dir, job.repository + '.git') + src_repo = File.join(Rails.configuration.git_repositories_dir, job.repository, '.git') unless File.exists? src_repo + + unless src_repo + $stderr.puts "dispatch: #{File.join Rails.configuration.git_repositories_dir, job.repository} doesn't exist" + sleep 1 + untake(job) + next + end + + $stderr.puts `cd #{arvados_internal.shellescape} && git fetch --no-tags #{src_repo.shellescape} && git tag #{job.uuid.shellescape} #{job.script_version.shellescape}` + cmd_args << crunch_job_bin cmd_args << '--job-api-token' cmd_args << job_auth.api_token cmd_args << '--job' cmd_args << job.uuid - - commit = Commit.where(sha1: job.script_version).first - if commit - cmd_args << '--git-dir' - if File.exists?(File. - join(Rails.configuration.git_repositories_dir, - commit.repository_name + '.git')) - cmd_args << File. - join(Rails.configuration.git_repositories_dir, - commit.repository_name + '.git') - else - cmd_args << File. - join(Rails.configuration.git_repositories_dir, - commit.repository_name, '.git') - end - end + cmd_args << '--git-dir' + cmd_args << arvados_internal $stderr.puts "dispatch: #{cmd_args.join ' '}" @@ -324,25 +329,15 @@ class Dispatcher end def update_pipelines - @pipe_auth_tokens ||= { } expire_tokens = @pipe_auth_tokens.dup - puts "1 @pipe_auth_tokens #{@pipe_auth_tokens}" - puts "1 expire_tokens #{expire_tokens}" @todo_pipelines.each do |p| - if @pipe_auth_tokens[p.uuid].nil? - pipe_auth = ApiClientAuthorization. - new(user: User.where('uuid=?', p.modified_by_user_uuid).first, - api_client_id: 0) - pipe_auth.save - @pipe_auth_tokens[p.uuid] = pipe_auth - end - pipe_auth = @pipe_auth_tokens[p.uuid] + pipe_auth = (@pipe_auth_tokens[p.uuid] ||= ApiClientAuthorization. + create(user: User.where('uuid=?', p.modified_by_user_uuid).first, + api_client_id: 0)) puts `export ARVADOS_API_TOKEN=#{pipe_auth.api_token} && arv-run-pipeline-instance --run-here --no-wait --instance #{p.uuid}` expire_tokens.delete p.uuid end - puts "2 @pipe_auth_tokens #{@pipe_auth_tokens}" - puts "2 expire_tokens #{expire_tokens}" expire_tokens.each do |k, v| v.update_attributes expires_at: Time.now @pipe_auth_tokens.delete k @@ -352,6 +347,7 @@ class Dispatcher def run act_as_system_user @running ||= {} + @pipe_auth_tokens ||= { } $stderr.puts "dispatch: ready" while !$signal[:term] or @running.size > 0 read_pipes @@ -373,7 +369,7 @@ 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) + unless (@todo_pipelines.empty? and @pipe_auth_tokens.empty?) or did_recently(:update_pipelines, 5.0) update_pipelines end end