X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2b42046dcdfff733803e18af140706c9e0adadb6..0e32c4ee6281dd4a3ae186b75dd7c94c8be508c8:/services/api/app/controllers/arvados/v1/jobs_controller.rb diff --git a/services/api/app/controllers/arvados/v1/jobs_controller.rb b/services/api/app/controllers/arvados/v1/jobs_controller.rb index d12f6c116b..0190537e8b 100644 --- a/services/api/app/controllers/arvados/v1/jobs_controller.rb +++ b/services/api/app/controllers/arvados/v1/jobs_controller.rb @@ -33,20 +33,27 @@ class Arvados::V1::JobsController < ApplicationController @filters = [["repository", "=", resource_attrs[:repository]], ["script", "=", resource_attrs[:script]], - ["script_version", "in git", - params[:minimum_script_version] || resource_attrs[:script_version]], ["script_version", "not in git", params[:exclude_script_versions]], ].reject { |filter| filter.last.nil? or filter.last.empty? } + if !params[:minimum_script_version].blank? + @filters << ["script_version", "in git", + params[:minimum_script_version]] + else + add_default_git_filter("script_version", resource_attrs[:repository], + resource_attrs[:script_version]) + end if image_search = resource_attrs[:runtime_constraints].andand["docker_image"] if image_tag = resource_attrs[:runtime_constraints]["docker_image_tag"] image_search += ":#{image_tag}" end - @filters.append(["docker_image_locator", "in docker", image_search]) + image_locator = Collection. + for_latest_docker_image(image_search).andand.portable_data_hash else - @filters.append(["docker_image_locator", "=", nil]) + image_locator = nil end + @filters << ["docker_image_locator", "=", image_locator] if sdk_version = resource_attrs[:runtime_constraints].andand["arvados_sdk_version"] - @filters.append(["arvados_sdk_version", "in git", sdk_version]) + add_default_git_filter("arvados_sdk_version", "arvados", sdk_version) end begin load_job_specific_filters @@ -136,7 +143,7 @@ class Arvados::V1::JobsController < ApplicationController end end end - job_queue = Job.queue + job_queue = Job.queue.select(:uuid) n_queued_before_me = 0 job_queue.each do |j| break if j.uuid == @job.uuid @@ -145,7 +152,7 @@ class Arvados::V1::JobsController < ApplicationController yield "#{db_current_time}" \ " job #{@job.uuid}" \ " queue_position #{n_queued_before_me}" \ - " queue_size #{job_queue.size}" \ + " queue_size #{job_queue.count}" \ " nodes_idle #{nodes_in_state[:idle]}" \ " nodes_alloc #{nodes_in_state[:alloc]}\n" last_ack_at = db_current_time @@ -199,6 +206,16 @@ class Arvados::V1::JobsController < ApplicationController protected + def add_default_git_filter(attr_name, repo_name, refspec) + # Add a filter to @filters for `attr_name` = the latest commit available + # in `repo_name` at `refspec`. No filter is added if refspec can't be + # resolved. + commits = Commit.find_commit_range(repo_name, nil, refspec, nil) + if commit_hash = commits.first + @filters << [attr_name, "=", commit_hash] + end + end + def load_job_specific_filters # Convert Job-specific @filters entries into general SQL filters. script_info = {"repository" => nil, "script" => nil}