X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/dbc08507876d9e2f4f3c28b4f76a345c829ab6cd..1b189a0961ba757caf6160285b59daa26c7cdcae:/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 6bd2c4d491..b157de42fc 100644 --- a/services/api/app/controllers/arvados/v1/jobs_controller.rb +++ b/services/api/app/controllers/arvados/v1/jobs_controller.rb @@ -2,8 +2,8 @@ class Arvados::V1::JobsController < ApplicationController accept_attribute_as_json :script_parameters, Hash accept_attribute_as_json :runtime_constraints, Hash accept_attribute_as_json :tasks_summary, Hash - skip_before_filter :find_object_by_uuid, :only => :queue - skip_before_filter :render_404_if_no_object, :only => :queue + skip_before_filter :find_object_by_uuid, :only => [:queue, :queue_size] + skip_before_filter :render_404_if_no_object, :only => [:queue, :queue_size] def create [:repository, :script, :script_version, :script_parameters].each do |r| @@ -34,7 +34,7 @@ class Arvados::V1::JobsController < ApplicationController ["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? } + ].reject { |filter| filter.last.nil? or filter.last.empty? } if image_search = resource_attrs[:runtime_constraints].andand["docker_image"] if image_tag = resource_attrs[:runtime_constraints]["docker_image_tag"] image_search += ":#{image_tag}" @@ -71,7 +71,7 @@ class Arvados::V1::JobsController < ApplicationController # We'll use this if we don't find a job that has completed incomplete_job ||= j else - if Collection.readable_by(current_user).find_by_uuid(j.output) + if Collection.readable_by(current_user).find_by_portable_data_hash(j.output) # Record the first job in the list if !@object @object = j @@ -151,17 +151,37 @@ class Arvados::V1::JobsController < ApplicationController params[:order] ||= ['priority desc', 'created_at'] load_limit_offset_order_params load_where_param - @where.merge!({ - started_at: nil, - is_locked_by_uuid: nil, - cancelled_at: nil, - success: nil - }) + @where.merge!({state: Job::Queued}) return if false.equal?(load_filters_param) find_objects_for_index index end + def queue_size + # Users may not be allowed to see all the jobs in the queue, so provide a + # method to get just the queue size in order to get a gist of how busy the + # cluster is. + render :json => {:queue_size => Job.queue.size} + end + + def self._create_requires_parameters + (super rescue {}). + merge({ + find_or_create: { + type: 'boolean', required: false, default: false + }, + filters: { + type: 'array', required: false + }, + minimum_script_version: { + type: 'string', required: false + }, + exclude_script_versions: { + type: 'array', required: false + }, + }) + end + def self._queue_requires_parameters self._index_requires_parameters end @@ -196,7 +216,7 @@ class Arvados::V1::JobsController < ApplicationController search_list = filter[2].is_a?(Enumerable) ? filter[2] : [filter[2]] filter[2] = search_list.flat_map do |search_term| image_search, image_tag = search_term.split(':', 2) - Collection.uuids_for_docker_image(image_search, image_tag, @read_users) + Collection.find_all_for_docker_image(image_search, image_tag, @read_users).map(&:portable_data_hash) end true else @@ -220,7 +240,7 @@ class Arvados::V1::JobsController < ApplicationController if version_range.nil? raise ArgumentError. new(["error searching #{script_info['repository']} from", - "#{script_range['min_version']} to #{last_version},", + "'#{script_range['min_version']}' to '#{last_version}',", "excluding #{script_range['exclude_versions']}"].join(" ")) end @filters.append(["script_version", "in", version_range])